From fb8c06c5604e78542ce808a2d07db45a6bf6719f Mon Sep 17 00:00:00 2001 From: gnosygnu Date: Sun, 3 Aug 2014 23:31:22 -0400 Subject: [PATCH] v1.8.1.1 --- .../src_000_err/gplx/ErrProcData_tst.java | 4 +- 100_core/src_000_err/gplx/Err_.java | 6 + .../src_110_primitive/gplx/Array__tst.java | 8 +- 100_core/src_110_primitive/gplx/Bry_.java | 3 +- 100_core/src_110_primitive/gplx/Bry_bfr.java | 1 + .../src_110_primitive/gplx/Byte__tst.java | 4 +- .../src_110_primitive/gplx/Byte_ascii.java | 4 +- 100_core/src_110_primitive/gplx/Double_.java | 2 +- .../src_110_primitive/gplx/Double__tst.java | 17 +-- .../src_110_primitive/gplx/Object__tst.java | 2 +- .../gplx/KeyValHash_tst.java | 4 +- .../gplx/TimeSpanAdp_basic_tst.java | 18 +-- .../gplx/UuidAdp__tst.java | 2 +- .../gplx/criterias/Criteria_tst.java | 16 +-- .../src_140_list/gplx/ListAdp_Sorter_tst.java | 4 +- .../src_140_list/gplx/OrderedHash_tst.java | 4 +- .../src_140_list/gplx/lists/StackAdp_tst.java | 2 +- .../gplx/texts/BaseXXConverter_tst.java | 4 +- .../gplx/texts/CharStream_tst.java | 10 +- .../gplx/texts/RegxPatn_cls_ioMatch_tst.java | 12 +- .../security/HashAlgo_tth192_tree_tst.java | 4 +- .../src_200_io/gplx/ios/IoEngine_system.java | 6 +- .../gplx/ios/IoEngine_xrg_downloadFil.java | 3 + .../gplx/DateAdpClassXtn_tst.java | 2 +- .../src_311_gfoObj/gplx/GfoEvMgr_tst.java | 10 +- 100_core/src_311_gfoObj/gplx/GfoMsg_tst.java | 4 +- .../stores/dsvs/DsvDataRdr_dsv_dat_tst.java | 10 +- .../stores/dsvs/DsvDataRdr_dsv_hdr_tst.java | 10 +- 100_core/src_400_gfs/gplx/GfsCore_tst.java | 18 +-- 100_core/src_420_usrMsg/gplx/Gfo_usr_dlg.java | 1 + .../src_420_usrMsg/gplx/Gfo_usr_dlg_.java | 1 + .../src_900_xml/gplx/HierStrBldr_tst.java | 6 +- .../src_900_xml/gplx/xmls/XmlDoc_tst.java | 8 +- .../src_900_xml/gplx/xmls/Xpath__tst.java | 2 +- 100_core/tst/gplx/EnmParser_tst.java | 6 +- 100_core/tst/gplx/GfoMsg_rdr_tst.java | 10 +- .../ios/IoEngine_dir_basic_system_tst.java | 2 +- .../ios/IoEngine_fil_basic_system_tst.java | 10 +- .../tst/gplx/stores/GfoNdeRdr_read_tst.java | 10 +- .../tst/gplx/stores/xmls/XmlDataRdr_tst.java | 14 +-- 110_gfml/tst/gplx/gfml/GfmlDataRdr_tst.java | 12 +- .../tst/gplx/gfml/z011_IntObjHash_tst.java | 10 +- 110_gfml/tst/gplx/gfml/z012_GfmlTrie_tst.java | 14 +-- .../tst/gplx/gfml/z015_GfmlDocPos_tst.java | 12 +- .../tst/gplx/gfml/z016_GfmlScopeList_tst.java | 6 +- .../gplx/gfml/z051_GfmlFldPool_keyed_tst.java | 14 +-- .../tst/gplx/gfml/z081_GfmlDataWtr_tst.java | 18 +-- .../tst/gplx/gfml/z091_GfmlLxr_basic_tst.java | 8 +- .../gplx/gfml/z101_core_ndeInline_tst.java | 4 +- .../tst/gplx/gfml/z103_core_elmKey_tst.java | 8 +- .../tst/gplx/gfml/z112_core_comment1_tst.java | 12 +- .../tst/gplx/gfml/z120_quotes_eval0_tst.java | 4 +- .../gplx/gfml/z121_quotes_quotes0_tst.java | 6 +- .../gfml/z122_quotes_quote0_eval0_tst.java | 4 +- .../gplx/gfml/z123_quotes_quoteBlock_tst.java | 8 +- .../tst/gplx/gfml/z151_ndeSubs_basic_tst.java | 10 +- .../tst/gplx/gfml/z152_ndeSubs_data_tst.java | 12 +- .../gplx/gfml/z161_ndeHdrs_inline_tst.java | 6 +- .../tst/gplx/gfml/z162_ndeHdrs_err_tst.java | 4 +- .../tst/gplx/gfml/z163_ndeHdrs_body_tst.java | 8 +- .../tst/gplx/gfml/z164_hdeHdrs_data_tst.java | 4 +- .../tst/gplx/gfml/z181_ndeDots_basic_tst.java | 4 +- .../tst/gplx/gfml/z182_ndeDots_subs_tst.java | 8 +- .../gplx/gfml/z183_ndeDots_parens_tst.java | 18 +-- .../gplx/gfml/z184_ndeDots_atrSpr_tst.java | 2 +- .../gplx/gfml/z191_ndeProps_basic_tst.java | 26 ++--- .../tst/gplx/gfml/z192_ndeProps_dots_tst.java | 2 +- .../tst/gplx/gfml/z452_dflts_exec_tst.java | 8 +- .../tst/gplx/gfml/z455_dflts_scope_tst.java | 2 +- 110_gfml/tst/gplx/gfml/z602_edit_nde_tst.java | 2 +- .../gplx/gfml/z801_useCase_DataRdr_tst.java | 4 +- .../gplx/gfml/z811_useCase_GfmlIoSql_tst.java | 4 +- .../gplx/dbs/Sqlite_engine_.java | 5 +- 140_dbs/xtn/gplx/dbs/SqliteDbMain.java | 10 ++ .../src_200_ipt/gplx/gfui/IptCfg_tst.java | 12 +- 150_gfui/tst/gplx/gfui/ClipboardAdp__tst.java | 2 +- 150_gfui/tst/gplx/gfui/GfuiBorderMgr_tst.java | 6 +- .../tst/gplx/gfui/GfuiClickKeyMgr_tst.java | 2 +- .../tst/gplx/gfui/GfuiFocusOrderer_tst.java | 10 +- .../tst/gplx/gfui/GfuiMoveElemBtn_tst.java | 2 +- 150_gfui/tst/gplx/gfui/IptArg_parser_tst.java | 14 +-- 150_gfui/tst/gplx/gfui/IptEventType_tst.java | 4 +- 150_gfui/tst/gplx/gfui/ScreenAdp_tst.java | 4 +- 150_gfui/tst/gplx/gfui/TabBox_tst.java | 10 +- 400_xowa/src/gplx/srls/dsvs/Dsv_wkr_base.java | 2 + 400_xowa/src/gplx/xowa/Xoa_app_.java | 9 +- .../src/gplx/xowa/apis/xowa/Xoapi_html.java | 4 +- .../gplx/xowa/apis/xowa/html/Xoapi_page.java | 27 +++++ .../xowa/apis/xowa/html/Xoapi_toggle_itm.java | 50 +++++++++ .../xowa/apis/xowa/html/Xoapi_toggle_mgr.java | 51 +++++++++ 400_xowa/src/gplx/xowa/bldrs/Xob_cmd_mgr.java | 1 + .../gplx/xowa/bldrs/imports/Db_idx_mode.java | 38 +++++++ .../xowa/bldrs/imports/Xob_cmd_exec_sql.java | 43 +++++++ .../xowa/bldrs/imports/Xob_init_base.java | 2 +- .../gplx/xowa/bldrs/imports/Xob_page_sql.java | 24 ++-- .../xowa/bldrs/imports/Xob_page_sql_tst.java | 5 +- .../xowa/bldrs/imports/Xob_term_base.java | 2 +- .../ctgs/Xob_category_registry_sql_tst.java | 3 +- .../imports/ctgs/Xob_categorylinks_sql.java | 9 +- .../ctgs/Xob_categorylinks_sql_make.java | 17 ++- 400_xowa/src/gplx/xowa/dbs/Xodb_fsys_mgr.java | 18 +-- .../gplx/xowa/dbs/Xodb_load_mgr_sql_tst.java | 3 +- .../gplx/xowa/dbs/hdumps/Hdump_data_mgr.java | 101 +++++++++++++++++ .../gplx/xowa/dbs/hdumps/Hdump_page_row.java | 1 + .../gplx/xowa/dbs/hdumps/Hdump_page_tbl.java | 9 ++ .../dbs/tbls/Xodb_search_title_page_tbl.java | 18 +-- .../gplx/xowa/gui/views/Xog_html_js_cbk.java | 29 ++--- 400_xowa/src/gplx/xowa/html/Xoh_html_mgr.java | 3 +- 400_xowa/src/gplx/xowa/html/Xoh_lnki_wtr.java | 7 +- 400_xowa/src/gplx/xowa/html/Xoh_page_mgr.java | 5 + .../src/gplx/xowa/html/Xoh_page_wtr_mgr.java | 6 +- .../src/gplx/xowa/html/Xoh_page_wtr_wkr.java | 8 +- .../src/gplx/xowa/html/Xoh_page_wtr_wkr_.java | 11 +- 400_xowa/src/gplx/xowa/html/Xow_html_mgr.java | 4 +- .../modules/Xoh_module_itm__div_toggle.java | 35 ++++++ .../html/modules/Xoh_module_itm__globals.java | 49 ++++---- .../html/modules/Xoh_module_itm__popups.java | 17 +-- .../modules/Xoh_module_itm__top_icon.java | 39 +++++++ .../xowa/html/modules/Xoh_module_mgr.java | 7 +- .../xowa/html/modules/Xoh_module_mgr_tst.java | 59 ++++++++++ .../xowa/html/modules/Xoh_module_wtr.java | 29 ++++- .../html/portal/Xoa_available_wikis_mgr.java | 9 +- .../xowa/html/portal/Xoh_subpages_bldr.java | 60 ++++++++++ .../html/portal/Xoh_subpages_bldr_tst.java | 44 ++++++++ .../gplx/xowa/html/portal/Xow_portal_mgr.java | 7 +- .../gplx/xowa/parsers/lnkes/Xop_lnke_wkr.java | 2 +- .../xowa/servers/http/Http_server_mgr.java | 10 +- .../src/gplx/xowa/users/Xous_window_mgr.java | 2 +- .../xowa/users/prefs/Prefs_converter.java | 21 ++-- .../xowa/users/prefs/Prefs_rename_mgr.java | 47 ++++++++ .../wikis/modules/Xow_module__top_icon.java | 20 ++++ .../xowa/wikis/modules/Xow_module_base.java | 28 +++++ .../xowa/wikis/modules/Xow_module_mgr.java | 36 ++++++ .../xowa/wikis/xwikis}/Xow_xwiki_itm.java | 13 ++- .../xowa/wikis/xwikis/Xow_xwiki_itm_.java | 29 +++++ .../xowa/wikis/xwikis/Xow_xwiki_itm__tst.java | 46 ++++++++ .../xowa/wikis/xwikis}/Xow_xwiki_mgr.java | 46 ++++---- .../xowa/wikis/xwikis/Xow_xwiki_mgr_srl.java | 45 ++++++++ .../xowa/wikis/xwikis}/Xow_xwiki_mgr_tst.java | 12 +- 400_xowa/src/gplx/xowa/xtns/Xow_xtn_mgr.java | 7 +- .../gplx/xowa/xtns/imaps/Imap_html_fmtrs.java | 2 +- .../src/gplx/xowa/xtns/imaps/Imap_parser.java | 7 +- .../gplx/xowa/xtns/imaps/Imap_parser_tst.java | 1 + .../xtns/imaps/Imap_xnde_html_all_tst.java | 2 +- .../xowa/xtns/listings/Listing_xtn_mgr.java | 1 - .../xowa/xtns/pfuncs/ifs/Pfunc_switch.java | 5 +- .../xtns/pfuncs/ifs/Pfunc_switch_tst.java | 12 +- .../xowa/xtns/pfuncs/ttls/Pfunc_urlfunc.java | 11 +- .../xtns/relatedSites/Sites_html_bldr.java | 52 +++++++++ .../relatedSites/Sites_html_bldr_tst.java | 60 ++++++++++ .../xtns/relatedSites/Sites_regy_itm.java | 28 +++++ .../xowa/xtns/relatedSites/Sites_xtn_mgr.java | 44 ++++++++ .../gplx/xowa/xtns/scribunto/Scrib_core.java | 12 +- .../xtns/scribunto/Scrib_invoke_func.java | 4 +- .../scribunto/engines/luaj/Luaj_engine.java | 1 + .../scribunto/engines/luaj/Luaj_server.java | 2 +- .../engines/luaj/Luaj_server_func_dbg.java | 35 ++++++ .../xtns/scribunto/lib/Scrib_lib_title.java | 2 +- .../xowa/xtns/wdatas/Wdata_wiki_mgr_fxt.java | 2 +- .../xtns/wdatas/Wdata_xwiki_link_wtr.java | 2 +- .../xtns/wdatas/Wdata_xwiki_link_wtr_tst.java | 76 +++++++------ .../src_060_utl/gplx/Gfo_usr_dlg_base.java | 4 + .../src_100_app/gplx/xowa/Xoac_wiki_grp.java | 18 --- .../src_100_app/gplx/xowa/Xoac_wiki_itm.java | 36 ++++++ .../gplx/xowa/Xow_fragment_mgr.java | 60 +--------- .../gplx/xowa/Xow_fragment_mgr_tst.java | 36 ------ .../src_120_wiki/gplx/xowa/Xow_lang_itm.java | 1 + .../src_120_wiki/gplx/xowa/Xow_lang_mgr.java | 19 ++-- .../gplx/xowa/Xow_lang_mgr_tst.java | 106 ++++++++++-------- 400_xowa/src_120_wiki/gplx/xowa/Xow_wiki.java | 2 +- .../src_140_lang/gplx/xowa/Xol_kwd_mgr.java | 25 +++++ 400_xowa/src_200_bldr/gplx/xowa/Xob_bldr.java | 5 +- .../gplx/threads/Gfo_thread_cmd_download.java | 3 +- .../gplx/xowa/Xoi_cmd_base.java | 7 +- .../gplx/xowa/Xoi_cmd_mgr.java | 2 +- .../src_300_html/gplx/xowa/Xoa_html_data.java | 6 +- .../gplx/xowa/Xop_link_parser.java | 4 +- .../src_310_url/gplx/xowa/Xoa_url_parser.java | 2 +- .../gplx/xowa/Xoa_url_parser_basic_tst.java | 2 +- .../gplx/xowa/Xoh_href_parser.java | 5 +- .../src_400_parser/gplx/xowa/Xoa_ttl.java | 2 +- 400_xowa/xtn/MWClient.java | 42 +++---- .../fsdb.main/fsdb.abc.sqlite3 | Bin 20480 -> 20480 bytes .../fsdb.main/fsdb.atr.00.sqlite3 | Bin 32768 -> 32768 bytes .../fsdb.main/fsdb.bin.0000.sqlite3 | Bin 8192 -> 8192 bytes .../fsdb.user/fsdb.abc.sqlite3 | Bin 20480 -> 20480 bytes .../fsdb.user/fsdb.atr.00.sqlite3 | Bin 32768 -> 32768 bytes .../fsdb.user/fsdb.bin.0000.sqlite3 | Bin 8192 -> 8192 bytes .../en.wikipedia.org/wiki.orig#00.sqlite3 | Bin 16384 -> 16384 bytes .../en.wikipedia.org.002.sqlite3 | Bin 73728 -> 73728 bytes .../0000000000.csv | 5 +- 191 files changed, 1869 insertions(+), 722 deletions(-) rename 400_xowa/src/gplx/xowa/html/modules/Xow_module_mgr.java => 100_core/src_110_primitive/gplx/Double__tst.java (63%) create mode 100644 400_xowa/src/gplx/xowa/apis/xowa/html/Xoapi_page.java create mode 100644 400_xowa/src/gplx/xowa/apis/xowa/html/Xoapi_toggle_itm.java create mode 100644 400_xowa/src/gplx/xowa/apis/xowa/html/Xoapi_toggle_mgr.java create mode 100644 400_xowa/src/gplx/xowa/bldrs/imports/Db_idx_mode.java create mode 100644 400_xowa/src/gplx/xowa/bldrs/imports/Xob_cmd_exec_sql.java create mode 100644 400_xowa/src/gplx/xowa/dbs/hdumps/Hdump_data_mgr.java create mode 100644 400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__div_toggle.java create mode 100644 400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__top_icon.java create mode 100644 400_xowa/src/gplx/xowa/html/portal/Xoh_subpages_bldr.java create mode 100644 400_xowa/src/gplx/xowa/html/portal/Xoh_subpages_bldr_tst.java create mode 100644 400_xowa/src/gplx/xowa/users/prefs/Prefs_rename_mgr.java create mode 100644 400_xowa/src/gplx/xowa/wikis/modules/Xow_module__top_icon.java create mode 100644 400_xowa/src/gplx/xowa/wikis/modules/Xow_module_base.java create mode 100644 400_xowa/src/gplx/xowa/wikis/modules/Xow_module_mgr.java rename 400_xowa/{src_120_wiki/gplx/xowa => src/gplx/xowa/wikis/xwikis}/Xow_xwiki_itm.java (69%) create mode 100644 400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_itm_.java create mode 100644 400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_itm__tst.java rename 400_xowa/{src_120_wiki/gplx/xowa => src/gplx/xowa/wikis/xwikis}/Xow_xwiki_mgr.java (88%) create mode 100644 400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_mgr_srl.java rename 400_xowa/{src_120_wiki/gplx/xowa => src/gplx/xowa/wikis/xwikis}/Xow_xwiki_mgr_tst.java (92%) create mode 100644 400_xowa/src/gplx/xowa/xtns/relatedSites/Sites_html_bldr.java create mode 100644 400_xowa/src/gplx/xowa/xtns/relatedSites/Sites_html_bldr_tst.java create mode 100644 400_xowa/src/gplx/xowa/xtns/relatedSites/Sites_regy_itm.java create mode 100644 400_xowa/src/gplx/xowa/xtns/relatedSites/Sites_xtn_mgr.java create mode 100644 400_xowa/src/gplx/xowa/xtns/scribunto/engines/luaj/Luaj_server_func_dbg.java create mode 100644 400_xowa/src_100_app/gplx/xowa/Xoac_wiki_itm.java diff --git a/100_core/src_000_err/gplx/ErrProcData_tst.java b/100_core/src_000_err/gplx/ErrProcData_tst.java index 39c9ccda1..574890cdc 100644 --- a/100_core/src_000_err/gplx/ErrProcData_tst.java +++ b/100_core/src_000_err/gplx/ErrProcData_tst.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx; import org.junit.*; public class ErrProcData_tst { - @Test public void parse_() { + @Test public void parse_() { tst_parse_("gplx._tst.Err__tst.RdrLoad(MethodData_tst.java:1)" , ErrProcData.new_() .SignatureRaw_("gplx._tst.Err__tst.RdrLoad") @@ -27,7 +27,7 @@ public class ErrProcData_tst { .IdeAddress_("(MethodData_tst.java:1)") ); } - @Test public void parse_ary_() { + @Test public void parse_ary_() { String stackTrace = ""; try {ThrowException();} catch (Exception exc) {stackTrace = Err_.StackTrace_lang(exc);} ErrProcData[] ary = ErrProcData.parse_ary_(stackTrace); diff --git a/100_core/src_000_err/gplx/Err_.java b/100_core/src_000_err/gplx/Err_.java index 208d49db6..b45a8ed92 100644 --- a/100_core/src_000_err/gplx/Err_.java +++ b/100_core/src_000_err/gplx/Err_.java @@ -66,6 +66,12 @@ public class Err_ { //_20110415 public static String Message_lang(Exception e) {return e.getClass() + " " + e.getMessage();} public static String Message_gplx(Exception e) {return ErrMsgWtr._.Message_gplx(e);} public static String Message_gplx_brief(Exception e) {return ErrMsgWtr._.Message_gplx_brief(e);} + public static String Message_hdr_or_message(Exception e) { + if (e == null) return "exception is null"; + return ClassAdp_.Eq(e.getClass(), Err.class) + ? ((Err)e).Hdr() + : Message_lang(e); + } @gplx.Internal protected static String StackTrace_lang(Exception e) { String_bldr sb = String_bldr_.new_(); StackTraceElement[] stackTraceAry = e.getStackTrace(); diff --git a/100_core/src_110_primitive/gplx/Array__tst.java b/100_core/src_110_primitive/gplx/Array__tst.java index 7766ccf86..2b996b575 100644 --- a/100_core/src_110_primitive/gplx/Array__tst.java +++ b/100_core/src_110_primitive/gplx/Array__tst.java @@ -18,19 +18,19 @@ along with this program. If not, see . package gplx; import org.junit.*; public class Array__tst { - @Test public void Resize_add() { + @Test public void Resize_add() { tst_Resize_add(ary_(), ary_(1), ary_(1)); // 0 + 1 = 1 tst_Resize_add(ary_(0), ary_(), ary_(0)); // 1 + 0 = 1 tst_Resize_add(ary_(0), ary_(1), ary_(0, 1)); // 1 + 1 = 2 } void tst_Resize_add(int[] source, int[] added, int[] expd) {Tfds.Eq_ary(expd, (int[])Array_.Resize_add(source, added));} - @Test public void Resize() { + @Test public void Resize() { tst_Resize(ary_(0), 0, ary_()); // 1 -> 0 tst_Resize(ary_(0, 1), 1, ary_(0)); // 2 -> 1 } void tst_Resize(int[] source, int length, int[] expd) {Tfds.Eq_ary(expd, (int[])Array_.Resize(source, length));} - @Test public void Insert() { + @Test public void Insert() { tst_Insert(ary_obj(0, 1, 4, 5), ary_obj(2, 3), 2, ary_obj(0, 1, 2, 3, 4, 5)); } void tst_Insert(Object[] cur, Object[] add, int addPos, Object[] expd) {Tfds.Eq_ary(expd, Array_.Insert(cur, add, addPos));} - @Test public void ReplaceInsert() { + @Test public void ReplaceInsert() { tst_ReplaceInsert(ary_obj(0, 1, 4, 5) , ary_obj(1, 2, 3), 1, 1, ary_obj(0, 1, 2, 3, 4, 5)); tst_ReplaceInsert(ary_obj(0, 1, 2, 4, 5) , ary_obj(1, 2, 3), 1, 2, ary_obj(0, 1, 2, 3, 4, 5)); tst_ReplaceInsert(ary_obj(0, 1, 2, 3, 4, 5) , ary_obj(1, 2, 3), 1, 3, ary_obj(0, 1, 2, 3, 4, 5)); diff --git a/100_core/src_110_primitive/gplx/Bry_.java b/100_core/src_110_primitive/gplx/Bry_.java index b6d0e8002..17edf7a7d 100644 --- a/100_core/src_110_primitive/gplx/Bry_.java +++ b/100_core/src_110_primitive/gplx/Bry_.java @@ -212,7 +212,8 @@ public class Bry_ { } public static byte[] Mid_by_len(byte[] src, int bgn, int len) {return Mid(src, bgn, bgn + len);} public static byte[] Mid_by_len_safe(byte[] src, int bgn, int len) { - if (len > src.length) len = src.length; + int src_len = src.length; + if (len + bgn > src_len) len = (src_len - bgn); return Mid(src, bgn, bgn + len); } public static String MidByLenToStr(byte[] src, int bgn, int len) { diff --git a/100_core/src_110_primitive/gplx/Bry_bfr.java b/100_core/src_110_primitive/gplx/Bry_bfr.java index 90ecc6471..ca6bcc6f5 100644 --- a/100_core/src_110_primitive/gplx/Bry_bfr.java +++ b/100_core/src_110_primitive/gplx/Bry_bfr.java @@ -123,6 +123,7 @@ public class Bry_bfr { public Bry_bfr Add_byte_pipe() {return Add_byte(Byte_ascii.Pipe);} public Bry_bfr Add_byte_comma() {return Add_byte(Byte_ascii.Comma);} public Bry_bfr Add_byte_apos() {return Add_byte(Byte_ascii.Apos);} + public Bry_bfr Add_byte_slash() {return Add_byte(Byte_ascii.Slash);} public Bry_bfr Add_byte_backslash() {return Add_byte(Byte_ascii.Backslash);} public Bry_bfr Add_byte_quote() {return Add_byte(Byte_ascii.Quote);} public Bry_bfr Add_byte_space() {return Add_byte(Byte_ascii.Space);} diff --git a/100_core/src_110_primitive/gplx/Byte__tst.java b/100_core/src_110_primitive/gplx/Byte__tst.java index e67c93429..4311b70eb 100644 --- a/100_core/src_110_primitive/gplx/Byte__tst.java +++ b/100_core/src_110_primitive/gplx/Byte__tst.java @@ -18,14 +18,14 @@ along with this program. If not, see . package gplx; import org.junit.*; public class Byte__tst { - @Test public void int_() { + @Test public void int_() { tst_int_( 0, 0); tst_int_( 127, 127); tst_int_( 128, 128); // NOTE: JAVA defines byte as -128 -> 127 tst_int_( 255, 255); tst_int_( 256, 0); // NOTE: 256 will cast to 1; (byte)256 works same in both JAVA/.NET } void tst_int_(int v, int expd) {Tfds.Eq((byte)expd, Byte_.int_(v));} // WORKAROUND/JAVA: expd is of type int b/c java promotes numbers to ints - @Test public void XtoInt() { + @Test public void XtoInt() { tst_XtoInt( 0, 0); tst_XtoInt( 127, 127); tst_XtoInt( 128, 128); diff --git a/100_core/src_110_primitive/gplx/Byte_ascii.java b/100_core/src_110_primitive/gplx/Byte_ascii.java index 052ccf085..e579d70a3 100644 --- a/100_core/src_110_primitive/gplx/Byte_ascii.java +++ b/100_core/src_110_primitive/gplx/Byte_ascii.java @@ -70,8 +70,10 @@ public class Byte_ascii { ; } public static final byte[] - Dot_bry = new byte[] {Byte_ascii.Dot} + Tab_bry = new byte[] {Byte_ascii.Tab} , NewLine_bry = new byte[] {Byte_ascii.NewLine} + , Dot_bry = new byte[] {Byte_ascii.Dot} + , Comma_bry = new byte[] {Byte_ascii.Comma} , Colon_bry = new byte[] {Byte_ascii.Colon} , Lt_bry = new byte[] {Byte_ascii.Lt} , Gt_bry = new byte[] {Byte_ascii.Gt} diff --git a/100_core/src_110_primitive/gplx/Double_.java b/100_core/src_110_primitive/gplx/Double_.java index d4758d68a..950323a18 100644 --- a/100_core/src_110_primitive/gplx/Double_.java +++ b/100_core/src_110_primitive/gplx/Double_.java @@ -39,7 +39,7 @@ public class Double_ { int v_as_int = (int)v; return v == v_as_int ? Int_.XtoStr(v_as_int) // convert to int, and call print String to eliminate any trailing decimal places - : String.format("%g", v); // call "%g" format which should eliminate most, though not all; EX:2449.6000000000004; DATE:2014-07-14 + : Float_.XtoStr((float)v); // calling ((float)v).toString is better at removing trailing 0s than String.format("%g", v). note that .net .toString() handles it better; EX:2449.600000000000d; DATE:2014-07-29 } public static double cast_(Object o) {try {return (Double)o;} catch(Exception e) {throw Err_.type_mismatch_exc_(e, double.class, o);}} public static double parse_(String raw) {try {return Double.parseDouble(raw);} catch(Exception e) {throw Err_.parse_type_exc_(e, double.class, raw);}} diff --git a/400_xowa/src/gplx/xowa/html/modules/Xow_module_mgr.java b/100_core/src_110_primitive/gplx/Double__tst.java similarity index 63% rename from 400_xowa/src/gplx/xowa/html/modules/Xow_module_mgr.java rename to 100_core/src_110_primitive/gplx/Double__tst.java index d150bb8ef..0d5b3ba91 100644 --- a/400_xowa/src/gplx/xowa/html/modules/Xow_module_mgr.java +++ b/100_core/src_110_primitive/gplx/Double__tst.java @@ -15,12 +15,15 @@ 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 . */ -package gplx.xowa.html.modules; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; -import gplx.xowa.html.modules.popups.*; -public class Xow_module_mgr { - public Xow_module_mgr(Xow_wiki wiki) {this.popup_mgr = new Xow_popup_mgr(wiki);} - public void Init_by_wiki(Xow_wiki wiki) { - popup_mgr.Init_by_wiki(wiki); +package gplx; +import org.junit.*; +public class Double__tst { + private Double__fxt fxt = new Double__fxt(); + @Test public void Xto_str_loose() { + fxt.Test_Xto_str_loose(2449.6000000d , "2449.6"); + fxt.Test_Xto_str_loose(623.700d , "623.7"); } - public Xow_popup_mgr Popup_mgr() {return popup_mgr;} private Xow_popup_mgr popup_mgr; +} +class Double__fxt { + public void Test_Xto_str_loose(double v, String expd) {Tfds.Eq(expd, Double_.Xto_str_loose(v));} } diff --git a/100_core/src_110_primitive/gplx/Object__tst.java b/100_core/src_110_primitive/gplx/Object__tst.java index e7cf8fded..43aeabdb1 100644 --- a/100_core/src_110_primitive/gplx/Object__tst.java +++ b/100_core/src_110_primitive/gplx/Object__tst.java @@ -27,7 +27,7 @@ public class Object__tst { } @Test public void Xto_str_loose_or_null() { fxt.Test_xto_str_loose_or_null(null, null); - fxt.Test_xto_str_loose_or_null(2449.6000000000004d, "2449.60"); + fxt.Test_xto_str_loose_or_null(2449.6000000000004d, "2449.6"); } } class Object__fxt { diff --git a/100_core/src_120_basicDataType/gplx/KeyValHash_tst.java b/100_core/src_120_basicDataType/gplx/KeyValHash_tst.java index 0290c7646..3a0d813cb 100644 --- a/100_core/src_120_basicDataType/gplx/KeyValHash_tst.java +++ b/100_core/src_120_basicDataType/gplx/KeyValHash_tst.java @@ -18,12 +18,12 @@ along with this program. If not, see . package gplx; import org.junit.*; public class KeyValHash_tst { - @Test public void AryVals() { + @Test public void AryVals() { tst_AryVals(ary_()); tst_AryVals(ary_("key1", "1"), kv_("key1", "1")); tst_AryVals(ary_("key1", "1", "key2", "2"), kv_("key1", "1"), kv_("key2", "2")); } - @Test public void Fail_lengthMustBeEven() { + @Test public void Fail_lengthMustBeEven() { try { tst_AryVals(ary_("key1"), kv_("key1", "1")); Tfds.Fail_expdError(); diff --git a/100_core/src_120_basicDataType/gplx/TimeSpanAdp_basic_tst.java b/100_core/src_120_basicDataType/gplx/TimeSpanAdp_basic_tst.java index 763dc0f95..f7a94ca75 100644 --- a/100_core/src_120_basicDataType/gplx/TimeSpanAdp_basic_tst.java +++ b/100_core/src_120_basicDataType/gplx/TimeSpanAdp_basic_tst.java @@ -18,51 +18,51 @@ along with this program. If not, see . package gplx; import org.junit.*; public class TimeSpanAdp_basic_tst { - @Test public void seconds_() { + @Test public void seconds_() { TimeSpanAdp expd = TimeSpanAdp_.fracs_(123987); TimeSpanAdp actl = TimeSpanAdp_.seconds_(123.987); Tfds.Eq(expd, actl); } - @Test public void TotalSecs() { + @Test public void TotalSecs() { TimeSpanAdp val = TimeSpanAdp_.fracs_(1987); Tfds.Eq_decimal(DecimalAdp_.parts_(1, 987), val.TotalSecs()); } - @Test public void Units() { + @Test public void Units() { tst_Units("01:02:03.987", 1, 2, 3, 987); tst_Units("01:00:03", 1, 0, 3, 0); tst_Units("01:00:00.987", 1, 0, 0, 987); tst_Units("02:00.987", 0, 2, 0, 987); } - @Test public void Add() { + @Test public void Add() { TimeSpanAdp val = TimeSpanAdp_.fracs_(3); TimeSpanAdp arg = TimeSpanAdp_.fracs_(2); TimeSpanAdp expd = TimeSpanAdp_.fracs_(5); TimeSpanAdp actl = val.Add(arg); Tfds.Eq(expd, actl); } - @Test public void Subtract() { + @Test public void Subtract() { TimeSpanAdp val = TimeSpanAdp_.fracs_(3); TimeSpanAdp arg = TimeSpanAdp_.fracs_(2); TimeSpanAdp expd = TimeSpanAdp_.fracs_(1); TimeSpanAdp actl = val.Subtract(arg); Tfds.Eq(expd, actl); } - @Test public void Add_unit_identity() { + @Test public void Add_unit_identity() { tst_AddUnit("00:00:01.000", 0, 0, "00:00:01.000"); } - @Test public void Add_unit_basic() { + @Test public void Add_unit_basic() { tst_AddUnit("01:59:58.987", 0, 1013, "02:00:00.000"); tst_AddUnit("01:59:58.987", 1, 2, "02:00:00.987"); tst_AddUnit("01:59:58.987", 2, 1, "02:00:58.987"); tst_AddUnit("01:59:58.987", 3, 1, "02:59:58.987"); } - @Test public void Add_unit_negative() { + @Test public void Add_unit_negative() { tst_AddUnit("01:00:00.00", 0, -1, "00:59:59.999"); tst_AddUnit("01:00:00.00", 1, -1, "00:59:59.000"); tst_AddUnit("01:00:00.00", 2, -1, "00:59:00.000"); tst_AddUnit("01:00:00.00", 3, -1, "00:00:00.000"); } - @Test public void XtoStrUiAbbrv() { + @Test public void XtoStrUiAbbrv() { tst_XtoStrUiAbbrv("01:02:03.004", "1h 2m 3s 4f"); tst_XtoStrUiAbbrv("00:00:03.004", "3s 4f"); tst_XtoStrUiAbbrv("00:00:03.000", "3s 0f"); diff --git a/100_core/src_120_basicDataType/gplx/UuidAdp__tst.java b/100_core/src_120_basicDataType/gplx/UuidAdp__tst.java index 9c50bf4dd..d11a6c071 100644 --- a/100_core/src_120_basicDataType/gplx/UuidAdp__tst.java +++ b/100_core/src_120_basicDataType/gplx/UuidAdp__tst.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx; import org.junit.*; public class UuidAdp__tst { - @Test public void parse_() { + @Test public void parse_() { tst_parse_("467ffb41-cdfe-402f-b22b-be855425784b"); } void tst_parse_(String s) { diff --git a/100_core/src_130_crt/gplx/criterias/Criteria_tst.java b/100_core/src_130_crt/gplx/criterias/Criteria_tst.java index 91d746e4e..107f695d2 100644 --- a/100_core/src_130_crt/gplx/criterias/Criteria_tst.java +++ b/100_core/src_130_crt/gplx/criterias/Criteria_tst.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.criterias; import gplx.*; import org.junit.*; public class Criteria_tst { - @Test public void Equal() { + @Test public void Equal() { Criteria crt = Criteria_.eq_(true); fx.tst_Matches(crt, true); fx.tst_MatchesNot(crt, false); @@ -28,7 +28,7 @@ public class Criteria_tst { fx.tst_Matches(Criteria_.eq_("equal"), "equal"); fx.tst_Matches(Criteria_.eq_(date), date); } - @Test public void Not() { + @Test public void Not() { Criteria crt = Criteria_.eqn_(true); fx.tst_Matches(crt, false); fx.tst_MatchesNot(crt, true); @@ -38,7 +38,7 @@ public class Criteria_tst { fx.tst_Matches(Criteria_.eqn_("equal"), "not equal"); fx.tst_Matches(Criteria_.eqn_(date), date.Add_minute(1)); } - @Test public void MoreThan() { + @Test public void MoreThan() { Criteria crt = Criteria_.mt_(0); fx.tst_Matches(crt, 1, 2); fx.tst_MatchesNot(crt, 0, -1); @@ -49,21 +49,21 @@ public class Criteria_tst { fx.tst_Matches(Criteria_.mt_(date), date.Add_minute(1)); fx.tst_Matches(Criteria_.mt_(false), true); // MISC: thus truth is greater than falsehood } - @Test public void MoreThanEq() { + @Test public void MoreThanEq() { Criteria crt = Criteria_.mte_(0); fx.tst_Matches(crt, 0); } - @Test public void Less() { + @Test public void Less() { Criteria crt = Criteria_.lt_(0); fx.tst_Matches(crt, -1, -2); fx.tst_MatchesNot(crt, 0, 1); fx.tst_MatchesFail(crt, "-1"); } - @Test public void LessEq() { + @Test public void LessEq() { Criteria crt = Criteria_.lte_(0); fx.tst_Matches(crt, 0); } - @Test public void Between() { + @Test public void Between() { Criteria crt = Criteria_.between_(-1, 1); fx.tst_Matches(crt, 0, 1, -1); fx.tst_MatchesNot(crt, -2, 2); @@ -72,7 +72,7 @@ public class Criteria_tst { fx.tst_Matches(Criteria_.between_(1, -1), 0); // reverse range fx.tst_Matches(Criteria_.between_("a", "c"), "b"); } - @Test public void In() { + @Test public void In() { Criteria crt = Criteria_.in_(0, 1, 2); fx.tst_Matches(crt, 0, 1, 2); fx.tst_MatchesNot(crt, 3, -1); diff --git a/100_core/src_140_list/gplx/ListAdp_Sorter_tst.java b/100_core/src_140_list/gplx/ListAdp_Sorter_tst.java index 9bdbf80e7..86379e442 100644 --- a/100_core/src_140_list/gplx/ListAdp_Sorter_tst.java +++ b/100_core/src_140_list/gplx/ListAdp_Sorter_tst.java @@ -18,12 +18,12 @@ along with this program. If not, see . package gplx; import org.junit.*; public class ListAdp_Sorter_tst { - @Test public void Basic() { + @Test public void Basic() { Object[] src = new Object[] {0,8,1,7,2,6,3,5,4}; ListAdp_Sorter.new_().Sort(src, src.length); Tfds.Eq_ary(src, Sequential(0, 8)); } - @Test public void Basic2() { + @Test public void Basic2() { Object[] src = new Object[] {"0","8","1","7","2","6","3","5","4"}; ListAdp_Sorter.new_().Sort(src, src.length); Tfds.Eq_ary(src, new Object[] {"0","1","2","3","4","5","6","7","8"}); diff --git a/100_core/src_140_list/gplx/OrderedHash_tst.java b/100_core/src_140_list/gplx/OrderedHash_tst.java index c9f03fa40..5293283b3 100644 --- a/100_core/src_140_list/gplx/OrderedHash_tst.java +++ b/100_core/src_140_list/gplx/OrderedHash_tst.java @@ -21,11 +21,11 @@ public class OrderedHash_tst { @Before public void setup() { hash = OrderedHash_.new_(); } - @Test public void FetchAt() { + @Test public void FetchAt() { hash.Add("key1", "val1"); Tfds.Eq("val1", hash.FetchAt(0)); } - @Test public void iterator() { + @Test public void iterator() { hash.Add("key2", "val2"); hash.Add("key1", "val1"); diff --git a/100_core/src_140_list/gplx/lists/StackAdp_tst.java b/100_core/src_140_list/gplx/lists/StackAdp_tst.java index 54b253c1b..862d12cfd 100644 --- a/100_core/src_140_list/gplx/lists/StackAdp_tst.java +++ b/100_core/src_140_list/gplx/lists/StackAdp_tst.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.lists; import gplx.*; import org.junit.*; public class StackAdp_tst { - @Test public void XtoList() { + @Test public void XtoList() { tst_XtoList(1, 2, 3); } void tst_XtoList(int... ary) { diff --git a/100_core/src_150_text/gplx/texts/BaseXXConverter_tst.java b/100_core/src_150_text/gplx/texts/BaseXXConverter_tst.java index c75c3f593..9bcaf8cd8 100644 --- a/100_core/src_150_text/gplx/texts/BaseXXConverter_tst.java +++ b/100_core/src_150_text/gplx/texts/BaseXXConverter_tst.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.texts; import gplx.*; import org.junit.*; public class BaseXXConverter_tst { - @Test public void Base32() { + @Test public void Base32() { tst_Base32("", ""); tst_Base32("f", "MY"); tst_Base32("fo", "MZXQ"); @@ -30,7 +30,7 @@ public class BaseXXConverter_tst { tst_Base32("a", "ME"); tst_Base32("ABCDEFGHIJKLMNOPQRSTUVWXYZ234567", "IFBEGRCFIZDUQSKKJNGE2TSPKBIVEU2UKVLFOWCZLIZDGNBVGY3Q"); } - @Test public void Base64() { + @Test public void Base64() { tst_Base64("", ""); tst_Base64("f", "Zg=="); tst_Base64("fo", "Zm8="); diff --git a/100_core/src_150_text/gplx/texts/CharStream_tst.java b/100_core/src_150_text/gplx/texts/CharStream_tst.java index 16e98a3a1..841ba37f4 100644 --- a/100_core/src_150_text/gplx/texts/CharStream_tst.java +++ b/100_core/src_150_text/gplx/texts/CharStream_tst.java @@ -21,19 +21,19 @@ public class CharStream_tst { @Before public void setup() { stream = CharStream.pos0_("abcdefgh"); } - @Test public void XtoStr() { + @Test public void XtoStr() { Tfds.Eq(stream.XtoStr(), "abcdefgh"); } - @Test public void CurrentText() { + @Test public void CurrentText() { stream.MoveNextBy(1); Tfds.Eq(stream.XtoStrAtCur(2), "bc"); Tfds.Eq(stream.XtoStr(), "abcdefgh"); } - @Test public void CurrentText_outOfBounds() { + @Test public void CurrentText_outOfBounds() { stream.MoveNextBy(7); Tfds.Eq(stream.XtoStrAtCur(2), "h"); } - @Test public void Match() { + @Test public void Match() { stream.MoveNextBy(6); tst_Match(true, "g"); tst_Match(false, "z"); @@ -41,7 +41,7 @@ public class CharStream_tst { tst_Match(false, "gz"); tst_Match(false, "ghi"); } - @Test public void AtBounds() { + @Test public void AtBounds() { stream.MoveTo(-1); tst_AtBounds(true, false, false); diff --git a/100_core/src_150_text/gplx/texts/RegxPatn_cls_ioMatch_tst.java b/100_core/src_150_text/gplx/texts/RegxPatn_cls_ioMatch_tst.java index b684eea71..b2f2d1ee4 100644 --- a/100_core/src_150_text/gplx/texts/RegxPatn_cls_ioMatch_tst.java +++ b/100_core/src_150_text/gplx/texts/RegxPatn_cls_ioMatch_tst.java @@ -18,35 +18,35 @@ along with this program. If not, see . package gplx.texts; import gplx.*; import org.junit.*; public class RegxPatn_cls_ioMatch_tst { - @Test public void SimpleMatches() { + @Test public void SimpleMatches() { tst_Matches("file.cs", "file.cs", true); // basic tst_Matches("file.cs", "file.cs.exe", false); // fail: must match name precisely tst_Matches("file.cs", "tst_file.cs", false); // fail: must match name precisely } - @Test public void Wildcard() { + @Test public void Wildcard() { tst_Matches("*.cs", "file.cs", true); // pass: before tst_Matches("file*", "file_valid.cs", true); // pass: after tst_Matches("*.exe", "file.cs", false); // fail: before tst_Matches("file*", "invalid_file.cs", false); // fail: after } - @Test public void DoubleWildcard() { + @Test public void DoubleWildcard() { tst_Matches("*cs*", "file.cs", true); // pass: after tst_Matches("*cs*", "csFile.exe", true); // pass: before tst_Matches("*cs*", "file.cs.exe", true); // pass: middle tst_Matches("*cs*", "file.exe", false); // fail } - @Test public void Compound() { + @Test public void Compound() { tst_Matches("*.cs|*.exe", "file.cs", true); // pass: match first tst_Matches("*.cs|*.exe", "file.exe", true); // pass: match second tst_Matches("*.cs|*.exe", "file.dll", false); // fail: match neither tst_Matches("*.cs|*.exe", "file.cs.exe.dll", false); // fail: match neither (though both are embedded) } - @Test public void Backslash() { + @Test public void Backslash() { tst_Matches("*\\bin\\*", "C:\\project\\bin\\", true); // pass: dir tst_Matches("*\\bin\\*", "C:\\project\\bin\\file.dll", true); // pass: fil tst_Matches("*\\bin\\*", "C:\\project\\binFiles\\", false); // fail } - @Test public void MixedCase() { + @Test public void MixedCase() { tst_Matches("file.cs", "file.cs", true); // pass: same case tst_Matches("file.cs", "File.cS", true); // pass: diff case } diff --git a/100_core/src_160_hash/gplx/security/HashAlgo_tth192_tree_tst.java b/100_core/src_160_hash/gplx/security/HashAlgo_tth192_tree_tst.java index c9dac39ed..455145aaa 100644 --- a/100_core/src_160_hash/gplx/security/HashAlgo_tth192_tree_tst.java +++ b/100_core/src_160_hash/gplx/security/HashAlgo_tth192_tree_tst.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.security; import gplx.*; import org.junit.*; public class HashAlgo_tth192_tree_tst { - @Test public void CalcRecursiveHalves() { + @Test public void CalcRecursiveHalves() { tst_CalcRecursiveHalves(129, 128); tst_CalcRecursiveHalves(128, 127); tst_CalcRecursiveHalves(100, 99); @@ -31,7 +31,7 @@ public class HashAlgo_tth192_tree_tst { tst_CalcRecursiveHalves(1, 0); tst_CalcRecursiveHalves(0, 0); } - @Test public void CalcWorkUnits() { + @Test public void CalcWorkUnits() { tst_CalcWorkUnits(101, 21); // leafs; 10 full, 1 part (+11) -> reduce 11 to 5+1 (+5) -> reduce 6 to 3 (+3) -> reduce 3 to 1+1 (+1) -> reduce 2 to 1 (+1) tst_CalcWorkUnits(100, 19); // leafs; 10 full (+10) -> reduce 10 to 5 (+5) -> reduce 5 to 2+1 (+2) -> reduce 3 to 1+1 (+1) -> reduce 2 to 1 (+1) tst_CalcWorkUnits(30, 5); // leafs; 3 full (+3) -> reduce 3 to 1+1 (+1) -> reduce 2 to 1 (+1) diff --git a/100_core/src_200_io/gplx/ios/IoEngine_system.java b/100_core/src_200_io/gplx/ios/IoEngine_system.java index 67d06f1bd..cb57fe3ef 100644 --- a/100_core/src_200_io/gplx/ios/IoEngine_system.java +++ b/100_core/src_200_io/gplx/ios/IoEngine_system.java @@ -392,8 +392,10 @@ public class IoEngine_system extends IoEngine_base { Io_download_fmt xfer_fmt = xrg.Download_fmt(); prog_dlg = xfer_fmt.usr_dlg; if (!Web_access_enabled) { - if (session_fil == null) session_fil = prog_dlg.Log_wtr().Session_dir().GenSubFil("internet.txt"); - if (prog_dlg != null) prog_dlg.Log_wtr().Log_msg_to_url_fmt(session_fil, "download disabled: src='~{0}' trg='~{1}'", xrg.Src(), xrg.Trg().Raw()); + if (prog_dlg != null) { + if (session_fil == null) session_fil = prog_dlg.Log_wtr().Session_dir().GenSubFil("internet.txt"); + prog_dlg.Log_wtr().Log_msg_to_url_fmt(session_fil, "download disabled: src='~{0}' trg='~{1}'", xrg.Src(), xrg.Trg().Raw()); + } return false; } try { diff --git a/100_core/src_200_io/gplx/ios/IoEngine_xrg_downloadFil.java b/100_core/src_200_io/gplx/ios/IoEngine_xrg_downloadFil.java index d55cc1821..8ec1331bc 100644 --- a/100_core/src_200_io/gplx/ios/IoEngine_xrg_downloadFil.java +++ b/100_core/src_200_io/gplx/ios/IoEngine_xrg_downloadFil.java @@ -21,6 +21,9 @@ public class IoEngine_xrg_downloadFil { public Io_url Trg() {return trg;} public IoEngine_xrg_downloadFil Trg_(Io_url v) {trg = v; return this;} Io_url trg; public byte Rslt() {return rslt;} public IoEngine_xrg_downloadFil Rslt_(byte v) {rslt = v; return this;} private byte rslt = Rslt_pass; public Exception Rslt_err() {return rslt_err;} public IoEngine_xrg_downloadFil Rslt_err_(Exception v) {rslt_err = v; return this;} Exception rslt_err; + public String Rslt_err_str() { + return rslt_err == null ? "none" : Err_.Message_gplx_brief(rslt_err); + } public String User_agent() {return user_agent;} public IoEngine_xrg_downloadFil User_agent_(String v) {user_agent = v; return this;} private String user_agent; public Gfo_usr_dlg Prog_dlg() {return prog_dlg;} public IoEngine_xrg_downloadFil Prog_dlg_(Gfo_usr_dlg v) {prog_dlg = v; download_fmt.Ctor(prog_dlg); return this;} Gfo_usr_dlg prog_dlg; public Bry_fmtr Prog_fmtr() {return prog_fmtr;} Bry_fmtr prog_fmtr = Bry_fmtr.new_("~{download_header}: ~{download_read} of ~{download_length} kb;", "download_header", "download_url", "download_read", "download_length"); diff --git a/100_core/src_300_classXtn/gplx/DateAdpClassXtn_tst.java b/100_core/src_300_classXtn/gplx/DateAdpClassXtn_tst.java index 53204409e..2fe1efe22 100644 --- a/100_core/src_300_classXtn/gplx/DateAdpClassXtn_tst.java +++ b/100_core/src_300_classXtn/gplx/DateAdpClassXtn_tst.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx; import org.junit.*; public class DateAdpClassXtn_tst { - @Test public void XtoDb() { + @Test public void XtoDb() { tst_XtoDb("20091115 220102.999", "2009-11-15 22:01:02.999"); } void tst_XtoDb(String val, String expdRaw) { diff --git a/100_core/src_311_gfoObj/gplx/GfoEvMgr_tst.java b/100_core/src_311_gfoObj/gplx/GfoEvMgr_tst.java index 0763b0024..f61075ba5 100644 --- a/100_core/src_311_gfoObj/gplx/GfoEvMgr_tst.java +++ b/100_core/src_311_gfoObj/gplx/GfoEvMgr_tst.java @@ -21,31 +21,31 @@ public class GfoEvMgr_tst { @Before public void setup() { pub = make_(); sub = make_(); } MockEvObj pub, sub; - @Test public void Basic() { + @Test public void Basic() { GfoEvMgr_.SubSame(pub, "ev1", sub); GfoEvMgr_.PubVal(pub, "ev1", "val1"); sub.tst_Handled("val1"); } - @Test public void None() {// make sure no subscribers does not cause exception + @Test public void None() {// make sure no subscribers does not cause exception GfoEvMgr_.SubSame(pub, "ev1", sub); GfoEvMgr_.PubVal(pub, "ev2", "val1"); //ev2 does not exist sub.tst_Handled(); } - @Test public void Lnk() { + @Test public void Lnk() { MockEvObj mid = make_(); mid.EvMgr().Lnk(pub); GfoEvMgr_.SubSame(mid, "ev1", sub); GfoEvMgr_.PubVal(pub, "ev1", "val1"); sub.tst_Handled("val1"); } - @Test public void RlsSub() { + @Test public void RlsSub() { this.Basic(); GfoEvMgr_.RlsSub(sub); GfoEvMgr_.PubVal(pub, "ev1", "val1"); sub.tst_Handled(); } - @Test public void RlsPub() { + @Test public void RlsPub() { this.Basic(); GfoEvMgr_.RlsSub(pub); diff --git a/100_core/src_311_gfoObj/gplx/GfoMsg_tst.java b/100_core/src_311_gfoObj/gplx/GfoMsg_tst.java index 060679301..25ea8af03 100644 --- a/100_core/src_311_gfoObj/gplx/GfoMsg_tst.java +++ b/100_core/src_311_gfoObj/gplx/GfoMsg_tst.java @@ -21,11 +21,11 @@ public class GfoMsg_tst { @Before public void setup() { GfsCore._.AddObj(new Mok(), "Mok"); } - @Test public void Write1() { + @Test public void Write1() { GfoMsg m = GfoMsg_.root_leafArgs_(String_.Ary("a", "b"), KeyVal_.new_("int0", 1)); tst_Msg(m, "a.b:int0='1';"); } - @Test public void Write() { + @Test public void Write() { Mok mok = new Mok(); tst_Msg(GfoInvkXtoStr.WriteMsg(mok, Mok.Invk_Cmd0, true, 1, "a"), "Mok.Cmd0:bool0='y' int0='1' str0='a';"); mok.Int0 = 2; diff --git a/100_core/src_340_dsv/gplx/stores/dsvs/DsvDataRdr_dsv_dat_tst.java b/100_core/src_340_dsv/gplx/stores/dsvs/DsvDataRdr_dsv_dat_tst.java index c599a674d..b8849711e 100644 --- a/100_core/src_340_dsv/gplx/stores/dsvs/DsvDataRdr_dsv_dat_tst.java +++ b/100_core/src_340_dsv/gplx/stores/dsvs/DsvDataRdr_dsv_dat_tst.java @@ -19,12 +19,12 @@ package gplx.stores.dsvs; import gplx.*; import gplx.stores.*; import org.junit.*; public class DsvDataRdr_dsv_dat_tst { @Before public void setup() {fx.Clear();} DsvDataRdr_fxt fx = DsvDataRdr_fxt.new_(); - @Test public void NameOnly() { + @Test public void NameOnly() { fx.run_parse_("tableName, ,\" \",#"); fx.tst_Tbls("tableName"); fx.tst_Dat(0); } - @Test public void Rows_N() { + @Test public void Rows_N() { fx.run_parse_lines_ ( "numbers, ,\" \",#" , "1,2,3" @@ -36,7 +36,7 @@ public class DsvDataRdr_dsv_dat_tst { , fx.ary_("4", "5", "6") ); } - @Test public void Tbls_N() { + @Test public void Tbls_N() { fx.run_parse_lines_ ( "letters, ,\" \",#" , "a,b,c" @@ -48,7 +48,7 @@ public class DsvDataRdr_dsv_dat_tst { fx.tst_Dat(0, fx.ary_("a", "b", "c")); fx.tst_Dat(1, fx.ary_("1", "2", "3"), fx.ary_("4", "5", "6")); } - @Test public void IgnoreTrailingBlankRow() { + @Test public void IgnoreTrailingBlankRow() { fx.run_parse_lines_ ( "letters, ,\" \",#" , "a,b,c" @@ -57,7 +57,7 @@ public class DsvDataRdr_dsv_dat_tst { fx.tst_Tbls("letters"); fx.tst_Dat(0, fx.ary_("a", "b", "c")); } - @Test public void AllowCommentsDuringData() { + @Test public void AllowCommentsDuringData() { fx.run_parse_lines_ ( "letters, ,\" \",#" , "a,b,c" diff --git a/100_core/src_340_dsv/gplx/stores/dsvs/DsvDataRdr_dsv_hdr_tst.java b/100_core/src_340_dsv/gplx/stores/dsvs/DsvDataRdr_dsv_hdr_tst.java index b97471cc2..3c16fe6de 100644 --- a/100_core/src_340_dsv/gplx/stores/dsvs/DsvDataRdr_dsv_hdr_tst.java +++ b/100_core/src_340_dsv/gplx/stores/dsvs/DsvDataRdr_dsv_hdr_tst.java @@ -19,7 +19,7 @@ package gplx.stores.dsvs; import gplx.*; import gplx.stores.*; import org.junit.*; public class DsvDataRdr_dsv_hdr_tst { @Before public void setup() {fx.Clear();} DsvDataRdr_fxt fx = DsvDataRdr_fxt.new_(); - @Test public void Names() { + @Test public void Names() { fx.run_parse_lines_ ( "id,name, ,\" \",@" , "0,me" @@ -32,7 +32,7 @@ public class DsvDataRdr_dsv_hdr_tst { , fx.ary_("1", "you") ); } - @Test public void Types() { + @Test public void Types() { fx.run_parse_lines_ ( "int," + StringClassXtn.Key_const + ", ,\" \",$" , "0,me" @@ -44,7 +44,7 @@ public class DsvDataRdr_dsv_hdr_tst { , fx.ary_(1, "you") ); } - @Test public void NamesAndTypes() { + @Test public void NamesAndTypes() { fx.run_parse_lines_ ( "id,name, ,\" \",@" , "int," + StringClassXtn.Key_const + ", ,\" \",$" @@ -57,7 +57,7 @@ public class DsvDataRdr_dsv_hdr_tst { , fx.ary_(1, "you") ); } - @Test public void MultipleTables_NoData() { + @Test public void MultipleTables_NoData() { fx.run_parse_lines_ ( "persons, ,\" \",#" , "id,name, ,\" \",@" @@ -70,7 +70,7 @@ public class DsvDataRdr_dsv_hdr_tst { fx.tst_Dat(0); fx.tst_Dat(1); } - @Test public void Comment() { + @Test public void Comment() { fx.run_parse_lines_ ( "--------------------, ,\" \",//" , "tbl0, ,\" \",#" diff --git a/100_core/src_400_gfs/gplx/GfsCore_tst.java b/100_core/src_400_gfs/gplx/GfsCore_tst.java index 7a1316bef..d0bf0ccb0 100644 --- a/100_core/src_400_gfs/gplx/GfsCore_tst.java +++ b/100_core/src_400_gfs/gplx/GfsCore_tst.java @@ -23,13 +23,13 @@ public class GfsCore_tst { core.AddObj(String_.Gfs, "String_"); core.AddObj(Int_.Gfs, "Int_"); } GfsCore core; - @Test public void Basic() { // String_.Len('abc') >> 3 + @Test public void Basic() { // String_.Len('abc') >> 3 tst_Msg ( msg_("String_").Subs_ ( msg_("Len").Add("v", "abc")) , 3); } - @Test public void PrimitiveConversion() { // String_.Len('abc').Add(-3) >> 0 + @Test public void PrimitiveConversion() { // String_.Len('abc').Add(-3) >> 0 tst_Msg ( msg_("String_").Subs_ ( msg_("Len").Add("v", "abc").Subs_ @@ -37,32 +37,32 @@ public class GfsCore_tst { ) , 0); } -// @Test public void Fail_notFound() { // String_.DoesNotExists +// @Test public void Fail_notFound() { // String_.DoesNotExists // tst_Err // ( msg_("help").Add("", "String_.DoesNotExist") // , GfsHelp.Err_Unhandled("String_", "DoesNotExist")); // } - @Test public void Cmd() { // cmd + @Test public void Cmd() { // cmd core.AddCmd(new GfsTest_cmd(), "testCmd"); tst_Msg ( msg_("testCmd").Add("s", "pass") , "pass"); } - @Test public void EmptyMsg() { + @Test public void EmptyMsg() { tst_Msg ( msg_("") , GfoInvkAble_.Rv_unhandled); } -// @Test public void Fail_argMissing() { // String_.Len() +// @Test public void Fail_argMissing() { // String_.Len() // tst_String__Len_Err(msg_("Len"), GfsCtx.Err_KeyNotFound("v", "<>")); // } -// @Test public void Fail_argWrongKey() { // String_.Len(badKey='abc') +// @Test public void Fail_argWrongKey() { // String_.Len(badKey='abc') // tst_String__Len_Err(msg_("Len").Add("badKey", "abc"), GfsCtx.Err_KeyNotFound("v", "badKey;")); // } -// @Test public void Fail_argExtraKey() { // String_.Len(v='abc' extraKey=1) +// @Test public void Fail_argExtraKey() { // String_.Len(v='abc' extraKey=1) // tst_String__Len_Err(msg_("Len").Add("v", "abc").Add("extraKey", 1), GfsCtx.Err_KeyNotFound("v", "badKey;")); // } - @Test public void Add_obj_deep() { // String_.Len(badKey='abc') + @Test public void Add_obj_deep() { // String_.Len(badKey='abc') GfsCore_tst_nest obj1 = GfsCore_tst_nest.new_("1", "val1"); GfsCore_tst_nest obj1_1 = GfsCore_tst_nest.new_("1_1", "val2"); core.AddObj(obj1, "1"); diff --git a/100_core/src_420_usrMsg/gplx/Gfo_usr_dlg.java b/100_core/src_420_usrMsg/gplx/Gfo_usr_dlg.java index b1a0b6849..f3913c2e3 100644 --- a/100_core/src_420_usrMsg/gplx/Gfo_usr_dlg.java +++ b/100_core/src_420_usrMsg/gplx/Gfo_usr_dlg.java @@ -32,4 +32,5 @@ public interface Gfo_usr_dlg extends GfoInvkAble, Cancelable { String Prog_one(String grp_key, String msg_key, String fmt, Object arg); String Prog_direct(String msg); String Log_direct(String msg); + String Plog_many(String grp_key, String msg_key, String fmt, Object... args); } diff --git a/100_core/src_420_usrMsg/gplx/Gfo_usr_dlg_.java b/100_core/src_420_usrMsg/gplx/Gfo_usr_dlg_.java index 385fcda98..481336d4a 100644 --- a/100_core/src_420_usrMsg/gplx/Gfo_usr_dlg_.java +++ b/100_core/src_420_usrMsg/gplx/Gfo_usr_dlg_.java @@ -37,6 +37,7 @@ class Gfo_usr_dlg_null implements Gfo_usr_dlg { public String Prog_one(String grp_key, String msg_key, String fmt, Object arg) {return "";} public String Prog_direct(String msg) {return "";} public String Log_direct(String msg) {return "";} + public String Plog_many(String grp_key, String msg_key, String fmt, Object... args) {return "";} public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {return this;} public static final Gfo_usr_dlg_null _ = new Gfo_usr_dlg_null(); Gfo_usr_dlg_null() {} } diff --git a/100_core/src_900_xml/gplx/HierStrBldr_tst.java b/100_core/src_900_xml/gplx/HierStrBldr_tst.java index e330dfbdc..68db38e89 100644 --- a/100_core/src_900_xml/gplx/HierStrBldr_tst.java +++ b/100_core/src_900_xml/gplx/HierStrBldr_tst.java @@ -20,19 +20,19 @@ import org.junit.*; import gplx.ios.*; import gplx.texts.*; public class HierStrBldr_tst { @Before public void setup() {bldr = new HierStrBldr();} HierStrBldr bldr; - @Test public void Hier0() { + @Test public void Hier0() { bldr.Ctor("/root/", "dir_{0}/", "idx_{0}.csv", "000"); tst_MakeName( 0, "/root/idx_000.csv"); tst_MakeName( 1, "/root/idx_001.csv"); tst_MakeName(10, "/root/idx_010.csv"); } - @Test public void Hier1() { + @Test public void Hier1() { bldr.Ctor("/root/", "dir_{0}/", "idx_{0}.csv", "000", 10); tst_MakeName( 0, "/root/dir_000/idx_000.csv"); tst_MakeName( 1, "/root/dir_000/idx_001.csv"); tst_MakeName(10, "/root/dir_010/idx_010.csv"); } - @Test public void Hier2() { + @Test public void Hier2() { bldr.Ctor("/root/", "dir_{0}/", "idx_{0}.csv", "000", 5, 10); tst_MakeName( 0, "/root/dir_000/dir_000/idx_000.csv"); tst_MakeName( 1, "/root/dir_000/dir_000/idx_001.csv"); diff --git a/100_core/src_900_xml/gplx/xmls/XmlDoc_tst.java b/100_core/src_900_xml/gplx/xmls/XmlDoc_tst.java index 49a65e7b7..9c1fc9438 100644 --- a/100_core/src_900_xml/gplx/xmls/XmlDoc_tst.java +++ b/100_core/src_900_xml/gplx/xmls/XmlDoc_tst.java @@ -19,13 +19,13 @@ package gplx.xmls; import gplx.*; import org.junit.*; public class XmlDoc_tst { String xml; XmlDoc xdoc; XmlNde xnde; - @Test public void parse_() { + @Test public void parse_() { xml = String_.Concat(""); xdoc = XmlDoc_.parse_(xml); Tfds.Eq("root", xdoc.Root().Name()); Tfds.Eq(true, xdoc.Root().NdeType_element()); } - @Test public void Xml_outer() { + @Test public void Xml_outer() { xml = String_.Concat ( "" , "" @@ -39,7 +39,7 @@ public class XmlDoc_tst { Tfds.Eq("a", xnde.Name()); Tfds.Eq("", xnde.Xml_outer()); } - @Test public void Text_inner() { + @Test public void Text_inner() { xml = String_.Concat ( "" , "" @@ -52,7 +52,7 @@ public class XmlDoc_tst { Tfds.Eq("a", xnde.Name()); Tfds.Eq("test me", xnde.Text_inner()); } - @Test public void Atrs() { + @Test public void Atrs() { xml = String_.Concat ( "" , "" diff --git a/100_core/src_900_xml/gplx/xmls/Xpath__tst.java b/100_core/src_900_xml/gplx/xmls/Xpath__tst.java index e83f1fec7..85ba60488 100644 --- a/100_core/src_900_xml/gplx/xmls/Xpath__tst.java +++ b/100_core/src_900_xml/gplx/xmls/Xpath__tst.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xmls; import gplx.*; import org.junit.*; public class Xpath__tst { - @Test public void Select_all() { + @Test public void Select_all() { String xml = String_.Concat ( "" , "" diff --git a/100_core/tst/gplx/EnmParser_tst.java b/100_core/tst/gplx/EnmParser_tst.java index 5fbc879db..bdb7e3ec6 100644 --- a/100_core/tst/gplx/EnmParser_tst.java +++ b/100_core/tst/gplx/EnmParser_tst.java @@ -21,7 +21,7 @@ public class EnmParser_tst { @Before public void setup() { parser = EnmMgr.new_(); } - @Test public void Basic() { // 1,2,4,8 + @Test public void Basic() { // 1,2,4,8 parser.BitRngEnd_(8); run_Reg(0, "zero"); run_Reg(1, "one"); @@ -34,7 +34,7 @@ public class EnmParser_tst { tst_Convert("eight", 8); tst_Convert("one+eight", 9); } - @Test public void Keys() { + @Test public void Keys() { parser.BitRngBgn_(65536).BitRngEnd_(262144); run_Reg( 65, "a"); run_Reg( 65536, "shift"); @@ -45,7 +45,7 @@ public class EnmParser_tst { tst_Convert("ctrl+a", 65 + 131072); tst_Convert("shift+ctrl+a", 65 + 65536 + 131072); } - @Test public void Prefix() { + @Test public void Prefix() { parser.Prefix_("key.").BitRngBgn_(128).BitRngEnd_(128); run_Reg(65, "a"); tst_Convert("key.a", 65); diff --git a/100_core/tst/gplx/GfoMsg_rdr_tst.java b/100_core/tst/gplx/GfoMsg_rdr_tst.java index edd5c6c7f..373564288 100644 --- a/100_core/tst/gplx/GfoMsg_rdr_tst.java +++ b/100_core/tst/gplx/GfoMsg_rdr_tst.java @@ -22,31 +22,31 @@ public class GfoMsg_rdr_tst { msg = msg_().Add("a", "1").Add("b", "2").Add("c", "3"); ctx.Match("init", "init"); } GfoMsg msg; GfsCtx ctx = GfsCtx.new_(); - @Test public void Key() { + @Test public void Key() { tst_Msg(msg, "a", "1"); tst_Msg(msg, "b", "2"); tst_Msg(msg, "c", "3"); tst_Msg(msg, "d", null); } - @Test public void Pos() { + @Test public void Pos() { msg = msg_().Add("", "1").Add("", "2").Add("", "3"); tst_Msg(msg, "", "1"); tst_Msg(msg, "", "2"); tst_Msg(msg, "", "3"); tst_Msg(msg, "", null); } - @Test public void OutOfOrder() { + @Test public void OutOfOrder() { tst_Msg(msg, "c", "3"); tst_Msg(msg, "b", "2"); tst_Msg(msg, "a", "1"); } - @Test public void Key3_Pos1_Pos2() { + @Test public void Key3_Pos1_Pos2() { msg = msg_().Add("", "1").Add("", "2").Add("c", "3"); tst_Msg(msg, "c", "3"); tst_Msg(msg, "", "1"); tst_Msg(msg, "", "2"); } - @Test public void MultipleEmpty() { + @Test public void MultipleEmpty() { msg = msg_().Add("", "1").Add("", "2").Add("", "3"); tst_Msg(msg, "", "1"); tst_Msg(msg, "", "2"); diff --git a/100_core/tst/gplx/ios/IoEngine_dir_basic_system_tst.java b/100_core/tst/gplx/ios/IoEngine_dir_basic_system_tst.java index dcb87fe90..b0c92c571 100644 --- a/100_core/tst/gplx/ios/IoEngine_dir_basic_system_tst.java +++ b/100_core/tst/gplx/ios/IoEngine_dir_basic_system_tst.java @@ -22,7 +22,7 @@ public class IoEngine_dir_basic_system_tst extends IoEngine_dir_basic_base { root = Tfds.RscDir.GenSubDir_nest("100_core", "ioEngineTest", "_temp"); IoEngine_xrg_deleteDir.new_(root).Recur_().ReadOnlyFails_off().Exec(); } @Override protected IoEngine engine_() {return IoEngine_system.new_();} - @Test @Override public void ScanDir() { + @Test @Override public void ScanDir() { super.ScanDir(); } } diff --git a/100_core/tst/gplx/ios/IoEngine_fil_basic_system_tst.java b/100_core/tst/gplx/ios/IoEngine_fil_basic_system_tst.java index 493d4bc48..26ef9ba0c 100644 --- a/100_core/tst/gplx/ios/IoEngine_fil_basic_system_tst.java +++ b/100_core/tst/gplx/ios/IoEngine_fil_basic_system_tst.java @@ -23,13 +23,13 @@ public class IoEngine_fil_basic_system_tst extends IoEngine_fil_basic_base { fil = root.GenSubFil("fil.txt"); IoEngine_xrg_deleteDir.new_(fil.OwnerDir()).Recur_().ReadOnlyFails_off().Exec(); } @Override protected IoEngine engine_() {return IoEngine_system.new_();} - @Test public void ExistsFil_IgnoreDifferentCasing() { + @Test public void ExistsFil_IgnoreDifferentCasing() { if (root.Info().CaseSensitive()) return; fx.run_SaveFilText(fil, "text"); fx.tst_ExistsPaths(true, fil); fx.tst_ExistsPaths(true, fil.OwnerDir().GenSubFil("FIL.txt")); } - @Test @gplx.Virtual public void RecycleFil() { + @Test @gplx.Virtual public void RecycleFil() { fx.run_SaveFilText(fil, "text"); fx.tst_ExistsPaths(true, fil); @@ -46,13 +46,13 @@ public class IoEngine_fil_basic_system_tst extends IoEngine_fil_basic_base { fx.tst_ExistsPaths(true, fil); fx.tst_ExistsPaths(false, recycleXrg.RecycleUrl()); } - @Test @Override public void DeleteFil_missing_pass() { + @Test @Override public void DeleteFil_missing_pass() { super.DeleteFil_missing_pass(); } - @Test @Override public void DeleteFil_readOnly_pass() { + @Test @Override public void DeleteFil_readOnly_pass() { super.DeleteFil_readOnly_pass (); } - @Test @Override public void SaveFilText_readOnlyFails() { + @Test @Override public void SaveFilText_readOnlyFails() { super.SaveFilText_readOnlyFails(); } } diff --git a/100_core/tst/gplx/stores/GfoNdeRdr_read_tst.java b/100_core/tst/gplx/stores/GfoNdeRdr_read_tst.java index 4154669b3..1b52b1a20 100644 --- a/100_core/tst/gplx/stores/GfoNdeRdr_read_tst.java +++ b/100_core/tst/gplx/stores/GfoNdeRdr_read_tst.java @@ -18,23 +18,23 @@ along with this program. If not, see . package gplx.stores; import gplx.*; import org.junit.*; public class GfoNdeRdr_read_tst { - @Test public void ReadInt() { + @Test public void ReadInt() { rdr = rdr_(IntClassXtn._, "id", 1); Tfds.Eq(rdr.ReadInt("id"), 1); } - @Test public void ReadIntOr() { + @Test public void ReadIntOr() { rdr = rdr_(IntClassXtn._, "id", 1); Tfds.Eq(rdr.ReadIntOr("id", -1), 1); } - @Test public void ReadIntElse_minus1() { + @Test public void ReadIntElse_minus1() { rdr = rdr_(IntClassXtn._, "id", null); Tfds.Eq(rdr.ReadIntOr("id", -1), -1); } - @Test public void ReadInt_parse() { + @Test public void ReadInt_parse() { rdr = rdr_(StringClassXtn._, "id", "1"); Tfds.Eq(rdr.ReadInt("id"), 1); } - @Test public void ReadIntElse_parse() { + @Test public void ReadIntElse_parse() { rdr = rdr_(StringClassXtn._, "id", "2"); Tfds.Eq(rdr.ReadIntOr("id", -1), 2); } diff --git a/100_core/tst/gplx/stores/xmls/XmlDataRdr_tst.java b/100_core/tst/gplx/stores/xmls/XmlDataRdr_tst.java index 511b8115b..7ee94b7c1 100644 --- a/100_core/tst/gplx/stores/xmls/XmlDataRdr_tst.java +++ b/100_core/tst/gplx/stores/xmls/XmlDataRdr_tst.java @@ -18,14 +18,14 @@ along with this program. If not, see . package gplx.stores.xmls; import gplx.*; import gplx.stores.*; import org.junit.*; public class XmlDataRdr_tst { - @Test public void Read() { + @Test public void Read() { DataRdr rdr = fx.rdr_(""); Tfds.Eq(rdr.NameOfNode(), "title"); Tfds.Eq(rdr.ReadStr("name"), "first"); Tfds.Eq(rdr.ReadInt("id"), 1); Tfds.Eq(rdr.ReadBool("profiled"), false); } - @Test public void None() { + @Test public void None() { DataRdr rdr = fx.rdr_ ( "<root>" , "<find/>" @@ -33,7 +33,7 @@ public class XmlDataRdr_tst { ); fx.tst_Subs_ByName(rdr, "no_nde", "no_atr"); } - @Test public void One() { + @Test public void One() { DataRdr rdr = fx.rdr_ ( "<root>" , "<find id=\"f0\" />" @@ -41,7 +41,7 @@ public class XmlDataRdr_tst { ); fx.tst_Subs_ByName(rdr, "find", "id", "f0"); } - @Test public void One_IgnoreOthers() { + @Test public void One_IgnoreOthers() { DataRdr rdr = fx.rdr_ ( "<root>" , "<find id=\"f0\" />" @@ -50,7 +50,7 @@ public class XmlDataRdr_tst { ); fx.tst_Subs_ByName(rdr, "find", "id", "f0"); } - @Test public void Many() { + @Test public void Many() { DataRdr rdr = fx.rdr_ ( "<root>" , "<find id=\"f0\" />" @@ -59,7 +59,7 @@ public class XmlDataRdr_tst { ); fx.tst_Subs_ByName(rdr, "find", "id", "f0", "f1"); } - @Test public void Nested() { + @Test public void Nested() { DataRdr rdr = fx.rdr_ ( "<root>" , "<sub1>" @@ -70,7 +70,7 @@ public class XmlDataRdr_tst { ); fx.tst_Subs_ByName(rdr, "sub1/find", "id", "f0", "f1"); } - @Test public void Nested_IgnoreOthers() { + @Test public void Nested_IgnoreOthers() { DataRdr rdr = fx.rdr_ ( "<root>" , "<sub1>" diff --git a/110_gfml/tst/gplx/gfml/GfmlDataRdr_tst.java b/110_gfml/tst/gplx/gfml/GfmlDataRdr_tst.java index 57c85bed3..2d49f936e 100644 --- a/110_gfml/tst/gplx/gfml/GfmlDataRdr_tst.java +++ b/110_gfml/tst/gplx/gfml/GfmlDataRdr_tst.java @@ -18,13 +18,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. package gplx.gfml; import gplx.*; import org.junit.*; public class GfmlDataRdr_tst { - @Test public void Raw() { + @Test public void Raw() { raw = "root:{}"; rdr = rdr_(raw); Tfds.Eq(rdr.NameOfNode(), "root"); } - @Test public void Atrs() { + @Test public void Atrs() { raw = "root:id=1 name=me isPresent=true dateOf='2006-12-08';"; rdr = rdr_(raw); @@ -33,7 +33,7 @@ public class GfmlDataRdr_tst { Tfds.Eq(rdr.ReadBool("isPresent"), true); Tfds.Eq_date(rdr.ReadDate("dateOf"), DateAdp_.parse_gplx("2006-12-08")); } - @Test public void Subs() { + @Test public void Subs() { raw = String_.Concat_any( "root:{", " computers:id=1 {", @@ -65,7 +65,7 @@ public class GfmlDataRdr_tst { } Tfds.Eq(idx, 2); } - @Test public void SelectRdr() { + @Test public void SelectRdr() { raw = String_.Concat_any( "root:{", " person:name=me {}", @@ -80,7 +80,7 @@ public class GfmlDataRdr_tst { Tfds.Eq(computer.NameOfNode(), "computer"); Tfds.Eq(computer.ReadStr("brand"), "noname"); } -// @Test public void Subs_byKey() { +// @Test public void Subs_byKey() { // raw = String_.Concat_any( // "root:", // " person=(name=me)", @@ -91,7 +91,7 @@ public class GfmlDataRdr_tst { // Tfds.Eq(person.NameOfNode, "person"); // Tfds.Eq(person.ReadStr("name"), "me"); // } -// @Test public void Type() { +// @Test public void Type() { // raw = String_.Concat_any( // "root:{", // " _type:{example{explicit_val; bool_val; int_val; string_val; long_val; date_val; float_val; decimal_val;}}", diff --git a/110_gfml/tst/gplx/gfml/z011_IntObjHash_tst.java b/110_gfml/tst/gplx/gfml/z011_IntObjHash_tst.java index 25666b491..680cfb64b 100644 --- a/110_gfml/tst/gplx/gfml/z011_IntObjHash_tst.java +++ b/110_gfml/tst/gplx/gfml/z011_IntObjHash_tst.java @@ -21,24 +21,24 @@ public class z011_IntObjHash_tst { @Before public void setup() { hash = new IntObjHash_base(); } IntObjHash_base hash; - @Test public void Empty() { + @Test public void Empty() { tst_Count(0); tst_Fetch(1, null); } - @Test public void Add() { + @Test public void Add() { hash.Add(1, "1"); tst_Count(1); tst_Fetch(1, "1"); tst_Fetch(2, null); } - @Test public void Del() { + @Test public void Del() { hash.Add(1, "1"); hash.Del(1); tst_Count(0); tst_Fetch(1, null); } - @Test public void Clear() { + @Test public void Clear() { hash.Add(1, "1"); hash.Add(32, "32"); tst_Fetch(1, "1"); @@ -50,7 +50,7 @@ public class z011_IntObjHash_tst { tst_Fetch(2, null); tst_Fetch(32, null); } - @Test public void Add_bug() { // fails after expanding ary, and fetching at key=n*16 + @Test public void Add_bug() { // fails after expanding ary, and fetching at key=n*16 hash.Add(1, "1"); tst_Count(1); tst_Fetch(1, "1"); diff --git a/110_gfml/tst/gplx/gfml/z012_GfmlTrie_tst.java b/110_gfml/tst/gplx/gfml/z012_GfmlTrie_tst.java index 1ebb26078..d04f3b8b0 100644 --- a/110_gfml/tst/gplx/gfml/z012_GfmlTrie_tst.java +++ b/110_gfml/tst/gplx/gfml/z012_GfmlTrie_tst.java @@ -22,28 +22,28 @@ public class z012_GfmlTrie_tst { @Before public void setup() { trie = GfmlTrie.new_(); } GfmlTrie trie; - @Test public void Null() { + @Test public void Null() { tst_FindMatch_first("", null); tst_FindMatch_first("{", null); } - @Test public void OneChar() { + @Test public void OneChar() { trie.Add("{", "val0"); tst_FindMatch_first("{", "val0"); tst_FindMatch_first(":", null); } - @Test public void TwoChar() { + @Test public void TwoChar() { trie.Add("/*", "val0"); tst_FindMatch_first("/*", "val0"); tst_FindMatch_first("//", null); } - @Test public void ManySym() { + @Test public void ManySym() { trie.Add(":", "val0"); trie.Add("{", "val1"); tst_FindMatch_first(":", "val0"); tst_FindMatch_first("{", "val1"); tst_FindMatch_first("-", null); } - @Test public void Overlap_1_2() { + @Test public void Overlap_1_2() { trie.Add("[", "val0"); trie.Add("[:", "val1"); tst_FindMatch_first("[", "val0"); @@ -51,7 +51,7 @@ public class z012_GfmlTrie_tst { tst_FindMatch_first("[-", "val0"); tst_FindMatch_first(":", null); } - @Test public void Overlap_2_1() { + @Test public void Overlap_2_1() { trie.Add("[:", "val0"); trie.Add("[", "val1"); tst_FindMatch_first("[:", "val0"); @@ -59,7 +59,7 @@ public class z012_GfmlTrie_tst { tst_FindMatch_first("[-", "val1"); tst_FindMatch_first(":", null); } - @Test public void Overlap_1_1() { + @Test public void Overlap_1_1() { trie.Add("[", "val0"); trie.Add("[", "val1"); tst_FindMatch_first("[", "val1"); // return last added diff --git a/110_gfml/tst/gplx/gfml/z015_GfmlDocPos_tst.java b/110_gfml/tst/gplx/gfml/z015_GfmlDocPos_tst.java index 3d169e104..d2c315e69 100644 --- a/110_gfml/tst/gplx/gfml/z015_GfmlDocPos_tst.java +++ b/110_gfml/tst/gplx/gfml/z015_GfmlDocPos_tst.java @@ -19,29 +19,29 @@ package gplx.gfml; import gplx.*; import org.junit.*; public class z015_GfmlDocPos_tst { GfmlDocPos root = GfmlDocPos_.Root; - @Test public void Root() { + @Test public void Root() { tst_Path(root, "0"); } - @Test public void MoveDown() { + @Test public void MoveDown() { tst_Path(root.NewDown(0), "0_0"); tst_Path(root.NewDown(0).NewDown(0), "0_0_0"); tst_Path(root.NewDown(1).NewDown(2), "0_1_2"); } - @Test public void MoveUp() { + @Test public void MoveUp() { tst_Path(root.NewDown(1).NewDown(2).NewUp(), "0_1"); } - @Test public void CompareTo_same() { + @Test public void CompareTo_same() { GfmlDocPos lhs = root.NewDown(0); GfmlDocPos rhs = root.NewDown(0); tst_CompareTo(lhs, rhs, CompareAble_.Same); } - @Test public void CompareTo_diffIndex() { + @Test public void CompareTo_diffIndex() { GfmlDocPos lhs = root.NewDown(0); GfmlDocPos rhs = root.NewDown(1); tst_CompareTo(lhs, rhs, CompareAble_.Less); tst_CompareTo(rhs, lhs, CompareAble_.More); } - @Test public void CompareTo_diffLevel() { + @Test public void CompareTo_diffLevel() { GfmlDocPos lhs = root; GfmlDocPos rhs = root.NewDown(0); tst_CompareTo(lhs, rhs, CompareAble_.Less); diff --git a/110_gfml/tst/gplx/gfml/z016_GfmlScopeList_tst.java b/110_gfml/tst/gplx/gfml/z016_GfmlScopeList_tst.java index b4cd3bfcb..cf332e772 100644 --- a/110_gfml/tst/gplx/gfml/z016_GfmlScopeList_tst.java +++ b/110_gfml/tst/gplx/gfml/z016_GfmlScopeList_tst.java @@ -21,14 +21,14 @@ public class z016_GfmlScopeList_tst { @Before public void setup() { list = GfmlScopeList.new_("test"); } GfmlScopeList list; - @Test public void None() { + @Test public void None() { tst_Itm(list, GfmlDocPos_.Root, null); } - @Test public void One() { + @Test public void One() { run_Add(list, var_("val1")); tst_Itm(list, GfmlDocPos_.Root, "val1"); } - @Test public void ByPos() { + @Test public void ByPos() { run_Add(list, var_("val1").DocPos_(docPos_(0, 0))); run_Add(list, var_("val2").DocPos_(docPos_(0, 0, 0))); tst_Itm(list, docPos_(0, 0), "val1"); diff --git a/110_gfml/tst/gplx/gfml/z051_GfmlFldPool_keyed_tst.java b/110_gfml/tst/gplx/gfml/z051_GfmlFldPool_keyed_tst.java index d93908b59..e6ff3f8fc 100644 --- a/110_gfml/tst/gplx/gfml/z051_GfmlFldPool_keyed_tst.java +++ b/110_gfml/tst/gplx/gfml/z051_GfmlFldPool_keyed_tst.java @@ -23,26 +23,26 @@ public class z051_GfmlFldPool_keyed_tst { GfmlType type = makr.MakeSubType("point", "x", "y", "z"); fldPool = GfmlFldPool.new_(type); } GfmlFldPool fldPool; - @Test public void PopByKey_inOrder() { + @Test public void PopByKey_inOrder() { tst_Keyed_PopByKey(fldPool, "x", "x", "y", "z"); } - @Test public void PopByKey_outOfOrder() { + @Test public void PopByKey_outOfOrder() { tst_Keyed_PopByKey(fldPool, "y", "y", "x", "z"); } - @Test public void PopByKey_unknown() { + @Test public void PopByKey_unknown() { tst_Keyed_PopByKey(fldPool, "a", GfmlItmKeys.NullKey, "x", "y", "z"); } - @Test public void PopByKey_alreadyRemoved() { + @Test public void PopByKey_alreadyRemoved() { tst_Keyed_PopByKey(fldPool, "x", "x", "y", "z"); tst_Keyed_PopByKey(fldPool, "x", GfmlItmKeys.NullKey, "y", "z"); } - @Test public void PopByKey_depleted() { + @Test public void PopByKey_depleted() { tst_Keyed_PopByKey(fldPool, "x", "x", "y", "z"); tst_Keyed_PopByKey(fldPool, "y", "y", "z"); tst_Keyed_PopByKey(fldPool, "z", "z"); tst_Keyed_PopByKey(fldPool, "x", GfmlItmKeys.NullKey); } - @Test public void PopNext_inOrder() { + @Test public void PopNext_inOrder() { tst_Keyed_PopNext(fldPool, "x", "y", "z"); tst_Keyed_PopNext(fldPool, "y", "z"); tst_Keyed_PopNext(fldPool, "z"); @@ -52,7 +52,7 @@ public class z051_GfmlFldPool_keyed_tst { } catch (Exception exc) {Err_.Noop(exc);} } - @Test public void PopByKey_PopNext() { + @Test public void PopByKey_PopNext() { tst_Keyed_PopByKey(fldPool, "y", "y", "x", "z"); tst_Keyed_PopNext(fldPool, "x", "z"); } diff --git a/110_gfml/tst/gplx/gfml/z081_GfmlDataWtr_tst.java b/110_gfml/tst/gplx/gfml/z081_GfmlDataWtr_tst.java index 68a24d202..801ec54df 100644 --- a/110_gfml/tst/gplx/gfml/z081_GfmlDataWtr_tst.java +++ b/110_gfml/tst/gplx/gfml/z081_GfmlDataWtr_tst.java @@ -22,45 +22,45 @@ public class z081_GfmlDataWtr_tst { wtr = GfmlDataWtr.new_(); wtr.WriteNodeBgn("root"); } DataWtr wtr; - @Test public void Basic() { + @Test public void Basic() { tst_XtoStr(wtr, "root:;"); } - @Test public void Atr_one() { + @Test public void Atr_one() { wtr.WriteData("key", "data");; tst_XtoStr(wtr, "root:key='data';"); } - @Test public void Atr_many() { + @Test public void Atr_many() { wtr.WriteData("key1", "data1"); wtr.WriteData("key2", "data2"); tst_XtoStr(wtr, "root:key1='data1' key2='data2';"); } - @Test public void Nde_one() { + @Test public void Nde_one() { wtr.WriteNodeBgn("sub0"); tst_XtoStr(wtr, "root:{sub0:;}"); } - @Test public void Nde_many() { + @Test public void Nde_many() { wtr.WriteNodeBgn("sub0"); wtr.WriteNodeEnd(); wtr.WriteNodeBgn("sub1"); tst_XtoStr(wtr, "root:{sub0:;sub1:;}"); } - @Test public void Nde_nested() { + @Test public void Nde_nested() { wtr.WriteNodeBgn("sub0"); wtr.WriteNodeBgn("sub1"); tst_XtoStr(wtr, "root:{sub0:{sub1:;}}"); } - @Test public void OneAtrOneNde() { + @Test public void OneAtrOneNde() { wtr.WriteData("key1", "data1"); wtr.WriteNodeBgn("sub0"); tst_XtoStr(wtr, "root:key1='data1'{sub0:;}"); } - @Test public void OneAtrOneNdeOneAtr() { + @Test public void OneAtrOneNdeOneAtr() { wtr.WriteData("key1", "data1"); wtr.WriteNodeBgn("sub0"); wtr.WriteData("key2", "data2"); tst_XtoStr(wtr, "root:key1='data1'{sub0:key2='data2';}"); } - @Test public void EscapeQuote() { + @Test public void EscapeQuote() { wtr.WriteData("key", "data's");; tst_XtoStr(wtr, "root:key='data''s';"); } diff --git a/110_gfml/tst/gplx/gfml/z091_GfmlLxr_basic_tst.java b/110_gfml/tst/gplx/gfml/z091_GfmlLxr_basic_tst.java index d9273330a..6730b66a6 100644 --- a/110_gfml/tst/gplx/gfml/z091_GfmlLxr_basic_tst.java +++ b/110_gfml/tst/gplx/gfml/z091_GfmlLxr_basic_tst.java @@ -22,20 +22,20 @@ public class z091_GfmlLxr_basic_tst { @Before public void setup() { rootLxr = GfmlLxr_.general_("gfml.root", GfmlTkn_.cmd_("tkn:text", GfmlBldrCmd_.Null)); } GfmlLxr rootLxr; - @Test public void Empty() { + @Test public void Empty() { tst_Fetch(""); } - @Test public void General() { + @Test public void General() { tst_Fetch("text", "text"); } - @Test public void Solo() { + @Test public void Solo() { ini_AddSymbol(","); tst_Fetch(",", ","); tst_Fetch(",data0", ",", "data0"); tst_Fetch("data0,", "data0", ","); tst_Fetch("data0,data1", "data0", ",", "data1"); } - @Test public void Range() { + @Test public void Range() { ini_AddRange(" ", "\t"); tst_Fetch(" ", " "); tst_Fetch(" a", " ", "a"); diff --git a/110_gfml/tst/gplx/gfml/z101_core_ndeInline_tst.java b/110_gfml/tst/gplx/gfml/z101_core_ndeInline_tst.java index 376257dff..831cbc606 100644 --- a/110_gfml/tst/gplx/gfml/z101_core_ndeInline_tst.java +++ b/110_gfml/tst/gplx/gfml/z101_core_ndeInline_tst.java @@ -22,7 +22,7 @@ public class z101_core_ndeInline_tst { @Before public void setup() { fx.ini_RootLxr_Add(GfmlDocLxrs.NdeInline_lxr()); } - @Test public void One() { + @Test public void One() { fx.tst_Doc("a;", fx.nde_().Atru_("a")); fx.tst_Tkn("a;" , fx.tkn_grp_ @@ -30,7 +30,7 @@ public class z101_core_ndeInline_tst { , fx.tkn_itm_(";") )); } - @Test public void Many() { + @Test public void Many() { fx.tst_Doc("a;b;" , fx.nde_().Atru_("a") , fx.nde_().Atru_("b") diff --git a/110_gfml/tst/gplx/gfml/z103_core_elmKey_tst.java b/110_gfml/tst/gplx/gfml/z103_core_elmKey_tst.java index acb5cc725..f004b70f8 100644 --- a/110_gfml/tst/gplx/gfml/z103_core_elmKey_tst.java +++ b/110_gfml/tst/gplx/gfml/z103_core_elmKey_tst.java @@ -25,7 +25,7 @@ public class z103_core_elmKey_tst { , GfmlDocLxrs.ElmKey_lxr() ); } - @Test public void Basic() { + @Test public void Basic() { fx.tst_Doc("a=b;", fx.nde_().Atrk_("a", "b")); fx.tst_Tkn("a=b;" , fx.tkn_grp_ @@ -34,7 +34,7 @@ public class z103_core_elmKey_tst { ) ); } - @Test public void Ws() { + @Test public void Ws() { fx.ini_RootLxr_Add(GfmlDocLxrs.Whitespace_lxr()); fx.tst_Tkn("a = b;" , fx.tkn_grp_ @@ -43,10 +43,10 @@ public class z103_core_elmKey_tst { ) ); } -// @Test public void Err_NotNamed() { +// @Test public void Err_NotNamed() { // fx.tst_Err("=", GfmlOutCmds.DatTkn_notFound_Err_()); // } -// @Test public void Err_NotValued() { +// @Test public void Err_NotValued() { // fx.tst_Err("a=;", GfmlOutCmds.elmKey_notValued_Err()); // } } diff --git a/110_gfml/tst/gplx/gfml/z112_core_comment1_tst.java b/110_gfml/tst/gplx/gfml/z112_core_comment1_tst.java index 156e1662b..676b78a18 100644 --- a/110_gfml/tst/gplx/gfml/z112_core_comment1_tst.java +++ b/110_gfml/tst/gplx/gfml/z112_core_comment1_tst.java @@ -25,13 +25,13 @@ public class z112_core_comment1_tst { , GfmlDocLxrs.Comment1_lxr() ); } - @Test public void Basic() { + @Test public void Basic() { fx.tst_Doc("/*a*/"); fx.tst_Tkn("/*a*/" , fx.tkn_grp_ary_("/*", "a", "*/") ); } - @Test public void Data() { + @Test public void Data() { fx.tst_Doc("a;/*b*/", fx.nde_().Atru_("a")); fx.tst_Tkn("a;/*b*/" , fx.tkn_grp_ @@ -40,22 +40,22 @@ public class z112_core_comment1_tst { , fx.tkn_grp_ary_("/*", "b", "*/") ); } - @Test public void IgnoreWs() { + @Test public void IgnoreWs() { fx.tst_Tkn("/* b c */" , fx.tkn_grp_ary_("/*", " b c ", "*/") ); } - @Test public void EscapeBgn() { + @Test public void EscapeBgn() { fx.tst_Tkn("/* /*/* */" , fx.tkn_grp_ary_("/*", " ", "/*/*", " ", "*/") ); } - @Test public void EscapeEnd() { + @Test public void EscapeEnd() { fx.tst_Tkn("/* */*/ */" , fx.tkn_grp_ary_("/*", " ", "*/*/", " ", "*/") ); } - @Test public void Nest() { + @Test public void Nest() { fx.tst_Tkn("/* b0 /* c */ b1 */" , fx.tkn_grp_ ( fx.tkn_itm_("/*") diff --git a/110_gfml/tst/gplx/gfml/z120_quotes_eval0_tst.java b/110_gfml/tst/gplx/gfml/z120_quotes_eval0_tst.java index af658deae..f91237793 100644 --- a/110_gfml/tst/gplx/gfml/z120_quotes_eval0_tst.java +++ b/110_gfml/tst/gplx/gfml/z120_quotes_eval0_tst.java @@ -25,7 +25,7 @@ public class z120_quotes_eval0_tst { , GfmlDocLxrs.Eval0_lxr() ); } - @Test public void Basic() { + @Test public void Basic() { fx.tst_Doc("<~t>;", fx.nde_().Atru_("\t")); fx.tst_Tkn("<~t>;" , fx.tkn_grp_ @@ -35,7 +35,7 @@ public class z120_quotes_eval0_tst { ) ); } - @Test public void DoublingIsNotEscaping() { + @Test public void DoublingIsNotEscaping() { fx.tst_Doc("<~t>>>;", fx.nde_().Atru_("\t").Atru_(">>")); // >> does not resolve to > } } diff --git a/110_gfml/tst/gplx/gfml/z121_quotes_quotes0_tst.java b/110_gfml/tst/gplx/gfml/z121_quotes_quotes0_tst.java index 0d5ebe29e..e1fa9a564 100644 --- a/110_gfml/tst/gplx/gfml/z121_quotes_quotes0_tst.java +++ b/110_gfml/tst/gplx/gfml/z121_quotes_quotes0_tst.java @@ -25,7 +25,7 @@ public class z121_quotes_quotes0_tst { , GfmlDocLxrs.Quote0_lxr() ); } - @Test public void Basic() { + @Test public void Basic() { fx.tst_Doc("'abc';", fx.nde_().Atru_("abc")); fx.tst_Tkn("'abc';" , fx.tkn_grp_ @@ -35,7 +35,7 @@ public class z121_quotes_quotes0_tst { ) ); } - @Test public void Escape() { + @Test public void Escape() { fx.tst_Doc("'a''b';", fx.nde_().Atru_("a'b")); fx.tst_Tkn("'a''b';" , fx.tkn_grp_ @@ -45,7 +45,7 @@ public class z121_quotes_quotes0_tst { ) ); } - @Test public void ManyAtrs_LastQuoted() { // bugfix + @Test public void ManyAtrs_LastQuoted() { // bugfix fx.ini_RootLxr_Add(GfmlDocLxrs.Whitespace_lxr()); fx.tst_Doc("a 'b';", fx.nde_().Atru_("a").Atru_("b")); } diff --git a/110_gfml/tst/gplx/gfml/z122_quotes_quote0_eval0_tst.java b/110_gfml/tst/gplx/gfml/z122_quotes_quote0_eval0_tst.java index 72111ad4f..8b024478d 100644 --- a/110_gfml/tst/gplx/gfml/z122_quotes_quote0_eval0_tst.java +++ b/110_gfml/tst/gplx/gfml/z122_quotes_quote0_eval0_tst.java @@ -25,7 +25,7 @@ public class z122_quotes_quote0_eval0_tst { , GfmlDocLxrs.Quote0_Eval0_lxr() ); } - @Test public void Basic() { + @Test public void Basic() { fx.tst_Doc("'a<~t>b';", fx.nde_().Atru_("a\tb")); fx.tst_Tkn("'a<~t>b';" , fx.tkn_grp_ @@ -41,7 +41,7 @@ public class z122_quotes_quote0_eval0_tst { ) ); } - @Test public void QuoteInside() { + @Test public void QuoteInside() { fx.tst_Doc("'a<~'t'>b';", fx.nde_().Atru_("a\tb")); fx.tst_Tkn("'a<~'t'>b';" , fx.tkn_grp_ diff --git a/110_gfml/tst/gplx/gfml/z123_quotes_quoteBlock_tst.java b/110_gfml/tst/gplx/gfml/z123_quotes_quoteBlock_tst.java index 885995e4d..b5d5786dc 100644 --- a/110_gfml/tst/gplx/gfml/z123_quotes_quoteBlock_tst.java +++ b/110_gfml/tst/gplx/gfml/z123_quotes_quoteBlock_tst.java @@ -25,16 +25,16 @@ public class z123_quotes_quoteBlock_tst { , GfmlDocLxrs.QuoteBlock_lxr() ); } - @Test public void Basic() { + @Test public void Basic() { fx.tst_Doc("|'abc'|;", fx.nde_().Atru_("abc")); } - @Test public void Escape_bgn() { + @Test public void Escape_bgn() { fx.tst_Doc("|'a|'|'b'|;", fx.nde_().Atru_("a|'b")); } - @Test public void Escape_end() { + @Test public void Escape_end() { fx.tst_Doc("|'a'|'|b'|;", fx.nde_().Atru_("a'|b")); } - @Test public void Nest() { + @Test public void Nest() { fx.tst_Doc("|'a|'-'|b'|;", fx.nde_().Atru_("a-b")); } } diff --git a/110_gfml/tst/gplx/gfml/z151_ndeSubs_basic_tst.java b/110_gfml/tst/gplx/gfml/z151_ndeSubs_basic_tst.java index 86e0ea81d..c914fc6b7 100644 --- a/110_gfml/tst/gplx/gfml/z151_ndeSubs_basic_tst.java +++ b/110_gfml/tst/gplx/gfml/z151_ndeSubs_basic_tst.java @@ -25,29 +25,29 @@ public class z151_ndeSubs_basic_tst { , GfmlDocLxrs.NdeBodyEnd_lxr() ); } - @Test public void Basic() { + @Test public void Basic() { fx.tst_Doc("{}", fx.nde_()); fx.tst_Tkn("{}" , fx.tkn_grp_ary_("{", "}") ); } - @Test public void Many() { + @Test public void Many() { fx.tst_Doc("{}{}", fx.nde_(), fx.nde_()); } - @Test public void Nested() { + @Test public void Nested() { fx.tst_Doc("{{}}" , fx.nde_().Subs_ ( fx.nde_()) ); } - @Test public void NestedMany() { + @Test public void NestedMany() { fx.tst_Doc("{{}{}}" , fx.nde_().Subs_ ( fx.nde_() , fx.nde_() )); } - @Test public void Complex() { + @Test public void Complex() { fx.tst_Doc(String_.Concat ( "{" , "{" diff --git a/110_gfml/tst/gplx/gfml/z152_ndeSubs_data_tst.java b/110_gfml/tst/gplx/gfml/z152_ndeSubs_data_tst.java index 255693dd8..050c69a3f 100644 --- a/110_gfml/tst/gplx/gfml/z152_ndeSubs_data_tst.java +++ b/110_gfml/tst/gplx/gfml/z152_ndeSubs_data_tst.java @@ -27,37 +27,37 @@ public class z152_ndeSubs_data_tst { , GfmlDocLxrs.Whitespace_lxr() ); } - @Test public void ToInline() { + @Test public void ToInline() { fx.tst_Doc("{a;}" , fx.nde_().Subs_ ( fx.nde_().Atru_("a")) ); } - @Test public void ToInline_many() { + @Test public void ToInline_many() { fx.tst_Doc("{a b;}" , fx.nde_().Subs_ ( fx.nde_().Atru_("a").Atru_("b")) ); } - @Test public void ToBody() { + @Test public void ToBody() { fx.tst_Doc("{a{}}" , fx.nde_().Subs_ ( fx.nde_().Atru_("a")) ); } - @Test public void ToBody_many() { + @Test public void ToBody_many() { fx.tst_Doc("{a b{}}" , fx.nde_().Subs_ ( fx.nde_().Atru_("a").Atru_("b")) ); } - @Test public void ToBody_manyNest() { + @Test public void ToBody_manyNest() { fx.tst_Doc("a{b;}" , fx.nde_().Atru_("a").Subs_ ( fx.nde_().Atru_("b")) ); } - @Test public void ToBody_many2() { + @Test public void ToBody_many2() { fx.tst_Doc("a{b{c;}}" , fx.nde_().Atru_("a").Subs_ ( fx.nde_().Atru_("b").Subs_ diff --git a/110_gfml/tst/gplx/gfml/z161_ndeHdrs_inline_tst.java b/110_gfml/tst/gplx/gfml/z161_ndeHdrs_inline_tst.java index 3bf1fe225..3feaa42c7 100644 --- a/110_gfml/tst/gplx/gfml/z161_ndeHdrs_inline_tst.java +++ b/110_gfml/tst/gplx/gfml/z161_ndeHdrs_inline_tst.java @@ -26,19 +26,19 @@ public class z161_ndeHdrs_inline_tst { , GfmlDocLxrs.Whitespace_lxr() ); } - @Test public void Basic() { + @Test public void Basic() { fx.tst_Doc("a:;", fx.nde_().Hnd_("a")); fx.tst_Tkn("a:;" , fx.tkn_grp_ary_("a", ":", ";") ); } - @Test public void Many() { + @Test public void Many() { fx.tst_Doc("a:;b:;" , fx.nde_().Hnd_("a") , fx.nde_().Hnd_("b") ); } - @Test public void Ws() { + @Test public void Ws() { fx.tst_Tkn("a : ;" , fx.tkn_grp_ary_("a", " ", ":", " ", ";") ); diff --git a/110_gfml/tst/gplx/gfml/z162_ndeHdrs_err_tst.java b/110_gfml/tst/gplx/gfml/z162_ndeHdrs_err_tst.java index c3f3e3f30..a8dfe86b3 100644 --- a/110_gfml/tst/gplx/gfml/z162_ndeHdrs_err_tst.java +++ b/110_gfml/tst/gplx/gfml/z162_ndeHdrs_err_tst.java @@ -24,10 +24,10 @@ public class z162_ndeHdrs_err_tst { ( GfmlDocLxrs.NdeHeader_lxr() ); } - @Test public void NotNamed() { + @Test public void NotNamed() { fx.tst_Err(":", UsrMsg_mok.new_(GfmlUsrMsgs.fail_DatTkn_notFound())); } - @Test public void Dangling() { + @Test public void Dangling() { fx.tst_Err("a{", UsrMsg_mok.new_(GfmlUsrMsgs.fail_Frame_danglingBgn())); } } diff --git a/110_gfml/tst/gplx/gfml/z163_ndeHdrs_body_tst.java b/110_gfml/tst/gplx/gfml/z163_ndeHdrs_body_tst.java index 9407f2517..8ba9d913c 100644 --- a/110_gfml/tst/gplx/gfml/z163_ndeHdrs_body_tst.java +++ b/110_gfml/tst/gplx/gfml/z163_ndeHdrs_body_tst.java @@ -26,22 +26,22 @@ public class z163_ndeHdrs_body_tst { , GfmlDocLxrs.NdeBodyEnd_lxr() ); } - @Test public void Basic() { + @Test public void Basic() { fx.tst_Doc("a:{}", fx.nde_().Hnd_("a")); } - @Test public void Many() { + @Test public void Many() { fx.tst_Doc("a:{}b:{}" , fx.nde_().Hnd_("a") , fx.nde_().Hnd_("b") ); } - @Test public void Nested() { + @Test public void Nested() { fx.tst_Doc("a:{b:{}}" , fx.nde_().Hnd_("a").Subs_ ( fx.nde_().Hnd_("b")) ); } - @Test public void NestedMany() { + @Test public void NestedMany() { fx.tst_Doc("a:{b:{}c:{}}" , fx.nde_().Hnd_("a").Subs_ ( fx.nde_().Hnd_("b") diff --git a/110_gfml/tst/gplx/gfml/z164_hdeHdrs_data_tst.java b/110_gfml/tst/gplx/gfml/z164_hdeHdrs_data_tst.java index ebfe4c89c..e147b7021 100644 --- a/110_gfml/tst/gplx/gfml/z164_hdeHdrs_data_tst.java +++ b/110_gfml/tst/gplx/gfml/z164_hdeHdrs_data_tst.java @@ -28,7 +28,7 @@ public class z164_hdeHdrs_data_tst { , GfmlDocLxrs.NdeBodyEnd_lxr() ); } - @Test public void Bas1() { + @Test public void Bas1() { fx.tst_Tkn("a:b;" , fx.tkn_grp_ ( fx.tkn_itm_("a") @@ -37,7 +37,7 @@ public class z164_hdeHdrs_data_tst { , fx.tkn_itm_(";") )); } - @Test public void Basic3() { + @Test public void Basic3() { fx.tst_Tkn("a:b{c;}" , fx.tkn_grp_ ( fx.tkn_itm_("a") diff --git a/110_gfml/tst/gplx/gfml/z181_ndeDots_basic_tst.java b/110_gfml/tst/gplx/gfml/z181_ndeDots_basic_tst.java index 5c0c56299..4de9ad48e 100644 --- a/110_gfml/tst/gplx/gfml/z181_ndeDots_basic_tst.java +++ b/110_gfml/tst/gplx/gfml/z181_ndeDots_basic_tst.java @@ -27,7 +27,7 @@ public class z181_ndeDots_basic_tst { , GfmlDocLxrs.NdeBodyEnd_lxr() ); } - @Test public void One() { + @Test public void One() { fx.tst_Doc("{a.b;c;}" , fx.nde_().ChainId_(0).Subs_ ( fx.nde_().Hnd_("a").ChainId_(1).Subs_ @@ -51,7 +51,7 @@ public class z181_ndeDots_basic_tst { , fx.tkn_itm_("}") )); } - @Test public void Many() { + @Test public void Many() { fx.tst_Doc("{a.b.c.d;e;}" , fx.nde_().ChainId_(0).Subs_ ( fx.nde_().Hnd_("a").ChainId_(1).Subs_ diff --git a/110_gfml/tst/gplx/gfml/z182_ndeDots_subs_tst.java b/110_gfml/tst/gplx/gfml/z182_ndeDots_subs_tst.java index 45b31b2af..529624d4e 100644 --- a/110_gfml/tst/gplx/gfml/z182_ndeDots_subs_tst.java +++ b/110_gfml/tst/gplx/gfml/z182_ndeDots_subs_tst.java @@ -26,7 +26,7 @@ public class z182_ndeDots_subs_tst { , GfmlDocLxrs.NdeBodyEnd_lxr() ); } GfmlParse_fxt fx = GfmlParse_fxt.new_(); - @Test public void Basic() { + @Test public void Basic() { fx.tst_Doc("{a.b{}z;}" , fx.nde_().ChainId_(0).Subs_ ( fx.nde_().Hnd_("a").ChainId_(1).Subs_ @@ -35,7 +35,7 @@ public class z182_ndeDots_subs_tst { , fx.nde_().Atru_("z").ChainId_(0) )); } - @Test public void Nest() { + @Test public void Nest() { fx.ini_RootLxr_Add(GfmlDocLxrs.NdeHeader_lxr()); fx.tst_Doc("{a.b.c{d:e;}z;}" // shorthand of {a{b{c{d:e;}}}} , fx.nde_().ChainId_(0).Subs_ @@ -49,7 +49,7 @@ public class z182_ndeDots_subs_tst { , fx.nde_().ChainId_(0).Atru_("z") )); } - @Test public void Chain() { + @Test public void Chain() { fx.tst_Doc("{a.b.c;z;}" , fx.nde_().ChainId_(0).Subs_ ( fx.nde_().Hnd_("a").ChainId_(1).Subs_ @@ -59,7 +59,7 @@ public class z182_ndeDots_subs_tst { , fx.nde_().ChainId_(0).Atru_("z") )); } - @Test public void NdeHdr() { + @Test public void NdeHdr() { fx.ini_RootLxr_Add(GfmlDocLxrs.NdeHeader_lxr()); fx.tst_Doc("{a:b.c;z;}" , fx.nde_().ChainId_(0).Subs_ diff --git a/110_gfml/tst/gplx/gfml/z183_ndeDots_parens_tst.java b/110_gfml/tst/gplx/gfml/z183_ndeDots_parens_tst.java index cd0196fa6..4e6212ee1 100644 --- a/110_gfml/tst/gplx/gfml/z183_ndeDots_parens_tst.java +++ b/110_gfml/tst/gplx/gfml/z183_ndeDots_parens_tst.java @@ -28,7 +28,7 @@ public class z183_ndeDots_parens_tst { , GfmlDocLxrs.NdeHdrEnd_lxr() ); } GfmlParse_fxt fx = GfmlParse_fxt.new_(); - @Test public void Basic() { + @Test public void Basic() { fx.tst_Doc("{a.b(c);z;}" , fx.nde_().ChainId_(0).Subs_ ( fx.nde_().Hnd_("a").ChainId_(1).Subs_ @@ -37,7 +37,7 @@ public class z183_ndeDots_parens_tst { , fx.nde_().ChainId_(0).Atru_("z") )); } - @Test public void Basic_tkn() { + @Test public void Basic_tkn() { //A_('1'); fx.tst_Tkn("a(c);" , fx.tkn_grp_ @@ -47,7 +47,7 @@ public class z183_ndeDots_parens_tst { ) ); } - @Test public void Basic2_tkn() { + @Test public void Basic2_tkn() { fx.tst_Tkn("a.b(c);" , fx.tkn_grp_ ( fx.tkn_itm_("a"), fx.tkn_itm_(".") @@ -57,7 +57,7 @@ public class z183_ndeDots_parens_tst { ) ); } - @Test public void Many() { + @Test public void Many() { fx.ini_RootLxr_Add(GfmlDocLxrs.Whitespace_lxr()); fx.tst_Doc("{a.b(c d e);z;}" , fx.nde_().ChainId_(0).Subs_ @@ -67,7 +67,7 @@ public class z183_ndeDots_parens_tst { , fx.nde_().ChainId_(0).Atru_("z") )); } -// @Test public void Many2() { +// @Test public void Many2() { // fx.ini_RootLxr_Add(GfmlDocLxrs.Whitespace_lxr()); // fx.tst_Doc("{a.b(c){d();}}" // , fx.nde_().ChainId_(0).Subs_ @@ -78,7 +78,7 @@ public class z183_ndeDots_parens_tst { // ) // )); // } - @Test public void Chain() { + @Test public void Chain() { fx.ini_RootLxr_Add(GfmlDocLxrs.Whitespace_lxr()); fx.tst_Doc("{a.b(c).d(e);z;}" , fx.nde_().ChainId_(0).Subs_ @@ -90,7 +90,7 @@ public class z183_ndeDots_parens_tst { , fx.nde_().ChainId_(0).Atru_("z") )); } - @Test public void Nest() { + @Test public void Nest() { fx.tst_Doc("{a.b(c.d);z;}" , fx.nde_().ChainId_(0).Subs_ ( fx.nde_().Hnd_("a").ChainId_(1).Subs_ @@ -103,7 +103,7 @@ public class z183_ndeDots_parens_tst { , fx.nde_().Atru_("z") )); } - @Test public void Nest_longer() { + @Test public void Nest_longer() { fx.tst_Doc("{a.b.c(d.e.f);z;}" , fx.nde_().ChainId_(0).Subs_ ( fx.nde_().Hnd_("a").ChainId_(1).Subs_ @@ -120,7 +120,7 @@ public class z183_ndeDots_parens_tst { , fx.nde_().Atru_("z") )); } - @Test public void Nest_deeper() { + @Test public void Nest_deeper() { fx.tst_Doc("{a.b(c.d(e.f));z;}" , fx.nde_().ChainId_(0).Subs_ ( fx.nde_().Hnd_("a").ChainId_(1).Subs_ diff --git a/110_gfml/tst/gplx/gfml/z184_ndeDots_atrSpr_tst.java b/110_gfml/tst/gplx/gfml/z184_ndeDots_atrSpr_tst.java index 902b9d181..4673c108f 100644 --- a/110_gfml/tst/gplx/gfml/z184_ndeDots_atrSpr_tst.java +++ b/110_gfml/tst/gplx/gfml/z184_ndeDots_atrSpr_tst.java @@ -29,7 +29,7 @@ public class z184_ndeDots_atrSpr_tst { , GfmlDocLxrs.AtrSpr_lxr() ); } GfmlParse_fxt fx = GfmlParse_fxt.new_(); - @Test public void NestMult() { + @Test public void NestMult() { fx.ini_RootLxr_Add(GfmlDocLxrs.AtrSpr_lxr()); fx.tst_Doc("{a.b(c.d,e.f);z;}" , fx.nde_().ChainId_(0).Subs_ diff --git a/110_gfml/tst/gplx/gfml/z191_ndeProps_basic_tst.java b/110_gfml/tst/gplx/gfml/z191_ndeProps_basic_tst.java index 5c0379bf3..78109e623 100644 --- a/110_gfml/tst/gplx/gfml/z191_ndeProps_basic_tst.java +++ b/110_gfml/tst/gplx/gfml/z191_ndeProps_basic_tst.java @@ -29,20 +29,20 @@ public class z191_ndeProps_basic_tst { , GfmlDocLxrs.NdeInline_lxr() ); } - @Test public void Basic() { + @Test public void Basic() { fx.tst_Doc("a:[b]{}" , fx.nde_().Hnd_("a").Subs_ ( fx.nde_().KeyedSubObj_().Atru_("b")) ); } - @Test public void Basic_empty() { + @Test public void Basic_empty() { fx.tst_Tkn("[];" , fx.tkn_grp_ ( fx.tkn_grp_ary_("[", "]") , fx.tkn_itm_(";") )); } - @Test public void Hdr() { + @Test public void Hdr() { fx.tst_Tkn("a[];" , fx.tkn_grp_ ( fx.tkn_grp_ary_("a") @@ -50,52 +50,52 @@ public class z191_ndeProps_basic_tst { , fx.tkn_itm_(";") )); } - @Test public void WithInnerNde() { + @Test public void WithInnerNde() { fx.tst_Doc("a:[b]{c;}" , fx.nde_().Hnd_("a").Subs_ ( fx.nde_().KeyedSubObj_().Atru_("b") , fx.nde_().Atru_("c") )); } - @Test public void DoesNotUsurpDatTknForName() { + @Test public void DoesNotUsurpDatTknForName() { fx.tst_Doc("a:b[c]{}" , fx.nde_().Hnd_("a").Atru_("b").Subs_ ( fx.nde_().KeyedSubObj_().Atru_("c") )); } - @Test public void NoHeader_body() { + @Test public void NoHeader_body() { fx.tst_Doc("a[b]{}" , fx.nde_().Atru_("a").Subs_ ( fx.nde_().KeyedSubObj_().Atru_("b") )); } - @Test public void NoHeader_inline() { + @Test public void NoHeader_inline() { fx.tst_Doc("a[b];" , fx.nde_().Atru_("a").Subs_ ( fx.nde_().KeyedSubObj_().Atru_("b") )); } - @Test public void Nesting() { + @Test public void Nesting() { fx.tst_Doc("a:[b:;]{}" , fx.nde_().Hnd_("a").Subs_ ( fx.nde_().KeyedSubObj_().Subs_ ( fx.nde_().Hnd_("b")) )); } - @Test public void Nesting2() { + @Test public void Nesting2() { fx.tst_Doc("a:[b{}]{}" , fx.nde_().Hnd_("a").Subs_ ( fx.nde_().KeyedSubObj_().Atru_("b") )); } - @Test public void CanBeKeyed_header() { + @Test public void CanBeKeyed_header() { fx.ini_RootLxr_Add(GfmlDocLxrs.ElmKey_lxr()); fx.tst_Doc("a:b=[c];" , fx.nde_().Hnd_("a").Subs_ ( fx.nde_().KeyedSubObj_().Key_("b").Atru_("c") )); } - @Test public void CanBeKeyed2_inline() { + @Test public void CanBeKeyed2_inline() { fx.ini_RootLxr_Add ( GfmlDocLxrs.Whitespace_lxr() , GfmlDocLxrs.ElmKey_lxr() @@ -105,12 +105,12 @@ public class z191_ndeProps_basic_tst { ( fx.nde_().KeyedSubObj_().Key_("b").Atru_("c") )); } - @Test public void Sole() { + @Test public void Sole() { fx.ini_RootLxr_Add(GfmlDocLxrs.Whitespace_lxr()); fx.tst_Doc("[a b]" , fx.nde_().KeyedSubObj_().Atru_("a").Atru_("b")); } - @Test public void Nest1() { + @Test public void Nest1() { fx.ini_RootLxr_Add(GfmlDocLxrs.Whitespace_lxr()); fx.tst_Doc("[a [b]]" , fx.nde_().Atru_("a").Subs_ diff --git a/110_gfml/tst/gplx/gfml/z192_ndeProps_dots_tst.java b/110_gfml/tst/gplx/gfml/z192_ndeProps_dots_tst.java index 03be7f12b..0846ae705 100644 --- a/110_gfml/tst/gplx/gfml/z192_ndeProps_dots_tst.java +++ b/110_gfml/tst/gplx/gfml/z192_ndeProps_dots_tst.java @@ -29,7 +29,7 @@ public class z192_ndeProps_dots_tst { , GfmlDocLxrs.NdePropEnd_lxr() ); } - @Test public void Stress() { + @Test public void Stress() { fx.tst_Doc("a.b[c];" , fx.nde_().Hnd_("a").Subs_ ( fx.nde_().Hnd_("b").Subs_ diff --git a/110_gfml/tst/gplx/gfml/z452_dflts_exec_tst.java b/110_gfml/tst/gplx/gfml/z452_dflts_exec_tst.java index ad36fd828..7db8c1a69 100644 --- a/110_gfml/tst/gplx/gfml/z452_dflts_exec_tst.java +++ b/110_gfml/tst/gplx/gfml/z452_dflts_exec_tst.java @@ -21,7 +21,7 @@ public class z452_dflts_exec_tst { @Before public void setup() { type = make_("gfml.point", "point", "x"); } GfmlDefaultItem item; GfmlType type; GfmlDefaultItem_fxt fx_item = GfmlDefaultItem_fxt.new_(); - @Test public void Basic() { + @Test public void Basic() { tst_SubFldDefault(type, "x", null); item = fx_item.make_("gfml.point", "x", "10"); @@ -31,7 +31,7 @@ public class z452_dflts_exec_tst { item.Exec_end(type); tst_SubFldDefault(type, "x", null); } - @Test public void Overwrite() { + @Test public void Overwrite() { ini_SubFldDefault_add(type, "x", "0"); tst_SubFldDefault(type, "x", "0"); @@ -42,7 +42,7 @@ public class z452_dflts_exec_tst { item.Exec_end(type); tst_SubFldDefault(type, "x", "0"); } - @Test public void CreateDefault() { + @Test public void CreateDefault() { tst_SubFldExists(type, "y", false); item = fx_item.make_("gfml.point", "y", "10"); @@ -53,7 +53,7 @@ public class z452_dflts_exec_tst { item.Exec_end(type); tst_SubFldExists(type, "y", false); } - @Test public void DefaultTkn() { + @Test public void DefaultTkn() { Object[] ary = ini_eval_("0"); GfmlTkn varTkn = (GfmlTkn)ary[0]; GfmlVarItm varItem = (GfmlVarItm)ary[1]; diff --git a/110_gfml/tst/gplx/gfml/z455_dflts_scope_tst.java b/110_gfml/tst/gplx/gfml/z455_dflts_scope_tst.java index 1eb6eb567..8a2b49672 100644 --- a/110_gfml/tst/gplx/gfml/z455_dflts_scope_tst.java +++ b/110_gfml/tst/gplx/gfml/z455_dflts_scope_tst.java @@ -25,7 +25,7 @@ public class z455_dflts_scope_tst { GfmlType type = makr.MakeRootType("point", "point", "x", "y").DocPos_(rootPos); regy.Add(type); } GfmlDocPos rootPos, currPos; GfmlTypRegy regy; - @Test public void Basic() { + @Test public void Basic() { currPos = rootPos.NewDown(0); tst_FetchOrNullByPos(regy, "point", rootPos, "point", "x", "y"); tst_FetchOrNullByPos(regy, "point", currPos, "point", "x", "y"); diff --git a/110_gfml/tst/gplx/gfml/z602_edit_nde_tst.java b/110_gfml/tst/gplx/gfml/z602_edit_nde_tst.java index 83395a831..ee780a677 100644 --- a/110_gfml/tst/gplx/gfml/z602_edit_nde_tst.java +++ b/110_gfml/tst/gplx/gfml/z602_edit_nde_tst.java @@ -19,6 +19,6 @@ package gplx.gfml; import gplx.*; import org.junit.*; public class z602_edit_nde_tst { GfmlUpdateFx fx = GfmlUpdateFx.new_(); - @Test public void Basic() { + @Test public void Basic() { } } diff --git a/110_gfml/tst/gplx/gfml/z801_useCase_DataRdr_tst.java b/110_gfml/tst/gplx/gfml/z801_useCase_DataRdr_tst.java index a4703598d..5b2103d21 100644 --- a/110_gfml/tst/gplx/gfml/z801_useCase_DataRdr_tst.java +++ b/110_gfml/tst/gplx/gfml/z801_useCase_DataRdr_tst.java @@ -20,7 +20,7 @@ import org.junit.*; import gplx.stores.*; public class z801_useCase_DataRdr_tst { String raw; - @Test public void Subs_byName() { + @Test public void Subs_byName() { raw = String_.Concat ( "_type:{" , " item {" @@ -39,7 +39,7 @@ public class z801_useCase_DataRdr_tst { subRdr = rdr.Subs_byName_moveFirst("point"); fx_rdr.tst_Atrs(subRdr, kv_("x", "1"), kv_("y", "2")); } -// @Test +// @Test public void Subs_byName3() { raw = String_.Concat ( "_type:{" diff --git a/110_gfml/tst/gplx/gfml/z811_useCase_GfmlIoSql_tst.java b/110_gfml/tst/gplx/gfml/z811_useCase_GfmlIoSql_tst.java index 3a20accc2..2cf854a05 100644 --- a/110_gfml/tst/gplx/gfml/z811_useCase_GfmlIoSql_tst.java +++ b/110_gfml/tst/gplx/gfml/z811_useCase_GfmlIoSql_tst.java @@ -18,13 +18,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. package gplx.gfml; import gplx.*; import org.junit.*; public class z811_useCase_GfmlIoSql_tst { - @Test public void Basic() { + @Test public void Basic() { tst_Doc("fld1=val1", nde_("fld").Atrs_add_("word", "fld1").Atrs_add_("op", "=").Atrs_add_("word", "val1")); tst_Doc("fld1 = val1", nde_("fld").Atrs_add_("word", "fld1").Atrs_add_("op", "=").Atrs_add_("word", "val1")); tst_Doc("fld1='val1'", nde_("fld").Atrs_add_("word", "fld1").Atrs_add_("op", "=").Atrs_add_("word", "val1")); tst_Doc("fld1='val 1'", nde_("fld").Atrs_add_("word", "fld1").Atrs_add_("op", "=").Atrs_add_("word", "val 1")); } - @Test public void Basic2() { + @Test public void Basic2() { tst_Doc("1=1 OR 2=2", nde_("fld").Atrs_add_("word", "1").Atrs_add_("op", "=").Atrs_add_("word", "1") .Atrs_add_("word", "OR") .Atrs_add_("word", "2").Atrs_add_("op", "=").Atrs_add_("word", "2") diff --git a/140_dbs/src_300_sqlDbs/gplx/dbs/Sqlite_engine_.java b/140_dbs/src_300_sqlDbs/gplx/dbs/Sqlite_engine_.java index da53af3f1..85ff2e065 100644 --- a/140_dbs/src_300_sqlDbs/gplx/dbs/Sqlite_engine_.java +++ b/140_dbs/src_300_sqlDbs/gplx/dbs/Sqlite_engine_.java @@ -59,11 +59,10 @@ public class Sqlite_engine_ { int len = idxs.length; p.Txn_mgr().Txn_end_all(); // commit any pending transactions for (int i = 0; i < len; i++) { - p.Txn_mgr().Txn_bgn_if_none(); String index = idxs[i].Xto_sql(); - usr_dlg.Prog_many("", "", "creating index: ~{0} ~{1}", file_id, index); + usr_dlg.Plog_many("", "", "creating index: ~{0} ~{1}", file_id, index); p.Exec_qry(Db_qry_sql.ddl_(index)); - p.Txn_mgr().Txn_end_all(); + usr_dlg.Log_many("", "", "index created: ~{0} ~{1}", file_id, index); } } public static Db_provider Provider_load_or_fail_(Io_url url) { diff --git a/140_dbs/xtn/gplx/dbs/SqliteDbMain.java b/140_dbs/xtn/gplx/dbs/SqliteDbMain.java index 0be7d0989..025c05b22 100644 --- a/140_dbs/xtn/gplx/dbs/SqliteDbMain.java +++ b/140_dbs/xtn/gplx/dbs/SqliteDbMain.java @@ -25,6 +25,7 @@ import java.sql.*; public class SqliteDbMain { public static void main(String[] args) throws Exception { SqliteDbMain main = new SqliteDbMain(); +// main.JdbcInit(args); // main.Read(); // main.Mass_upload(Io_url_.new_dir_("J:\\gplx\\xowl\\file\\all#meta\\en.wikipedia.org\\")); // main.CreateMany(20, 0); @@ -38,6 +39,15 @@ public class SqliteDbMain { '5719' '174' '5766' '173' */ + +// private void JdbcInit(String[] args) { +// try { +// Class.forName("SQLite.JDBCDriver"); +// } +// catch (Exception e) { +// ConsoleAdp._.WriteLine(e.getMessage()); +// } +// } private void CreateMany(int number, int base_val) { long time_bgn = Env_.TickCount(); Db_provider provider = Sqlite_engine_.Provider_load_or_make_(Io_url_.new_fil_("E:\\test.sqlite3")); diff --git a/150_gfui/src_200_ipt/gplx/gfui/IptCfg_tst.java b/150_gfui/src_200_ipt/gplx/gfui/IptCfg_tst.java index 47506a659..89ab70099 100644 --- a/150_gfui/src_200_ipt/gplx/gfui/IptCfg_tst.java +++ b/150_gfui/src_200_ipt/gplx/gfui/IptCfg_tst.java @@ -24,16 +24,16 @@ public class IptCfg_tst { cfg = new IptCfg_mok(); key = IptBndsOwner_mok.Invk_Reg; } IptBndsOwner_mok box; IptCfg_mok cfg; String key; - @Test public void Basic() { + @Test public void Basic() { cfg.run_GetOrDflt(box, key, IptKey_.A); box.tst_SendKey(IptKey_.A, 1); } - @Test public void Del() { + @Test public void Del() { cfg.run_GetOrDflt(box, key, IptKey_.A); box.IptBnds().Cfgs_delAll(); box.tst_SendKey(IptKey_.A, 0); } - @Test public void Change() { + @Test public void Change() { cfg.run_GetOrDflt(box, key, IptKey_.A); cfg.run_Set(key, IptKey_.B); box.tst_SendKey(IptKey_.B, 1); @@ -42,19 +42,19 @@ public class IptCfg_tst { box.tst_SendKey(IptKey_.C, 1); box.tst_SendKey(IptKey_.B, 0); } - @Test public void SetBeforeInit() { + @Test public void SetBeforeInit() { cfg.run_Set(key, IptKey_.B); cfg.run_GetOrDflt(box, key, IptKey_.A); box.tst_SendKey(IptKey_.B, 1); box.tst_SendKey(IptKey_.A, 0); } - @Test public void SetBeforeInit_msg() { + @Test public void SetBeforeInit_msg() { cfg.run_Set_msg(key, 2, IptKey_.B); cfg.run_GetOrDflt(box, key, IptKey_.A); // iptBnd exists; ignore Key_.A (and also msg=1) box.tst_SendKey(IptKey_.B, 2); box.tst_SendKey(IptKey_.A, 0); } - @Test public void Chained() { + @Test public void Chained() { cfg.run_GetOrDflt(box, key, IptKeyChain.parse_("key.ctrl+key.a,key.b")); cfg.run_Set(key, IptKey_.A); box.tst_SendKey(IptKey_.A, 1); diff --git a/150_gfui/tst/gplx/gfui/ClipboardAdp__tst.java b/150_gfui/tst/gplx/gfui/ClipboardAdp__tst.java index 24ff8a4cb..560b1a90d 100644 --- a/150_gfui/tst/gplx/gfui/ClipboardAdp__tst.java +++ b/150_gfui/tst/gplx/gfui/ClipboardAdp__tst.java @@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. package gplx.gfui; import gplx.*; import org.junit.*; public class ClipboardAdp__tst { - @Test public void Basic() { + @Test public void Basic() { ClipboardAdp_.SetText("test"); Tfds.Eq(true, ClipboardAdp_.IsText()); Tfds.Eq("test", ClipboardAdp_.GetText()); diff --git a/150_gfui/tst/gplx/gfui/GfuiBorderMgr_tst.java b/150_gfui/tst/gplx/gfui/GfuiBorderMgr_tst.java index fe699713e..48714f7e7 100644 --- a/150_gfui/tst/gplx/gfui/GfuiBorderMgr_tst.java +++ b/150_gfui/tst/gplx/gfui/GfuiBorderMgr_tst.java @@ -21,20 +21,20 @@ public class GfuiBorderMgr_tst { @Before public void setup() { borderMgr = GfuiBorderMgr.new_(); } - @Test public void NullToEdge() { // all null -> one edge + @Test public void NullToEdge() { // all null -> one edge tst_Eq(borderMgr, null, null, null, null, null); borderMgr.Top_(red); tst_Eq(borderMgr, null, red, null, null, null); } - @Test public void EdgeToAll() { // one edge -> all edge + @Test public void EdgeToAll() { // one edge -> all edge borderMgr.Top_(red); tst_Eq(borderMgr, null, red, null, null, null); borderMgr.All_(black); tst_Eq(borderMgr, black, null, null, null, null); } - @Test public void AllToEdge() { // all edge -> one new; three old + @Test public void AllToEdge() { // all edge -> one new; three old borderMgr.All_(red); tst_Eq(borderMgr, red, null, null, null, null); diff --git a/150_gfui/tst/gplx/gfui/GfuiClickKeyMgr_tst.java b/150_gfui/tst/gplx/gfui/GfuiClickKeyMgr_tst.java index 9b8d37b92..834f0267b 100644 --- a/150_gfui/tst/gplx/gfui/GfuiClickKeyMgr_tst.java +++ b/150_gfui/tst/gplx/gfui/GfuiClickKeyMgr_tst.java @@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. package gplx.gfui; import gplx.*; import org.junit.*; public class GfuiClickKeyMgr_tst { - @Test public void ExtractKeyFromText() { + @Test public void ExtractKeyFromText() { tst_ExtractKey("&click", IptKey_.C); tst_ExtractKey("&", IptKey_.None); tst_ExtractKey("trailing &", IptKey_.None); diff --git a/150_gfui/tst/gplx/gfui/GfuiFocusOrderer_tst.java b/150_gfui/tst/gplx/gfui/GfuiFocusOrderer_tst.java index 6b05257dc..b0beab0b5 100644 --- a/150_gfui/tst/gplx/gfui/GfuiFocusOrderer_tst.java +++ b/150_gfui/tst/gplx/gfui/GfuiFocusOrderer_tst.java @@ -22,28 +22,28 @@ public class GfuiFocusOrderer_tst { owner = GfuiElem_.new_(); list = ListAdp_.new_(); // list of all controls } - @Test public void Horizontal() { + @Test public void Horizontal() { ini_Subs(owner, list, xy_(40, 0), xy_(20, 0), xy_(0, 0)); tst_FocusIndxs(owner, list, 0, 1, 2); GfuiFocusOrderer.OrderByX(owner); tst_FocusIndxs(owner, list, 2, 1, 0); } - @Test public void Vertical() { + @Test public void Vertical() { ini_Subs(owner, list, xy_(0, 40), xy_(0, 20), xy_(0, 0)); tst_FocusIndxs(owner, list, 0, 1, 2); GfuiFocusOrderer.OrderByY(owner); tst_FocusIndxs(owner, list, 2, 1, 0); } - @Test public void Grid() { + @Test public void Grid() { ini_Subs(owner, list, xy_(20, 20), xy_(0, 20), xy_(20, 0), xy_(0, 0)); tst_FocusIndxs(owner, list, 0, 1, 2, 3); GfuiFocusOrderer.OrderByX(owner); tst_FocusIndxs(owner, list, 3, 2, 1, 0); } - @Test public void Deep() { + @Test public void Deep() { ini_Subs(owner, list, xy_(20, 0), xy_(0, 0)); GfuiElem sub0 = sub_(owner, 0), sub1 = sub_(owner, 1); ini_Subs(sub0, list, xy_(20, 0), xy_(0, 0)); @@ -53,7 +53,7 @@ public class GfuiFocusOrderer_tst { GfuiFocusOrderer.OrderByX(owner); tst_FocusIndxs(owner, list, 3, 0, 5, 4, 2, 1); } - @Test public void Manusl() { + @Test public void Manusl() { ini_Subs(owner, list, xy_(0, 0), xy_(20, 0)); tst_FocusIndxs(owner, list, 0, 1); diff --git a/150_gfui/tst/gplx/gfui/GfuiMoveElemBtn_tst.java b/150_gfui/tst/gplx/gfui/GfuiMoveElemBtn_tst.java index 3927c1f37..597ff1e0d 100644 --- a/150_gfui/tst/gplx/gfui/GfuiMoveElemBtn_tst.java +++ b/150_gfui/tst/gplx/gfui/GfuiMoveElemBtn_tst.java @@ -24,7 +24,7 @@ public class GfuiMoveElemBtn_tst { GfuiMoveElemBnd bnd = GfuiMoveElemBnd.new_(); bnd.TargetElem_set(form); moveBtn.IptBnds().Add(bnd); } - @Test public void Basic() { + @Test public void Basic() { Tfds.Eq(form.X(), 0); IptEventMgr.ExecKeyDown(moveBtn, IptEvtDataKey.test_(MoveRightArg())); Tfds.Eq(form.X(), 10); diff --git a/150_gfui/tst/gplx/gfui/IptArg_parser_tst.java b/150_gfui/tst/gplx/gfui/IptArg_parser_tst.java index db8255320..677d212a5 100644 --- a/150_gfui/tst/gplx/gfui/IptArg_parser_tst.java +++ b/150_gfui/tst/gplx/gfui/IptArg_parser_tst.java @@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. package gplx.gfui; import gplx.*; import org.junit.*; public class IptArg_parser_tst { - @Test public void KeyBasic() { + @Test public void KeyBasic() { tst_parse_Key_("key.a", IptKey_.A); tst_parse_Key_("key.d0", IptKey_.D0); tst_parse_Key_("key.semicolon", IptKey_.Semicolon); @@ -27,34 +27,34 @@ public class IptArg_parser_tst { tst_parse_Key_("key.ctrl", IptKey_.Ctrl); tst_parse_Key_("key.none", IptKey_.None); } void tst_parse_Key_(String raw, IptKey expd) {Tfds.Eq(expd.Val(), IptKey_.parse_(raw).Val());} - @Test public void KbdCmdModifiers() { + @Test public void KbdCmdModifiers() { tst_parse_Key_("key.ctrl+key.enter", IptKey_.Ctrl.Add(IptKey_.Enter)); tst_parse_Key_("key.alt+key.escape", IptKey_.Alt.Add(IptKey_.Escape)); tst_parse_Key_("key.shift+key.f1", IptKey_.Shift.Add(IptKey_.F1)); tst_parse_Key_("key.shift+key.ctrl", IptKey_.Ctrl.Add(IptKey_.Shift)); tst_parse_Key_("key.ctrl+key.alt+key.slash", IptKey_.Ctrl.Add(IptKey_.Alt).Add(IptKey_.Slash)); } - @Test public void KeyWhitespace() { + @Test public void KeyWhitespace() { tst_parse_Key_("key.ctrl + key.alt + key.slash", IptKey_.Ctrl.Add(IptKey_.Alt).Add(IptKey_.Slash)); } - @Test public void MouseBtn() { + @Test public void MouseBtn() { tst_parse_MouseBtn_("mouse.left", IptMouseBtn_.Left); tst_parse_MouseBtn_("mouse.right", IptMouseBtn_.Right); tst_parse_MouseBtn_("mouse.middle", IptMouseBtn_.Middle); tst_parse_MouseBtn_("mouse.x1", IptMouseBtn_.X1); tst_parse_MouseBtn_("mouse.x2", IptMouseBtn_.X2); } void tst_parse_MouseBtn_(String raw, IptMouseBtn expd) {Tfds.Eq(expd, IptMouseBtn_.parse_(raw));} - @Test public void MouseWheel() { + @Test public void MouseWheel() { tst_parse_MouseWheel_("wheel.up", IptMouseWheel_.Up); tst_parse_MouseWheel_("wheel.down", IptMouseWheel_.Down); } void tst_parse_MouseWheel_(String raw, IptMouseWheel expd) {Tfds.Eq(expd, IptMouseWheel_.parse_(raw));} - @Test public void Mod() { + @Test public void Mod() { tst_parse_("mod.c", IptKey_.Ctrl); tst_parse_("mod.cs", IptKey_.add_(IptKey_.Ctrl, IptKey_.Shift)); tst_parse_("mod.cas", IptKey_.add_(IptKey_.Ctrl, IptKey_.Alt, IptKey_.Shift)); tst_parse_("mod.c+key.c", IptKey_.add_(IptKey_.Ctrl, IptKey_.C)); } - @Test public void All() { + @Test public void All() { tst_parse_("key.c", IptKey_.C); tst_parse_("mouse.left", IptMouseBtn_.Left); tst_parse_("wheel.up", IptMouseWheel_.Up); diff --git a/150_gfui/tst/gplx/gfui/IptEventType_tst.java b/150_gfui/tst/gplx/gfui/IptEventType_tst.java index 59656ed9f..a40c5d84b 100644 --- a/150_gfui/tst/gplx/gfui/IptEventType_tst.java +++ b/150_gfui/tst/gplx/gfui/IptEventType_tst.java @@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. package gplx.gfui; import gplx.*; import org.junit.*; public class IptEventType_tst { - @Test public void Has() { + @Test public void Has() { tst_Has(IptEventType_.KeyDown, IptEventType_.KeyDown, true); tst_Has(IptEventType_.KeyUp, IptEventType_.KeyDown, false); tst_Has(IptEventType_.None, IptEventType_.KeyDown, false); @@ -27,7 +27,7 @@ public class IptEventType_tst { tst_Has(IptEventType_.MouseDown.Add(IptEventType_.MouseUp), IptEventType_.KeyDown, false); tst_Has(IptEventType_.KeyDown.Add(IptEventType_.KeyUp), IptEventType_.None, false); } void tst_Has(IptEventType val, IptEventType find, boolean expd) {Tfds.Eq(expd, IptEventType_.Has(val, find));} - @Test public void add_() { + @Test public void add_() { tst_add(IptEventType_.KeyDown, IptEventType_.KeyDown, IptEventType_.KeyDown.Val()); tst_add(IptEventType_.KeyDown, IptEventType_.KeyUp, IptEventType_.KeyDown.Val() + IptEventType_.KeyUp.Val()); } void tst_add(IptEventType lhs, IptEventType rhs, int expd) {Tfds.Eq(expd, IptEventType_.add_(lhs, rhs).Val());} diff --git a/150_gfui/tst/gplx/gfui/ScreenAdp_tst.java b/150_gfui/tst/gplx/gfui/ScreenAdp_tst.java index f45e15ccc..7c05245a9 100644 --- a/150_gfui/tst/gplx/gfui/ScreenAdp_tst.java +++ b/150_gfui/tst/gplx/gfui/ScreenAdp_tst.java @@ -18,11 +18,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. package gplx.gfui; import gplx.*; import org.junit.*; public class ScreenAdp_tst { - @Test public void parse_() { + @Test public void parse_() { ScreenAdp actl = ScreenAdp_.parse_("{screen{0}"); Tfds.Eq(0, actl.Index()); } - @Test public void opposite_() { + @Test public void opposite_() { ScreenAdp actl = ScreenAdp_.from_point_(PointAdp_.new_(2000, 2000)); Tfds.Eq(0, actl.Index()); } diff --git a/150_gfui/tst/gplx/gfui/TabBox_tst.java b/150_gfui/tst/gplx/gfui/TabBox_tst.java index ee19e1853..931e18e2b 100644 --- a/150_gfui/tst/gplx/gfui/TabBox_tst.java +++ b/150_gfui/tst/gplx/gfui/TabBox_tst.java @@ -21,11 +21,11 @@ public class TabBox_tst { // @Before public void setup() { // fx = TabBoxFxt.new_(); // } TabBoxFxt fx; - @Test public void Add() { + @Test public void Add() { // fx.Make(1).tst_Selected("0").FetchBtnAt(0).tst_X(0); // fx.Make(3).tst_Selected("2").FetchBtnAt(2).tst_X(160); } -// @Test public void DelAt() { +// @Test public void DelAt() { // fx.Make(2).DelAt(1).tst_Btns("0"); // fx.Make(2).DelAt(0).tst_Btns("1"); // fx.Make(3).DelAt(0).tst_Btns("1", "2"); @@ -36,17 +36,17 @@ public class TabBox_tst { // fx.Make(3).Select(1).DelAt(0).tst_Selected("1"); // 0 deleted; 1 still remains active (but will have idx of 0 // fx.Make(3).Select(2).DelAt(2).tst_Selected("1"); // 2 deleted; 1 selected // } -// @Test public void Selected_byAdd() { +// @Test public void Selected_byAdd() { // fx.Make(2).Select(0).tst_Selected("0").Select(1).tst_Selected("1"); // } -// @Test public void Selected_byBtn() { +// @Test public void Selected_byBtn() { // fx.Make(2).tst_Selected("1"); // // GfuiBtn btn = fx.TabBox().SubBtnArea().FetchAt(0); // btn.Click(); // fx.tst_Selected("0"); // } -// @Test public void ReorderTab() { +// @Test public void ReorderTab() { // fx.Make(3).Reorder(0, -1).tst_Raised(false); // fx.Make(3).Reorder(2, 1).tst_Raised(false); // fx.Make(3).Reorder(0, 1).tst_Btns("1", "0", "2").tst_Raised(true).tst_FocusOrder(); diff --git a/400_xowa/src/gplx/srls/dsvs/Dsv_wkr_base.java b/400_xowa/src/gplx/srls/dsvs/Dsv_wkr_base.java index 26766a3fb..631ddbca9 100644 --- a/400_xowa/src/gplx/srls/dsvs/Dsv_wkr_base.java +++ b/400_xowa/src/gplx/srls/dsvs/Dsv_wkr_base.java @@ -24,10 +24,12 @@ public abstract class Dsv_wkr_base implements GfoInvkAble { public void Load_by_bry(byte[] src) { Dsv_tbl_parser tbl_parser = new Dsv_tbl_parser(); // NOTE: this proc should only be called once, so don't bother caching tbl_parser tbl_parser.Init(this, this.Fld_parsers()); + Load_by_bry_bgn(); tbl_parser.Parse(src); tbl_parser.Rls(); Load_by_bry_end(); } + @gplx.Virtual public void Load_by_bry_bgn() {} @gplx.Virtual public void Load_by_bry_end() {} public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { if (ctx.Match(k, Invk_load_by_str)) Load_by_bry(m.ReadBry("v")); diff --git a/400_xowa/src/gplx/xowa/Xoa_app_.java b/400_xowa/src/gplx/xowa/Xoa_app_.java index 76cb7910b..0a1021d92 100644 --- a/400_xowa/src/gplx/xowa/Xoa_app_.java +++ b/400_xowa/src/gplx/xowa/Xoa_app_.java @@ -23,7 +23,7 @@ public class Xoa_app_ { boot_mgr.Run(args); } public static final String Name = "xowa"; - public static final String Version = "1.7.4.1"; + public static final String Version = "1.8.1.1"; public static String Build_date = "2012-12-30 00:00:00"; public static String Op_sys; public static String User_agent = ""; @@ -35,7 +35,7 @@ public class Xoa_app_ { rv.Log_wtr().Queue_enabled_(true); return rv; } - public static final byte Mode_console = 0, Mode_gui = 1; + public static final byte Mode_console = 0, Mode_gui = 1, Mode_http = 2; } class Xoa_app_boot_mgr { private Gfo_usr_dlg usr_dlg; private Gfo_log_wtr log_wtr; private String chkpoint = "null"; @@ -144,6 +144,7 @@ class Xoa_app_boot_mgr { app.Gui_wtr().Log_wtr_(app.Log_wtr()); // NOTE: log_wtr must be set for cmd-line (else process will fail); // run gfs + gplx.xowa.users.prefs.Prefs_rename_mgr._.Check(app.User().Fsys_mgr().App_data_cfg_user_fil()); try {app.Gfs_mgr().Run_url(cmd_file); chkpoint = "run_url";} catch (Exception e) { usr_dlg.Warn_many("", "", "script file failed: ~{0} ~{1} ~{2}", chkpoint, cmd_file.Raw(), Err_.Message_gplx(e)); @@ -155,8 +156,10 @@ class Xoa_app_boot_mgr { app.Launch(); chkpoint = "launch"; if (String_.Eq(app_mode, "server")) app.Tcp_server().Run(); - else if (String_.Eq(app_mode, "http_server")) + else if (String_.Eq(app_mode, "http_server")) { + app.Mode_(Xoa_app_.Mode_http); app.Http_server().Run(); + } else { if (cmd_text != null) ConsoleAdp._.WriteLine_utf8(Object_.Xto_str_strict_or_empty(app.Gfs_mgr().Run_str(cmd_text))); diff --git a/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_html.java b/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_html.java index 97cef9c7f..83c74848d 100644 --- a/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_html.java +++ b/400_xowa/src/gplx/xowa/apis/xowa/Xoapi_html.java @@ -25,11 +25,13 @@ public class Xoapi_html implements GfoInvkAble { public Xoapi_tidy Tidy() {return tidy;} private Xoapi_tidy tidy = new Xoapi_tidy(); public Xoapi_modules Modules() {return modules;} private Xoapi_modules modules = new Xoapi_modules(); public Xoapi_skins Skins() {return skins;} private Xoapi_skins skins = new Xoapi_skins(); + public Xoapi_page Page() {return page;} private Xoapi_page page = new Xoapi_page(); public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { if (ctx.Match(k, Invk_tidy)) return tidy; else if (ctx.Match(k, Invk_modules)) return modules; else if (ctx.Match(k, Invk_skins)) return skins; + else if (ctx.Match(k, Invk_page)) return page; else return GfoInvkAble_.Rv_unhandled; } - private static final String Invk_tidy = "tidy", Invk_modules = "modules", Invk_skins = "skins"; + private static final String Invk_tidy = "tidy", Invk_modules = "modules", Invk_skins = "skins", Invk_page = "page"; } diff --git a/400_xowa/src/gplx/xowa/apis/xowa/html/Xoapi_page.java b/400_xowa/src/gplx/xowa/apis/xowa/html/Xoapi_page.java new file mode 100644 index 000000000..f262f9578 --- /dev/null +++ b/400_xowa/src/gplx/xowa/apis/xowa/html/Xoapi_page.java @@ -0,0 +1,27 @@ +/* +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.apis.xowa.html; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; import gplx.xowa.apis.xowa.*; +import gplx.core.btries.*; +public class Xoapi_page implements GfoInvkAble { + public Xoapi_toggle_mgr Toggle_mgr() {return toggle_mgr;} private Xoapi_toggle_mgr toggle_mgr = new Xoapi_toggle_mgr(); + public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { + if (ctx.Match(k, Invk_toggles)) return toggle_mgr; + else return GfoInvkAble_.Rv_unhandled; + } + private static final String Invk_toggles = "toggles"; +} diff --git a/400_xowa/src/gplx/xowa/apis/xowa/html/Xoapi_toggle_itm.java b/400_xowa/src/gplx/xowa/apis/xowa/html/Xoapi_toggle_itm.java new file mode 100644 index 000000000..2770b4488 --- /dev/null +++ b/400_xowa/src/gplx/xowa/apis/xowa/html/Xoapi_toggle_itm.java @@ -0,0 +1,50 @@ +/* +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.apis.xowa.html; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; import gplx.xowa.apis.xowa.*; +public class Xoapi_toggle_itm implements GfoInvkAble { + public Xoapi_toggle_itm(byte[] key_bry) {this.key_bry = key_bry;} + public byte[] Key_bry() {return key_bry;} private byte[] key_bry; + public byte[] Icon_src() {return icon_src;} private byte[] icon_src; + public byte[] Icon_title() {return icon_title;} private byte[] icon_title; + public byte[] Elem_display() {return elem_display;} private byte[] elem_display; + public boolean Visible() {return visible;} private boolean visible; + public Xoapi_toggle_itm Init(Xow_wiki wiki) { + if (Img_src_y == null) { + Io_url img_dir = wiki.App().User().Fsys_mgr().App_img_dir().GenSubDir_nest("window", "portal"); + Img_src_y = img_dir.GenSubFil("twisty_down.png").To_http_file_bry(); + Img_src_n = img_dir.GenSubFil("twisty_right.png").To_http_file_bry(); + } + icon_src = visible ? Img_src_y : Img_src_n; + byte[] img_title_msg = visible ? Img_title_msg_y : Img_title_msg_n; + icon_title = wiki.Msg_mgr().Val_by_key_obj(img_title_msg); + elem_display = visible ? Img_display_y : Img_display_n; + return this; + } + private static byte[] Img_src_y, Img_src_n; + private static final byte[] + Img_title_msg_y = Bry_.new_ascii_("hide"), Img_title_msg_n = Bry_.new_ascii_("show") + , Img_display_y = Bry_.new_ascii_("display:;"), Img_display_n = Bry_.new_ascii_("display:none;") + ; + public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { + if (ctx.Match(k, Invk_visible)) return Yn.Xto_str(visible); + else if (ctx.Match(k, Invk_visible_)) visible = m.ReadYn("v"); + else return GfoInvkAble_.Rv_unhandled; + return this; + } + private static final String Invk_visible = "visible", Invk_visible_ = "visible_"; +} diff --git a/400_xowa/src/gplx/xowa/apis/xowa/html/Xoapi_toggle_mgr.java b/400_xowa/src/gplx/xowa/apis/xowa/html/Xoapi_toggle_mgr.java new file mode 100644 index 000000000..b4d078e6b --- /dev/null +++ b/400_xowa/src/gplx/xowa/apis/xowa/html/Xoapi_toggle_mgr.java @@ -0,0 +1,51 @@ +/* +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.apis.xowa.html; import gplx.*; import gplx.xowa.*; import gplx.xowa.apis.*; import gplx.xowa.apis.xowa.*; +import gplx.xowa.cfgs.*; +public class Xoapi_toggle_mgr implements GfoInvkAble { + private Hash_adp_bry itms = Hash_adp_bry.cs_(); + public Xoapi_toggle_mgr() { + itm_wikidata_langs = itms_add(itms, Key_wikidata_langs); + itm_offline_wikis = itms_add(itms, Key_offline_wikis); + } + public Xoapi_toggle_itm Itm_wikidata_langs() {return itm_wikidata_langs;} private Xoapi_toggle_itm itm_wikidata_langs; + public Xoapi_toggle_itm Itm_offline_wikis() {return itm_offline_wikis;} private Xoapi_toggle_itm itm_offline_wikis; + public Xoapi_toggle_itm Get(byte[] key) {return (Xoapi_toggle_itm)itms.Get_by_bry(key);} + public void Save(Xoa_cfg_mgr cfg_mgr) { + Save_itm(cfg_mgr, itm_wikidata_langs, itm_offline_wikis); + } + public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { + if (ctx.Match(k, Invk_get)) return this.Get(m.ReadBry("key")); + else return GfoInvkAble_.Rv_unhandled; + } + private static final String Invk_get = "get"; + private static final String Key_wikidata_langs = "wikidata-langs", Key_offline_wikis = "offline-wikis"; + private static Xoapi_toggle_itm itms_add(Hash_adp_bry itms, String name_str) { + byte[] name_bry = Bry_.new_utf8_(name_str); + Xoapi_toggle_itm rv = new Xoapi_toggle_itm(name_bry); + itms.Add(name_bry, rv); + return rv; + } + private static void Save_itm(Xoa_cfg_mgr cfg_mgr, Xoapi_toggle_itm... itms) { + int itms_len = itms.length; + for (int i = 0; i < itms_len; ++i) { + Xoapi_toggle_itm itm = itms[i]; + cfg_mgr.Set_by_app("xowa.api.html.page.toggles.get('" + String_.new_utf8_(itm.Key_bry()) + "').visible", Yn.Xto_str(itm.Visible())); + } + } +} diff --git a/400_xowa/src/gplx/xowa/bldrs/Xob_cmd_mgr.java b/400_xowa/src/gplx/xowa/bldrs/Xob_cmd_mgr.java index 058f4014f..2227085a4 100644 --- a/400_xowa/src/gplx/xowa/bldrs/Xob_cmd_mgr.java +++ b/400_xowa/src/gplx/xowa/bldrs/Xob_cmd_mgr.java @@ -58,6 +58,7 @@ public class Xob_cmd_mgr implements GfoInvkAble { else if (String_.Eq(cmd_key, Xof_wiki_orig_cmd.KEY_oimg)) return Add(new Xof_wiki_orig_cmd(bldr, wiki)); else if (String_.Eq(cmd_key, Xob_download_wkr.KEY_oimg)) return Add(new Xob_download_wkr(bldr, wiki)); else if (String_.Eq(cmd_key, Xob_page_regy_cmd.KEY_oimg)) return Add(new Xob_page_regy_cmd(bldr, wiki)); + else if (String_.Eq(cmd_key, Xob_cmd_exec_sql.KEY)) return Add(new Xob_cmd_exec_sql(bldr, wiki)); else if (String_.Eq(cmd_key, Xob_wiki_redirect_cmd.KEY_redirect)) return Add(new Xob_wiki_redirect_cmd(bldr, wiki)); else if (String_.Eq(cmd_key, Xob_wiki_image_sql.KEY)) return Add(new Xob_wiki_image_sql(bldr, wiki)); diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Db_idx_mode.java b/400_xowa/src/gplx/xowa/bldrs/imports/Db_idx_mode.java new file mode 100644 index 000000000..6b4795b77 --- /dev/null +++ b/400_xowa/src/gplx/xowa/bldrs/imports/Db_idx_mode.java @@ -0,0 +1,38 @@ +/* +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.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; +public class Db_idx_mode { + private int tid; + Db_idx_mode(int tid) {this.tid = tid;} + public boolean Tid_is_bgn() {return tid == Tid_bgn;} + public boolean Tid_is_end() {return tid == Tid_end;} + public boolean Tid_is_skip() {return tid == Tid_skip;} + private static final int Tid_skip = 0, Tid_bgn = 1, Tid_end = 2; + private static final String Key_skip = "skip", Key_bgn = "bgn", Key_end = "end"; + public static final Db_idx_mode + Itm_skip = new Db_idx_mode(Tid_skip) + , Itm_bgn = new Db_idx_mode(Tid_bgn) + , Itm_end = new Db_idx_mode(Tid_end) + ; + public static Db_idx_mode Xto_itm(String key) { + if (String_.Eq(key, Key_skip)) return Itm_skip; + else if (String_.Eq(key, Key_bgn)) return Itm_bgn; + else if (String_.Eq(key, Key_end)) return Itm_end; + else throw Err_.unhandled(key); + } +} diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_cmd_exec_sql.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_cmd_exec_sql.java new file mode 100644 index 000000000..659bd176b --- /dev/null +++ b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_cmd_exec_sql.java @@ -0,0 +1,43 @@ +/* +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.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; +import gplx.xowa.dbs.*; +public class Xob_cmd_exec_sql implements Xob_cmd { + private Xow_wiki wiki; private int file_idx = -1; private String sql; + public Xob_cmd_exec_sql(Xob_bldr bldr, Xow_wiki wiki) {this.wiki = wiki;} + public String Cmd_key() {return KEY;} public static final String KEY = "import.sql.exec_sql"; + public void Cmd_ini(Xob_bldr bldr) {} + public void Cmd_bgn(Xob_bldr bldr) { + Xoa_app app = wiki.App(); + wiki.Init_assert(); // force load; needed to pick up MediaWiki ns for MediaWiki:mainpage + Xodb_mgr_sql db_mgr = wiki.Db_mgr_as_sql(); + Xodb_fsys_mgr fsys_mgr = db_mgr.Fsys_mgr(); + Xodb_file file = fsys_mgr.Get_by_db_idx(file_idx); + app.Usr_dlg().Plog_many("", "", "exec_sql: running sql; file_idx=~{0} sql=~{1}", file_idx, sql); + file.Provider().Exec_sql(sql); + } + public void Cmd_run() {} + public void Cmd_end() {} + public void Cmd_print() {} + public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { + if (ctx.Match(k, Invk_file_idx_)) file_idx = m.ReadInt("v"); + else if (ctx.Match(k, Invk_sql_)) sql = m.ReadStr("v"); + return this; + } + private static final String Invk_file_idx_ = "file_idx_", Invk_sql_ = "sql_"; +} diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_init_base.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_init_base.java index f3351920a..5e9b8d609 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_init_base.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_init_base.java @@ -35,7 +35,7 @@ public abstract class Xob_init_base implements Xob_cmd, GfoInvkAble { this.Cmd_run_end(wiki); // save site info } public void Cmd_end() { - wiki.App().Gui_mgr().Html_mgr().Portal_mgr().Wikis().Itms_refresh(); // dirty wiki list so that next refresh will load itm + wiki.App().Gui_mgr().Html_mgr().Portal_mgr().Wikis().Itms_reset(); // dirty wiki list so that next refresh will load itm if (wiki.App().Setup_mgr().Dump_mgr().Css_wiki_update()) { Io_url url = wiki.App().User().Fsys_mgr().Wiki_html_dir(wiki.Domain_str()).GenSubFil(Xoa_css_extractor.Css_wiki_name); usr_dlg.Log_many("", "", "deleting css: ~{0}", url.Raw()); diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_page_sql.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_page_sql.java index b72cf65cb..32add0142 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_page_sql.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_page_sql.java @@ -18,13 +18,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.dbs.tbls.*; import gplx.ios.*; public class Xob_page_sql extends Xob_itm_basic_base implements Xobd_wkr, GfoInvkAble { + private Db_idx_mode idx_mode = Db_idx_mode.Itm_end; private Xop_redirect_mgr redirect_mgr; private Io_stream_zip_mgr zip_mgr; private byte data_storage_format; private Xodb_mgr_sql db_mgr; private Xodb_fsys_mgr fsys_mgr; private Db_provider page_provider; private Db_stmt page_stmt; private Xob_text_stmts_mgr text_stmts_mgr; private int page_count_all, page_count_main = 0; private int txn_commit_interval = 100000; // 100 k private DateAdp modified_latest = DateAdp_.MinValue; public Xob_page_sql(Xob_bldr bldr, Xow_wiki wiki) {this.Cmd_ctor(bldr, wiki);} public String Wkr_key() {return KEY;} public static final String KEY = "import.sql.page"; - public void Wkr_bgn(Xob_bldr bldr) { + public void Wkr_bgn(Xob_bldr bldr) { // init local variables Xoa_app app = wiki.App(); app.Bldr().Parser().Trie_tab_del_(); // disable swapping for \t @@ -40,6 +41,7 @@ public class Xob_page_sql extends Xob_itm_basic_base implements Xobd_wkr, GfoInv page_stmt = db_mgr.Tbl_page().Insert_stmt(page_provider); page_provider.Txn_mgr().Txn_bgn_if_none(); text_stmts_mgr = new Xob_text_stmts_mgr(db_mgr, fsys_mgr); + if (idx_mode.Tid_is_bgn()) Idx_create(); } public void Wkr_run(Xodb_page page) { int page_id = page.Id(); @@ -69,25 +71,33 @@ public class Xob_page_sql extends Xob_itm_basic_base implements Xobd_wkr, GfoInv if (page_count_all % txn_commit_interval == 0) text_stmt.Provider().Txn_mgr().Txn_end_all_bgn_if_none(); } public void Wkr_end() { + usr_dlg.Log_many("", "", "import.page: insert done; committing pages; pages=~{0}", page_count_all); page_provider.Txn_mgr().Txn_end_all(); page_stmt.Rls(); text_stmts_mgr.Rls(); + usr_dlg.Log_many("", "", "import.page: updating core stats"); Xow_ns_mgr ns_mgr = wiki.Ns_mgr(); db_mgr.Tbl_site_stats().Update(page_count_main, page_count_all, ns_mgr.Ns_file().Count()); // save page stats db_mgr.Tbl_xowa_ns().Insert(ns_mgr); // save ns db_mgr.Tbl_xowa_db().Commit_all(page_provider, db_mgr.Fsys_mgr().Ary()); // save dbs; note that dbs can be saved again later db_mgr.Tbl_xowa_cfg().Insert_str(Xodb_mgr_sql.Grp_wiki_init, "props.modified_latest", modified_latest.XtoStr_fmt(DateAdp_.Fmt_iso8561_date_time)); - fsys_mgr.Index_create(usr_dlg, Byte_.Ary(Xodb_file_tid_.Tid_core, Xodb_file_tid_.Tid_text), Index_page_title, Index_page_random); + if (idx_mode.Tid_is_end()) Idx_create(); + } + private void Idx_create() { + fsys_mgr.Index_create(usr_dlg, Byte_.Ary(Xodb_file_tid_.Tid_core, Xodb_file_tid_.Tid_text), Idx_page_title, Idx_page_random); } @Override public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { if (ctx.Match(k, Invk_txn_commit_interval_)) txn_commit_interval = m.ReadInt("v"); - return super.Invk(ctx, ikey, k, m); - } private static final String Invk_txn_commit_interval_ = "txn_commit_interval_"; + else if (ctx.Match(k, Invk_idx_mode_)) idx_mode = Db_idx_mode.Xto_itm(m.ReadStr("v")); + else return super.Invk(ctx, ikey, k, m); + return this; + } + private static final String Invk_txn_commit_interval_ = "txn_commit_interval_", Invk_idx_mode_ = "idx_mode_"; public void Wkr_ini(Xob_bldr bldr) {} public void Wkr_print() {} - private static final Db_idx_itm - Index_page_title = Db_idx_itm.sql_("CREATE UNIQUE INDEX IF NOT EXISTS page__title ON page (page_namespace, page_title, page_id, page_len, page_is_redirect);") // PERF:page_id for general queries; PERF: page_len for search_suggest; PREF:page_is_redirect for oimg - , Index_page_random = Db_idx_itm.sql_("CREATE UNIQUE INDEX IF NOT EXISTS page__name_random ON page (page_namespace, page_random_int);") + private static final Db_idx_itm + Idx_page_title = Db_idx_itm.sql_("CREATE UNIQUE INDEX IF NOT EXISTS page__title ON page (page_namespace, page_title, page_id, page_len, page_is_redirect);") // PERF:page_id for general queries; PERF: page_len for search_suggest; PREF:page_is_redirect for oimg + , Idx_page_random = Db_idx_itm.sql_("CREATE INDEX IF NOT EXISTS page__name_random ON page (page_namespace, page_random_int);") ; } class Xob_text_stmts_mgr { diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_page_sql_tst.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_page_sql_tst.java index 34dd80499..170303748 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_page_sql_tst.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_page_sql_tst.java @@ -18,9 +18,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. package gplx.xowa.bldrs.imports; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import org.junit.*; import gplx.dbs.*; import gplx.xowa.specials.search.*; import gplx.xowa.bldrs.imports.ctgs.*; public class Xob_page_sql_tst { - @Before public void init() {fxt.Ctor_fsys();} Db_mgr_fxt fxt = new Db_mgr_fxt(); - @After public void term() {fxt.Rls();} + @Before public void init() {if (Xoa_test_.Db_skip()) return; fxt.Ctor_fsys();} Db_mgr_fxt fxt = new Db_mgr_fxt(); + @After public void term() {if (Xoa_test_.Db_skip()) return; fxt.Rls();} @Test public void Basic() { + if (Xoa_test_.Db_skip()) return; fxt.Init_db_sqlite(); fxt.doc_ary_ ( fxt.doc_(2, "2013-06-03 01:23", "A", "text_a") diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_term_base.java b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_term_base.java index b7b38bdad..299295239 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/Xob_term_base.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/Xob_term_base.java @@ -26,7 +26,7 @@ public abstract class Xob_term_base implements Xob_cmd, GfoInvkAble { public void Cmd_run() {} public void Cmd_end() { Xoa_app app = wiki.App(); - app.Gui_mgr().Html_mgr().Portal_mgr().Wikis().Itms_refresh(); // NOTE: dirty wiki list so that next refresh will load itm + app.Gui_mgr().Html_mgr().Portal_mgr().Wikis().Itms_reset(); // NOTE: dirty wiki list so that next refresh will load itm app.Free_mem(false); // clear cache, else import will load new page with old items from cache; DATE:2013-11-21 wiki.Init_needed_(true);// flag init_needed prior to show; dir_info will show page_txt instead of page_gz; wiki.Init_assert(); // force load; needed to pick up MediaWiki ns for MediaWiki:mainpage diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_category_registry_sql_tst.java b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_category_registry_sql_tst.java index 9193ab81f..1d0db29d9 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_category_registry_sql_tst.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_category_registry_sql_tst.java @@ -18,8 +18,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. package gplx.xowa.bldrs.imports.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.imports.*; import org.junit.*; public class Xob_category_registry_sql_tst { - @Before public void init() {fxt.Clear();} private Xob_category_registry_sql_fxt fxt = new Xob_category_registry_sql_fxt(); + @Before public void init() {if (Xoa_test_.Db_skip()) return; fxt.Clear();} private Xob_category_registry_sql_fxt fxt = new Xob_category_registry_sql_fxt(); @Test public void Basic() { + if (Xoa_test_.Db_skip()) return; fxt.Init_page_insert(String_.Ary("Ctg3", "Ctg2", "Ctg1")); fxt.Exec_category_registry_cmd(); fxt.Test_ids(Int_.Ary(3, 2, 1)); // note that Ctg1 is page_id 3 diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_sql.java b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_sql.java index cf759ce81..a51004c20 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_sql.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_sql.java @@ -18,9 +18,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. package gplx.xowa.bldrs.imports.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.imports.*; import gplx.ios.*; public class Xob_categorylinks_sql extends Xob_categorylinks_base { + private Db_idx_mode idx_mode = Db_idx_mode.Itm_end; public Xob_categorylinks_sql(Xob_bldr bldr, Xow_wiki wiki) {this.Cmd_ctor(bldr, wiki); this.make_fil_len = Io_mgr.Len_mb;} @Override public String Cmd_key() {return KEY;} public static final String KEY = "import.sql.categorylinks"; - @Override public Io_sort_cmd Make_sort_cmd(Sql_file_parser sql_parser) {return new Xob_categorylinks_sql_make(sql_parser, wiki);} + @Override public Io_sort_cmd Make_sort_cmd(Sql_file_parser sql_parser) {return new Xob_categorylinks_sql_make(sql_parser, wiki, idx_mode);} public static final String Tbl_categorylinks = String_.Concat_lines_nl ( "CREATE TABLE `categorylinks` (" , " `cl_from` int(10) unsigned NOT NULL DEFAULT '0'," @@ -33,4 +34,10 @@ public class Xob_categorylinks_sql extends Xob_categorylinks_base { , " UNIQUE KEY `cl_from` (`cl_from`,`cl_to`)," , ");" ); + @Override public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { + if (ctx.Match(k, Invk_idx_mode_)) idx_mode = Db_idx_mode.Xto_itm(m.ReadStr("v")); + else return super.Invk(ctx, ikey, k, m); + return this; + } + private static final String Invk_idx_mode_ = "idx_mode_"; } diff --git a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_sql_make.java b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_sql_make.java index d45213770..ce72891d3 100644 --- a/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_sql_make.java +++ b/400_xowa/src/gplx/xowa/bldrs/imports/ctgs/Xob_categorylinks_sql_make.java @@ -18,7 +18,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. package gplx.xowa.bldrs.imports.ctgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.imports.*; import gplx.core.flds.*; import gplx.ios.*; import gplx.dbs.*; import gplx.xowa.dbs.*; import gplx.xowa.ctgs.*; public class Xob_categorylinks_sql_make implements Io_make_cmd { - public Xob_categorylinks_sql_make(Sql_file_parser sql_parser, Xow_wiki wiki) {this.wiki = wiki; this.sql_parser = sql_parser;} private Xow_wiki wiki; Xodb_mgr_sql db_mgr; Sql_file_parser sql_parser; + private Xow_wiki wiki; private Sql_file_parser sql_parser; private Db_idx_mode idx_mode; + private Xodb_mgr_sql db_mgr; + public Xob_categorylinks_sql_make(Sql_file_parser sql_parser, Xow_wiki wiki, Db_idx_mode idx_mode) { + this.wiki = wiki; this.sql_parser = sql_parser; this.idx_mode = idx_mode; + } public Io_sort_cmd Make_dir_(Io_url v) {return this;} public void Sort_bgn() { usr_dlg = wiki.App().Usr_dlg(); @@ -38,6 +42,7 @@ public class Xob_categorylinks_sql_make implements Io_make_cmd { ctg_stmt = db_mgr.Tbl_category().Insert_stmt(cat_provider); File_open(category_file); first_provider = true; + if (idx_mode.Tid_is_bgn()) Idx_create(fsys_mgr); } Db_provider cl_provider, cat_provider; Gfo_fld_rdr fld_rdr = Gfo_fld_rdr.xowa_(); Db_stmt cl_stmt = Db_stmt_.Null, ctg_stmt = Db_stmt_.Null; int row_count = 0; Gfo_usr_dlg usr_dlg; boolean first_provider; int[] cur_cat_counts = new int[Xoa_ctg_mgr.Tid__max]; long cur_cat_file_size, cur_cat_file_max; byte[] cur_cat_ttl = Ttl_first; int cur_cat_id; int cur_cat_file_idx; public byte Line_dlm() {return line_dlm;} public Xob_categorylinks_sql_make Line_dlm_(byte v) {line_dlm = v; return this;} private byte line_dlm = Byte_ascii.Nil; @@ -68,13 +73,17 @@ public class Xob_categorylinks_sql_make implements Io_make_cmd { db_mgr.Tbl_xowa_db().Commit_all(fsys_mgr.Core_provider(), fsys_mgr.Ary()); if (db_mgr.Category_version() == Xoa_ctg_mgr.Version_null) // NOTE: ctg_v1 wkr will set this to v1; only set to v2 if null db_mgr.Category_version_update(false); + usr_dlg.Log_many("", "", "import.category.v2: insert done; committing; rows=~{0}", row_count); cat_provider.Txn_mgr().Txn_end_all(); ctg_stmt.Rls(); - fsys_mgr.Index_create(usr_dlg, Byte_.Ary(Xodb_file_tid_.Tid_core, Xodb_file_tid_.Tid_category), Index_categorylinks_from, Index_categorylinks_main); + if (idx_mode.Tid_is_end()) Idx_create(fsys_mgr); name_id_rdr.Rls(); if (String_.Eq(sql_parser.Src_fil().NameAndExt(), Xob_ctg_v1_sql_make.Url_sql)) // delete temp xowa_categorylinks.sql file created by cat_v1 Io_mgr._.DeleteFil(sql_parser.Src_fil()); } + private void Idx_create(Xodb_fsys_mgr fsys_mgr) { + fsys_mgr.Index_create(usr_dlg, Byte_.Ary(Xodb_file_tid_.Tid_core, Xodb_file_tid_.Tid_category), Idx_categorylinks_from, Idx_categorylinks_main); + } int Ctg_grp_end(byte[] new_ctg_ttl) { if (cur_cat_ttl != Bry_.Empty && cur_cat_id != -1) db_mgr.Tbl_category().Insert(ctg_stmt, cur_cat_id, cur_cat_counts[Xoa_ctg_mgr.Tid_page], cur_cat_counts[Xoa_ctg_mgr.Tid_subc], cur_cat_counts[Xoa_ctg_mgr.Tid_file], Xoa_ctg_mgr.Hidden_n, cur_cat_file_idx); @@ -131,8 +140,8 @@ public class Xob_categorylinks_sql_make implements Io_make_cmd { } Io_line_rdr name_id_rdr; private static final byte[] Ttl_last = null, Ttl_first = Bry_.Empty; private static final Db_idx_itm - Index_categorylinks_main = Db_idx_itm.sql_("CREATE INDEX IF NOT EXISTS categorylinks__cl_main ON categorylinks (cl_to_id, cl_type_id, cl_sortkey, cl_from);") - , Index_categorylinks_from = Db_idx_itm.sql_("CREATE INDEX IF NOT EXISTS categorylinks__cl_from ON categorylinks (cl_from);") + Idx_categorylinks_main = Db_idx_itm.sql_("CREATE INDEX IF NOT EXISTS categorylinks__cl_main ON categorylinks (cl_to_id, cl_type_id, cl_sortkey, cl_from);") + , Idx_categorylinks_from = Db_idx_itm.sql_("CREATE INDEX IF NOT EXISTS categorylinks__cl_from ON categorylinks (cl_from);") ; } /* diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_fsys_mgr.java b/400_xowa/src/gplx/xowa/dbs/Xodb_fsys_mgr.java index 1890daecb..8fcf69d69 100644 --- a/400_xowa/src/gplx/xowa/dbs/Xodb_fsys_mgr.java +++ b/400_xowa/src/gplx/xowa/dbs/Xodb_fsys_mgr.java @@ -58,7 +58,7 @@ public class Xodb_fsys_mgr { if (max == Max_core_db) return files_ary[File_id_core]; return Make(tid).File_max_(max); } - private void Init_by_tid_core(Xodb_file file) {core_provider = page_provider = category_provider = wikidata_provider = file.Provider();} + private void Init_by_tid_core(Xodb_file file) {core_provider = page_provider = category_provider = wikidata_provider = file.Provider();} public void Init_by_tid_category(Xodb_file file) {category_provider = file.Provider();} public void Init_by_tid_wikidata(Xodb_file file) {wikidata_provider = file.Provider();} private void Init_by_ns_map(Xow_ns_mgr ns_mgr, Xodb_ns_map_mgr ns_map) { @@ -97,7 +97,7 @@ public class Xodb_fsys_mgr { for (int i = 0; i < files_ary_len; i++) { Xodb_file file = files_ary[i]; if (Byte_.In(file.Tid(), tids)) - Xodb_fsdb_mgr_.Index_create(usr_dlg, file, idxs); + Sqlite_engine_.Idx_create(usr_dlg, file.Provider(), Int_.XtoStr(file.Id()), idxs); } } public void Overwrite(int file_idx) {Create_sqlite3(src_dir, trg_dir, trg_name, file_idx);} @@ -130,17 +130,3 @@ public class Xodb_fsys_mgr { public static final int Heap_max_infinite = 0; public static final long Max_core_db = -1; } -class Xodb_fsdb_mgr_ { - public static void Index_create(Gfo_usr_dlg usr_dlg, Xodb_file file, Db_idx_itm[] idxs) { - Db_provider provider = file.Provider(); - provider.Txn_mgr().Txn_end_all(); // commit any pending transactions - int len = idxs.length; - for (int i = 0; i < len; i++) { - provider.Txn_mgr().Txn_bgn_if_none(); - String index = idxs[i].Xto_sql(); - usr_dlg.Prog_many("", "", "creating index: ~{0} ~{1}", file.Id(), index); - provider.Exec_sql(index); - provider.Txn_mgr().Txn_end_all(); - } - } -} diff --git a/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr_sql_tst.java b/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr_sql_tst.java index a4e6c5649..e5790e7ec 100644 --- a/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr_sql_tst.java +++ b/400_xowa/src/gplx/xowa/dbs/Xodb_load_mgr_sql_tst.java @@ -18,8 +18,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. package gplx.xowa.dbs; import gplx.*; import gplx.xowa.*; import org.junit.*; import gplx.xowa.bldrs.*; import gplx.xowa.ctgs.*; import gplx.dbs.*; import gplx.xowa.dbs.tbls.*; public class Xodb_load_mgr_sql_tst { - @Before public void init() {fxt.Clear();} private Xodb_load_mgr_sql_fxt fxt = new Xodb_load_mgr_sql_fxt(); + @Before public void init() {if (Xoa_test_.Db_skip()) return; fxt.Clear();} private Xodb_load_mgr_sql_fxt fxt = new Xodb_load_mgr_sql_fxt(); @Test public void Load_ctg_ttls() { + if (Xoa_test_.Db_skip()) return; Xodb_page[] ctgs = fxt.pages_ ( fxt.ctg_(1, "Ctg_1", Bool_.Y, 10, 11, 12) , fxt.ctg_(2, "Ctg_2", Bool_.N, 20, 21, 22) diff --git a/400_xowa/src/gplx/xowa/dbs/hdumps/Hdump_data_mgr.java b/400_xowa/src/gplx/xowa/dbs/hdumps/Hdump_data_mgr.java new file mode 100644 index 000000000..cf25bd05f --- /dev/null +++ b/400_xowa/src/gplx/xowa/dbs/hdumps/Hdump_data_mgr.java @@ -0,0 +1,101 @@ +/* +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.dbs.hdumps; import gplx.*; import gplx.xowa.*; import gplx.xowa.dbs.*; +class Hdump_data_mgr { +// private Xow_wiki wiki; +// public void Init_by_wiki(Xow_wiki wiki) {this.wiki = wiki;} + public void Select(int ns_id, Hdump_page_row page, int page_id) { + Hdump_db db = Get_db(ns_id, page_id); + // int reg = + db.Page_tbl().Select(null, page, page_id); + // db.Frag_tbl().Select(list, 1); + // page.Frags_(list.XtoAry()); + } + public void Insert(int ns_id, Hdump_page_row page) { + byte[] page_html = page.Page_html(); + int page_html_len = page_html.length; + Hdump_db db = Get_db(ns_id, page_html_len); + Hdump_frag_row[] frags = page.Frags(); + int frags_len = frags.length; + db.Page_tbl().Insert(page.Page_id(), page.Page_html(), frags_len, 1); + Hdump_frag_tbl frag_tbl = db.Frag_tbl(); + for (int i = 0; i < frags_len; ++i) { + Hdump_frag_row frag = frags[i]; + frag_tbl.Insert(null, frag.Frag_id(), page.Page_id(), frag.Frag_tid(), frag.Frag_key(), frag.Frag_text()); + } + } + public void Update() { + } + private Hdump_db Get_db(int ns_id, int len) {return null;} +} +class Hdump_db { + public Io_url Db_url() {return db_url;} private Io_url db_url = Io_url_.Null; + public void Txn_bgn() {} + public void Txn_end() {} + public void Rls() {} + public Hdump_page_tbl Page_tbl() {return page_tbl;} private Hdump_page_tbl page_tbl = new Hdump_page_tbl(); + public Hdump_frag_tbl Frag_tbl() {return frag_tbl;} private Hdump_frag_tbl frag_tbl = new Hdump_frag_tbl(); +} +class Hdump_bldr { + public byte[] Do_this() { + // SELECT * FROM page_id + return null; + } +} +class Hdump_rdr { + public void Read(Hdump_page page, Hdump_text_itm[] itms) { + int len = itms.length; + for (int i = 0; i < len; ++i) { + Hdump_text_itm itm = itms[i]; + switch (itm.Tid()) { + case Hdump_text_tid.Tid_page: Read_page(page, itm); break; + case Hdump_text_tid.Tid_file: break; + } + } + } + public void Read_page(Hdump_page page, Hdump_text_itm itm) { + page.Version_id_(Bry_.Xto_int(itm.Args())); + page.Html_(itm.Text()); + } + public void Read_file(Hdump_page page, Hdump_text_itm file) { + //byte[][] args = null; + } +} +class Hdump_page { + public int Version_id() {return version_id;} public void Version_id_(int v) {version_id = v;} private int version_id; + public byte[] Html() {return html;} public void Html_(byte[] v) {html = v;} private byte[] html; + public void Generate() { + // swap in each file + // add skin + // swap in display title, content_sub, menu + } +} +class Hdump_itm_file { + public byte[] Ttl() {return ttl;} private byte[] ttl; + public void Init(byte[][] ary) { + ttl = ary[0]; + } +} +class Hdump_text_itm { + public int Tid() {return tid;} public void Tid_(int v) {tid = v;} private int tid; + public byte[] Args() {return args;} public void Args_(byte[] v) {args = v;} private byte[] args; + public byte[] Text() {return text;} public void Text_(byte[] v) {text = v;} private byte[] text; +} +class Hdump_text_tid { + public static final int Tid_page = 0, Tid_file = 1, Tid_display = 2, Tid_content_sub = 3, Tid_sidebar = 4; +} \ No newline at end of file diff --git a/400_xowa/src/gplx/xowa/dbs/hdumps/Hdump_page_row.java b/400_xowa/src/gplx/xowa/dbs/hdumps/Hdump_page_row.java index a65ddeed4..c2439a22e 100644 --- a/400_xowa/src/gplx/xowa/dbs/hdumps/Hdump_page_row.java +++ b/400_xowa/src/gplx/xowa/dbs/hdumps/Hdump_page_row.java @@ -22,6 +22,7 @@ public class Hdump_page_row { public byte[] Page_html() {return page_html;} private byte[] page_html; public int Frags_len() {return frags_len;} private int frags_len; public int Make_id() {return make_id;} private int make_id; + public Hdump_frag_row[] Frags() {return frags;} public void Frags_(Hdump_frag_row[] frags) {this.frags = frags;} private Hdump_frag_row[] frags; public Hdump_page_row Ctor(int page_id, byte[] page_html, int frags_len, int make_id) { this.page_id = page_id; this.page_html = page_html; diff --git a/400_xowa/src/gplx/xowa/dbs/hdumps/Hdump_page_tbl.java b/400_xowa/src/gplx/xowa/dbs/hdumps/Hdump_page_tbl.java index cc25c2a4b..3234c3d59 100644 --- a/400_xowa/src/gplx/xowa/dbs/hdumps/Hdump_page_tbl.java +++ b/400_xowa/src/gplx/xowa/dbs/hdumps/Hdump_page_tbl.java @@ -18,9 +18,18 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. package gplx.xowa.dbs.hdumps; import gplx.*; import gplx.xowa.*; import gplx.xowa.dbs.*; import gplx.dbs.*; import gplx.ios.*; public class Hdump_page_tbl { + private Db_provider provider; private Db_stmt stmt_select, stmt_insert, stmt_update, stmt_delete; private Io_stream_zip_mgr zip_mgr; private byte zip_tid; public void Ctor(Io_stream_zip_mgr zip_mgr, byte zip_tid) {this.zip_mgr = zip_mgr; this.zip_tid = zip_tid;} + public void Ctor(Db_provider provider, Io_stream_zip_mgr zip_mgr, byte zip_tid) {this.provider = provider; this.zip_mgr = zip_mgr; this.zip_tid = zip_tid;} + @gplx.Virtual public void Insert(int page_id, byte[] page_html, int frags_len, int make_id) { + if (stmt_insert == null) stmt_insert = Db_stmt_.new_insert_(provider, Tbl_name, Flds_all); + try { + page_html = zip_mgr.Zip(zip_tid, page_html); + stmt_insert.Val_int_(page_id).Val_str_by_bry_(page_html).Val_int_(frags_len).Val_int_(make_id).Exec_insert(); + } finally {stmt_insert.Rls();} + } @gplx.Virtual public void Insert(Db_provider provider, int page_id, byte[] page_html, int frags_len, int make_id) { if (stmt_insert == null) stmt_insert = Db_stmt_.new_insert_(provider, Tbl_name, Flds_all); try { diff --git a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_search_title_page_tbl.java b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_search_title_page_tbl.java index eb3ea4eb8..ed44f6966 100644 --- a/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_search_title_page_tbl.java +++ b/400_xowa/src/gplx/xowa/dbs/tbls/Xodb_search_title_page_tbl.java @@ -18,9 +18,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. package gplx.xowa.dbs.tbls; import gplx.*; import gplx.xowa.*; import gplx.xowa.dbs.*; import gplx.dbs.*; public class Xodb_search_title_page_tbl { - public static void Create_table(Db_provider p) {Sqlite_engine_.Tbl_create(p, Tbl_name, Tbl_sql);} - public static void Create_index_unique(Gfo_usr_dlg usr_dlg, Db_provider p) {Sqlite_engine_.Idx_create(usr_dlg, p, "search", Indexes_main_unique);} - public static void Create_index_non_unique(Gfo_usr_dlg usr_dlg, Db_provider p) {Sqlite_engine_.Idx_create(usr_dlg, p, "search", Indexes_main_non_unique);} + public static void Create_table(Db_provider p) {Sqlite_engine_.Tbl_create(p, Tbl_name, Tbl_sql);} + public static void Create_index_unique(Gfo_usr_dlg usr_dlg, Db_provider p) {Sqlite_engine_.Idx_create(usr_dlg, p, "search", Idx_main_unique);} + public static void Create_index_non_unique(Gfo_usr_dlg usr_dlg, Db_provider p) {Sqlite_engine_.Idx_create(usr_dlg, p, "search", Idx_main_non_unique);} public static Db_stmt Insert_stmt(Db_provider p) {return Db_stmt_.new_insert_(p, Tbl_name, Fld_stp_word_id, Fld_stp_page_id);} public static void Insert(Db_stmt stmt, int word_id, int page_id) { stmt.Clear() @@ -30,13 +30,13 @@ public class Xodb_search_title_page_tbl { } public static final String Tbl_name = "search_title_page", Fld_stp_word_id = "stp_word_id", Fld_stp_page_id = "stp_page_id"; private static final String Tbl_sql = String_.Concat_lines_nl - ( "CREATE TABLE IF NOT EXISTS search_title_page" - , "( stp_word_id integer NOT NULL" - , ", stp_page_id integer NOT NULL" - , ");" + ( "CREATE TABLE IF NOT EXISTS search_title_page" + , "( stp_word_id integer NOT NULL" + , ", stp_page_id integer NOT NULL" + , ");" ); private static final Db_idx_itm - Indexes_main_unique = Db_idx_itm.sql_("CREATE UNIQUE INDEX IF NOT EXISTS search_title_page__main ON search_title_page (stp_word_id, stp_page_id);") - , Indexes_main_non_unique = Db_idx_itm.sql_("CREATE INDEX IF NOT EXISTS search_title_page__main ON search_title_page (stp_word_id, stp_page_id);") + Idx_main_unique = Db_idx_itm.sql_("CREATE UNIQUE INDEX IF NOT EXISTS search_title_page__main ON search_title_page (stp_word_id, stp_page_id);") + , Idx_main_non_unique = Db_idx_itm.sql_("CREATE INDEX IF NOT EXISTS search_title_page__main ON search_title_page (stp_word_id, stp_page_id);") ; } diff --git a/400_xowa/src/gplx/xowa/gui/views/Xog_html_js_cbk.java b/400_xowa/src/gplx/xowa/gui/views/Xog_html_js_cbk.java index 6227746f3..5cbb3123a 100644 --- a/400_xowa/src/gplx/xowa/gui/views/Xog_html_js_cbk.java +++ b/400_xowa/src/gplx/xowa/gui/views/Xog_html_js_cbk.java @@ -169,24 +169,25 @@ public class Xog_html_js_cbk implements GfoInvkAble { } private static final byte[] Wikidata_get_label_xowa_ui_lang = Bry_.new_ascii_("xowa_ui_lang"), Wikidata_get_label_xowa_title = Bry_.new_ascii_("xowa_title"); public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { - if (ctx.Match(k, Invk_parse_to_html)) return Parse_to_html(m); - else if (ctx.Match(k, Invk_wikidata_get_label)) return Wikidata_get_label(m); - else if (ctx.Match(k, Invk_get_page)) return Get_page(m); - else if (ctx.Match(k, Invk_popups_get_async_bgn)) return Popups_get_async_bgn(m); - else if (ctx.Match(k, Invk_popups_get_html)) return Popups_get_html(m); - else if (ctx.Match(k, Invk_scripts_exec)) return Scripts_exec(m); - else if (ctx.Match(k, Invk_get_search_suggestions)) return Get_search_suggestions(m); - else if (ctx.Match(k, Invk_get_titles_meta)) return Get_titles_meta(m); - else if (ctx.Match(k, Invk_get_titles_exists)) return Get_titles_exists(m); - else if (ctx.Match(k, Invk_get_current_url)) return String_.new_utf8_(html_itm.Owner_tab().Page().Url().Raw()); - else if (ctx.Match(k, Invk_xowa_exec_test)) return Xowa_exec_test(m); - else if (ctx.Match(k, Invk_xowa_exec_test_as_array))return Xowa_exec_test_as_array(m); + if (ctx.Match(k, Invk_parse_to_html)) return Parse_to_html(m); + else if (ctx.Match(k, Invk_wikidata_get_label)) return Wikidata_get_label(m); + else if (ctx.Match(k, Invk_get_page)) return Get_page(m); + else if (ctx.MatchIn(k, Invk_cmd, Invk_scripts_exec)) return Scripts_exec(m); + else if (ctx.Match(k, Invk_scripts_exec)) return Scripts_exec(m); + else if (ctx.Match(k, Invk_popups_get_async_bgn)) return Popups_get_async_bgn(m); + else if (ctx.Match(k, Invk_popups_get_html)) return Popups_get_html(m); + else if (ctx.Match(k, Invk_get_search_suggestions)) return Get_search_suggestions(m); + else if (ctx.Match(k, Invk_get_titles_meta)) return Get_titles_meta(m); + else if (ctx.Match(k, Invk_get_titles_exists)) return Get_titles_exists(m); + else if (ctx.Match(k, Invk_get_current_url)) return String_.new_utf8_(html_itm.Owner_tab().Page().Url().Raw()); + else if (ctx.Match(k, Invk_xowa_exec_test)) return Xowa_exec_test(m); + else if (ctx.Match(k, Invk_xowa_exec_test_as_array)) return Xowa_exec_test_as_array(m); else return GfoInvkAble_.Rv_unhandled; } - public static final String Invk_parse_to_html = "parse_to_html", Invk_wikidata_get_label = "wikidata_get_label", Invk_get_page = "get_page", Invk_scripts_exec = "scripts_exec" + public static final String Invk_parse_to_html = "parse_to_html", Invk_wikidata_get_label = "wikidata_get_label", Invk_get_page = "get_page", Invk_cmd = "cmd", Invk_scripts_exec = "scripts_exec" , Invk_get_search_suggestions = "get_search_suggestions", Invk_get_titles_meta = "get_titles_meta", Invk_get_titles_exists = "get_titles_exists", Invk_get_current_url = "get_current_url" , Invk_xowa_exec_test = "xowa_exec_test", Invk_xowa_exec_test_as_array = "xowa_exec_test_as_array" , Invk_popups_get_async_bgn = "popups_get_async_bgn" - , Invk_popups_get_html = "popups_get_html" + , Invk_popups_get_html = "popups_get_html" ; } diff --git a/400_xowa/src/gplx/xowa/html/Xoh_html_mgr.java b/400_xowa/src/gplx/xowa/html/Xoh_html_mgr.java index aea0d7f7e..71616bfda 100644 --- a/400_xowa/src/gplx/xowa/html/Xoh_html_mgr.java +++ b/400_xowa/src/gplx/xowa/html/Xoh_html_mgr.java @@ -19,13 +19,14 @@ package gplx.xowa.html; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.tidy.*; import gplx.xowa.html.utils.*; public class Xoh_html_mgr implements GfoInvkAble { public Xoh_html_mgr(Xoa_app app) { + page_mgr = new Xoh_page_mgr(app); js_cleaner = new Xoh_js_cleaner(app); } public void Init_by_app(Xoa_app app) { tidy_mgr.Init_by_app(app); } public Xop_xatr_whitelist_mgr Whitelist_mgr() {return whitelist_mgr;} private Xop_xatr_whitelist_mgr whitelist_mgr = new Xop_xatr_whitelist_mgr().Ini(); - public Xoh_page_mgr Page_mgr() {return page_mgr;} private Xoh_page_mgr page_mgr = new Xoh_page_mgr(); + public Xoh_page_mgr Page_mgr() {return page_mgr;} private Xoh_page_mgr page_mgr; public Xoh_tidy_mgr Tidy_mgr() {return tidy_mgr;} private Xoh_tidy_mgr tidy_mgr = new Xoh_tidy_mgr(); public Xoh_js_cleaner Js_cleaner() {return js_cleaner;} private Xoh_js_cleaner js_cleaner; public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { diff --git a/400_xowa/src/gplx/xowa/html/Xoh_lnki_wtr.java b/400_xowa/src/gplx/xowa/html/Xoh_lnki_wtr.java index 195a692c7..e2ac1cf25 100644 --- a/400_xowa/src/gplx/xowa/html/Xoh_lnki_wtr.java +++ b/400_xowa/src/gplx/xowa/html/Xoh_lnki_wtr.java @@ -16,7 +16,8 @@ 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.html; import gplx.*; import gplx.xowa.*; -import gplx.html.*; import gplx.xowa.files.*; import gplx.xowa.parsers.lnkis.redlinks.*; import gplx.xowa.users.history.*; import gplx.xowa.xtns.pfuncs.ttls.*; +import gplx.html.*; import gplx.xowa.files.*; import gplx.xowa.parsers.lnkis.redlinks.*; import gplx.xowa.users.history.*; import gplx.xowa.xtns.pfuncs.ttls.*; import gplx.xowa.xtns.relatedSites.*; +import gplx.xowa.wikis.xwikis.*; public class Xoh_lnki_wtr { private Xoa_app app; private Xow_wiki wiki; private Xoa_page page; private Xop_ctx ctx; private Xoh_html_wtr_cfg cfg; @@ -86,6 +87,10 @@ public class Xoh_lnki_wtr { return; } } +// if (wiki.Domain_tid() == gplx.xowa.wikis.Xow_wiki_domain_.Tid_wikivoyage && lnki_ttl.Wik_bgn() != -1) { +// wiki.Xtn_mgr().Xtn_sites().Match(lnki_ttl, page.Html_data().Related_sites()); +// return; +// } if (hctx.Mode_is_alt()) Write_caption(bfr, ctx, hctx, src, lnki, ttl_bry, true, caption_wkr); else { diff --git a/400_xowa/src/gplx/xowa/html/Xoh_page_mgr.java b/400_xowa/src/gplx/xowa/html/Xoh_page_mgr.java index e26b33302..6c1ee3eeb 100644 --- a/400_xowa/src/gplx/xowa/html/Xoh_page_mgr.java +++ b/400_xowa/src/gplx/xowa/html/Xoh_page_mgr.java @@ -16,7 +16,12 @@ 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.html; import gplx.*; import gplx.xowa.*; +import gplx.xowa.html.portal.*; public class Xoh_page_mgr implements GfoInvkAble { + public Xoh_page_mgr(Xoa_app app) { + this.subpages_bldr = new Xoh_subpages_bldr(app); + } + public Xoh_subpages_bldr Subpages_bldr() {return subpages_bldr;} private Xoh_subpages_bldr subpages_bldr; public boolean Font_enabled() {return font_enabled;} private boolean font_enabled = false; public void Font_enabled_(boolean v) {font_enabled = v;} public String Font_name() {return font_name;} private String font_name = "Arial"; diff --git a/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_mgr.java b/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_mgr.java index 9619e26cd..7ab226c3e 100644 --- a/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_mgr.java +++ b/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_mgr.java @@ -56,7 +56,7 @@ public class Xoh_page_wtr_mgr implements GfoInvkAble { , "portal_div_personal", "portal_div_ns", "portal_div_view" , "portal_div_logo", "portal_div_home", "portal_div_xtn", "portal_div_wikis", "portal_sidebar" , "edit_div_rename", "edit_div_preview" - , "app_version", "app_build_date", "app_root_dir", "js_article_view_vars", "js_wikidata", "js_edit_toolbar", "xowa_mode_is_server" + , "app_version", "app_build_date", "app_root_dir", "js_wikidata", "js_edit_toolbar", "xowa_mode_is_server" ); public Bry_fmtr Page_edit_fmtr() {return page_edit_fmtr;} private Bry_fmtr page_edit_fmtr = Bry_fmtr.new_("" , "page_id", "page_name", "page_title", "page_content_sub", "page_data", "page_langs", "page_modified_on_msg", "page_lang_ltr" @@ -65,7 +65,7 @@ public class Xoh_page_wtr_mgr implements GfoInvkAble { , "portal_div_personal", "portal_div_ns", "portal_div_view" , "portal_div_logo", "portal_div_home", "portal_div_xtn", "portal_div_wikis", "portal_sidebar" , "edit_div_rename", "edit_div_preview" - , "app_version", "app_build_date", "app_root_dir", "js_article_view_vars", "js_wikidata", "js_edit_toolbar", "xowa_mode_is_server" + , "app_version", "app_build_date", "app_root_dir", "js_wikidata", "js_edit_toolbar", "xowa_mode_is_server" ); public Bry_fmtr Page_html_fmtr() {return page_html_fmtr;} private Bry_fmtr page_html_fmtr = Bry_fmtr.new_("" , "page_id", "page_name", "page_title", "page_content_sub", "page_data", "page_langs", "page_modified_on_msg", "page_lang_ltr" @@ -74,7 +74,7 @@ public class Xoh_page_wtr_mgr implements GfoInvkAble { , "portal_div_personal", "portal_div_ns", "portal_div_view" , "portal_div_logo", "portal_div_home", "portal_div_xtn", "portal_div_wikis", "portal_sidebar" , "edit_div_rename", "edit_div_preview" - , "app_version", "app_build_date", "app_root_dir", "js_article_view_vars", "js_wikidata", "js_edit_toolbar", "xowa_mode_is_server" + , "app_version", "app_build_date", "app_root_dir", "js_wikidata", "js_edit_toolbar", "xowa_mode_is_server" ); private Bry_bfr tmp_bfr = Bry_bfr.reset_(255); public byte[] Edit_rename_div_bry(Xoa_ttl ttl) { diff --git a/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_wkr.java b/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_wkr.java index 768afdd59..9aeef1b30 100644 --- a/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_wkr.java +++ b/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_wkr.java @@ -71,11 +71,13 @@ public class Xoh_page_wtr_wkr implements Bry_fmtr_arg { , mgr.Css_common_bry(), mgr.Css_wiki_bry(), html_content_editable , page.Html_data().Module_mgr().Init(app, wiki, page).Init_dflts() , portal_mgr.Div_personal_bry(), portal_mgr.Div_ns_bry(app.Utl_bry_bfr_mkr(), page.Ttl(), wiki.Ns_mgr()), portal_mgr.Div_view_bry(app.Utl_bry_bfr_mkr(), view_tid, page.Html_data().Search_text()) - , portal_mgr.Div_logo_bry(), portal_mgr.Div_home_bry(), page.Html_data().Portal_div_xtn(), portal_mgr.Div_wikis_bry(app.Utl_bry_bfr_mkr()), portal_mgr.Sidebar_mgr().Html_bry() - , mgr.Edit_rename_div_bry(page.Ttl()), page.Html_data().Edit_preview() + , portal_mgr.Div_logo_bry(), portal_mgr.Div_home_bry(), Xoh_page_wtr_wkr_.Bld_portal_div_xtn(wiki, page), portal_mgr.Div_wikis_bry(app.Utl_bry_bfr_mkr()), portal_mgr.Sidebar_mgr().Html_bry() + , mgr.Edit_rename_div_bry(page.Ttl()) + , page.Html_data().Edit_preview_w_dbg() , Xoa_app_.Version, Xoa_app_.Build_date , app.Fsys_mgr().Root_dir().To_http_file_bry() - , wiki.Fragment_mgr().Html_js_table(), js_wikidata_bry, js_edit_toolbar_bry, app.Tcp_server().Running_str() + , js_wikidata_bry, js_edit_toolbar_bry + , app.Tcp_server().Running_str() ); Xoh_page_wtr_wkr_.Bld_head_end(html_bfr, page); Xoh_page_wtr_wkr_.Bld_html_end(html_bfr, page); diff --git a/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_wkr_.java b/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_wkr_.java index 48a946cbd..d202510b6 100644 --- a/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_wkr_.java +++ b/400_xowa/src/gplx/xowa/html/Xoh_page_wtr_wkr_.java @@ -16,12 +16,19 @@ 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.html; import gplx.*; import gplx.xowa.*; -import gplx.html.*; +import gplx.html.*; import gplx.xowa.xtns.relatedSites.*; public class Xoh_page_wtr_wkr_ { + public static byte[] Bld_portal_div_xtn(Xow_wiki wiki, Xoa_page page) { + // byte[] rv = wiki.Xtn_mgr().Xtn_sites().Html_bldr().Bld_all(page.Html_data().Related_sites()); + // rv = Bry_.Add(rv, page.Html_data().Portal_div_xtn().XtoAryAndClear()); + // return rv; + return page.Html_data().Portal_div_xtn().XtoAryAndClear(); + } public static byte[] Bld_page_content_sub(Xoa_app app, Xow_wiki wiki, Xoa_page page, Bry_bfr tmp_bfr) { + byte[] subpages = app.Html_mgr().Page_mgr().Subpages_bldr().Bld(page.Ttl()); byte[] page_content_sub = page.Html_data().Content_sub(); // contentSub exists; SEE: {{#isin}} byte[] redirect_msg = Xop_redirect_mgr.Bld_redirect_msg(app, wiki, page); - return tmp_bfr.Concat_skip_empty(Html_tag_.Br_inl, page_content_sub, redirect_msg).XtoAryAndClear(); + return Bry_.Add(subpages, page_content_sub, redirect_msg); } public static byte[] Bld_page_name(Bry_bfr tmp_bfr, Xoa_ttl ttl, byte[] display_ttl) { if (display_ttl != null) return display_ttl; // display_ttl explicitly set; use it diff --git a/400_xowa/src/gplx/xowa/html/Xow_html_mgr.java b/400_xowa/src/gplx/xowa/html/Xow_html_mgr.java index bc97e49be..fd2ac8c71 100644 --- a/400_xowa/src/gplx/xowa/html/Xow_html_mgr.java +++ b/400_xowa/src/gplx/xowa/html/Xow_html_mgr.java @@ -17,7 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ package gplx.xowa.html; import gplx.*; import gplx.xowa.*; import gplx.xowa.ctgs.*; import gplx.xowa.xtns.gallery.*; -import gplx.xowa.html.portal.*; import gplx.xowa.html.tocs.*; import gplx.xowa.html.modules.*; +import gplx.xowa.html.portal.*; import gplx.xowa.html.tocs.*; import gplx.xowa.wikis.modules.*; public class Xow_html_mgr implements GfoInvkAble { public Xow_html_mgr(Xow_wiki wiki) { this.wiki = wiki; @@ -154,6 +154,7 @@ public class Xow_html_mgr implements GfoInvkAble { else if (ctx.Match(k, Invk_portal)) return portal_mgr; else if (ctx.Match(k, Invk_imgs)) return imgs_mgr; else if (ctx.Match(k, Invk_ns_ctg)) return ns_ctg; + else if (ctx.Match(k, Invk_modules)) return module_mgr; else return GfoInvkAble_.Rv_unhandled; return this; } @@ -164,6 +165,7 @@ public class Xow_html_mgr implements GfoInvkAble { , Invk_lnki_thumb_part_magnify_btn_ = "lnki_thumb_part_magnify_btn_", Invk_lnki_thumb_part_play_btn_ = "lnki_thumb_part_play_btn_", Invk_lnki_thumb_part_info_btn_ = "lnki_thumb_part_info_btn_" , Invk_article = "article" , Invk_portal = "portal", Invk_imgs = "imgs", Invk_ns_ctg = "ns_ctg" + , Invk_modules = "modules" ; public static final String Str_img_class_thumbimage = "thumbimage"; public static final byte[] Bry_anchor_class_image = Bry_.new_ascii_(" class=\"image\""), Bry_anchor_class_blank = Bry_.Empty, Bry_anchor_rel_nofollow = Bry_.new_ascii_(" rel=\"nofollow\""), Bry_anchor_rel_blank = Bry_.Empty, Bry_img_class_thumbimage = Bry_.new_ascii_(" class=\"thumbimage\""), Bry_img_class_none = Bry_.Empty; diff --git a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__div_toggle.java b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__div_toggle.java new file mode 100644 index 000000000..2f710cb9c --- /dev/null +++ b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__div_toggle.java @@ -0,0 +1,35 @@ +/* +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/>. +*/ +//namespace gplx.xowa.html.modules { +// using gplx.xowa.gui; +// using gplx.xowa.apis.xowa.html.modules; +// public class Xoh_module_itm__div_toggle : Xoh_module_itm { +// public boolean Enabled() {return enabled;} public void Enabled_y_() {enabled = true;} public void Enabled_(boolean v) {enabled = v;} private boolean enabled; +// public void Clear() {enabled = false;} +// public byte[] Key() {return Key_const;} private static final byte[] Key_const = Bry_.new_ascii_("div_toggle"); +// public void Write_css_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} +// public void Write_js_include(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} +// public void Write_css_include(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) { } +// public void Write_js_head_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} +// public void Write_js_tail_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) { +// if (!enabled) return; +// wtr.Write_js_tail_load_lib(app.Fsys_mgr().Bin_any_dir().GenSubFil_nest("xowa", "html", "modules", "xowa.div_toggle", "xowa.div_toggle.js")); +// } +// public void Write_js_head_global(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} +// } +//} diff --git a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__globals.java b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__globals.java index 3c8dce613..e86a2b771 100644 --- a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__globals.java +++ b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__globals.java @@ -18,6 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. package gplx.xowa.html.modules; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; import gplx.xowa.langs.numbers.*; public class Xoh_module_itm__globals implements Xoh_module_itm { + private Xoh_module_wtr tmp_wtr = new Xoh_module_wtr(); public byte[] Key() {return Key_const;} private static final byte[] Key_const = Bry_.new_ascii_("globals"); public boolean Enabled() {return enabled;} public void Enabled_n_() {enabled = false;} public void Enabled_y_() {enabled = true;} public void Enabled_(boolean v) {enabled = v;} private boolean enabled; public void Clear() {enabled = false;} @@ -36,14 +37,18 @@ public class Xoh_module_itm__globals implements Xoh_module_itm { public void Write_js_tail_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} public void Write_js_head_global(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) { if (!enabled) return; + wtr.Write_js_global_ini_atr_val(Key_mode_is_gui , app.Mode() == Xoa_app_.Mode_gui); + wtr.Write_js_global_ini_atr_val(Key_mode_is_http , app.Mode() == Xoa_app_.Mode_http); + wtr.Write_js_global_ini_atr_val(Key_http_port , app.Http_server().Port()); wtr.Write_js_global_ini_atr_msg(wiki, Key_sort_ascending); wtr.Write_js_global_ini_atr_msg(wiki, Key_sort_descending); Xol_lang lang = wiki.Lang(); Xow_msg_mgr msg_mgr = wiki.Msg_mgr(); - Bry_bfr bfr = lang.App().Utl_bry_bfr_mkr().Get_b512(); - byte[] months_long = Html_js_table_months(bfr, msg_mgr, Xol_msg_itm_.Id_dte_month_name_january, Xol_msg_itm_.Id_dte_month_name_december); - byte[] months_short = Html_js_table_months(bfr, msg_mgr, Xol_msg_itm_.Id_dte_month_abrv_jan, Xol_msg_itm_.Id_dte_month_abrv_dec); - byte[] num_format_separators = Html_js_table_num_format_separators(bfr, lang.Num_mgr().Separators_mgr()); - bfr.Mkr_rls(); + Bry_bfr tmp_bfr = lang.App().Utl_bry_bfr_mkr().Get_b512(); + tmp_wtr.Init(tmp_bfr); + byte[] months_long = Html_js_table_months(tmp_wtr, msg_mgr, Xol_msg_itm_.Id_dte_month_name_january, Xol_msg_itm_.Id_dte_month_name_december); + byte[] months_short = Html_js_table_months(tmp_wtr, msg_mgr, Xol_msg_itm_.Id_dte_month_abrv_jan, Xol_msg_itm_.Id_dte_month_abrv_dec); + byte[] num_format_separators = Html_js_table_num_format_separators(tmp_wtr, lang.Num_mgr().Separators_mgr()); + tmp_bfr.Mkr_rls(); wtr.Write_js_global_ini_atr_val(Key_wgContentLanguage , lang.Key_bry()); wtr.Write_js_global_ini_atr_obj(Key_wgSeparatorTransformTable , num_format_separators); wtr.Write_js_global_ini_atr_obj(Key_wgDigitTransformTable , Num_format_digits); @@ -52,7 +57,10 @@ public class Xoh_module_itm__globals implements Xoh_module_itm { wtr.Write_js_global_ini_atr_obj(Key_wgMonthNamesShort , months_short); } private static final byte[] - Key_sort_descending = Bry_.new_ascii_("sort-descending") + Key_mode_is_gui = Bry_.new_ascii_("mode_is_gui") + , Key_mode_is_http = Bry_.new_ascii_("mode_is_http") + , Key_http_port = Bry_.new_ascii_("http-port") + , Key_sort_descending = Bry_.new_ascii_("sort-descending") , Key_sort_ascending = Bry_.new_ascii_("sort-ascending") , Key_wgContentLanguage = Bry_.new_ascii_("wgContentLanguage") , Key_wgSeparatorTransformTable = Bry_.new_ascii_("wgSeparatorTransformTable") @@ -61,23 +69,22 @@ public class Xoh_module_itm__globals implements Xoh_module_itm { , Key_wgMonthNames = Bry_.new_ascii_("wgMonthNames") , Key_wgMonthNamesShort = Bry_.new_ascii_("wgMonthNamesShort") ; - private static byte[] Html_js_table_months(Bry_bfr bfr, Xow_msg_mgr msg_mgr, int january_id, int december_id) {// ['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] - bfr.Add_byte(Byte_ascii.Brack_bgn).Add_byte(Byte_ascii.Apos).Add_byte(Byte_ascii.Apos); - for (int i = january_id; i <= december_id; i++) { - bfr.Add_byte(Byte_ascii.Comma).Add_byte(Byte_ascii.Space).Add_byte(Byte_ascii.Apos); - bfr.Add(Bry_.Replace(msg_mgr.Val_by_id(i), Byte_ascii.Apos_bry, Apos_escape)); - bfr.Add_byte(Byte_ascii.Apos); - } - bfr.Add_byte(Byte_ascii.Brack_end); - return bfr.XtoAryAndClear(); - } private static final byte[] Apos_escape = Bry_.new_ascii_("\\'"); - private static byte[] Html_js_table_num_format_separators(Bry_bfr bfr, Xol_transform_mgr separator_mgr) { + private static byte[] Html_js_table_months(Xoh_module_wtr tmp_wtr, Xow_msg_mgr msg_mgr, int january_id, int december_id) { + tmp_wtr.Write_js_ary_bgn(); + tmp_wtr.Write_js_ary_itm(Bry_.Empty); // 1st month is always empty + for (int i = january_id; i <= december_id; i++) + tmp_wtr.Write_js_ary_itm(msg_mgr.Val_by_id(i)); + tmp_wtr.Write_js_ary_end(); + return tmp_wtr.Bfr().XtoAryAndClear(); + } + private static byte[] Html_js_table_num_format_separators(Xoh_module_wtr tmp_wtr, Xol_transform_mgr separator_mgr) { byte[] dec_spr = separator_mgr.Get_val_or_self(Xol_num_mgr.Separators_key__dec); - bfr.Add_byte(Byte_ascii.Brack_bgn) .Add_byte(Byte_ascii.Apos).Add(dec_spr).Add_byte(Byte_ascii.Tab).Add_byte(Byte_ascii.Dot).Add_byte(Byte_ascii.Apos); byte[] grp_spr = separator_mgr.Get_val_or_self(Xol_num_mgr.Separators_key__grp); - bfr.Add_byte(Byte_ascii.Comma).Add_byte(Byte_ascii.Space) .Add_byte(Byte_ascii.Apos).Add(grp_spr).Add_byte(Byte_ascii.Tab).Add_byte(Byte_ascii.Comma).Add_byte(Byte_ascii.Apos); - bfr.Add_byte(Byte_ascii.Brack_end); - return bfr.XtoAryAndClear(); + tmp_wtr.Write_js_ary_bgn(); + tmp_wtr.Write_js_ary_itm(Bry_.Add(dec_spr, Byte_ascii.Tab_bry, Byte_ascii.Dot_bry)); + tmp_wtr.Write_js_ary_itm(Bry_.Add(grp_spr, Byte_ascii.Tab_bry, Byte_ascii.Comma_bry)); + tmp_wtr.Write_js_ary_end(); + return tmp_wtr.Bfr().XtoAryAndClear(); } private static final byte[] Date_format_default = Bry_.new_ascii_("dmy") diff --git a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__popups.java b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__popups.java index 952ab8f04..655586bda 100644 --- a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__popups.java +++ b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__popups.java @@ -33,15 +33,7 @@ public class Xoh_module_itm__popups implements Xoh_module_itm { public void Write_js_head_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} public void Write_js_tail_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) { if (!enabled) return; - if (Js_line_2 == null) { - Js_line_2 = Bry_.Add - ( Js_line_2_bgn - , app.Fsys_mgr().Bin_any_dir().GenSubFil_nest("xowa", "html", "modules", "xowa.popups", "xowa.popups.js").To_http_file_bry() - , Js_line_2_end - ); - } - wtr.Write_js_line(Js_line_1); - wtr.Write_js_line(Js_line_2); + wtr.Write_js_tail_load_lib(app.Fsys_mgr().Bin_any_dir().GenSubFil_nest("xowa", "html", "modules", "xowa.popups", "xowa.popups.js")); } public void Write_js_head_global(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) { if (!enabled) return; @@ -54,12 +46,9 @@ public class Xoh_module_itm__popups implements Xoh_module_itm { wtr.Write_js_global_ini_atr_val(Key_win_bind_focus_blur , api_popups.Win_bind_focus_blur()); wtr.Write_js_global_ini_atr_val(Key_win_bind_hover_area , bind_hover_area); } - private static byte[] Css_url, Js_line_2; + private static byte[] Css_url; private static final byte[] - Js_line_1 = Bry_.new_ascii_("xowa.js.jquery.init();") - , Js_line_2_bgn = Bry_.new_ascii_("xowa.js.load_lib('") - , Js_line_2_end = Bry_.new_ascii_("');") - , Key_win_show_delay = Bry_.new_ascii_("popups-win-show_delay") + Key_win_show_delay = Bry_.new_ascii_("popups-win-show_delay") , Key_win_hide_delay = Bry_.new_ascii_("popups-win-hide_delay") , Key_win_max_w = Bry_.new_ascii_("popups-win-max_w") , Key_win_max_h = Bry_.new_ascii_("popups-win-max_h") diff --git a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__top_icon.java b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__top_icon.java new file mode 100644 index 000000000..1b3c14941 --- /dev/null +++ b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_itm__top_icon.java @@ -0,0 +1,39 @@ +/* +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.html.modules; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; +import gplx.xowa.gui.*; +import gplx.xowa.apis.xowa.html.modules.*; +public class Xoh_module_itm__top_icon implements Xoh_module_itm { + public boolean Enabled() {return enabled;} public void Enabled_y_() {enabled = true;} public void Enabled_(boolean v) {enabled = v;} private boolean enabled; + public void Clear() {enabled = false;} + public byte[] Key() {return Key_const;} private static final byte[] Key_const = Bry_.new_ascii_("top_icon"); + public void Write_css_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} + public void Write_js_include(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} + public void Write_css_include(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) { + if (!enabled) return; + if (Css_url == null) Css_url = app.Fsys_mgr().Bin_any_dir().GenSubFil_nest("xowa", "html", "modules", "mw.top_icon", "mw.top_icon.css").To_http_file_bry(); + wtr.Write_css_include(Css_url); + } + public void Write_js_head_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} + public void Write_js_tail_script(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) { + if (!enabled) return; + wtr.Write_js_tail_load_lib(app.Fsys_mgr().Bin_any_dir().GenSubFil_nest("xowa", "html", "modules", "mw.top_icon", "mw.top_icon.js")); + } + public void Write_js_head_global(Xoa_app app, Xow_wiki wiki, Xoa_page page, Xoh_module_wtr wtr) {} + private static byte[] Css_url; +} diff --git a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_mgr.java b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_mgr.java index 9cda69dbb..6f2c10d43 100644 --- a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_mgr.java +++ b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_mgr.java @@ -20,7 +20,7 @@ public class Xoh_module_mgr implements Bry_fmtr_arg { private Xoa_app app; private Xow_wiki wiki; private Xoa_page page; private Xoh_module_itm[] itms; private int itms_len; private Xoh_module_wtr wtr = new Xoh_module_wtr(); public Xoh_module_mgr() { - Itms_add(itm_css, itm_globals, itm_popups, itm_toc, itm_collapsible, itm_navframe, itm_gallery, itm_mathjax, itm_hiero); + Itms_add(itm_css, itm_globals, itm_popups, itm_toc, itm_collapsible, itm_navframe, itm_gallery, itm_mathjax, itm_hiero, itm_top_icon); } public Xoh_module_itm__css Itm_css() {return itm_css;} private Xoh_module_itm__css itm_css = new Xoh_module_itm__css(); public Xoh_module_itm__globals Itm_globals() {return itm_globals;} private Xoh_module_itm__globals itm_globals = new Xoh_module_itm__globals(); @@ -31,13 +31,14 @@ public class Xoh_module_mgr implements Bry_fmtr_arg { public Xoh_module_itm__gallery Itm_gallery() {return itm_gallery;} private Xoh_module_itm__gallery itm_gallery = new Xoh_module_itm__gallery(); public Xoh_module_itm__mathjax Itm_mathjax() {return itm_mathjax;} private Xoh_module_itm__mathjax itm_mathjax = new Xoh_module_itm__mathjax(); public Xoh_module_itm__hiero Itm_hiero() {return itm_hiero;} private Xoh_module_itm__hiero itm_hiero = new Xoh_module_itm__hiero(); + public Xoh_module_itm__top_icon Itm_top_icon() {return itm_top_icon;} private Xoh_module_itm__top_icon itm_top_icon = new Xoh_module_itm__top_icon(); public Xoh_module_mgr Init(Xoa_app app, Xow_wiki wiki, Xoa_page page) { this.app = app; this.wiki = wiki; this.page = page; - if (page.Hdr_mgr().Toc_enabled()) - itm_toc.Enabled_y_(); return this; } public Xoh_module_mgr Init_dflts() { + if (page.Hdr_mgr().Toc_enabled()) itm_toc.Enabled_y_(); + if (wiki.Html_mgr().Module_mgr().Itm_top_icon().Enabled()) itm_top_icon.Enabled_y_(); itm_css.Enabled_y_(); itm_globals.Enabled_y_(); // for now, always mark this and rest as exists; DATE:2014-06-09 itm_collapsible.Enabled_y_(); diff --git a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_mgr_tst.java b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_mgr_tst.java index b0f0fd847..bcce6f851 100644 --- a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_mgr_tst.java +++ b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_mgr_tst.java @@ -45,6 +45,60 @@ public class Xoh_module_mgr_tst { , " </script>" )); } + @Test public void Globals() { + fxt.Init_msg(Xol_msg_itm_.Id_dte_month_name_january, "Jan'uary" ); // add apos to simulate apostrophes in Hebrew months; DATE:2014-07-28 + fxt.Mgr().Itm_globals().Enabled_y_(); + fxt.Test_write(String_.Concat_lines_nl_skip_last + ( "" + , " <script type='text/javascript'>" + , " var xowa_root_dir = 'file:///mem/xowa/';" + , " var xowa_mode_is_server = false;" + , " var xowa_global_values = {" + , " 'mode_is_gui' : false," + , " 'mode_is_http' : false," + , " 'http-port' : 8080," + , " 'sort-ascending' : 'Sort ascending'," + , " 'sort-descending' : 'Sort descending'," + , " 'wgContentLanguage' : 'en'," + , " 'wgSeparatorTransformTable' : ['.\t.', ',\t,']," + , " 'wgDigitTransformTable' : ['', '']," + , " 'wgDefaultDateFormat' : 'dmy'," + , " 'wgMonthNames' : ['', 'Jan\\'uary', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']," + , " 'wgMonthNamesShort' : ['', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']," + , " }" + , " </script>" + , " <script src=\"file:///mem/xowa/bin/any/xowa/html/modules/xowa.core/xowa.core.js\" type='text/javascript'></script>" + )); + fxt.Init_msg(Xol_msg_itm_.Id_dte_month_name_january, "January" ); // set it back + } + @Test public void Globals_la() { // PURPOSE: la.gfs only specifies "," not "."; make sure both "." and "," show up, or else null ref error during import; DATE:2014-05-13 + Xol_lang la_lang = fxt.Wiki().Lang(); + gplx.xowa.langs.numbers.Xol_transform_mgr separators_mgr = la_lang.Num_mgr().Separators_mgr(); + separators_mgr.Clear(); + separators_mgr.Set(gplx.xowa.langs.numbers.Xol_num_mgr.Separators_key__grp, Bry_.new_ascii_(" ")); + fxt.Mgr().Itm_globals().Enabled_y_(); + fxt.Test_write(String_.Concat_lines_nl_skip_last + ( "" + , " <script type='text/javascript'>" + , " var xowa_root_dir = 'file:///mem/xowa/';" + , " var xowa_mode_is_server = false;" + , " var xowa_global_values = {" + , " 'mode_is_gui' : false," + , " 'mode_is_http' : false," + , " 'http-port' : 8080," + , " 'sort-ascending' : 'Sort ascending'," + , " 'sort-descending' : 'Sort descending'," + , " 'wgContentLanguage' : 'en'," + , " 'wgSeparatorTransformTable' : ['.\t.', ' \t,']," // note that grp spr (",") is "" + , " 'wgDigitTransformTable' : ['', '']," + , " 'wgDefaultDateFormat' : 'dmy'," + , " 'wgMonthNames' : ['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']," + , " 'wgMonthNamesShort' : ['', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']," + , " }" + , " </script>" + , " <script src=\"file:///mem/xowa/bin/any/xowa/html/modules/xowa.core/xowa.core.js\" type='text/javascript'></script>" + )); + } } class Xoh_module_mgr_fxt { private Xop_fxt fxt = new Xop_fxt(); @@ -52,6 +106,7 @@ class Xoh_module_mgr_fxt { private Bry_bfr bfr = Bry_bfr.reset_(255); public Xow_wiki Wiki() {return wiki;} private Xow_wiki wiki; public Xoh_module_mgr Mgr() {return mgr;} + public Xol_lang Make_lang(String key) {return wiki.App().Lang_mgr().Get_by_key_or_new(Bry_.new_ascii_(key));} public void Clear() { fxt.Reset(); mgr = fxt.Page().Html_data().Module_mgr(); @@ -60,6 +115,10 @@ class Xoh_module_mgr_fxt { public void Init_msg(byte[] key, String val) { wiki.Msg_mgr().Get_or_make(key).Atrs_set(Bry_.new_ascii_(val), false, false); } + public void Init_msg(int id, String val) { + Xol_msg_itm msg_itm = wiki.Lang().Msg_mgr().Itm_by_id_or_null(id); + msg_itm.Atrs_set(Bry_.new_ascii_(val), false, false); + } public void Test_write(String expd) { mgr.Write(bfr, fxt.App(), wiki, fxt.Page()); Tfds.Eq_str_lines(expd, bfr.XtoStrAndClear()); diff --git a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_wtr.java b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_wtr.java index 3c55c29ba..c865b463a 100644 --- a/400_xowa/src/gplx/xowa/html/modules/Xoh_module_wtr.java +++ b/400_xowa/src/gplx/xowa/html/modules/Xoh_module_wtr.java @@ -19,9 +19,13 @@ package gplx.xowa.html.modules; import gplx.*; import gplx.xowa.*; import gplx.x import gplx.html.*; public class Xoh_module_wtr { private int indent; private int reset_bgn, reset_end; + private boolean js_tail_inited = false; public Bry_bfr Bfr() {return bfr;} private Bry_bfr bfr; public void Init(Bry_bfr bfr) {this.bfr = bfr;} - public void Term() {this.bfr = null;} + public void Term() { + this.bfr = null; + js_tail_inited = true; + } public void Write_css_include(byte[] url) { Write_nl_and_indent(); bfr.Add(Css_include_bgn).Add(url).Add(Css_include_end); @@ -77,6 +81,23 @@ public class Xoh_module_wtr { Write_nl_and_indent(); bfr.Add(Js_globals_ini_var_end); } + private void Write_js_tail_init() { + if (js_tail_inited) return; + js_tail_inited = true; + Write_js_line(Js_line_1); + } + public void Write_js_tail_load_lib(Io_url url) { + Write_js_tail_init(); + Write_nl_and_indent(); + bfr.Add(Js_line_2_bgn); + bfr.Add(url.To_http_file_bry()); + bfr.Add(Js_line_2_end); + } + private static final byte[] + Js_line_1 = Bry_.new_ascii_("xowa.js.jquery.init();") + , Js_line_2_bgn = Bry_.new_ascii_("xowa.js.load_lib('") + , Js_line_2_end = Bry_.new_ascii_("');") + ; private boolean Reset() { if (bfr.Len() == reset_end) { // itms wrote nothing bfr.Delete_rng_to_end(reset_bgn); // delete bgn @@ -109,6 +130,12 @@ public class Xoh_module_wtr { bfr.Add_byte_apos(); bfr.Add(Js_globals_ini_atr_mid); } + public void Write_js_ary_bgn() {js_ary_idx = 0; bfr.Add_byte(Byte_ascii.Brack_bgn);} + public void Write_js_ary_itm(byte[] val) { + if (++js_ary_idx != 1) bfr.Add(js_ary_dlm); + Write_js_quote(Byte_ascii.Apos, val); + } private int js_ary_idx = 0; private static final byte[] js_ary_dlm = Bry_.new_ascii_(", "); + public void Write_js_ary_end() {js_ary_idx = 0; bfr.Add_byte(Byte_ascii.Brack_end);} public void Write_js_var(byte[] key, boolean quote_val, byte[] val) { Write_nl_and_indent(); bfr.Add(Js_var_bgn); diff --git a/400_xowa/src/gplx/xowa/html/portal/Xoa_available_wikis_mgr.java b/400_xowa/src/gplx/xowa/html/portal/Xoa_available_wikis_mgr.java index 05d602063..02eb06dfc 100644 --- a/400_xowa/src/gplx/xowa/html/portal/Xoa_available_wikis_mgr.java +++ b/400_xowa/src/gplx/xowa/html/portal/Xoa_available_wikis_mgr.java @@ -16,14 +16,13 @@ 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.html.portal; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; -import gplx.xowa.wikis.*; +import gplx.xowa.wikis.*; import gplx.xowa.wikis.xwikis.*; public class Xoa_available_wikis_mgr implements GfoInvkAble { private Bry_fmtr itms_as_html_fmtr = Bry_fmtr.new_("\n <li><a href=\"/site/~{domain}/\"~{itm_cls}>~{domain}</a></li>", "domain", "itm_cls"); public Xoa_available_wikis_mgr(Xoa_app app) {this.app = app;} private Xoa_app app; public String Itms_as_html() { if (itms_as_html == null) { - boolean popups_enabled = app.Api_root().Html().Modules().Popups().Enabled(); - String itm_cls = popups_enabled ? " class='xowa-hover-off'" : ""; + String itm_cls = app.Api_root().Html().Modules().Popups().Enabled() ? " class='xowa-hover-off'" : ""; Bry_bfr tmp_bfr = Bry_bfr.new_(); // NOTE: do not use app.Utl_bry_bfr_mkr().Get_k004() as it is being used simultaneously by another caller; TODO: find call Xow_xwiki_mgr xwiki_mgr = app.User().Wiki().Xwiki_mgr(); xwiki_mgr.Sort_by_key(); @@ -37,11 +36,11 @@ public class Xoa_available_wikis_mgr implements GfoInvkAble { } return itms_as_html; } private String itms_as_html; - public void Itms_refresh() {itms_as_html = null;} + public void Itms_reset() {itms_as_html = null;} public boolean Visible() {return visible;} private boolean visible = true; public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { if (ctx.Match(k, Invk_itms_as_html)) return this.Itms_as_html(); - else if (ctx.Match(k, Invk_itms_refresh)) Itms_refresh(); + else if (ctx.Match(k, Invk_itms_refresh)) Itms_reset(); else if (ctx.Match(k, Invk_visible)) return Yn.Xto_str(visible); else if (ctx.Match(k, Invk_visible_)) visible = m.ReadYn("v"); else if (ctx.Match(k, Invk_visible_toggle)) {visible = !visible; app.Gui_mgr().Browser_win().Active_html_box().Html_js_eval_proc("xowa-portal-wikis-visible-toggle", Bool_.XtoStr_lower(visible));} diff --git a/400_xowa/src/gplx/xowa/html/portal/Xoh_subpages_bldr.java b/400_xowa/src/gplx/xowa/html/portal/Xoh_subpages_bldr.java new file mode 100644 index 000000000..50545408a --- /dev/null +++ b/400_xowa/src/gplx/xowa/html/portal/Xoh_subpages_bldr.java @@ -0,0 +1,60 @@ +/* +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.html.portal; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; +public class Xoh_subpages_bldr implements Bry_fmtr_arg { + private Xoa_app app; + private Bry_bfr tmp_bfr = Bry_bfr.reset_(255), ttl_bfr = Bry_bfr.reset_(255); + private byte[][] segs; + public Xoh_subpages_bldr(Xoa_app app) {this.app = app;} + public byte[] Bld(Xoa_ttl ttl) { + if (!(ttl.Ns().Subpages_enabled() && ttl.Leaf_bgn() != Bry_.NotFound)) return Bry_.Empty; // only continue if ns has subpages and ttl has leaf; EX:Help:A/B + byte[] raw = ttl.Raw(); + this.segs = Bry_.Split(raw, Byte_ascii.Slash); + fmtr_grp.Bld_bfr(tmp_bfr, this); + return tmp_bfr.XtoAryAndClear(); + } + public void XferAry(Bry_bfr bfr, int idx) { + int segs_len = segs.length - 1; // last seg is current page; do not print + for (int i = 0; i < segs_len; ++i) { + byte[] dlm = null; + if (i == 0) + dlm = Dlm_1st; + else { + dlm = Dlm_nth; + ttl_bfr.Add_byte_slash(); + } + byte[] seg = segs[i]; + ttl_bfr.Add(seg); + byte[] seg_ttl = ttl_bfr.XtoAry(); + byte[] seg_ttl_enc = app.Href_parser().Encoder().Encode(ttl_bfr.XtoAry()); + byte[] href = Bry_.Add(Xoh_href_parser.Href_wiki_bry, seg_ttl_enc); // EX: /wiki/Help:A + fmtr_itm.Bld_bfr(bfr, dlm, href, seg_ttl, seg); + } + ttl_bfr.Clear(); + } + private static final byte[] Dlm_1st = Bry_.new_ascii_("< "), Dlm_nth = Bry_.new_ascii_("‎ | "); + private static final Bry_fmtr + fmtr_grp = Bry_fmtr.new_(String_.Concat_lines_nl_skip_last + ( "<span class=\"subpages\">~{itms}" + , "</span>" + ), "itms") + , fmtr_itm = Bry_fmtr.new_ + ( "\n ~{dlm}<a href=\"~{href}\" title=\"~{title}\">~{caption}</a>" + , "dlm", "href", "title", "caption") + ; +} \ No newline at end of file diff --git a/400_xowa/src/gplx/xowa/html/portal/Xoh_subpages_bldr_tst.java b/400_xowa/src/gplx/xowa/html/portal/Xoh_subpages_bldr_tst.java new file mode 100644 index 000000000..6be8df5ee --- /dev/null +++ b/400_xowa/src/gplx/xowa/html/portal/Xoh_subpages_bldr_tst.java @@ -0,0 +1,44 @@ +/* +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.html.portal; import gplx.*; import gplx.xowa.*; import gplx.xowa.html.*; +import org.junit.*; +public class Xoh_subpages_bldr_tst { + @Before public void init() {fxt.Init();} private Xoh_subpages_bldr_fxt fxt = new Xoh_subpages_bldr_fxt(); + @Test public void Basic() { + fxt.Test_bld("Help:A/B/C", String_.Concat_lines_nl_skip_last + ( "<span class=\"subpages\">" + , " < <a href=\"/wiki/Help:A\" title=\"Help:A\">Help:A</a>" + , " ‎ | <a href=\"/wiki/Help:A/B\" title=\"Help:A/B\">B</a>" + , "</span>" + )); + } +} +class Xoh_subpages_bldr_fxt { + private Xoa_app app; private Xow_wiki wiki; + private Xoh_subpages_bldr subpages_bldr; + public void Init() { + this.app = Xoa_app_fxt.app_(); + this.wiki = Xoa_app_fxt.wiki_tst_(app); + wiki.Ns_mgr().Ids_get_or_null(Xow_ns_.Id_help).Subpages_enabled_(true); + this.subpages_bldr = new Xoh_subpages_bldr(app); + } + public void Test_bld(String ttl_str, String expd) { + byte[] actl = subpages_bldr.Bld(Xoa_ttl.parse_(wiki, Bry_.new_utf8_(ttl_str))); + Tfds.Eq_str_lines(expd, String_.new_utf8_(actl)); + } +} diff --git a/400_xowa/src/gplx/xowa/html/portal/Xow_portal_mgr.java b/400_xowa/src/gplx/xowa/html/portal/Xow_portal_mgr.java index 0af5acc0e..31849564e 100644 --- a/400_xowa/src/gplx/xowa/html/portal/Xow_portal_mgr.java +++ b/400_xowa/src/gplx/xowa/html/portal/Xow_portal_mgr.java @@ -94,8 +94,9 @@ public class Xow_portal_mgr implements GfoInvkAble { public byte[] Div_logo_bry() {return div_logo_bry;} private byte[] div_logo_bry = Bry_.Empty; public byte[] Div_home_bry() {return api_skin != null && api_skin.Sidebar_home_enabled() ? div_home_bry : Bry_.Empty;} private byte[] div_home_bry = Bry_.Empty; public byte[] Div_wikis_bry(Bry_bfr_mkr bfr_mkr) { + gplx.xowa.apis.xowa.html.Xoapi_toggle_itm itm = wiki.App().Api_root().Html().Page().Toggle_mgr().Itm_offline_wikis().Init(wiki.App().User().Wiki()); Bry_bfr tmp_bfr = bfr_mkr.Get_k004(); - div_wikis_fmtr.Bld_bfr_many(tmp_bfr); + div_wikis_fmtr.Bld_bfr_many(tmp_bfr, itm.Icon_src(), itm.Icon_title(), itm.Elem_display()); return tmp_bfr.Mkr_rls().XtoAryAndClear(); } public byte[] Missing_ns_cls() {return missing_ns_cls;} public Xow_portal_mgr Missing_ns_cls_(byte[] v) {missing_ns_cls = v; return this;} private byte[] missing_ns_cls; // NOTE: must be null due to Init check above @@ -103,7 +104,7 @@ public class Xow_portal_mgr implements GfoInvkAble { private Bry_fmtr div_ns_fmtr = Bry_fmtr.new_("~{portal_ns_subj_href};~{portal_ns_subj_cls};~{portal_ns_talk_href};~{portal_ns_talk_cls}", "portal_ns_subj_href", "portal_ns_subj_cls", "portal_ns_talk_href", "portal_ns_talk_cls"); private Bry_fmtr div_view_fmtr = Bry_fmtr.new_("", "portal_view_read_cls", "portal_view_edit_cls", "portal_view_html_cls", "search_text"); private Bry_fmtr div_logo_fmtr = Bry_fmtr.new_("", "portal_nav_main_href", "portal_logo_url"); - private Bry_fmtr div_wikis_fmtr = Bry_fmtr.new_(""); + private Bry_fmtr div_wikis_fmtr = Bry_fmtr.new_("", "icon_src", "icon_title", "elem_display"); private byte[] Reverse_li(byte[] bry) { return lang_is_rtl ? Xoh_rtl_utl.Reverse_li(bry) : bry; } @@ -126,4 +127,4 @@ public class Xow_portal_mgr implements GfoInvkAble { public static final String Invk_div_logo_ = "div_logo_"; private static KeyVal[] Options_missing_ns_cls_list = KeyVal_.Ary(KeyVal_.new_("", "Show as blue link"), KeyVal_.new_("new", "Show as red link"), KeyVal_.new_("xowa_display_none", "Hide")); private static final byte[] Missing_ns_cls_hide = Bry_.new_ascii_("xowa_display_none"); -} \ No newline at end of file +} 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 f40738c2b..2cf51b560 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 @@ -16,7 +16,7 @@ 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.parsers.lnkes; import gplx.*; import gplx.xowa.*; import gplx.xowa.parsers.*; -import gplx.xowa.apps.fsys.*; import gplx.xowa.net.*; +import gplx.xowa.apps.fsys.*; import gplx.xowa.net.*; import gplx.xowa.wikis.xwikis.*; public class Xop_lnke_wkr implements Xop_ctx_wkr { public void Ctor_ctx(Xop_ctx ctx) {url_parser = ctx.App().Url_parser().Url_parser();} Gfo_url_parser url_parser; Gfo_url_site_data site_data = new Gfo_url_site_data(); Xoa_url_parser xo_url_parser = new Xoa_url_parser(); Xoa_url xo_url_parser_url = Xoa_url.blank_(); public void Page_bgn(Xop_ctx ctx, Xop_root_tkn root) {} diff --git a/400_xowa/src/gplx/xowa/servers/http/Http_server_mgr.java b/400_xowa/src/gplx/xowa/servers/http/Http_server_mgr.java index 09cbb1f6c..7b9c255c3 100644 --- a/400_xowa/src/gplx/xowa/servers/http/Http_server_mgr.java +++ b/400_xowa/src/gplx/xowa/servers/http/Http_server_mgr.java @@ -77,6 +77,8 @@ public class Http_server_mgr implements GfoInvkAble { Xoa_url page_url = app.Url_parser().Parse(page_ttl); // get the url (needed for query args) Xoa_ttl ttl = Xoa_ttl.parse_(wiki, page_ttl); // get the ttl Xoa_page page = wiki.GetPageByTtl(page_url, ttl); // get page and parse it + if (app.Gui_mgr().Browser_win().Active_tab() == null) // no active tab + app.Gui_mgr().Browser_win().Tab_mgr().Tabs_new_init(); // create at least one active tab; DATE:2014-07-30 app.Gui_mgr().Browser_win().Active_page_(page); // HACK: init gui_mgr's page for output (which server ordinarily doesn't need) if (page.Missing()) { // if page does not exist, replace with message; else null_ref error; DATE:2014-03-08 page.Data_raw_(Bry_.new_ascii_("'''Page not found.'''")); @@ -223,9 +225,13 @@ class HttpRequest implements Runnable{ if(req.endsWith("wiki")) req+="/Main_Page"; } - if(req.contains("%xowa-cmd%")){ + if(req.contains("%xowa-cmd%") || req.contains("/xowa-cmd:")){ System.out.println("Command output:"); - String cmd = req.substring(req.indexOf("%xowa-cmd%")+20); + String cmd = ""; + if (req.contains("%xowa-cmd%")) + cmd = req.substring(req.indexOf("%xowa-cmd%")+20); + else + cmd = req.substring(req.indexOf("/xowa-cmd:")+10); System.out.println(cmd); app.Http_server().Run_xowa_cmd(app, cmd); dos.writeBytes("Command sent, see console log for more details."); diff --git a/400_xowa/src/gplx/xowa/users/Xous_window_mgr.java b/400_xowa/src/gplx/xowa/users/Xous_window_mgr.java index cf4aacf6d..40c508727 100644 --- a/400_xowa/src/gplx/xowa/users/Xous_window_mgr.java +++ b/400_xowa/src/gplx/xowa/users/Xous_window_mgr.java @@ -35,8 +35,8 @@ public class Xous_window_mgr implements GfoInvkAble { if (startup_tabs.Type() == Xoapi_startup_tabs_tid_.Tid_previous) { cfg_mgr.Set_by_app("xowa.api.app.startup.tabs.previous" , Calc_previous_tabs(user.App().Gui_mgr().Browser_win().Tab_mgr())); } - cfg_mgr.Set_by_app("app.gui.html.portal.wikis.visible" , Yn.Xto_str(user.App().Gui_mgr().Html_mgr().Portal_mgr().Wikis().Visible())); cfg_mgr.Set_by_app("xowa.api.app.env.version_previous" , Xoa_app_.Version); + user.App().Api_root().Html().Page().Toggle_mgr().Save(cfg_mgr); cfg_mgr.Db_save_txt(); } private String Calc_previous_tabs(Xog_tab_mgr tab_mgr) { diff --git a/400_xowa/src/gplx/xowa/users/prefs/Prefs_converter.java b/400_xowa/src/gplx/xowa/users/prefs/Prefs_converter.java index 0ca4dc765..d03005bc9 100644 --- a/400_xowa/src/gplx/xowa/users/prefs/Prefs_converter.java +++ b/400_xowa/src/gplx/xowa/users/prefs/Prefs_converter.java @@ -18,21 +18,22 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. package gplx.xowa.users.prefs; import gplx.*; import gplx.xowa.*; import gplx.xowa.users.*; import gplx.xowa.cfgs.*; public class Prefs_converter { - Bry_bfr bfr = Bry_bfr.new_(); - ListAdp list = ListAdp_.new_(); + private Bry_bfr bfr = Bry_bfr.new_(); + private ListAdp list = ListAdp_.new_(); public void Check(Xoa_app app) { int options_version = app.Sys_cfg().Options_version(); if (options_version == 1) { Io_url cfg_dir = app.User().Fsys_mgr().App_data_cfg_dir(); Io_url cfg_fil = cfg_dir.GenSubFil("user_system_cfg.gfs"); Io_url trg_fil = cfg_fil.GenNewNameAndExt(gplx.xowa.cfgs.Xoa_cfg_db_txt.File_name); - if (Io_mgr._.ExistsFil(trg_fil)) return; // do not overwrite file if it is there (i.e.: it's already converted); needed when running in app_mode = cmd (see HACK in Xob_bldr.Run) - String old_str = Io_mgr._.LoadFilStr_args(cfg_fil).MissingIgnored_(true).Exec(); - String new_str = Convert(old_str); - Io_mgr._.SaveFilStr(trg_fil, new_str); - app.Cfg_mgr().Db_load_txt(); - app.Cfg_mgr().Set_by_app("app.setup.dumps.wiki_storage_type", "sqlite"); - app.Log_wtr().Log_msg_to_session_fmt("converted options to v2"); + if (!Io_mgr._.ExistsFil(trg_fil)) { // do not overwrite file if it is there (i.e.: it's already converted); needed when running in app_mode = cmd (see HACK in Xob_bldr.Run) + String old_str = Io_mgr._.LoadFilStr_args(cfg_fil).MissingIgnored_(true).Exec(); + String new_str = Convert(old_str); + Io_mgr._.SaveFilStr(trg_fil, new_str); + app.Cfg_mgr().Db_load_txt(); + app.Cfg_mgr().Set_by_app("app.setup.dumps.wiki_storage_type", "sqlite"); + app.Log_wtr().Log_msg_to_session_fmt("converted options to v2"); + } } } public String Convert(String raw) { @@ -109,4 +110,4 @@ public class Prefs_converter { class Prefs_converter_itm { public String Key() {return key;} public void Key_(String v) {this.key = v;} private String key; public String Val() {return val;} public void Val_(String v) {this.val = v;} private String val; -} \ No newline at end of file +} diff --git a/400_xowa/src/gplx/xowa/users/prefs/Prefs_rename_mgr.java b/400_xowa/src/gplx/xowa/users/prefs/Prefs_rename_mgr.java new file mode 100644 index 000000000..dd25c7ed4 --- /dev/null +++ b/400_xowa/src/gplx/xowa/users/prefs/Prefs_rename_mgr.java @@ -0,0 +1,47 @@ +/* +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.users.prefs; import gplx.*; import gplx.xowa.*; import gplx.xowa.users.*; +public class Prefs_rename_mgr { + private ListAdp list = ListAdp_.new_(); + public Prefs_rename_mgr() { + List_add(list, "app.cfgs.get('app.gui.html.portal.wikis.visible', 'app').val", "app.cfgs.get('xowa.api.html.page.toggles.get(''offline-wikis'').visible', 'app').val"); + } + public boolean Check(Io_url url) { + String cur_str = Io_mgr._.LoadFilStr_args(url).MissingIgnored_().Exec(); + boolean cur_str_changed = false; + int list_len = list.Count(); + for (int i = 0; i < list_len; ++i) { + Prefs_rename_itm itm = (Prefs_rename_itm)list.FetchAt(i); + if (String_.Has(cur_str, itm.Src())) { + cur_str_changed = true; + cur_str = String_.Replace(cur_str, itm.Src(), itm.Trg()); + Gfo_usr_dlg_._.Log_many("", "", "cfg.replace: src=~{src} trg = ~{trg}", itm.Src(), itm.Trg()); + } + } + if (cur_str_changed) + Io_mgr._.SaveFilStr(url, cur_str); + return cur_str_changed; + } + private static void List_add(ListAdp list, String src, String trg) {list.Add(new Prefs_rename_itm(src, trg));} + public static final Prefs_rename_mgr _ = new Prefs_rename_mgr(); +} +class Prefs_rename_itm { + public Prefs_rename_itm(String src, String trg) {this.src = src; this.trg = trg;} + public String Src() {return src;} private String src; + public String Trg() {return trg;} private String trg; +} \ No newline at end of file diff --git a/400_xowa/src/gplx/xowa/wikis/modules/Xow_module__top_icon.java b/400_xowa/src/gplx/xowa/wikis/modules/Xow_module__top_icon.java new file mode 100644 index 000000000..cfa6c544a --- /dev/null +++ b/400_xowa/src/gplx/xowa/wikis/modules/Xow_module__top_icon.java @@ -0,0 +1,20 @@ +/* +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.wikis.modules; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*; +public class Xow_module__top_icon extends Xow_module_base { +} diff --git a/400_xowa/src/gplx/xowa/wikis/modules/Xow_module_base.java b/400_xowa/src/gplx/xowa/wikis/modules/Xow_module_base.java new file mode 100644 index 000000000..5c934f86d --- /dev/null +++ b/400_xowa/src/gplx/xowa/wikis/modules/Xow_module_base.java @@ -0,0 +1,28 @@ +/* +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.wikis.modules; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*; +public class Xow_module_base implements GfoInvkAble { + public boolean Enabled() {return enabled;} private boolean enabled; + @gplx.Virtual public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { + if (ctx.Match(k, Invk_enabled)) return Yn.Xto_str(enabled); + else if (ctx.Match(k, Invk_enabled_)) enabled = m.ReadYn("v"); + else return GfoInvkAble_.Rv_unhandled; + return this; + } + private static final String Invk_enabled = "enabled", Invk_enabled_ = "enabled_"; +} diff --git a/400_xowa/src/gplx/xowa/wikis/modules/Xow_module_mgr.java b/400_xowa/src/gplx/xowa/wikis/modules/Xow_module_mgr.java new file mode 100644 index 000000000..9bfef47bf --- /dev/null +++ b/400_xowa/src/gplx/xowa/wikis/modules/Xow_module_mgr.java @@ -0,0 +1,36 @@ +/* +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.wikis.modules; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*; +import gplx.xowa.html.modules.popups.*; +public class Xow_module_mgr implements GfoInvkAble { + private Hash_adp_bry regy = Hash_adp_bry.cs_(); + public Xow_module_mgr(Xow_wiki wiki) { + this.popup_mgr = new Xow_popup_mgr(wiki); + regy.Add_str_obj("top_icon", itm_top_icon); + } + public void Init_by_wiki(Xow_wiki wiki) { + popup_mgr.Init_by_wiki(wiki); + } + public Xow_module__top_icon Itm_top_icon() {return itm_top_icon;} private Xow_module__top_icon itm_top_icon = new Xow_module__top_icon(); + public Xow_popup_mgr Popup_mgr() {return popup_mgr;} private Xow_popup_mgr popup_mgr; + public Xow_module_base Get(byte[] key) {return (Xow_module_base)regy.Get_by_bry(key);} + public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { + if (ctx.Match(k, Invk_get)) return Get(m.ReadBry("v")); + else return GfoInvkAble_.Rv_unhandled; + } private static final String Invk_get = "get"; +} diff --git a/400_xowa/src_120_wiki/gplx/xowa/Xow_xwiki_itm.java b/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_itm.java similarity index 69% rename from 400_xowa/src_120_wiki/gplx/xowa/Xow_xwiki_itm.java rename to 400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_itm.java index 736ee3ad7..b8547d80f 100644 --- a/400_xowa/src_120_wiki/gplx/xowa/Xow_xwiki_itm.java +++ b/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_itm.java @@ -15,16 +15,21 @@ 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; import gplx.*; +package gplx.xowa.wikis.xwikis; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*; public class Xow_xwiki_itm implements gplx.CompareAble { - public Xow_xwiki_itm(byte[] key, byte[] fmt, byte wiki_tid, int lang_id, byte[] domain) {this.key = key; this.fmt = fmt; this.wiki_tid = wiki_tid; this.lang_id = lang_id; this.domain = domain; this.key_str = String_.new_utf8_(key);} - public byte[] Key() {return key;} private byte[] key; + public Xow_xwiki_itm(byte[] key_bry, byte[] fmt, byte wiki_tid, int lang_id, byte[] domain) { + this.key_bry = key_bry; this.key_str = String_.new_utf8_(key_bry); + this.fmt = fmt; this.wiki_tid = wiki_tid; this.lang_id = lang_id; this.domain = domain; + this.name = key_bry; + } + public byte[] Key_bry() {return key_bry;} private byte[] key_bry; public String Key_str() {return key_str;} private String key_str; public byte[] Fmt() {return fmt;} private byte[] fmt; public byte[] Domain() {return domain;} private byte[] domain; public byte Wiki_tid() {return wiki_tid;} private byte wiki_tid; public int Lang_id() {return lang_id;} private int lang_id; public boolean Type_is_lang(int cur_lang_id) {return lang_id != Xol_lang_itm_.Id__unknown && cur_lang_id != lang_id && Bry_.Len_gt_0(fmt);} + public byte[] Name() {return name;} public Xow_xwiki_itm Name_(byte[] v) {name = v; return this;} private byte[] name; public boolean Offline() {return offline;} public Xow_xwiki_itm Offline_(boolean v) {offline = v; return this;} private boolean offline; - public int compareTo(Object obj) {Xow_xwiki_itm comp = (Xow_xwiki_itm)obj; return Bry_.Compare(key, comp.key);} + public int compareTo(Object obj) {Xow_xwiki_itm comp = (Xow_xwiki_itm)obj; return Bry_.Compare(key_bry, comp.key_bry);} } diff --git a/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_itm_.java b/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_itm_.java new file mode 100644 index 000000000..a2a82a598 --- /dev/null +++ b/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_itm_.java @@ -0,0 +1,29 @@ +/* +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.wikis.xwikis; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*; +public class Xow_xwiki_itm_ { + public static Xow_xwiki_itm new_mw_(Bry_bfr tmp_bfr, Gfo_url_parser url_parser, Gfo_url tmp_url, byte[] key, byte[] url_php, byte[] name, byte cur_wiki_tid) { // EX: "commons|//commons.wikimedia.org/wiki/Category:$1|Wikimedia Commons" "DMOZ|http://www.dmoz.org/Regional/Europe/$1/"|DMOZ" + byte[] url_gfs = gplx.xowa.apps.Xoa_gfs_php_mgr.Xto_gfs(tmp_bfr, url_php); + url_parser.Parse(tmp_url, url_gfs, 0, url_gfs.length); + byte[] domain_bry = tmp_url.Site(); + Xow_wiki_domain domain = Xow_wiki_domain_.parse_by_domain(domain_bry); + Xol_lang_itm lang_itm = Xol_lang_itm_.Get_by_key(domain.Lang()); + int lang_id = lang_itm == null ? Xol_lang_itm_.Id__unknown : lang_itm.Id(); + return new Xow_xwiki_itm(key, url_gfs, domain.Tid(), lang_id, domain_bry).Name_(name); + } +} diff --git a/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_itm__tst.java b/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_itm__tst.java new file mode 100644 index 000000000..a606b8a6b --- /dev/null +++ b/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_itm__tst.java @@ -0,0 +1,46 @@ +/* +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.wikis.xwikis; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*; +import org.junit.*; import gplx.xowa.wikis.*; import gplx.xowa.langs.*; +public class Xow_xwiki_itm__tst { + @Before public void init() {fxt.Clear();} private Xow_xwiki_itm__fxt fxt = new Xow_xwiki_itm__fxt(); + @Test public void Commons() {fxt.Test_new_mw_("commons.wikimedia.org/wiki/$1" , "commons.wikimedia.org" , "commons.wikimedia.org/wiki/~{0}" , Xow_wiki_domain_.Tid_commons , Xol_lang_itm_.Id__unknown);} + @Test public void Wiktionary() {fxt.Test_new_mw_("fr.wiktionary.org/wiki/$1" , "fr.wiktionary.org" , "fr.wiktionary.org/wiki/~{0}" , Xow_wiki_domain_.Tid_wiktionary , Xol_lang_itm_.Id_fr);} + @Test public void Lang() {fxt.Test_new_mw_("fr.wikipedia.org/wiki/$1" , "fr.wikipedia.org" , "fr.wikipedia.org/wiki/~{0}" , Xow_wiki_domain_.Tid_wikipedia , Xol_lang_itm_.Id_fr);} +} +class Xow_xwiki_itm__fxt { + private byte cur_wiki_tid; + private Bry_bfr tmp_bfr; + private Gfo_url_parser url_parser; + private Gfo_url tmp_url; + private byte[] key; + public void Clear() { + cur_wiki_tid = Xow_wiki_domain_.Tid_wikipedia; + tmp_bfr = Bry_bfr.new_(255); + url_parser = new Gfo_url_parser(); + tmp_url = new Gfo_url(); + key = Bry_.new_ascii_("test"); + } + public void Test_new_mw_(String url_php, String expd_domain, String expd_url_fmt, byte expd_wiki_tid, int expd_lang_tid) { + Xow_xwiki_itm itm = Xow_xwiki_itm_.new_mw_(tmp_bfr, url_parser, tmp_url, key, Bry_.new_utf8_(url_php), key, cur_wiki_tid); + Tfds.Eq(expd_domain , String_.new_utf8_(itm.Domain())); + Tfds.Eq(expd_url_fmt , String_.new_utf8_(itm.Fmt())); + Tfds.Eq(expd_wiki_tid , itm.Wiki_tid(), "wiki"); + Tfds.Eq(expd_lang_tid , itm.Lang_id(), "lang"); + } +} diff --git a/400_xowa/src_120_wiki/gplx/xowa/Xow_xwiki_mgr.java b/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_mgr.java similarity index 88% rename from 400_xowa/src_120_wiki/gplx/xowa/Xow_xwiki_mgr.java rename to 400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_mgr.java index 629921031..ead15da8f 100644 --- a/400_xowa/src_120_wiki/gplx/xowa/Xow_xwiki_mgr.java +++ b/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_mgr.java @@ -15,10 +15,11 @@ 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; import gplx.*; -import gplx.xowa.wikis.*; +package gplx.xowa.wikis.xwikis; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*; public class Xow_xwiki_mgr implements GfoInvkAble { - public Xow_xwiki_mgr(Xow_wiki wiki) {this.wiki = wiki;} private Xow_wiki wiki; + private Xow_xwiki_mgr_srl srl; + public Xow_xwiki_mgr(Xow_wiki wiki) {this.wiki = wiki; srl = new Xow_xwiki_mgr_srl(this);} + public Xow_wiki Wiki() {return wiki;} private Xow_wiki wiki; public Xow_lang_mgr Lang_mgr() {return lang_mgr;} private Xow_lang_mgr lang_mgr = Xow_lang_mgr.dflt_(); public int Len() {return list.Count();} private OrderedHash list = OrderedHash_.new_bry_(); private Hash_adp_bry hash = Hash_adp_bry.ci_ascii_(); // ASCII:lang_code public void Clear() {hash.Clear(); list.Clear();} @@ -40,16 +41,6 @@ public class Xow_xwiki_mgr implements GfoInvkAble { Xow_xwiki_itm itm = new Xow_xwiki_itm(alias, fmt, wiki_tid, lang_tid, domain); Add_itm(itm, null); } - public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { - if (ctx.Match(k, Invk_count)) return list.Count(); - else if (ctx.Match(k, Invk_add_bulk)) Add_bulk(m.ReadBry("v")); - else if (ctx.Match(k, Invk_add_bulk_langs)) Add_bulk_langs(m); - else if (ctx.Match(k, Invk_add_bulk_peers)) Add_bulk_peers(m.ReadBry("v")); - else if (ctx.Match(k, Invk_itms_print)) return Exec_itms_print(m.ReadBry("v")); - else if (ctx.Match(k, Invk_clear)) this.Clear(); - else return GfoInvkAble_.Rv_unhandled; - return this; - } public static final String Invk_add_bulk = "add_bulk", Invk_add_bulk_langs = "add_bulk_langs", Invk_add_bulk_peers = "add_bulk_peers", Invk_itms_print = "itms_print", Invk_count = "count", Invk_clear = "clear"; public void Sort_by_key() { list.Sort(); } @@ -92,7 +83,7 @@ public class Xow_xwiki_mgr implements GfoInvkAble { int wikis_len = list.Count(); for (int i = 0; i < wikis_len; i++) { Xow_xwiki_itm itm = (Xow_xwiki_itm)list.FetchAt(i); - byte[] key = itm.Key(); + byte[] key = itm.Key_bry(); if (Bry_.Eq(key, Xow_wiki_domain_.Key_home_bry)) continue; // skip home byte[] domain = itm.Domain(); if (seen.Has(domain)) continue; @@ -157,7 +148,7 @@ public class Xow_xwiki_mgr implements GfoInvkAble { Add_bulk_langs(grp_key, wiki_tid); } public void Add_bulk_langs(byte[] grp_key) {Add_bulk_langs(grp_key, wiki.Domain_tid());} - private void Add_bulk_langs(byte[] grp_key, byte wiki_tid) { + public void Add_bulk_langs(byte[] grp_key, byte wiki_tid) { OrderedHash langs = wiki.App().Lang_mgr().Xto_hash(grp_key); int len = langs.Count(); byte[] wiki_tid_name = Xow_wiki_domain_.Key_by_tid(wiki_tid); @@ -175,11 +166,28 @@ public class Xow_xwiki_mgr implements GfoInvkAble { } lang_mgr.Grps_sort(); } private static final String GRP_KEY = "xowa.wiki.xwikis"; + public void Add_itm(Xow_xwiki_itm itm) {Add_itm(itm, null);} private void Add_itm(Xow_xwiki_itm xwiki, Xoac_lang_itm lang) { - if ( !hash.Has(xwiki.Key()) // only register xwiki / lang pair once - && lang != null) // null lang should not be registered + if ( !hash.Has(xwiki.Key_bry()) // only register xwiki / lang pair once + && lang != null) // null lang should not be registered lang_mgr.Itms_reg(xwiki, lang); - hash.AddReplace(xwiki.Key(), xwiki); - list.AddReplace(xwiki.Key(), xwiki); + hash.AddReplace(xwiki.Key_bry(), xwiki); + list.AddReplace(xwiki.Key_bry(), xwiki); } + public void Add_many(byte[] v) {srl.Load_by_bry(v);} + public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { + if (ctx.Match(k, Invk_count)) return list.Count(); + else if (ctx.Match(k, Invk_add_bulk)) Add_bulk(m.ReadBry("v")); + else if (ctx.Match(k, Invk_add_bulk_langs)) Add_bulk_langs(m); + else if (ctx.Match(k, Invk_add_bulk_peers)) Add_bulk_peers(m.ReadBry("v")); + else if (ctx.Match(k, Invk_add_many)) Add_many(m.ReadBry("v")); + else if (ctx.Match(k, Invk_itms_print)) return Exec_itms_print(m.ReadBry("v")); + else if (ctx.Match(k, Invk_clear)) this.Clear(); + else return GfoInvkAble_.Rv_unhandled; + return this; + } + private static final String + Invk_add_bulk = "add_bulk", Invk_add_bulk_langs = "add_bulk_langs", Invk_add_bulk_peers = "add_bulk_peers", Invk_add_many = "add_many" + , Invk_itms_print = "itms_print", Invk_count = "count", Invk_clear = "clear" + ; } diff --git a/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_mgr_srl.java b/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_mgr_srl.java new file mode 100644 index 000000000..f4dd3c17b --- /dev/null +++ b/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_mgr_srl.java @@ -0,0 +1,45 @@ +/* +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.wikis.xwikis; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*; +import gplx.srls.dsvs.*; import gplx.xowa.wikis.*; import gplx.xowa.wikis.xwikis.*; +class Xow_xwiki_mgr_srl extends Dsv_wkr_base { + private Xow_xwiki_mgr mgr; private Xow_wiki wiki; + private byte[] key, url_fmt, name; + private Gfo_url tmp_url; private Gfo_url_parser url_parser; + public Xow_xwiki_mgr_srl(Xow_xwiki_mgr mgr) { + this.mgr = mgr; + this.wiki = mgr.Wiki(); + this.tmp_url = new Gfo_url(); + this.url_parser = wiki.App().Url_parser().Url_parser(); + } + @Override public Dsv_fld_parser[] Fld_parsers() {return new Dsv_fld_parser[] {Dsv_fld_parser_.Bry_parser, Dsv_fld_parser_.Bry_parser, Dsv_fld_parser_.Bry_parser};} + @Override public boolean Write_bry(Dsv_tbl_parser parser, int fld_idx, byte[] src, int bgn, int end) { + switch (fld_idx) { + case 0: key = Bry_.Mid(src, bgn, end); return true; + case 1: url_fmt = Bry_.Mid(src, bgn, end); return true; + case 2: name = Bry_.Mid(src, bgn, end); return true; + default: return false; + } + } + @Override public void Commit_itm(Dsv_tbl_parser parser, int pos) { + Xow_xwiki_itm itm = Xow_xwiki_itm_.new_mw_(tmp_bfr, url_parser, tmp_url, key, url_fmt, name, mgr.Wiki().Domain_tid()); + mgr.Add_itm(itm); + } + @Override public void Load_by_bry_bgn() {tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_b128();} private Bry_bfr tmp_bfr; + @Override public void Load_by_bry_end() {tmp_bfr.Mkr_rls();} +} diff --git a/400_xowa/src_120_wiki/gplx/xowa/Xow_xwiki_mgr_tst.java b/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_mgr_tst.java similarity index 92% rename from 400_xowa/src_120_wiki/gplx/xowa/Xow_xwiki_mgr_tst.java rename to 400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_mgr_tst.java index 93b06f383..61a8e6fd9 100644 --- a/400_xowa/src_120_wiki/gplx/xowa/Xow_xwiki_mgr_tst.java +++ b/400_xowa/src/gplx/xowa/wikis/xwikis/Xow_xwiki_mgr_tst.java @@ -15,7 +15,7 @@ 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; import gplx.*; +package gplx.xowa.wikis.xwikis; import gplx.*; import gplx.xowa.*; import gplx.xowa.wikis.*; import org.junit.*; import gplx.xowa.wikis.*; import gplx.xowa.langs.*; public class Xow_xwiki_mgr_tst { Xow_xwiki_mgr_fxt fxt = new Xow_xwiki_mgr_fxt(); @@ -30,7 +30,7 @@ public class Xow_xwiki_mgr_tst { @Test public void Add_bulk_langs_grp_itm() {fxt.Langs_ini().Tst_add_bulk_langs("europe_west~ja", fxt.xwiki_("de", "de.wikipedia.org", "http://de.wikipedia.org/wiki/~{0}"), fxt.xwiki_("fr", "fr.wikipedia.org", "http://fr.wikipedia.org/wiki/~{0}"), fxt.xwiki_("ja", "ja.wikipedia.org", "http://ja.wikipedia.org/wiki/~{0}"));} @Test public void Add_bulk_langs_grp_commons() { fxt.Langs_ini(); - GfoInvkAble_.InvkCmd_msg(fxt.Wiki().Xwiki_mgr(), Xow_xwiki_mgr.Invk_add_bulk_langs, GfoMsg_.new_parse_(Xow_xwiki_mgr.Invk_add_bulk_langs).Add("grp_key", "europe_west").Add("wiki_type_name", "wikipedia")); + fxt.Wiki().Xwiki_mgr().Add_bulk_langs(Bry_.new_ascii_("europe_west"), Xow_wiki_domain_.Tid_wikipedia); fxt.Tst_itms(fxt.xwiki_("de", "de.wikipedia.org", "http://de.wikipedia.org/wiki/~{0}"), fxt.xwiki_("fr", "fr.wikipedia.org", "http://fr.wikipedia.org/wiki/~{0}")); } @Test public void Add_bulk_peers() {fxt.Peers_ini().Tst_add_bulk_peers("peer", fxt.xwiki_null_("commons"), fxt.xwiki_null_("m"), fxt.xwiki_("wikt", "en.wiktionary.org", "http://en.wiktionary.org/wiki/~{0}"), fxt.xwiki_("wiktionary", "en.wiktionary.org", "http://en.wiktionary.org/wiki/~{0}"), fxt.xwiki_("s", "en.wikisource.org", "http://en.wikisource.org/wiki/~{0}"));} @@ -54,7 +54,7 @@ class Xow_xwiki_mgr_fxt { public Xow_xwiki_itm xwiki_(String key, String domain, String fmt) {return new Xow_xwiki_itm(Bry_.new_utf8_(key), Bry_.new_utf8_(fmt), Xow_wiki_domain_.Tid_other, Xol_lang_itm_.Id__unknown, Bry_.new_utf8_(domain));} public Xow_xwiki_mgr_fxt Tst_add_bulk(String raw, int lang_tid, byte wiki_tid, String alias, String fmt, String domain) { Xow_xwiki_itm itm = xwiki_mgr.Add_bulk_row(Xol_lang_itm_.Regy(), Bry_.new_ascii_(raw)); - Tfds.Eq(alias, String_.new_ascii_(itm.Key())); + Tfds.Eq(alias, String_.new_ascii_(itm.Key_bry())); Tfds.Eq(fmt, String_.new_ascii_(itm.Fmt())); Tfds.Eq(wiki_tid, itm.Wiki_tid(), "wiki_tid"); Tfds.Eq(lang_tid, itm.Lang_id(), "lang_id"); @@ -102,7 +102,7 @@ class Xow_xwiki_mgr_fxt { int len = itms.length; ListAdp rv = ListAdp_.new_(); for (int i = 0; i < len; i++) { - byte[] alias = itms[i].Key(); + byte[] alias = itms[i].Key_bry(); Xow_xwiki_itm itm = xwiki_mgr.Get_by_key(alias); if (itm == null) itm = xwiki_null_(String_.new_utf8_(alias)); // "null", ignore rv.Add(itm); @@ -114,9 +114,9 @@ class Xow_xwiki_mgr_fxt { for (int i = 0; i < len; i++) { Xow_xwiki_itm itm = itms[i]; if (Bry_.Len_eq_0(itm.Domain())) // "null", ignore - sb.Add(itm.Key()).Add_char_nl(); + sb.Add(itm.Key_bry()).Add_char_nl(); else { - sb.Add(itm.Key()).Add_char_pipe().Add(itm.Domain()).Add_char_pipe().Add(itm.Fmt()).Add_char_nl(); + sb.Add(itm.Key_bry()).Add_char_pipe().Add(itm.Domain()).Add_char_pipe().Add(itm.Fmt()).Add_char_nl(); } } return sb.XtoStrAndClear(); diff --git a/400_xowa/src/gplx/xowa/xtns/Xow_xtn_mgr.java b/400_xowa/src/gplx/xowa/xtns/Xow_xtn_mgr.java index 4603c30ec..0b9b1047b 100644 --- a/400_xowa/src/gplx/xowa/xtns/Xow_xtn_mgr.java +++ b/400_xowa/src/gplx/xowa/xtns/Xow_xtn_mgr.java @@ -16,13 +16,15 @@ 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.xtns; import gplx.*; import gplx.xowa.*; -import gplx.xowa.xtns.cite.*; +import gplx.xowa.xtns.cite.*; import gplx.xowa.xtns.relatedSites.*; public class Xow_xtn_mgr implements GfoInvkAble { private OrderedHash regy = OrderedHash_.new_bry_(); public int Count() {return regy.Count();} public Cite_xtn_mgr Xtn_cite() {return xtn_cite;} private Cite_xtn_mgr xtn_cite; + public Sites_xtn_mgr Xtn_sites() {return xtn_sites;} private Sites_xtn_mgr xtn_sites; public Xow_xtn_mgr Ctor_by_app(Xoa_app app) { // NOTE: needed for options Add(app, new Cite_xtn_mgr()); + Add(app, new Sites_xtn_mgr()); Add(app, new gplx.xowa.xtns.scribunto.Scrib_xtn_mgr()); Add(app, new gplx.xowa.xtns.gallery.Gallery_xtn_mgr()); Add(app, new gplx.xowa.xtns.imaps.Imap_xtn_mgr()); @@ -71,7 +73,8 @@ public class Xow_xtn_mgr implements GfoInvkAble { return xtn; } private void Set_members(Xox_mgr mgr) { - if (Bry_.Eq(mgr.Xtn_key(), Cite_xtn_mgr.XTN_KEY)) xtn_cite = (Cite_xtn_mgr)mgr; + if (Bry_.Eq(mgr.Xtn_key(), Cite_xtn_mgr.XTN_KEY)) xtn_cite = (Cite_xtn_mgr)mgr; + else if (Bry_.Eq(mgr.Xtn_key(), Sites_xtn_mgr.XTN_KEY)) xtn_sites = (Sites_xtn_mgr)mgr; } public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { if (ctx.Match(k, Invk_get)) return Get_or_fail(m.ReadBry("v")); diff --git a/400_xowa/src/gplx/xowa/xtns/imaps/Imap_html_fmtrs.java b/400_xowa/src/gplx/xowa/xtns/imaps/Imap_html_fmtrs.java index bf438ed98..f2375cd30 100644 --- a/400_xowa/src/gplx/xowa/xtns/imaps/Imap_html_fmtrs.java +++ b/400_xowa/src/gplx/xowa/xtns/imaps/Imap_html_fmtrs.java @@ -47,7 +47,7 @@ class Imap_html_fmtrs { , " </a>" ), "imap_id", "img_elem_id", "img_alt", "img_src", "img_w", "img_h", "img_cls", "anchor_href", "anchor_title" ) - , Desc_style = Bry_fmtr.new_(" style=\"height:~{div_h}px; width: ~{div_w}px;\"", "div_h", "div_w") + , Desc_style = Bry_fmtr.new_(" style=\"height:~{div_h}px; width: ~{div_w}px;\"", "div_w", "div_h") , Desc_main = Bry_fmtr.new_(String_.Concat_lines_nl_skip_last ( "" , " <div style=\"margin-left:~{margin_left}px; margin-top:~{margin_top}px; text-align:left;\">" diff --git a/400_xowa/src/gplx/xowa/xtns/imaps/Imap_parser.java b/400_xowa/src/gplx/xowa/xtns/imaps/Imap_parser.java index 9d64f0d1a..7c84c10af 100644 --- a/400_xowa/src/gplx/xowa/xtns/imaps/Imap_parser.java +++ b/400_xowa/src/gplx/xowa/xtns/imaps/Imap_parser.java @@ -133,11 +133,12 @@ class Imap_parser { } int pts_len = pts.Count(); if (reqd_pts == Reqd_poly) { - if (pts_len == 0) return Add_err(Bool_.Y, itm_bgn, itm_end, "imagemap_missing_coord"); - else if (pts_len % 2 != 0) return Add_err(Bool_.Y, itm_bgn, itm_end, "imagemap_poly_odd"); + if (pts_len == 0) return Add_err(Bool_.Y, itm_bgn, itm_end, "imagemap_missing_coord"); + else if (pts_len % 2 != 0) return Add_err(Bool_.Y, itm_bgn, itm_end, "imagemap_poly_odd"); } else { - if (pts_len < reqd_pts ) return Add_err(Bool_.Y, itm_bgn, itm_end, "imagemap_missing_coord"); + if (pts_len < reqd_pts) return Add_err(Bool_.Y, itm_bgn, itm_end, "imagemap_missing_coord"); + else if (pts_len > reqd_pts) pts.Del_range(reqd_pts, pts_len - 1); // NOTE: MW allows more points, but doesn't show them; EX: rect 1 2 3 4 5 -> rect 1 2 3 4; PAGE:en.w:Kilauea DATE:2014-07-28 } pos = Bry_finder.Trim_fwd_space_tab(src, pos, itm_end); Imap_itm_shape shape_itm = new Imap_itm_shape(shape_tid, (Double_obj_val[])pts.XtoAryAndClear(Double_obj_val.class)); diff --git a/400_xowa/src/gplx/xowa/xtns/imaps/Imap_parser_tst.java b/400_xowa/src/gplx/xowa/xtns/imaps/Imap_parser_tst.java index 14c6276ac..a84817af5 100644 --- a/400_xowa/src/gplx/xowa/xtns/imaps/Imap_parser_tst.java +++ b/400_xowa/src/gplx/xowa/xtns/imaps/Imap_parser_tst.java @@ -20,6 +20,7 @@ import org.junit.*; public class Imap_parser_tst { @Before public void init() {fxt.Reset();} private Imap_parser_fxt fxt = new Imap_parser_fxt(); @Test public void Rect_pass() {fxt.Test_shape("rect 1 2 3 4 [[A]]" , fxt.itm_rect_("[[A]]", 1, 2, 3, 4));} + @Test public void Rect_pass_many() {fxt.Test_shape("rect 1 2 3 4 5 6[[A]]" , fxt.itm_rect_("[[A]]", 1, 2, 3, 4));} // PURPOSE: MW allows extra points to be passed; PAGE:en.w:Kilauea DATE:2014-07-28 @Test public void Circle_pass() {fxt.Test_shape("circle 1 2 3 [[A]]" , fxt.itm_circle_("[[A]]", 1, 2, 3));} @Test public void Poly_pass() {fxt.Test_shape("poly 1 2 3 4 5 6 [[A]]" , fxt.itm_poly_("[[A]]", 1, 2, 3, 4, 5, 6));} @Test public void Poly_pass_chars() {fxt.Test_shape("poly a b [[A]]" , fxt.itm_poly_("[[A]]", 0, 0));} // PURPOSE: non-numeric should be converted to 0; PAGE:uk.w:Стратосфера; DATE:2014-07-26 diff --git a/400_xowa/src/gplx/xowa/xtns/imaps/Imap_xnde_html_all_tst.java b/400_xowa/src/gplx/xowa/xtns/imaps/Imap_xnde_html_all_tst.java index 7e48243bd..5a9d1d9d6 100644 --- a/400_xowa/src/gplx/xowa/xtns/imaps/Imap_xnde_html_all_tst.java +++ b/400_xowa/src/gplx/xowa/xtns/imaps/Imap_xnde_html_all_tst.java @@ -87,7 +87,7 @@ public class Imap_xnde_html_all_tst { , "desc top-left" , "</imagemap>" ), String_.Concat_lines_nl_skip_last - ( "<div class=\"noresize\" style=\"height:123px; width: 0px;\">" + ( "<div class=\"noresize\" style=\"height:0px; width: 123px;\">" , " <map name=\"imageMap_1_1\">" , " </map>" , " <img id=\"xowa_file_img_0\" alt=\"a1\" src=\"file:///mem/wiki/repo/trg/thumb/7/0/A.png/123px.png\" width=\"123\" height=\"0\" usemap=\"#imageMap_1_1\"/>" diff --git a/400_xowa/src/gplx/xowa/xtns/listings/Listing_xtn_mgr.java b/400_xowa/src/gplx/xowa/xtns/listings/Listing_xtn_mgr.java index 533582cd7..43fae8087 100644 --- a/400_xowa/src/gplx/xowa/xtns/listings/Listing_xtn_mgr.java +++ b/400_xowa/src/gplx/xowa/xtns/listings/Listing_xtn_mgr.java @@ -77,5 +77,4 @@ public class Listing_xtn_mgr extends Xox_mgr_base { private Xol_msg_itm Load_msg(Xow_wiki wiki, Xop_ctx sub_ctx, String ttl) { return wiki.Msg_mgr().Find_or_null(Bry_.new_utf8_(ttl)); } - public static void Create_msgs() {} } diff --git a/400_xowa/src/gplx/xowa/xtns/pfuncs/ifs/Pfunc_switch.java b/400_xowa/src/gplx/xowa/xtns/pfuncs/ifs/Pfunc_switch.java index 68f195c29..cf824b593 100644 --- a/400_xowa/src/gplx/xowa/xtns/pfuncs/ifs/Pfunc_switch.java +++ b/400_xowa/src/gplx/xowa/xtns/pfuncs/ifs/Pfunc_switch.java @@ -28,6 +28,7 @@ public class Pfunc_switch extends Pf_func_base { Arg_itm_tkn dflt_val_tkn = null; byte[] dflt_val_bry = null; Arg_nde_tkn last_keyless_arg = null; Bry_bfr tmp = ctx.Wiki().Utl_bry_bfr_mkr().Get_b512(); + Xol_kwd_mgr kwd_mgr = ctx.Lang().Kwd_mgr(); for (int i = 0; i < self_args_len; i++) { Arg_nde_tkn arg = self.Args_get_by_idx(i); if (arg.KeyTkn_exists()) { // = exists; EX: "|a=1|" @@ -39,7 +40,7 @@ public class Pfunc_switch extends Pf_func_base { match = Get_or_eval(ctx, src, caller, self, bfr, arg.Val_tkn(), tmp); break; // stop iterating; explicit match found; } - else if (Bry_.HasAtBgn(case_key, Dflt_keyword)){// case_key is #default; EX: {{#switch:a|#default=1}}; note that "#defaultabc" is also allowed; + else if (kwd_mgr.Kwd_default_match(case_key)){ // case_key is #default; EX: {{#switch:a|#default=1}}; note that "#defaultabc" is also allowed; dflt_val_tkn = arg.Val_tkn(); // set dflt_val_tkn; note that there is no "break" b/c multiple #defaults will use last one; EX: {{#switch:a|#default=1|#default=2}} -> 2 dflt_val_bry = null; // set dflt_val_bry to null; EX:{{#switch:a|#defaultabc|#default=2}} -> 2 } @@ -50,7 +51,7 @@ public class Pfunc_switch extends Pf_func_base { byte[] case_val = Get_or_eval(ctx, src, caller, self, bfr, arg.Val_tkn(), tmp); if (Pf_func_.Eq_(case_val, argx)) // argx matches case_val; EX: case_val="|a|" and argx="a" fall_thru_found = true; // set as fall-thru; note that fall-thrus will have "val" in next keyed arg, so need to continue iterating; EX: {{#switch:a|a|b=1|c=2}} "a" is fall-thru, but "b" is next keyed arg with a val - else if (Bry_.HasAtBgn(case_val, Dflt_keyword)){// case_val starts with #default; EX: "|#default|" or "|#defaultabc|" + else if (kwd_mgr.Kwd_default_match(case_val)) { // case_val starts with #default; EX: "|#default|" or "|#defaultabc|" last_keyless_arg = null; // unflag last keyless arg else |#defaultabc| will be treated as last_keyless_arg and generate "#defaultabc"; DATE:2014-05-29 dflt_val_tkn = null; // unflag dflt_val_tkn; EX: {{#switch:a|b|#default=1|#default}} -> "" x> "1" int case_val_len = case_val.length; diff --git a/400_xowa/src/gplx/xowa/xtns/pfuncs/ifs/Pfunc_switch_tst.java b/400_xowa/src/gplx/xowa/xtns/pfuncs/ifs/Pfunc_switch_tst.java index 06c995b60..d7586a2ff 100644 --- a/400_xowa/src/gplx/xowa/xtns/pfuncs/ifs/Pfunc_switch_tst.java +++ b/400_xowa/src/gplx/xowa/xtns/pfuncs/ifs/Pfunc_switch_tst.java @@ -77,5 +77,15 @@ public class Pfunc_switch_tst { fxt.Test_parse_tmpl_str_test("{{#switch:a|#default|#default=1}}" , "{{test}}" , "1"); // override "|#default|" with "|#default=2|" fxt.Test_parse_tmpl_str_test("{{#switch:b|#default|1}}" , "{{test}}" , "1"); // override "|#default|" with "|2|" fxt.Test_parse_tmpl_str_test("{{#switch:b|#defaultabc=1}}" , "{{test}}" , "1"); // this is also supported by MW - } + } + @Test public void Multiple() { + fxt.Wiki().Lang().Kwd_mgr().Kwd_default_match_reset(); + Xol_kwd_grp kwd_grp = fxt.Wiki().Lang().Kwd_mgr().Get_or_new(Xol_kwd_grp_.Id_xtn_default); + kwd_grp.Srl_load(Bool_.Y, new byte[][] {Bry_.new_ascii_("#default1"), Bry_.new_ascii_("#default2")}); + fxt.Test_parse_tmpl_str_test("{{#switch:|n=n|#default1=y}}" , "{{test}}" , "y"); + fxt.Test_parse_tmpl_str_test("{{#switch:|n=n|#default2=y}}" , "{{test}}" , "y"); + fxt.Test_parse_tmpl_str_test("{{#switch:a|n=n|#default=y}}" , "{{test}}" , ""); // #default is just a case + fxt.Test_parse_tmpl_str_test("{{#switch:|n=n|#default=y}}" , "{{test}}" , ""); // make sure empty String doesn't throw out of bounds + fxt.Wiki().Lang().Kwd_mgr().Kwd_default_match_reset(); + } } diff --git a/400_xowa/src/gplx/xowa/xtns/pfuncs/ttls/Pfunc_urlfunc.java b/400_xowa/src/gplx/xowa/xtns/pfuncs/ttls/Pfunc_urlfunc.java index 2c217d9ba..5bc5546eb 100644 --- a/400_xowa/src/gplx/xowa/xtns/pfuncs/ttls/Pfunc_urlfunc.java +++ b/400_xowa/src/gplx/xowa/xtns/pfuncs/ttls/Pfunc_urlfunc.java @@ -16,6 +16,7 @@ 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.xtns.pfuncs.ttls; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; import gplx.xowa.xtns.pfuncs.*; +import gplx.xowa.wikis.xwikis.*; public class Pfunc_urlfunc extends Pf_func_base { // EX: {{lc:A}} -> a @Override public boolean Func_require_colon_arg() {return true;} @Override public void Func_evaluate(Xop_ctx ctx, byte[] src, Xot_invk caller, Xot_invk self, Bry_bfr bb) { @@ -31,12 +32,12 @@ public class Pfunc_urlfunc extends Pf_func_base { // EX: {{lc:A}} -> a Xow_xwiki_itm xwiki = ttl.Wik_itm(); if (xwiki != null) { // xwiki exists; add as //commons.wikimedia.org/wiki/A#b?c=d if (tid == Tid_canonical) - trg.Add(Xoh_href_parser.Href_http_bry); // "http://" + trg.Add(Xoh_href_parser.Href_http_bry); // "http://" else - trg.Add(Xoa_consts.Url_relative_prefix); // "//" - trg.Add(xwiki.Domain()) // "commons.wikimedia.org" - .Add(Xoh_href_parser.Href_wiki_bry) // "/wiki/" - .Add_mid(ttl_ary, xwiki.Key().length + 1, ttl_ary.length); // "A#b?c=d"; +1 for colon after "commons:"; NOTE: ugly way of getting rest of url, but ttl currently does not have Full_wo_wiki + trg.Add(Xoa_consts.Url_relative_prefix); // "//" + trg.Add(xwiki.Domain()) // "commons.wikimedia.org" + .Add(Xoh_href_parser.Href_wiki_bry) // "/wiki/" + .Add_mid(ttl_ary, xwiki.Key_bry().length + 1, ttl_ary.length); // "A#b?c=d"; +1 for colon after "commons:"; NOTE: ugly way of getting rest of url, but ttl currently does not have Full_wo_wiki } else { Bry_bfr tmp_bfr = ctx.App().Utl_bry_bfr_mkr().Get_b512().Mkr_rls(); diff --git a/400_xowa/src/gplx/xowa/xtns/relatedSites/Sites_html_bldr.java b/400_xowa/src/gplx/xowa/xtns/relatedSites/Sites_html_bldr.java new file mode 100644 index 000000000..ebdd5e8b3 --- /dev/null +++ b/400_xowa/src/gplx/xowa/xtns/relatedSites/Sites_html_bldr.java @@ -0,0 +1,52 @@ +/* +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.xtns.relatedSites; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; +public class Sites_html_bldr implements Bry_fmtr_arg { + private Sites_xtn_mgr xtn_mgr; + private Bry_bfr tmp_bfr = Bry_bfr.reset_(255), tmp_ttl = Bry_bfr.reset_(255); + private ListAdp list; private int list_len; + public Sites_html_bldr(Sites_xtn_mgr xtn_mgr) {this.xtn_mgr = xtn_mgr;} + private Bry_fmtr url_fmtr = Bry_fmtr.keys_("title"); + public byte[] Bld_all(ListAdp list) { + list_len = list.Count(); if (list_len == 0) return Bry_.Empty; + this.list = list; + fmtr_grp.Bld_bfr_many(tmp_bfr, xtn_mgr.Msg_related_sites(), this); + return tmp_bfr.XtoAryAndClear(); + } + public void XferAry(Bry_bfr bfr, int idx) { + for (int i = 0; i < list_len; ++i) { + Sites_regy_itm itm = (Sites_regy_itm)list.FetchAt(i); + byte[] href = url_fmtr.Fmt_(itm.Xwiki_itm().Fmt()).Bld_bry_many(tmp_ttl, itm.Ttl().Page_db()); + fmtr_itm.Bld_bfr(bfr, itm.Cls(), href, itm.Xwiki_itm().Name()); + } + } + private static final Bry_fmtr + fmtr_grp = Bry_fmtr.new_(String_.Concat_lines_nl_skip_last + ( "<div id=\"p-relatedsites\" class=\"portal\">" + , " <h3>~{related_sites_hdr}</h3>" + , " <div class=\"body\">" + , " <ul>~{itms}" + , " </ul>" + , " </div>" + , "</div>" + ), "related_sites_hdr", "itms") + , fmtr_itm = Bry_fmtr.new_ + ( "\n <li class=\"interwiki-~{key}\"><a href=\"~{href}\">~{name}</a></li>" + , "key", "href", "name") + ; +} \ No newline at end of file diff --git a/400_xowa/src/gplx/xowa/xtns/relatedSites/Sites_html_bldr_tst.java b/400_xowa/src/gplx/xowa/xtns/relatedSites/Sites_html_bldr_tst.java new file mode 100644 index 000000000..bf74fcbfe --- /dev/null +++ b/400_xowa/src/gplx/xowa/xtns/relatedSites/Sites_html_bldr_tst.java @@ -0,0 +1,60 @@ +/* +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.xtns.relatedSites; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; +import org.junit.*; +public class Sites_html_bldr_tst { + @Before public void init() {fxt.Clear();} private Sites_html_bldr_fxt fxt = new Sites_html_bldr_fxt(); + @Test public void Basic() { + fxt.Init_ttl("commons:A"); + fxt.Init_ttl("w:A"); + fxt.Test_bld(String_.Concat_lines_nl_skip_last + ( "<div id=\"p-relatedsites\" class=\"portal\">" + , " <h3>Related articles</h3>" + , " <div class=\"body\">" + , " <ul>" + , " <li class=\"interwiki-commons\"><a href=\"commons.wikimedia.org/wiki/Category:A\">Wikimedia Commons</a></li>" + , " <li class=\"interwiki-w\"><a href=\"en.wikipedia.org/wiki/A\">Wikipedia</a></li>" + , " </ul>" + , " </div>" + , "</div>" + )); + } +} +class Sites_html_bldr_fxt { + private Xoa_app app; private Xow_wiki wiki; + private ListAdp list = ListAdp_.new_(); + private Sites_xtn_mgr xtn_mgr; + public void Clear() { + this.app = Xoa_app_fxt.app_(); + this.wiki = Xoa_app_fxt.wiki_tst_(app); + wiki.Xwiki_mgr().Add_many(Bry_.new_ascii_("w|en.wikipedia.org/wiki/$1|Wikipedia\ncommons|commons.wikimedia.org/wiki/Category:$1|Wikimedia Commons")); + wiki.Lang().Msg_mgr().Itm_by_key_or_new("relatedarticles-title", "Related articles"); + this.xtn_mgr = wiki.Xtn_mgr().Xtn_sites(); + xtn_mgr.Enabled_y_(); + xtn_mgr.Xtn_init_by_wiki(wiki); + list.Clear(); + } + public void Init_ttl(String lnki_ttl) { + Xoa_ttl ttl = Xoa_ttl.parse_(wiki, Bry_.new_utf8_(lnki_ttl)); + xtn_mgr.Match(ttl, list); + } + public void Test_bld(String expd) { + byte[] actl = xtn_mgr.Html_bldr().Bld_all(list); + Tfds.Eq_str_lines(expd, String_.new_utf8_(actl)); + } +} diff --git a/400_xowa/src/gplx/xowa/xtns/relatedSites/Sites_regy_itm.java b/400_xowa/src/gplx/xowa/xtns/relatedSites/Sites_regy_itm.java new file mode 100644 index 000000000..c2587c736 --- /dev/null +++ b/400_xowa/src/gplx/xowa/xtns/relatedSites/Sites_regy_itm.java @@ -0,0 +1,28 @@ +/* +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.xtns.relatedSites; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; +import gplx.xowa.wikis.xwikis.*; +public class Sites_regy_itm { + public Sites_regy_itm(Xow_xwiki_itm xwiki_itm, Xoa_ttl ttl) { + this.xwiki_itm = xwiki_itm; this.ttl = ttl; + this.cls = Bry_.Lower_ascii(Bry_.Copy(xwiki_itm.Key_bry())); + } + public Xow_xwiki_itm Xwiki_itm() {return xwiki_itm;} private Xow_xwiki_itm xwiki_itm; + public Xoa_ttl Ttl() {return ttl;} private Xoa_ttl ttl; + public byte[] Cls() {return cls;} private byte[] cls; +} diff --git a/400_xowa/src/gplx/xowa/xtns/relatedSites/Sites_xtn_mgr.java b/400_xowa/src/gplx/xowa/xtns/relatedSites/Sites_xtn_mgr.java new file mode 100644 index 000000000..b644ba30b --- /dev/null +++ b/400_xowa/src/gplx/xowa/xtns/relatedSites/Sites_xtn_mgr.java @@ -0,0 +1,44 @@ +/* +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.xtns.relatedSites; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; +import gplx.html.*; import gplx.xowa.wikis.*; import gplx.xowa.wikis.xwikis.*; +public class Sites_xtn_mgr extends Xox_mgr_base { + private Xow_xwiki_mgr xwiki_mgr; + public Sites_xtn_mgr() { + html_bldr = new Sites_html_bldr(this); + } + @Override public boolean Enabled_default() {return false;} + @Override public byte[] Xtn_key() {return XTN_KEY;} public static final byte[] XTN_KEY = Bry_.new_ascii_("relatedSites"); + @Override public Xox_mgr Clone_new() {return new Sites_xtn_mgr();} + @Override public void Xtn_init_by_wiki(Xow_wiki wiki) { + this.wiki = wiki; + this.xwiki_mgr = wiki.Xwiki_mgr(); + if (!Enabled()) return; + msg_related_sites = wiki.Msg_mgr().Val_by_key_obj("relatedarticles-title"); + } + public Xow_wiki Wiki() {return wiki;} private Xow_wiki wiki; + public Sites_html_bldr Html_bldr() {return html_bldr;} private Sites_html_bldr html_bldr; + public byte[] Msg_related_sites() {return msg_related_sites;} private byte[] msg_related_sites; + public void Match(Xoa_ttl lnki_ttl, ListAdp list) { + if (!this.Enabled()) return; + byte[] xwiki_key = lnki_ttl.Wik_txt(); + Xow_xwiki_itm xwiki_itm = xwiki_mgr.Get_by_key(xwiki_key); if (xwiki_itm == null) return; + Sites_regy_itm sites_itm = new Sites_regy_itm(xwiki_itm, lnki_ttl); + list.Add(sites_itm); + } +} diff --git a/400_xowa/src/gplx/xowa/xtns/scribunto/Scrib_core.java b/400_xowa/src/gplx/xowa/xtns/scribunto/Scrib_core.java index 75046f661..662abdd94 100644 --- a/400_xowa/src/gplx/xowa/xtns/scribunto/Scrib_core.java +++ b/400_xowa/src/gplx/xowa/xtns/scribunto/Scrib_core.java @@ -161,6 +161,7 @@ public class Scrib_core { Scrib_lua_mod mod = Mods_get_or_new(mod_name, mod_text); KeyVal[] func_args = Scrib_kv_utl_.base1_many_(mod.Init_chunk_func(), String_.new_utf8_(fnc_name)); KeyVal[] func_rslt = engine.CallFunction(lib_mw.Mod().Fncs_get_id("executeModule"), func_args); // call init_chunk to get proc dynamically; DATE:2014-07-12 + if (func_rslt == null || func_rslt.length == 0) throw Err_.new_("lua.error:function did not return a value; fnc_name=~{0}", String_.new_utf8_(fnc_name)); Scrib_lua_proc proc = (Scrib_lua_proc)func_rslt[1].Val(); // note that init_chunk should have: [0]:true/false result; [1]:proc func_args = Scrib_kv_utl_.base1_many_(proc); func_rslt = engine.CallFunction(lib_mw.Mod().Fncs_get_id("executeFunction"), func_args); // call function now @@ -186,18 +187,13 @@ public class Scrib_core { } public static Scrib_core Core() {return core;} public static Scrib_core Core_new_(Xoa_app app, Xop_ctx ctx) {core = new Scrib_core(app, ctx); return core;} private static Scrib_core core; public void Handle_error(String err, String traceback) { - byte[] excerpt = Bry_.Empty; + String excerpt = ""; try { Xot_invk src_frame = frame_current; if (src_frame != null) - excerpt = Bry_.Mid(cur_src, src_frame.Src_bgn(), src_frame.Src_end()); + excerpt = String_.new_utf8_(cur_src, src_frame.Src_bgn(), src_frame.Src_end()); } catch (Exception e) {Err_.Noop(e);} - app.Usr_dlg().Warn_many("", "", "lua error; page=~{0} excerpt=~{1} err=~{2} ~{3}" - , page.Ttl().Page_db_as_str() - , String_.new_utf8_(excerpt) - , err - , traceback - ); + throw Err_.new_(err, page.Ttl().Page_db_as_str(), excerpt, traceback); } public static void Core_page_changed(Xoa_page page) { if (core != null) { diff --git a/400_xowa/src/gplx/xowa/xtns/scribunto/Scrib_invoke_func.java b/400_xowa/src/gplx/xowa/xtns/scribunto/Scrib_invoke_func.java index f64dda72c..9dc3c63c0 100644 --- a/400_xowa/src/gplx/xowa/xtns/scribunto/Scrib_invoke_func.java +++ b/400_xowa/src/gplx/xowa/xtns/scribunto/Scrib_invoke_func.java @@ -57,7 +57,7 @@ public class Scrib_invoke_func extends Pf_func_base { invoke_wkr.Eval_end(ctx.Cur_page(), mod_name, fnc_name, log_time_bgn); } catch (Exception e) { - bfr.Add_mid(src, self.Src_bgn(), self.Src_end()); + Error(bfr, wiki.Msg_mgr(), ""); bfr.Add(Html_tag_.Comm_bgn).Add_str(Err_.Message_gplx_brief(e)).Add(Html_tag_.Comm_end); ctx.App().Usr_dlg().Warn_many("", "", "invoke failed: ~{0} ~{1} ~{2}", String_.new_utf8_(ctx.Cur_page().Ttl().Raw()), String_.new_utf8_(src, self.Src_bgn(), self.Src_end()), Err_.Message_gplx_brief(e)); Scrib_core.Core_invalidate(); // reset core @@ -65,7 +65,7 @@ public class Scrib_invoke_func extends Pf_func_base { } public static void Error(Bry_bfr bfr, Xow_msg_mgr msg_mgr, String error) {Error(bfr, msg_mgr, Bry_.new_utf8_(error));} public static void Error(Bry_bfr bfr, Xow_msg_mgr msg_mgr, byte[] error) { - Bry_fmtr fmtr = Bry_fmtr.new_("<strong class=\"error\"><span class=\"scribunto-error\" id=\"mw-scribunto-error-0\">~{0}: ~{1}.</span></strong>"); // <!--~{0}: ~{1}.--> + Bry_fmtr fmtr = Bry_fmtr.new_("<strong class=\"error\"><span class=\"scribunto-error\" id=\"mw-scribunto-error-0\">~{0} ~{1}</span></strong>"); // <!--~{0}: ~{1}.--> byte[] script_error_msg = msg_mgr.Val_by_id(Xol_msg_itm_.Id_scribunto_parser_error); fmtr.Bld_bfr_many(bfr, script_error_msg, error); } diff --git a/400_xowa/src/gplx/xowa/xtns/scribunto/engines/luaj/Luaj_engine.java b/400_xowa/src/gplx/xowa/xtns/scribunto/engines/luaj/Luaj_engine.java index cd55ba6e6..388ad992b 100644 --- a/400_xowa/src/gplx/xowa/xtns/scribunto/engines/luaj/Luaj_engine.java +++ b/400_xowa/src/gplx/xowa/xtns/scribunto/engines/luaj/Luaj_engine.java @@ -27,6 +27,7 @@ public class Luaj_engine implements Scrib_engine { server = new Luaj_server(core, debug_enabled); proc_mgr = core.Proc_mgr(); Luaj_server_func_recv._.Engine_(this); + Luaj_server_func_dbg._.Core_(core); } public Scrib_server Server() {return server;} public void Server_(Scrib_server v) {server = (Luaj_server)v;} public boolean Dbg_print() {return dbg_print;} public void Dbg_print_(boolean v) {dbg_print = v;} private boolean dbg_print; diff --git a/400_xowa/src/gplx/xowa/xtns/scribunto/engines/luaj/Luaj_server.java b/400_xowa/src/gplx/xowa/xtns/scribunto/engines/luaj/Luaj_server.java index 0fe20a38c..9d71f8fb5 100644 --- a/400_xowa/src/gplx/xowa/xtns/scribunto/engines/luaj/Luaj_server.java +++ b/400_xowa/src/gplx/xowa/xtns/scribunto/engines/luaj/Luaj_server.java @@ -27,7 +27,7 @@ public class Luaj_server implements Scrib_server { Globals_singleton = JsePlatform.standardGlobals(); Globals_singleton.load(new DebugLib()); Globals_singleton.load(new MWClient()); - + Globals_singleton.set("dbg", Luaj_server_func_dbg._); String root_str = init_args[2]; if (Op_sys.Cur().Tid_is_wnt()) root_str = String_.Replace(root_str, Op_sys.Wnt.Fsys_dir_spr_str(), Op_sys.Lnx.Fsys_dir_spr_str()); diff --git a/400_xowa/src/gplx/xowa/xtns/scribunto/engines/luaj/Luaj_server_func_dbg.java b/400_xowa/src/gplx/xowa/xtns/scribunto/engines/luaj/Luaj_server_func_dbg.java new file mode 100644 index 000000000..dce86395a --- /dev/null +++ b/400_xowa/src/gplx/xowa/xtns/scribunto/engines/luaj/Luaj_server_func_dbg.java @@ -0,0 +1,35 @@ +/* +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.xtns.scribunto.engines.luaj; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; import gplx.xowa.xtns.scribunto.*; import gplx.xowa.xtns.scribunto.engines.*; +import org.luaj.vm2.Varargs; +import org.luaj.vm2.lib.VarArgFunction; +public class Luaj_server_func_dbg extends VarArgFunction { + private Scrib_core core; + public void Core_(Scrib_core v) {this.core = v;} + public Varargs invoke(Varargs args) { + int len = args.narg(); + Bry_bfr bfr = Bry_bfr.new_(); + bfr.Add_str("<span class='xowa_dbg' style='color:red'>"); + for (int i = 1; i <= len; ++i) + bfr.Add_str(gplx.html.Html_utl.Escape_html_as_str(args.arg(i).strvalue().toString())); + bfr.Add_str("</span><br/>"); + core.Page().Html_data().Dbg_(bfr.XtoAryAndClear()); + return NONE; + } + public static Luaj_server_func_dbg _ = new Luaj_server_func_dbg(); +} diff --git a/400_xowa/src/gplx/xowa/xtns/scribunto/lib/Scrib_lib_title.java b/400_xowa/src/gplx/xowa/xtns/scribunto/lib/Scrib_lib_title.java index 8121c37bc..af8fad711 100644 --- a/400_xowa/src/gplx/xowa/xtns/scribunto/lib/Scrib_lib_title.java +++ b/400_xowa/src/gplx/xowa/xtns/scribunto/lib/Scrib_lib_title.java @@ -16,7 +16,7 @@ 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.xtns.scribunto.lib; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; import gplx.xowa.xtns.scribunto.*; -import gplx.xowa.wikis.caches.*; import gplx.xowa.xtns.pfuncs.ttls.*; +import gplx.xowa.wikis.caches.*; import gplx.xowa.xtns.pfuncs.ttls.*; import gplx.xowa.wikis.xwikis.*; public class Scrib_lib_title implements Scrib_lib { public Scrib_lib_title(Scrib_core core) {this.core = core;} private Scrib_core core; public Scrib_lua_mod Mod() {return mod;} private Scrib_lua_mod mod; diff --git a/400_xowa/src/gplx/xowa/xtns/wdatas/Wdata_wiki_mgr_fxt.java b/400_xowa/src/gplx/xowa/xtns/wdatas/Wdata_wiki_mgr_fxt.java index fd5ca0c2a..c9fe95219 100644 --- a/400_xowa/src/gplx/xowa/xtns/wdatas/Wdata_wiki_mgr_fxt.java +++ b/400_xowa/src/gplx/xowa/xtns/wdatas/Wdata_wiki_mgr_fxt.java @@ -16,7 +16,7 @@ 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.xtns.wdatas; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; -import gplx.xowa.wikis.*; import gplx.xowa.gui.*; import gplx.xowa.xtns.wdatas.imports.*; +import gplx.xowa.wikis.*; import gplx.xowa.wikis.xwikis.*; import gplx.xowa.gui.*; import gplx.xowa.xtns.wdatas.imports.*; import gplx.xowa.langs.*; public class Wdata_wiki_mgr_fxt { public Xow_wiki Wiki() {return parser_fxt.Wiki();} diff --git a/400_xowa/src/gplx/xowa/xtns/wdatas/Wdata_xwiki_link_wtr.java b/400_xowa/src/gplx/xowa/xtns/wdatas/Wdata_xwiki_link_wtr.java index d9ca4020d..a3f0541b6 100644 --- a/400_xowa/src/gplx/xowa/xtns/wdatas/Wdata_xwiki_link_wtr.java +++ b/400_xowa/src/gplx/xowa/xtns/wdatas/Wdata_xwiki_link_wtr.java @@ -16,7 +16,7 @@ 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.xtns.wdatas; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; -import gplx.json.*; import gplx.xowa.wikis.*; import gplx.xowa.xtns.wdatas.*; +import gplx.json.*; import gplx.xowa.wikis.*; import gplx.xowa.wikis.xwikis.*; import gplx.xowa.xtns.wdatas.*; public class Wdata_xwiki_link_wtr implements Bry_fmtr_arg { public Wdata_xwiki_link_wtr Page_(Xoa_page page) {this.page = page; return this;} private Xoa_page page; public void XferAry(Bry_bfr bfr, int idx) { diff --git a/400_xowa/src/gplx/xowa/xtns/wdatas/Wdata_xwiki_link_wtr_tst.java b/400_xowa/src/gplx/xowa/xtns/wdatas/Wdata_xwiki_link_wtr_tst.java index 6b3fd3666..35c37dc79 100644 --- a/400_xowa/src/gplx/xowa/xtns/wdatas/Wdata_xwiki_link_wtr_tst.java +++ b/400_xowa/src/gplx/xowa/xtns/wdatas/Wdata_xwiki_link_wtr_tst.java @@ -33,27 +33,29 @@ public class Wdata_xwiki_link_wtr_tst { fxt.Test_xwiki_links("Q1_en", "Q1_de"); fxt.Init_external_links_mgr_clear(); fxt.Test_parse_langs("{{noexternallanglinks:de}}", String_.Concat_lines_nl - ( "<div id=\"xowa-lang\">" - , " <h5>In other languages (<a href=\"/site/www.wikidata.org/wiki/Q1\">wikidata</a>)</h5>" - , " <h4>grp1</h4>" - , " <table style='width: 100%;'>" - , " <tr>" - , " <td style='width: 10%; padding-bottom: 5px;'>German</td><td style='width: 20%; padding-bottom: 5px;'><a hreflang=\"de\" title=\"Q1 de\" href=\"/site/de.wikipedia.org/wiki/Q1 de\">Q1 de</a></td><td style='width: 3%; padding-bottom: 5px;'></td>" - , " </tr>" - , " </table>" - , "</div>" + ( "<div id=\"xowa-lang\">" + , " <h5>In other languages (<a href=\"/site/www.wikidata.org/wiki/Q1\">wikidata</a>)<a href='javascript:xowa_toggle_visible(\"wikidata-langs\");'><img id='wikidata-langs-toggle-icon' src='file:///mem/xowa/user/test_user/app/img/window/portal/twisty_right.png' title='' /></a></h5>" + , " <div id='wikidata-langs-toggle-elem' style='display:none;'>" + , " <h4>grp1</h4>" + , " <table style='width: 100%;'>" + , " <tr>" + , " <td style='width: 10%; padding-bottom: 5px;'>German</td><td style='width: 20%; padding-bottom: 5px;'><a hreflang=\"de\" title=\"Q1 de\" href=\"/site/de.wikipedia.org/wiki/Q1 de\">Q1 de</a></td><td style='width: 3%; padding-bottom: 5px;'></td>" + , " </tr>" + , " </table>" + , " </div>" + , "</div>" )); } @Test public void Links_w_name_fmt() { // PURPOSE: wikidata changed links node from "enwiki:A" to "enwiki:{name:A,badges:[]}"; DATE:2013-09-14 fxt.Init_xwikis_add("en", "fr", "de"); fxt.Init_qids_add("en", Xow_wiki_domain_.Tid_wikipedia, "Q1_en", "Q1"); Json_doc jdoc = Json_doc.new_(String_.Concat_lines_nl - ( "{ \"entity\":\"q1\"" - , ", \"links\":" - , " { \"dewiki\":\"q1_de\"" - , " , \"frwiki\":{\"name\":\"q1_fr\",\"badges\":[]}" - , " }" - , "}" + ( "{ \"entity\":\"q1\"" + , ", \"links\":" + , " { \"dewiki\":\"q1_de\"" + , " , \"frwiki\":{\"name\":\"q1_fr\",\"badges\":[]}" + , " }" + , "}" )); Wdata_doc wdata_doc = new Wdata_doc(Bry_.new_ascii_("Q1"), fxt.App().Wiki_mgr().Wdata_mgr(), jdoc); fxt.Init_pages_add(wdata_doc); @@ -63,13 +65,13 @@ public class Wdata_xwiki_link_wtr_tst { fxt.Init_xwikis_add("en", "fr", "de"); fxt.Init_qids_add("en", Xow_wiki_domain_.Tid_wikipedia, "Q1_en", "Q1"); Json_doc jdoc = Json_doc.new_(String_.Concat_lines_nl - ( "{ \"entity\":\"q1\"" - , ", \"links\":" - , " { \"dewiki\":\"q1_de\"" - , " , \"frwiki\":{\"name\":\"q1_fr\",\"badges\":[]}" + ( "{ \"entity\":\"q1\"" + , ", \"links\":" + , " { \"dewiki\":\"q1_de\"" + , " , \"frwiki\":{\"name\":\"q1_fr\",\"badges\":[]}" , " , \"dewikisource\":\"q1_dewikisource\"" // this should be ignored - , " }" - , "}" + , " }" + , "}" )); Wdata_doc wdata_doc = new Wdata_doc(Bry_.new_ascii_("Q1"), fxt.App().Wiki_mgr().Wdata_mgr(), jdoc); fxt.Init_pages_add(wdata_doc); @@ -78,14 +80,14 @@ public class Wdata_xwiki_link_wtr_tst { // @Test public void No_wikidata_link() { // fxt.Init_xwikis_add("fr", "de"); // fxt.Test_parse_langs("[[fr:A]]", String_.Concat_lines_nl -// ( "<div id=\"xowa-lang\">" -// , " <h5>In other languages</h5>" -// , " <h4>grp1</h4>" -// , " <ul style='-moz-column-count: 3; list-style:none;'>" -// , " <li><span style='display:inline-block; min-width:150px'>French</span><a hreflang=\"fr\" title=\"A\" href=\"/site/fr.wikipedia.org/wiki/A\">A</a></li>" -// , " <li><span style='display:inline-block; min-width:150px'>French</span><a hreflang=\"fr\" title=\"A\" href=\"/site/fr.wikipedia.org/wiki/A\">A</a></li>" -// , " </ul>" -// , "</div>" +// ( "<div id=\"xowa-lang\">" +// , " <h5>In other languages</h5>" +// , " <h4>grp1</h4>" +// , " <ul style='-moz-column-count: 3; list-style:none;'>" +// , " <li><span style='display:inline-block; min-width:150px'>French</span><a hreflang=\"fr\" title=\"A\" href=\"/site/fr.wikipedia.org/wiki/A\">A</a></li>" +// , " <li><span style='display:inline-block; min-width:150px'>French</span><a hreflang=\"fr\" title=\"A\" href=\"/site/fr.wikipedia.org/wiki/A\">A</a></li>" +// , " </ul>" +// , "</div>" // )); // } @@ -97,14 +99,14 @@ public class Wdata_xwiki_link_wtr_tst { // fxt.Test_xwiki_links("Q1_en", "Q1_de", "Q1_fr"); // fxt.Init_external_links_mgr_clear(); // fxt.Test_parse_langs("{{noexternallanglinks:*}}", String_.Concat_lines_nl -// ( "<div id=\"xowa-lang\">" -// , " <h5>In other languages (<a href=\"/site/www.wikidata.org/wiki/Q1\">wikidata</a>)</h5>" -// , " <h4>grp1</h4>" -// , " <ul style='-moz-column-count: 3; list-style:none;'>" -// , " <li><span style='display:inline-block; min-width:150px'>German</span><a hreflang=\"de\" title=\"Q1 de\" href=\"/site/de.wikipedia.org/wiki/Q1 de\">Q1 de</a></li>" -// , " <li><span style='display:inline-block; min-width:150px'>French</span><a hreflang=\"fr\" title=\"Q1 fr\" href=\"/site/fr.wikipedia.org/wiki/Q1 fr\">Q1 fr</a></li>" -// , " </ul>" -// , "</div>" +// ( "<div id=\"xowa-lang\">" +// , " <h5>In other languages (<a href=\"/site/www.wikidata.org/wiki/Q1\">wikidata</a>)</h5>" +// , " <h4>grp1</h4>" +// , " <ul style='-moz-column-count: 3; list-style:none;'>" +// , " <li><span style='display:inline-block; min-width:150px'>German</span><a hreflang=\"de\" title=\"Q1 de\" href=\"/site/de.wikipedia.org/wiki/Q1 de\">Q1 de</a></li>" +// , " <li><span style='display:inline-block; min-width:150px'>French</span><a hreflang=\"fr\" title=\"Q1 fr\" href=\"/site/fr.wikipedia.org/wiki/Q1 fr\">Q1 fr</a></li>" +// , " </ul>" +// , "</div>" // )); // } } diff --git a/400_xowa/src_060_utl/gplx/Gfo_usr_dlg_base.java b/400_xowa/src_060_utl/gplx/Gfo_usr_dlg_base.java index 18e323df6..e2985b13d 100644 --- a/400_xowa/src_060_utl/gplx/Gfo_usr_dlg_base.java +++ b/400_xowa/src_060_utl/gplx/Gfo_usr_dlg_base.java @@ -32,6 +32,10 @@ public class Gfo_usr_dlg_base implements Gfo_usr_dlg { public String Note_many(String grp_key, String msg_key, String fmt, Object... args) {String rv = Bld_msg_many(grp_key, msg_key, fmt, args ); log_wtr.Log_msg_to_session(rv); ui_wkr.Write_note(rv); return rv;} public String Note_none(String grp_key, String msg_key, String fmt) {String rv = Bld_msg_none(grp_key, msg_key, fmt ); log_wtr.Log_msg_to_session(rv); ui_wkr.Write_note(rv); return rv;} public String Note_gui_none(String grp_key, String msg_key, String fmt) {String rv = Bld_msg_none(grp_key, msg_key, fmt ); ui_wkr.Write_note(rv); return rv;} + public String Plog_many(String grp_key, String msg_key, String fmt, Object... args) { + String rv = Log_many(grp_key, msg_key, fmt, args); + return Prog_direct(rv); + } public Err Fail_many(String grp_key, String msg_key, String fmt, Object... args) { Err rv = Err_.new_(Bld_msg_many(grp_key, msg_key, fmt, args)); log_wtr.Log_err(Err_.Message_gplx(rv)); diff --git a/400_xowa/src_100_app/gplx/xowa/Xoac_wiki_grp.java b/400_xowa/src_100_app/gplx/xowa/Xoac_wiki_grp.java index b4cc6850d..fde80bc9a 100644 --- a/400_xowa/src_100_app/gplx/xowa/Xoac_wiki_grp.java +++ b/400_xowa/src_100_app/gplx/xowa/Xoac_wiki_grp.java @@ -45,21 +45,3 @@ public class Xoac_wiki_grp implements Cfg_nde_obj, Xoac_wiki_obj { public Cfg_nde_obj Itms_get_at(int i) {return (Cfg_nde_obj)itms.FetchAt(i);} OrderedHash itms = OrderedHash_.new_bry_(); } -class Xoac_wiki_itm implements Cfg_nde_obj, Xoac_wiki_obj { - public Xoac_wiki_itm(byte[] key) {this.key_bry = key;} - public byte[] Key_bry() {return key_bry;} private byte[] key_bry; - public byte[][] Aliases() {return aliases;} private byte[][] aliases; - public byte[] Nde_key() {return key_bry;} - public boolean Nde_typ_is_grp() {return false;} - public Cfg_nde_obj Nde_subs_make(byte[] itm_type, byte[] itm_key, byte[][] itm_atrs) {throw Err_mgr._.fmt_(GRP_KEY, "invalid_sub_make", "leafs cannot have itms: ~{0} ~{1}", itm_type, itm_key);} - public Cfg_nde_obj Nde_subs_get(byte[] key) {throw Err_mgr._.fmt_(GRP_KEY, "invalid_sub_get", "leafs cannot have itms: ~{0}", key);} - public int Nde_subs_len() {return 0;} - public Cfg_nde_obj Nde_subs_get_at(int i) {throw Err_mgr._.fmt_(GRP_KEY, "invalid_sub_get", "leafs cannot have itms: ~{0}", i);} - public void Nde_subs_add(byte[] itm_key, Cfg_nde_obj itm_obj) {throw Err_mgr._.fmt_(GRP_KEY, "invalid_sub_add", "leafs cannot have itms: ~{0}", String_.new_utf8_(itm_key));} - public void Nde_subs_del(byte[] key) {throw Err_mgr._.fmt_(GRP_KEY, "invalid_sub_del", "leafs cannot delete itms: ~{0}", String_.new_utf8_(key));} - public void Nde_atrs_set(byte[][] ary) { - int ary_len = ary.length; - if (ary_len > 0) aliases = Bry_.Split(ary[0], Byte_ascii.Semic); - } - static final String GRP_KEY = "xowa.wikis.itms"; -} diff --git a/400_xowa/src_100_app/gplx/xowa/Xoac_wiki_itm.java b/400_xowa/src_100_app/gplx/xowa/Xoac_wiki_itm.java new file mode 100644 index 000000000..52b335456 --- /dev/null +++ b/400_xowa/src_100_app/gplx/xowa/Xoac_wiki_itm.java @@ -0,0 +1,36 @@ +/* +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; import gplx.*; +public class Xoac_wiki_itm implements Cfg_nde_obj, Xoac_wiki_obj { + public Xoac_wiki_itm(byte[] key) {this.key_bry = key;} + public byte[] Key_bry() {return key_bry;} private byte[] key_bry; + public byte[][] Aliases() {return aliases;} private byte[][] aliases; + public byte[] Nde_key() {return key_bry;} + public boolean Nde_typ_is_grp() {return false;} + public Cfg_nde_obj Nde_subs_make(byte[] itm_type, byte[] itm_key, byte[][] itm_atrs) {throw Err_mgr._.fmt_(GRP_KEY, "invalid_sub_make", "leafs cannot have itms: ~{0} ~{1}", itm_type, itm_key);} + public Cfg_nde_obj Nde_subs_get(byte[] key) {throw Err_mgr._.fmt_(GRP_KEY, "invalid_sub_get", "leafs cannot have itms: ~{0}", key);} + public int Nde_subs_len() {return 0;} + public Cfg_nde_obj Nde_subs_get_at(int i) {throw Err_mgr._.fmt_(GRP_KEY, "invalid_sub_get", "leafs cannot have itms: ~{0}", i);} + public void Nde_subs_add(byte[] itm_key, Cfg_nde_obj itm_obj) {throw Err_mgr._.fmt_(GRP_KEY, "invalid_sub_add", "leafs cannot have itms: ~{0}", String_.new_utf8_(itm_key));} + public void Nde_subs_del(byte[] key) {throw Err_mgr._.fmt_(GRP_KEY, "invalid_sub_del", "leafs cannot delete itms: ~{0}", String_.new_utf8_(key));} + public void Nde_atrs_set(byte[][] ary) { + int ary_len = ary.length; + if (ary_len > 0) aliases = Bry_.Split(ary[0], Byte_ascii.Semic); + } + static final String GRP_KEY = "xowa.wikis.itms"; +} diff --git a/400_xowa/src_120_wiki/gplx/xowa/Xow_fragment_mgr.java b/400_xowa/src_120_wiki/gplx/xowa/Xow_fragment_mgr.java index c1e1c9d0b..6eaed3d23 100644 --- a/400_xowa/src_120_wiki/gplx/xowa/Xow_fragment_mgr.java +++ b/400_xowa/src_120_wiki/gplx/xowa/Xow_fragment_mgr.java @@ -18,24 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. package gplx.xowa; import gplx.*; import gplx.xowa.langs.numbers.*; public class Xow_fragment_mgr implements GfoInvkAble { - private static final byte[] Date_format_default = Bry_.new_ascii_("dmy"); - private static final byte[] Num_format_digits = Bry_.new_ascii_("['', '']"); - public byte[] Html_js_table() {return html_js_table;} private byte[] html_js_table; public Xow_fragment_mgr(Xow_wiki wiki) {this.wiki = wiki;} private Xow_wiki wiki; - private Bry_fmtr html_js_table_fmtr = Bry_fmtr.new_(String_.Concat_lines_nl - ( " var xowa_global_values = {" - , " 'collapsible-collapse' : '~{collapsible-collapse}'," - , " 'collapsible-expand' : '~{collapsible-expand}'," - , " 'sort-descending' : '~{sort-descending}'," - , " 'sort-ascending' : '~{sort-ascending}'," - , " 'wgContentLanguage' : '~{wgContentLanguage}'," - , " 'wgSeparatorTransformTable' : ~{wgSeparatorTransformTable}," - , " 'wgDigitTransformTable' : ~{wgDigitTransformTable}," - , " 'wgDefaultDateFormat' : '~{wgDefaultDateFormat}'," - , " 'wgMonthNames' : ~{wgMonthNames}," - , " 'wgMonthNamesShort' : ~{wgMonthNamesShort}," - , " };" - ), "collapsible-collapse", "collapsible-expand", "sort-descending", "sort-ascending", "wgContentLanguage", "wgSeparatorTransformTable", "wgDigitTransformTable", "wgDefaultDateFormat", "wgMonthNames", "wgMonthNamesShort"); public byte[] Html_js_edit_toolbar() {return html_js_edit_toolbar;} private byte[] html_js_edit_toolbar; private Bry_fmtr html_js_edit_toolbar_fmtr = Bry_fmtr.new_(String_.Concat_lines_nl ( " var xowa_edit_i18n = {" @@ -54,33 +37,15 @@ public class Xow_fragment_mgr implements GfoInvkAble { , " };" ), "bold_tip", "bold_sample", "italic_tip", "italic_sample", "link_tip", "link_sample", "headline_tip", "headline_sample", "ulist_tip", "ulist_sample", "olist_tip", "olist_sample"); public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { - if (ctx.Match(k, Invk_html_js_table_fmt_)) html_js_table_fmtr.Fmt_(m.ReadBry("v")); - else if (ctx.Match(k, Invk_html_js_table)) return html_js_table; - else if (ctx.Match(k, Invk_html_js_edit_toolbar_fmt_)) html_js_edit_toolbar_fmtr.Fmt_(m.ReadBry("v")); + if (ctx.Match(k, Invk_html_js_edit_toolbar_fmt_)) html_js_edit_toolbar_fmtr.Fmt_(m.ReadBry("v")); else if (ctx.Match(k, Invk_html_js_edit_toolbar)) return html_js_edit_toolbar; else return GfoInvkAble_.Rv_unhandled; return this; } - public static final String Invk_html_js_table_fmt_ = "html_js_table_fmt_", Invk_html_js_table = "html_js_table", Invk_html_js_edit_toolbar_fmt_ = "html_js_edit_toolbar_fmt_", Invk_html_js_edit_toolbar = "html_js_edit_toolbar"; + public static final String Invk_html_js_edit_toolbar_fmt_ = "html_js_edit_toolbar_fmt_", Invk_html_js_edit_toolbar = "html_js_edit_toolbar"; public void Evt_lang_changed(Xol_lang lang) { Bry_bfr bfr = lang.App().Utl_bry_bfr_mkr().Get_b512(); - Xow_msg_mgr msg_mgr = wiki.Msg_mgr(); - byte[] months_long = Html_js_table_months(bfr, msg_mgr, Xol_msg_itm_.Id_dte_month_name_january, Xol_msg_itm_.Id_dte_month_name_december); - byte[] months_short = Html_js_table_months(bfr, msg_mgr, Xol_msg_itm_.Id_dte_month_abrv_jan, Xol_msg_itm_.Id_dte_month_abrv_dec); - byte[] num_format_separators = Html_js_table_num_format_separators(bfr, lang.Num_mgr().Separators_mgr()); - html_js_table = html_js_table_fmtr.Bld_bry_many(bfr - , msg_mgr.Val_by_id(Xol_msg_itm_.Id_js_tables_collapsible_collapse) - , msg_mgr.Val_by_id(Xol_msg_itm_.Id_js_tables_collapsible_expand) - , msg_mgr.Val_by_id(Xol_msg_itm_.Id_js_tables_sort_descending) - , msg_mgr.Val_by_id(Xol_msg_itm_.Id_js_tables_sort_ascending) - , lang.Key_bry() - , num_format_separators - , Num_format_digits - , Date_format_default - , months_long - , months_short - ); - msg_mgr = wiki.App().User().Msg_mgr(); + Xow_msg_mgr msg_mgr = wiki.App().User().Msg_mgr(); html_js_edit_toolbar = html_js_edit_toolbar_fmtr.Bld_bry_many(bfr , msg_mgr.Val_by_id(Xol_msg_itm_.Id_edit_toolbar_bold_tip) , msg_mgr.Val_by_id(Xol_msg_itm_.Id_edit_toolbar_bold_sample) @@ -97,23 +62,4 @@ public class Xow_fragment_mgr implements GfoInvkAble { ); bfr.Mkr_rls(); } - byte[] Html_js_table_months(Bry_bfr bfr, Xow_msg_mgr msg_mgr, int january_id, int december_id) { - // ['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] - bfr.Add_byte(Byte_ascii.Brack_bgn).Add_byte(Byte_ascii.Apos).Add_byte(Byte_ascii.Apos); - for (int i = january_id; i <= december_id; i++) { - bfr.Add_byte(Byte_ascii.Comma).Add_byte(Byte_ascii.Space).Add_byte(Byte_ascii.Apos); - bfr.Add(msg_mgr.Val_by_id(i)); - bfr.Add_byte(Byte_ascii.Apos); - } - bfr.Add_byte(Byte_ascii.Brack_end); - return bfr.XtoAryAndClear(); - } - private byte[] Html_js_table_num_format_separators(Bry_bfr bfr, Xol_transform_mgr separator_mgr) { - byte[] dec_spr = separator_mgr.Get_val_or_self(Xol_num_mgr.Separators_key__dec); - bfr.Add_byte(Byte_ascii.Brack_bgn) .Add_byte(Byte_ascii.Apos).Add(dec_spr).Add_byte(Byte_ascii.Tab).Add_byte(Byte_ascii.Dot).Add_byte(Byte_ascii.Apos); - byte[] grp_spr = separator_mgr.Get_val_or_self(Xol_num_mgr.Separators_key__grp); - bfr.Add_byte(Byte_ascii.Comma).Add_byte(Byte_ascii.Space) .Add_byte(Byte_ascii.Apos).Add(grp_spr).Add_byte(Byte_ascii.Tab).Add_byte(Byte_ascii.Comma).Add_byte(Byte_ascii.Apos); - bfr.Add_byte(Byte_ascii.Brack_end); - return bfr.XtoAryAndClear(); - } } diff --git a/400_xowa/src_120_wiki/gplx/xowa/Xow_fragment_mgr_tst.java b/400_xowa/src_120_wiki/gplx/xowa/Xow_fragment_mgr_tst.java index 9c795846a..5566fe9a9 100644 --- a/400_xowa/src_120_wiki/gplx/xowa/Xow_fragment_mgr_tst.java +++ b/400_xowa/src_120_wiki/gplx/xowa/Xow_fragment_mgr_tst.java @@ -21,42 +21,6 @@ import gplx.xowa.langs.numbers.*; public class Xow_fragment_mgr_tst { Xow_fragment_mgr_fxt fxt = new Xow_fragment_mgr_fxt(); @Before public void init() {fxt.Clear();} - @Test public void Html_js_table_fmt() { - fxt.Test_fragment(Xow_fragment_mgr.Invk_html_js_table, String_.Concat_lines_nl - ( " var xowa_global_values = {" - , " 'collapsible-collapse' : 'Collapse'," - , " 'collapsible-expand' : 'Expand'," - , " 'sort-descending' : 'Sort descending'," - , " 'sort-ascending' : 'Sort ascending'," - , " 'wgContentLanguage' : 'en'," - , " 'wgSeparatorTransformTable' : ['.\t.', ',\t,']," - , " 'wgDigitTransformTable' : ['', '']," - , " 'wgDefaultDateFormat' : 'dmy'," - , " 'wgMonthNames' : ['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']," - , " 'wgMonthNamesShort' : ['', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']," - , " };" - )); - } - @Test public void Html_js_table_fmt_la() { // PURPOSE: la.gfs only specifies "," not "."; make sure both "." and "," show up, or else null ref error during import; DATE:2014-05-13 - Xol_lang la_lang = fxt.Make_lang("la"); - Xol_transform_mgr separators_mgr = la_lang.Num_mgr().Separators_mgr(); - separators_mgr.Clear(); - separators_mgr.Set(Xol_num_mgr.Separators_key__grp, Bry_.new_ascii_(" ")); - fxt.Test_fragment(la_lang, Xow_fragment_mgr.Invk_html_js_table, String_.Concat_lines_nl - ( " var xowa_global_values = {" - , " 'collapsible-collapse' : 'Collapse'," - , " 'collapsible-expand' : 'Expand'," - , " 'sort-descending' : 'Sort descending'," - , " 'sort-ascending' : 'Sort ascending'," - , " 'wgContentLanguage' : 'la'," - , " 'wgSeparatorTransformTable' : ['.\t.', ' \t,']," - , " 'wgDigitTransformTable' : ['', '']," - , " 'wgDefaultDateFormat' : 'dmy'," - , " 'wgMonthNames' : ['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']," - , " 'wgMonthNamesShort' : ['', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']," - , " };" - )); - } @Test public void Html_js_edit_toolbar_fmt() { fxt.Test_fragment(Xow_fragment_mgr.Invk_html_js_edit_toolbar, String_.Concat_lines_nl ( " var xowa_edit_i18n = {" diff --git a/400_xowa/src_120_wiki/gplx/xowa/Xow_lang_itm.java b/400_xowa/src_120_wiki/gplx/xowa/Xow_lang_itm.java index ef7ca91ad..aa2de5769 100644 --- a/400_xowa/src_120_wiki/gplx/xowa/Xow_lang_itm.java +++ b/400_xowa/src_120_wiki/gplx/xowa/Xow_lang_itm.java @@ -16,6 +16,7 @@ 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; import gplx.*; +import gplx.xowa.wikis.xwikis.*; public class Xow_lang_itm { public Xow_lang_itm(Xow_lang_grp html_grp, Xow_xwiki_itm xwiki, Xoac_lang_itm lang) { this.html_grp = html_grp; this.xwiki = xwiki; this.lang = lang; diff --git a/400_xowa/src_120_wiki/gplx/xowa/Xow_lang_mgr.java b/400_xowa/src_120_wiki/gplx/xowa/Xow_lang_mgr.java index 24468066a..097b8ee76 100644 --- a/400_xowa/src_120_wiki/gplx/xowa/Xow_lang_mgr.java +++ b/400_xowa/src_120_wiki/gplx/xowa/Xow_lang_mgr.java @@ -16,17 +16,20 @@ 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; import gplx.*; +import gplx.xowa.wikis.xwikis.*; import gplx.xowa.apis.xowa.html.*; public class Xow_lang_mgr { Xow_lang_mgr() { int len = Xol_lang_itm_.Id__max; itms = new Xow_lang_itm[len]; + } - public Bry_fmtr Html_div() {return html_div;} Bry_fmtr html_div = Bry_fmtr.new_( - String_.Concat_lines_nl_skip_last - ( "<div id=\"xowa-lang\">" - , " <h5>~{langs_hdr}~{wikidata_link}</h5>~{grps}" - , "</div>" - ), "grps", "langs_hdr", "wikidata_link"); + public Bry_fmtr Html_div() {return html_div;} Bry_fmtr html_div = Bry_fmtr.new_(String_.Concat_lines_nl_skip_last + ( "<div id=\"xowa-lang\">" + , " <h5>~{langs_hdr}~{wikidata_link}<a href='javascript:xowa_toggle_visible(\"wikidata-langs\");'><img id='wikidata-langs-toggle-icon' src='~{icon_src}' title='~{icon_title}' /></a></h5>" + , " <div id='wikidata-langs-toggle-elem' style='~{elem_display}'>~{grps}" + , " </div>" + , "</div>" + ), "langs_hdr", "wikidata_link", "icon_src", "icon_title", "elem_display", "grps"); public Bry_fmtr Html_wikidata_link() {return html_wikidata_link;} Bry_fmtr html_wikidata_link = Bry_fmtr.new_(" (<a href=\"/site/www.wikidata.org/wiki/~{qid}\">wikidata</a>)", "qid"); public void Clear() {hash.Clear();} public void Itms_reg(Xow_xwiki_itm xwiki, Xoac_lang_itm lang) { @@ -103,8 +106,10 @@ class Xow_lang_html implements Bry_fmtr_arg { case 0: { stage = 1; Bry_bfr tmp_bfr = wiki.Utl_bry_bfr_mkr().Get_b128().Mkr_rls(); + byte[] msg_lang = wiki.Msg_mgr().Val_by_id(Xol_msg_itm_.Id_page_lang_header); byte[] wikidata_link = Bry_.Len_eq_0(qid) ? Bry_.Empty : lang_mgr.Html_wikidata_link().Bld_bry_many(tmp_bfr, qid); - lang_mgr.Html_div().Bld_bfr_many(bfr, this, wiki.Msg_mgr().Val_by_id(Xol_msg_itm_.Id_page_lang_header), wikidata_link); + Xoapi_toggle_itm visible_data = wiki.App().Api_root().Html().Page().Toggle_mgr().Itm_wikidata_langs().Init(wiki); + lang_mgr.Html_div().Bld_bfr_many(bfr, msg_lang, wikidata_link, visible_data.Icon_src(), visible_data.Icon_title(), visible_data.Elem_display(), this); stage = 0; break; } diff --git a/400_xowa/src_120_wiki/gplx/xowa/Xow_lang_mgr_tst.java b/400_xowa/src_120_wiki/gplx/xowa/Xow_lang_mgr_tst.java index 8e5bf52fa..754017862 100644 --- a/400_xowa/src_120_wiki/gplx/xowa/Xow_lang_mgr_tst.java +++ b/400_xowa/src_120_wiki/gplx/xowa/Xow_lang_mgr_tst.java @@ -22,64 +22,72 @@ public class Xow_lang_mgr_tst { @Before public void init() {fxt.Clear();} @Test public void Basic() { fxt.tst("[[simple:Earth]] [[fr:Terre]] [[es:Tierra]] [[de:Erde]] [[it:Terre]]", String_.Concat_lines_nl_skip_last - ( "<div id=\"xowa-lang\">" - , " <h5>In other languages</h5>" - , " <h4>grp1</h4>" - , " <table style='width: 100%;'>" - , " <tr>" - , " <td style='width: 10%; padding-bottom: 5px;'>Simple</td><td style='width: 20%; padding-bottom: 5px;'><a hreflang=\"simple\" title=\"Earth\" href=\"/site/simple.wikipedia.org/wiki/Earth\">Earth</a></td><td style='width: 3%; padding-bottom: 5px;'></td>" - , " <td style='width: 10%; padding-bottom: 5px;'>Spanish</td><td style='width: 20%; padding-bottom: 5px;'><a hreflang=\"es\" title=\"Tierra\" href=\"/site/es.wikipedia.org/wiki/Tierra\">Tierra</a></td><td style='width: 3%; padding-bottom: 5px;'></td>" - , " <td style='width: 10%; padding-bottom: 5px;'>Italian</td><td style='width: 20%; padding-bottom: 5px;'><a hreflang=\"it\" title=\"Terre\" href=\"/site/it.wikipedia.org/wiki/Terre\">Terre</a></td><td style='width: 3%; padding-bottom: 5px;'></td>" - , " </tr>" - , " </table>" - , " <h4>grp2</h4>" - , " <table style='width: 100%;'>" - , " <tr>" - , " <td style='width: 10%; padding-bottom: 5px;'>French</td><td style='width: 20%; padding-bottom: 5px;'><a hreflang=\"fr\" title=\"Terre\" href=\"/site/fr.wikipedia.org/wiki/Terre\">Terre</a></td><td style='width: 3%; padding-bottom: 5px;'></td>" - , " <td style='width: 10%; padding-bottom: 5px;'>German</td><td style='width: 20%; padding-bottom: 5px;'><a hreflang=\"de\" title=\"Erde\" href=\"/site/de.wikipedia.org/wiki/Erde\">Erde</a></td><td style='width: 3%; padding-bottom: 5px;'></td>" - , " </tr>" - , " </table>" - , "</div>" - )); + ( "<div id=\"xowa-lang\">" + , " <h5>In other languages<a href='javascript:xowa_toggle_visible(\"wikidata-langs\");'><img id='wikidata-langs-toggle-icon' src='file:///mem/xowa/user/test_user/app/img/window/portal/twisty_right.png' title='' /></a></h5>" + , " <div id='wikidata-langs-toggle-elem' style='display:none;'>" + , " <h4>grp1</h4>" + , " <table style='width: 100%;'>" + , " <tr>" + , " <td style='width: 10%; padding-bottom: 5px;'>Simple</td><td style='width: 20%; padding-bottom: 5px;'><a hreflang=\"simple\" title=\"Earth\" href=\"/site/simple.wikipedia.org/wiki/Earth\">Earth</a></td><td style='width: 3%; padding-bottom: 5px;'></td>" + , " <td style='width: 10%; padding-bottom: 5px;'>Spanish</td><td style='width: 20%; padding-bottom: 5px;'><a hreflang=\"es\" title=\"Tierra\" href=\"/site/es.wikipedia.org/wiki/Tierra\">Tierra</a></td><td style='width: 3%; padding-bottom: 5px;'></td>" + , " <td style='width: 10%; padding-bottom: 5px;'>Italian</td><td style='width: 20%; padding-bottom: 5px;'><a hreflang=\"it\" title=\"Terre\" href=\"/site/it.wikipedia.org/wiki/Terre\">Terre</a></td><td style='width: 3%; padding-bottom: 5px;'></td>" + , " </tr>" + , " </table>" + , " <h4>grp2</h4>" + , " <table style='width: 100%;'>" + , " <tr>" + , " <td style='width: 10%; padding-bottom: 5px;'>French</td><td style='width: 20%; padding-bottom: 5px;'><a hreflang=\"fr\" title=\"Terre\" href=\"/site/fr.wikipedia.org/wiki/Terre\">Terre</a></td><td style='width: 3%; padding-bottom: 5px;'></td>" + , " <td style='width: 10%; padding-bottom: 5px;'>German</td><td style='width: 20%; padding-bottom: 5px;'><a hreflang=\"de\" title=\"Erde\" href=\"/site/de.wikipedia.org/wiki/Erde\">Erde</a></td><td style='width: 3%; padding-bottom: 5px;'></td>" + , " </tr>" + , " </table>" + , " </div>" + , "</div>" + )); } @Test public void Empty() { fxt.tst("[[simple:]]", String_.Concat_lines_nl_skip_last - ( "<div id=\"xowa-lang\">" - , " <h5>In other languages</h5>" - , " <h4>grp1</h4>" - , " <table style='width: 100%;'>" - , " <tr>" - , " <td style='width: 10%; padding-bottom: 5px;'>Simple</td><td style='width: 20%; padding-bottom: 5px;'><a hreflang=\"simple\" title=\"Test page\" href=\"/site/simple.wikipedia.org/wiki/\">Test page</a></td><td style='width: 3%; padding-bottom: 5px;'></td>" - , " </tr>" - , " </table>" - , "</div>" - )); + ( "<div id=\"xowa-lang\">" + , " <h5>In other languages<a href='javascript:xowa_toggle_visible(\"wikidata-langs\");'><img id='wikidata-langs-toggle-icon' src='file:///mem/xowa/user/test_user/app/img/window/portal/twisty_right.png' title='' /></a></h5>" + , " <div id='wikidata-langs-toggle-elem' style='display:none;'>" + , " <h4>grp1</h4>" + , " <table style='width: 100%;'>" + , " <tr>" + , " <td style='width: 10%; padding-bottom: 5px;'>Simple</td><td style='width: 20%; padding-bottom: 5px;'><a hreflang=\"simple\" title=\"Test page\" href=\"/site/simple.wikipedia.org/wiki/\">Test page</a></td><td style='width: 3%; padding-bottom: 5px;'></td>" + , " </tr>" + , " </table>" + , " </div>" + , "</div>" + )); } @Test public void Unregistered() { // fxt.Wiki().Xwiki_mgr().Add_full(Bry_.new_utf8_("zh"), Bry_.new_utf8_("zh.wikipedia.org"), Bry_.new_utf8_("http://zh.wikipedia.org/~{0}")); fxt.tst("[[zh:Earth]]", String_.Concat_lines_nl_skip_last - ( "<div id=\"xowa-lang\">" - , " <h5>In other languages</h5>" - , " <h4>grp1</h4>" - , " <table style='width: 100%;'>" - , " <tr>" - , " <td style='width: 10%; padding-bottom: 5px;'>Chinese</td><td style='width: 20%; padding-bottom: 5px;'><a hreflang=\"zh\" title=\"Earth\" href=\"http://zh.wikipedia.org/wiki/Earth\">Earth</a></td><td style='width: 3%; padding-bottom: 5px;'></td>" - , " </tr>" - , " </table>" - , "</div>" - )); + ( "<div id=\"xowa-lang\">" + , " <h5>In other languages<a href='javascript:xowa_toggle_visible(\"wikidata-langs\");'><img id='wikidata-langs-toggle-icon' src='file:///mem/xowa/user/test_user/app/img/window/portal/twisty_right.png' title='' /></a></h5>" + , " <div id='wikidata-langs-toggle-elem' style='display:none;'>" + , " <h4>grp1</h4>" + , " <table style='width: 100%;'>" + , " <tr>" + , " <td style='width: 10%; padding-bottom: 5px;'>Chinese</td><td style='width: 20%; padding-bottom: 5px;'><a hreflang=\"zh\" title=\"Earth\" href=\"http://zh.wikipedia.org/wiki/Earth\">Earth</a></td><td style='width: 3%; padding-bottom: 5px;'></td>" + , " </tr>" + , " </table>" + , " </div>" + , "</div>" + )); } @Test public void Anchor() {// PURPOSE: A#b was not showing anchor "#b"; DATE:2013-10-23 fxt.tst("[[simple:A#b]]", String_.Concat_lines_nl_skip_last - ( "<div id=\"xowa-lang\">" - , " <h5>In other languages</h5>" - , " <h4>grp1</h4>" - , " <table style='width: 100%;'>" - , " <tr>" - , " <td style='width: 10%; padding-bottom: 5px;'>Simple</td><td style='width: 20%; padding-bottom: 5px;'><a hreflang=\"simple\" title=\"A#b\" href=\"/site/simple.wikipedia.org/wiki/A#b\">A#b</a></td><td style='width: 3%; padding-bottom: 5px;'></td>" - , " </tr>" - , " </table>" - , "</div>" - )); + ( "<div id=\"xowa-lang\">" + , " <h5>In other languages<a href='javascript:xowa_toggle_visible(\"wikidata-langs\");'><img id='wikidata-langs-toggle-icon' src='file:///mem/xowa/user/test_user/app/img/window/portal/twisty_right.png' title='' /></a></h5>" + , " <div id='wikidata-langs-toggle-elem' style='display:none;'>" + , " <h4>grp1</h4>" + , " <table style='width: 100%;'>" + , " <tr>" + , " <td style='width: 10%; padding-bottom: 5px;'>Simple</td><td style='width: 20%; padding-bottom: 5px;'><a hreflang=\"simple\" title=\"A#b\" href=\"/site/simple.wikipedia.org/wiki/A#b\">A#b</a></td><td style='width: 3%; padding-bottom: 5px;'></td>" + , " </tr>" + , " </table>" + , " </div>" + , "</div>" + )); } } diff --git a/400_xowa/src_120_wiki/gplx/xowa/Xow_wiki.java b/400_xowa/src_120_wiki/gplx/xowa/Xow_wiki.java index bdb40e5cf..84c2ab0a5 100644 --- a/400_xowa/src_120_wiki/gplx/xowa/Xow_wiki.java +++ b/400_xowa/src_120_wiki/gplx/xowa/Xow_wiki.java @@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. package gplx.xowa; import gplx.*; import gplx.xowa.apps.*; import gplx.xowa.wikis.*; import gplx.xowa.users.*; import gplx.xowa.html.*; import gplx.xowa.users.history.*; import gplx.xowa.specials.*; import gplx.xowa.xtns.*; import gplx.xowa.dbs.*; import gplx.xowa.files.*; -import gplx.xowa.langs.vnts.*; import gplx.xowa.gui.views.*; +import gplx.xowa.langs.vnts.*; import gplx.xowa.gui.views.*; import gplx.xowa.wikis.xwikis.*; import gplx.xowa.setup.maints.*; import gplx.xowa.wikis.caches.*; import gplx.xowa.bldrs.imports.*; import gplx.xowa.xtns.pfuncs.*; public class Xow_wiki implements GfoInvkAble { diff --git a/400_xowa/src_140_lang/gplx/xowa/Xol_kwd_mgr.java b/400_xowa/src_140_lang/gplx/xowa/Xol_kwd_mgr.java index 6ae7105cb..3d0a518cf 100644 --- a/400_xowa/src_140_lang/gplx/xowa/Xol_kwd_mgr.java +++ b/400_xowa/src_140_lang/gplx/xowa/Xol_kwd_mgr.java @@ -22,6 +22,31 @@ public class Xol_kwd_mgr implements GfoInvkAble { public int Len() {return grps.length;} public Btrie_slim_mgr Trie_raw() {if (trie_raw == null) trie_raw = Xol_kwd_mgr.trie_(this, Xol_kwd_grp_.Id_str_rawsuffix); return trie_raw;} private Btrie_slim_mgr trie_raw; public Btrie_slim_mgr Trie_nosep() {if (trie_nosep == null) trie_nosep = Xol_kwd_mgr.trie_(this, Xol_kwd_grp_.Id_nocommafysuffix); return trie_nosep;} private Btrie_slim_mgr trie_nosep; + public void Kwd_default_match_reset() {kwd_default_init_needed = true;} // TEST: + public boolean Kwd_default_match(byte[] match) { // handle multiple #default keywords; DATE:2014-07-28 + if (match == null) return false; // null never matches #default + int match_len = match.length; + if (match_len == 0) return false; // "" never matches default + if (kwd_default_init_needed) { + kwd_default_init_needed = false; + Xol_kwd_grp grp = this.Get_at(Xol_kwd_grp_.Id_xtn_default); + int len = grp.Itms().length; + if (len == 1) + kwd_default_key = grp.Itms()[0].Val(); + else { + kwd_default_trie = Btrie_slim_mgr.new_(grp.Case_match()); + for (int i = 0; i < len; i++) { + Xol_kwd_itm itm = grp.Itms()[i]; + kwd_default_trie.Add_obj(itm.Val(), itm); + } + } + } + return kwd_default_trie == null + ? Bry_.HasAtBgn(match, kwd_default_key, 0, match_len) + : kwd_default_trie.Match_bgn(match, 0, match_len) != null + ; + } + private Btrie_slim_mgr kwd_default_trie; private byte[] kwd_default_key; private boolean kwd_default_init_needed = true; public Xol_kwd_grp Get_at(int id) {return grps[id];} public Xol_kwd_grp Get_or_new(int id) { Xol_kwd_grp rv = grps[id]; diff --git a/400_xowa/src_200_bldr/gplx/xowa/Xob_bldr.java b/400_xowa/src_200_bldr/gplx/xowa/Xob_bldr.java index 840444f33..87d17a00b 100644 --- a/400_xowa/src_200_bldr/gplx/xowa/Xob_bldr.java +++ b/400_xowa/src_200_bldr/gplx/xowa/Xob_bldr.java @@ -65,7 +65,10 @@ public class Xob_bldr implements GfoInvkAble { app.Usr_dlg().Note_many(GRP_KEY, "bldr_done", "bldr done: ~{0}", TimeSpanAdp_.from_(time_bgn).XtoStrUiAbbrv()); cmd_mgr.Clear(); if (pause_at_end && !Env_.Mode_testing()) {ConsoleAdp._.ReadLine("press enter to continue");} - } catch (Exception e) {throw Err_.err_(e, "error during build: ~{0}", Err_.Message_gplx(e));} + } + catch (Exception e) { + throw Err_.err_(e, "error during build: ~{0}", Err_.Message_gplx(e)); + } } private void Cancel() { int cmd_mgr_len = cmd_mgr.Len(); diff --git a/400_xowa/src_240_install/gplx/threads/Gfo_thread_cmd_download.java b/400_xowa/src_240_install/gplx/threads/Gfo_thread_cmd_download.java index 9398e143d..d7742a5a8 100644 --- a/400_xowa/src_240_install/gplx/threads/Gfo_thread_cmd_download.java +++ b/400_xowa/src_240_install/gplx/threads/Gfo_thread_cmd_download.java @@ -54,8 +54,9 @@ public class Gfo_thread_cmd_download implements Gfo_thread_cmd { private void Download() { download_pass = true; if (!xrg.Exec()) { - kit.Ask_ok(GRP_KEY, "download.fail", "download failed. Please select 'read from file' if you've already downloaded a dump: url=~{0} error=~{1}", src, Err_.Message_gplx_brief(xrg.Rslt_err())); + xrg.Prog_running_(false); download_pass = false; + kit.Ask_ok(GRP_KEY, "download.fail", "download failed. Please select 'read from file' if you've already downloaded a dump: url=~{0} error=~{1}", src, xrg.Rslt_err_str()); } } boolean download_pass = true; protected gplx.ios.IoEngine_xrg_downloadFil xrg = Io_mgr._.DownloadFil_args("", Io_url_.Null); diff --git a/400_xowa/src_240_install/gplx/xowa/Xoi_cmd_base.java b/400_xowa/src_240_install/gplx/xowa/Xoi_cmd_base.java index 307761e06..8bb189a1f 100644 --- a/400_xowa/src_240_install/gplx/xowa/Xoi_cmd_base.java +++ b/400_xowa/src_240_install/gplx/xowa/Xoi_cmd_base.java @@ -48,7 +48,12 @@ abstract class Xoi_cmd_base implements Gfo_thread_cmd { bldr.Cmd_mgr().Clear(); Process_async_init(app, wiki, bldr); bldr.Pause_at_end_(false); - bldr.Run(); + try {bldr.Run();} + catch (Exception e) { + running = false; + install_mgr.Cmd_mgr().Working_n_(); + throw Err_.err_(e, "error during import: ~{0}", Err_.Message_hdr_or_message(e)); + } app.Gui_wtr().Prog_none("", "clear", ""); app.Gui_wtr().Note_none("", "clear", ""); Process_async_done(app, wiki, bldr); diff --git a/400_xowa/src_240_install/gplx/xowa/Xoi_cmd_mgr.java b/400_xowa/src_240_install/gplx/xowa/Xoi_cmd_mgr.java index 63f642d91..3ae60a271 100644 --- a/400_xowa/src_240_install/gplx/xowa/Xoi_cmd_mgr.java +++ b/400_xowa/src_240_install/gplx/xowa/Xoi_cmd_mgr.java @@ -22,7 +22,7 @@ public class Xoi_cmd_mgr implements GfoInvkAble { public Xoi_cmd_mgr(Xoi_setup_mgr install_mgr) {this.app = install_mgr.App(); this.install_mgr = install_mgr;} private Xoa_app app; Xoi_setup_mgr install_mgr; public Xoa_app App() {return app;} public void Canceled_y_() {canceled = true;} private boolean canceled = false; - public boolean Working() {return working;} private boolean working; + public boolean Working() {return working;} public void Working_n_() {working = false;} private boolean working; private void Process_async(Gfo_thread_cmd cmd) { byte init_rslt = cmd.Async_init(); if (init_rslt == Gfo_thread_cmd_.Init_ok) { diff --git a/400_xowa/src_300_html/gplx/xowa/Xoa_html_data.java b/400_xowa/src_300_html/gplx/xowa/Xoa_html_data.java index 2819eeec7..3054d19ae 100644 --- a/400_xowa/src_300_html/gplx/xowa/Xoa_html_data.java +++ b/400_xowa/src_300_html/gplx/xowa/Xoa_html_data.java @@ -16,6 +16,7 @@ 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; import gplx.*; +import gplx.html.*; import gplx.xowa.html.modules.*; public class Xoa_html_data { private OrderedHash ctg_hash; @@ -26,13 +27,15 @@ public class Xoa_html_data { public String Bmk_pos() {return html_bmk_pos;} public void Bmk_pos_(String v) {html_bmk_pos = v;} private String html_bmk_pos; public boolean Restricted() {return html_restricted;} private boolean html_restricted = true; public void Restricted_(boolean v) {html_restricted = v;} public void Restricted_n_() {Restricted_(Bool_.N);} public void Restricted_y_() {Restricted_(Bool_.Y);} - public byte[] Edit_preview() {return edit_preview;} public void Edit_preview_(byte[] v) {edit_preview = v;} private byte[] edit_preview = Bry_.Empty; + public byte[] Edit_preview_w_dbg() {return Bry_.Add(dbg, edit_preview);} public void Edit_preview_(byte[] v) {edit_preview = v;} private byte[] edit_preview = Bry_.Empty; public byte[] Search_text() {return search_text;} public void Search_text_(byte[] v) {search_text = v;} private byte[] search_text = Bry_.Empty; public byte[] Custom_html() {return custom_html;} public Xoa_html_data Custom_html_(byte[] v) {custom_html = v; return this;} private byte[] custom_html; public byte[] Custom_name() {return custom_name;} public Xoa_html_data Custom_name_(byte[] v) {custom_name = v; return this;} private byte[] custom_name; public byte[] Custom_head_end() {return custom_head_end;} + public byte[] Dbg() {return dbg;} public void Dbg_(byte[] v) {dbg = Bry_.Add(dbg, v);} private byte[] dbg = Bry_.Empty; public boolean Gallery_packed_exists() {return gallery_packed_exists;} public void Gallery_packed_exists_y_() {gallery_packed_exists = true;} private boolean gallery_packed_exists; public int Imap_id_next() {return ++imap_id_next;} private int imap_id_next; + public ListAdp Related_sites() {return related_sites;} private ListAdp related_sites = ListAdp_.new_(); public void Custom_head_end_concat(byte[] v) { if (v == null) custom_head_end = v; @@ -56,6 +59,7 @@ public class Xoa_html_data { search_text = Bry_.Empty; custom_html_end = custom_head_end = custom_html = custom_name = null; imap_id_next = 0; + related_sites.Clear(); } public byte[][] Ctgs_to_ary() {return ctg_hash == null ? Bry_.Ary_empty : (byte[][])ctg_hash.XtoAry(byte[].class);} public void Ctgs_add(Xoa_ttl ttl) { diff --git a/400_xowa/src_300_html/gplx/xowa/Xop_link_parser.java b/400_xowa/src_300_html/gplx/xowa/Xop_link_parser.java index 6dba8f449..b61263dd5 100644 --- a/400_xowa/src_300_html/gplx/xowa/Xop_link_parser.java +++ b/400_xowa/src_300_html/gplx/xowa/Xop_link_parser.java @@ -16,7 +16,7 @@ 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; import gplx.*; -import gplx.xowa.html.*; import gplx.xowa.net.*; +import gplx.xowa.wikis.xwikis.*; import gplx.xowa.html.*; import gplx.xowa.net.*; public class Xop_link_parser { public byte[] Html_xowa_ttl() {return html_xowa_ttl;} private byte[] html_xowa_ttl; public byte[] Html_anchor_cls() {return html_anchor_cls;} private byte[] html_anchor_cls; @@ -75,7 +75,7 @@ public class Xop_link_parser { Xow_xwiki_itm xwiki_itm = page_ttl.Wik_itm(); if (xwiki_itm != null) { // is alias; set wiki, page wiki_bry = xwiki_itm.Domain(); - page_bry = Bry_.Mid(page_bry, xwiki_itm.Key().length + 1, page_bry.length); // +1 for ":" + page_bry = Bry_.Mid(page_bry, xwiki_itm.Key_bry().length + 1, page_bry.length); // +1 for ":" } else // is regular page; use ttl.Full_db() to normalize; EX:   -> _ page_bry = page_ttl.Full_db(); diff --git a/400_xowa/src_310_url/gplx/xowa/Xoa_url_parser.java b/400_xowa/src_310_url/gplx/xowa/Xoa_url_parser.java index 522df34d6..51ef2ead7 100644 --- a/400_xowa/src_310_url/gplx/xowa/Xoa_url_parser.java +++ b/400_xowa/src_310_url/gplx/xowa/Xoa_url_parser.java @@ -16,7 +16,7 @@ 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; import gplx.*; -import gplx.xowa.wikis.*; import gplx.xowa.net.*; +import gplx.xowa.wikis.*; import gplx.xowa.wikis.xwikis.*; import gplx.xowa.net.*; public class Xoa_url_parser { private Url_encoder encoder = Url_encoder.new_html_href_mw_().Itms_raw_same_many(Byte_ascii.Underline); private Bry_bfr tmp_bfr = Bry_bfr.reset_(255); public Gfo_url_parser Url_parser() {return url_parser;} private Gfo_url_parser url_parser = new Gfo_url_parser(); private Gfo_url gfo_url = new Gfo_url(); diff --git a/400_xowa/src_310_url/gplx/xowa/Xoa_url_parser_basic_tst.java b/400_xowa/src_310_url/gplx/xowa/Xoa_url_parser_basic_tst.java index d14120511..e8d113e52 100644 --- a/400_xowa/src_310_url/gplx/xowa/Xoa_url_parser_basic_tst.java +++ b/400_xowa/src_310_url/gplx/xowa/Xoa_url_parser_basic_tst.java @@ -16,7 +16,7 @@ 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; import gplx.*; -import org.junit.*; +import org.junit.*; import gplx.xowa.wikis.xwikis.*; public class Xoa_url_parser_basic_tst { @Before public void init() {fxt.Reset();} private Xoa_url_parser_chkr fxt = new Xoa_url_parser_chkr(); @Test public void Basic() { diff --git a/400_xowa/src_310_url/gplx/xowa/Xoh_href_parser.java b/400_xowa/src_310_url/gplx/xowa/Xoh_href_parser.java index 1a247d6d7..375024457 100644 --- a/400_xowa/src_310_url/gplx/xowa/Xoh_href_parser.java +++ b/400_xowa/src_310_url/gplx/xowa/Xoh_href_parser.java @@ -16,9 +16,9 @@ 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; import gplx.*; -import gplx.core.btries.*; import gplx.xowa.net.*; import gplx.xowa.parsers.lnkes.*; +import gplx.core.btries.*; import gplx.xowa.wikis.xwikis.*; import gplx.xowa.net.*; import gplx.xowa.parsers.lnkes.*; public class Xoh_href_parser { - private Url_encoder encoder; private Gfo_url_parser url_parser; private Gfo_url tmp_url = new Gfo_url(); + private Gfo_url_parser url_parser; private Gfo_url tmp_url = new Gfo_url(); private Btrie_slim_mgr segs = Btrie_slim_mgr.ci_ascii_(); // NOTE:ci.ascii:XO_const.en; /wiki/, /site/ etc. private Bry_bfr bfr_encoder = Bry_bfr.reset_(255), tmp_bfr = Bry_bfr.reset_(255); public Xoh_href_parser(Url_encoder encoder, Gfo_url_parser url_parser) { @@ -27,6 +27,7 @@ public class Xoh_href_parser { url_parser.Init_protocol(Protocol_xowa_tid, Xop_lnke_wkr.Str_xowa_protocol); segs.Add_stubs(Seg__ary); } + public Url_encoder Encoder() {return encoder;} private Url_encoder encoder; public void Parse(Xoh_href rv, String raw, Xow_wiki wiki, byte[] cur_page) {Parse(rv, Bry_.new_utf8_(raw), wiki, cur_page);} public void Parse(Xoh_href rv, byte[] raw, Xow_wiki wiki, byte[] cur_page) { int bgn = 0, raw_len = raw.length; int file_slash_end = 0; diff --git a/400_xowa/src_400_parser/gplx/xowa/Xoa_ttl.java b/400_xowa/src_400_parser/gplx/xowa/Xoa_ttl.java index e6614522d..ac5be84f6 100644 --- a/400_xowa/src_400_parser/gplx/xowa/Xoa_ttl.java +++ b/400_xowa/src_400_parser/gplx/xowa/Xoa_ttl.java @@ -16,7 +16,7 @@ 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; import gplx.*; -import gplx.core.btries.*; import gplx.xowa.parsers.amps.*; +import gplx.core.btries.*; import gplx.xowa.wikis.xwikis.*; import gplx.xowa.parsers.amps.*; public class Xoa_ttl { // PAGE:en.w:http://en.wikipedia.org/wiki/Help:Link; REF.MW: Ttl.php|secureAndSplit; public Xow_ns Ns() {return ns;} private Xow_ns ns; public boolean ForceLiteralLink() {return forceLiteralLink;} private boolean forceLiteralLink; diff --git a/400_xowa/xtn/MWClient.java b/400_xowa/xtn/MWClient.java index 1e45add0a..f4372cb10 100644 --- a/400_xowa/xtn/MWClient.java +++ b/400_xowa/xtn/MWClient.java @@ -15,24 +15,24 @@ 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/>. */ -import org.luaj.vm2.LuaTable; -import org.luaj.vm2.LuaValue; -import org.luaj.vm2.lib.OneArgFunction; -import org.luaj.vm2.lib.jse.JsePlatform; - -import gplx.xowa.xtns.scribunto.engines.luaj.Luaj_server_func_recv; -public class MWClient extends OneArgFunction { - /** The implementation of the ZeroArgFunction interface. - * This will be called once when the library is loaded via require(). - * @param arg LuaString containing the name used in the call to require(). - * @return Value that will be returned in the require() call. In this case, - * it is the library itself. - */ - public LuaValue call(LuaValue libname) { - LuaValue library = tableOf(); - library.set("client_recv", Luaj_server_func_recv._); - LuaValue env = gplx.xowa.xtns.scribunto.engines.luaj.Luaj_server.Globals_singleton; - env.set( "MWClient", library ); - return library; - } -} +//import org.luaj.vm2.LuaTable; +//import org.luaj.vm2.LuaValue; +//import org.luaj.vm2.lib.OneArgFunction; +//import org.luaj.vm2.lib.jse.JsePlatform; +// +//import gplx.xowa.xtns.scribunto.engines.luaj.Luaj_server_func_recv; +//public class MWClient extends OneArgFunction { +// /** The implementation of the ZeroArgFunction interface. +// * This will be called once when the library is loaded via require(). +// * @param arg LuaString containing the name used in the call to require(). +// * @return Value that will be returned in the require() call. In this case, +// * it is the library itself. +// */ +// public LuaValue call(LuaValue libname) { +// LuaValue library = tableOf(); +// library.set("client_recv", Luaj_server_func_recv._); +// LuaValue env = gplx.xowa.xtns.scribunto.engines.luaj.Luaj_server.Globals_singleton; +// env.set( "MWClient", library ); +// return library; +// } +//} diff --git a/tst/400_xowa/root/file/en.wikipedia.org/fsdb.main/fsdb.abc.sqlite3 b/tst/400_xowa/root/file/en.wikipedia.org/fsdb.main/fsdb.abc.sqlite3 index 2176e0dd07b6f8bcf8eb11a3e093527f0998f873..a72b7cd5f23e13546223eaf6a7d9e7c47d670d39 100644 GIT binary patch delta 120 zcmZozz}T>Wae}-cD+2<s0GTWk4fI*L8FU}1Z%kPv&+>qQ|G{QKfouFSaty2t<{T_( z#VJX8Ntt<i20)-!T$qztl4`v9k3N?G$1Vo`cl^8fF9X%D;h((I-$Y1|RaBavGdaH~ NH7~WIBtA365CEN<AO-*c delta 119 zcmZozz}T>Wae}-c0}@~XvKc2D=uZq_-I%gSp5;CR|NYH^0$2HE<r!ER%o$nIic^yG zk}~u341hqdxG*QPB-NN<^B;XK0gjyv{BQYp@?QdKSj|6qm%oXy5UZ#(KVx!!QEFal LMM->SiXkHaoMRu2 diff --git a/tst/400_xowa/root/file/en.wikipedia.org/fsdb.main/fsdb.atr.00.sqlite3 b/tst/400_xowa/root/file/en.wikipedia.org/fsdb.main/fsdb.atr.00.sqlite3 index bf22aeb2a8a322d8add19e76caedcfd7ccf8cbb9..3c209f939bef7f2f21fd915fff46d10510147d32 100644 GIT binary patch delta 39 lcmZo@U}|V!njkO8!GHklKqkvX1ASI@2Hi*M8&l@g0|0&A2RZ-% delta 39 kcmZo@U}|V!njkO8fCSiqY{rQO`V#|KCmFD8%$QLR0D|EMnE(I) diff --git a/tst/400_xowa/root/file/en.wikipedia.org/fsdb.main/fsdb.bin.0000.sqlite3 b/tst/400_xowa/root/file/en.wikipedia.org/fsdb.main/fsdb.bin.0000.sqlite3 index f1f9cb1d4d2de6614adee6f7edbed2349af03ef2..7adda84d27d810a2657c71d77bc0c662a4dff3f3 100644 GIT binary patch delta 53 ycmZp0XmFSyFUZ7z0E|E;%R~cxentk}N9w#l9wXmI2EL7(1qGb>HgDwf7X$#$NC^P| delta 51 ucmZp0XmFSyFUWud7=diYi3a);16a9uL2SN_4160m3ko>%ZQjV|F9-m^>j<U* diff --git a/tst/400_xowa/root/file/en.wikipedia.org/fsdb.user/fsdb.abc.sqlite3 b/tst/400_xowa/root/file/en.wikipedia.org/fsdb.user/fsdb.abc.sqlite3 index c1ded8a94f3cc7fd798189cfc052568ec0becf60..455bbad29db8bdfcd2695ed8895cb1f47933ade5 100644 GIT binary patch delta 76 zcmZozz}T>Wae}-cD+2<s0GTWk4fI)g7<3=0Z%kQa&#{Yv{~iA>{>z&M1=jFS-sx{5 XB*-c%&Ci*fUzD1cT2T_8nPLn8cwZAd delta 74 zcmZozz}T>Wae}-c0}@~XvKc2D=uZq_-I%h-o?|Bi|6Bf@{FgQh3asXzyvyH2Scp|r Unx8Q_zbG{?wW1_GGsTz@0Bn^K$^ZZW diff --git a/tst/400_xowa/root/file/en.wikipedia.org/fsdb.user/fsdb.atr.00.sqlite3 b/tst/400_xowa/root/file/en.wikipedia.org/fsdb.user/fsdb.atr.00.sqlite3 index 21c81d19d4063d8f69fd8853dfe58270dd99aca0..8df4374518bbcbbdeab0f810922ce9bc5966e7ee 100644 GIT binary patch delta 159 zcmZo@U}|V!njkO8!GHklKqkvX1ASI52Hi*M8&ekXvpi+sf4W)F;Wj^;BqIw0hxz2! z^3n)FRVh|;4o=SG{M_99ykfob%<RnE)RfFbz5JqdUZ7!&{BIce-)t5Pc*HL!#KgtG p$;ikd&dAHlB<QGDk(|cP1y=K!f&Vj5%}ah39#&5A&ENew4FHktCPM%K delta 166 zcmZo@U}|V!njkO8fCSiqY{rQO`V#|KCl#=4%$Uc|@`Qo^$!0-=Tm0-&j4TX{<_wcx z%S*F7V&H!S6urT(A<Jsc$jF$SpPQSXSFBf_nVp%Nnv$8QmtU05z{to8GLZij1OKbd zf({S(6-1c0fTE0y;*7k!j7)+Ij(QczY3y8JRi7C6KW!Eac)`!g%L-Jm`MW=-0RViC BCU*b; diff --git a/tst/400_xowa/root/file/en.wikipedia.org/fsdb.user/fsdb.bin.0000.sqlite3 b/tst/400_xowa/root/file/en.wikipedia.org/fsdb.user/fsdb.bin.0000.sqlite3 index f77e7f86ea1aaccc68b24297cec683cc745d1ef2..fd0c21a8ed4b50a5875d84c955aa87c9a11c31c7 100644 GIT binary patch delta 83 zcmZp0XmFSyFUZ7z0E|E;%R~cxekKOpN9w#l9wXmI2EL7(1qGb>HgDt$Wn}rl!2bcr by~jT>fJ1<fiH(7ikyq-!iHU)ZiGcwCUV9Kj delta 82 zcmZp0XmFSyFUWud7=diYi3a);16a9uL2SN_4160m3ko>%ZQjTi%E<Dbf&V>_d!K(| Y0Gl8`6B`2~Bd-+We-je}9TNis08>d1-v9sr diff --git a/tst/400_xowa/root/file/en.wikipedia.org/wiki.orig#00.sqlite3 b/tst/400_xowa/root/file/en.wikipedia.org/wiki.orig#00.sqlite3 index 9fdfa4fdd3fe2c2244f86d665fbae76faf82ceb1..cc7c821abb996c23db127e6249dbbf57049e7ce8 100644 GIT binary patch delta 132 zcmZo@U~Fh$oFFgA!hirwKqkvX1ASIz2Hi*M8&ekXv%F^Df4y1I;32=fFe4{}I41`q z6BDnaUPW@6Ama|k3A{iZjQpP%_&)&^J>{1Ma(Nh;<vGhUvoquKi!#%>zzV)I@P7v@ Pm>9sp$-ykn2{r)$;Y1wj delta 131 zcmZo@U~Fh$oFFgAfCQL;Y{rQO`V#|KH>ND&XL-rM|8ldS!hL>4QASP%aYjZ)CMI4- zy^7>CMg~E~9gGurK^pi!GVp)gENJkIUy6a3ky)OxJTp5pKEEh4oskPH|BZqF8(4l~ N02>!4vp6Hf2ms7%99sYY diff --git a/tst/400_xowa/root/wiki/en.wikipedia.org/en.wikipedia.org.002.sqlite3 b/tst/400_xowa/root/wiki/en.wikipedia.org/en.wikipedia.org.002.sqlite3 index 70e0a14db71800214ee9f5e2b36e640a5d93f577..6778de16f4fe4fb30a5b3aa26619fd64c555b5a9 100644 GIT binary patch delta 422 zcmXw#&nrYx6vywm_uRSf&6qhem}W}yBN4^0wjegjf`yfhW|$qCWMenaUtk(pPEo=_ z@orhlf+h{6$U-SU%EE*~i7B~n%B}M~=hOXmzTKNW!t4>QG(=;Jv079Ar_KzR>rFJp zSocGRGz3)fE`wB2u3QkCd=186H0N9Z>YK9>&}XF(=-<<G(1*oAt~0wUT<3Rgg<jr{ zK;GRd=?VqL@te`Njx@iKk|3F7S#C4-#!<OUxz@6s4`!@Y|5eR;a4+=5hH_4)+3#-6 zDkBr|c!8-y`!`Ukxe2vUm+#9rAd9jO3;RwM{Z5!vtUm$HaDL->Qu7lGSg(wJ=#ySe z<Q=sl3PvduMw7^mP6xe*(v#=<pci^FzH4feC;*TfBiJap0l^UraDVkH%8bg!c~8-L zY-qA)Qay9&#pL2rCOtKuoJ${s;hEYAV48D<rl%0AJt>5@0O`>Se5W!!>PYyK8Wln{ Q(1&0HiYf}ur9qqj0d3A{MgRZ+ delta 354 zcmY+-ze_?<6bJBo-o4lNe5v1Fp+*i`G&Q8@*wCMlb4$F)(Qt4n2(&F|NFIT6lk<Dc z;gB@=4@6KjIj9g+*bhNEucprOJ?GvJ=QO&i(N!0jB#HmE$Ro81`Bqscbl77Wf;gsu zGk=a?2CJ+l0+YbWjbU4)1yQ)fL8nZ7W6>on@cYwWK~uYi7V(m6{nwS{>Toz3-Q z4~Z45M?NCk`c7}EHnU@8H&ZavTX|~kc%9o_@3NN)7JBctH5T~B8^(O?39DL4;kYGj zgi%x^1>88_mKX_q;T0oxkI1qkl9C;fVQAtYvKbPF0z*d6SWBu*mJaqes+GE1KdM#s w4&7?yS4j*6KJkJ9%X=(a${}(~QvNkX!!Q;2h3J}wNbzndrKvcL@Qah{2jaO*z5oCK diff --git a/tst/400_xowa/root/wiki/en.wikipedia.org/tmp/import.sql.category_registry/0000000000.csv b/tst/400_xowa/root/wiki/en.wikipedia.org/tmp/import.sql.category_registry/0000000000.csv index c7d3cda0f..d3115aec3 100644 --- a/tst/400_xowa/root/wiki/en.wikipedia.org/tmp/import.sql.category_registry/0000000000.csv +++ b/tst/400_xowa/root/wiki/en.wikipedia.org/tmp/import.sql.category_registry/0000000000.csv @@ -1,2 +1,3 @@ -Ctg_1|!!!!" -Ctg_2|!!!!# +Ctg1|!!!!$ +Ctg2|!!!!# +Ctg3|!!!!"