diff --git a/100_core/.classpath b/100_core/.classpath index 7fbf632d5..a8a01ddbc 100644 --- a/100_core/.classpath +++ b/100_core/.classpath @@ -1,10 +1,7 @@ - - - diff --git a/100_core/src/gplx/Bool_.java b/100_core/src/gplx/Bool_.java index 845d1954f..697749fc8 100644 --- a/100_core/src/gplx/Bool_.java +++ b/100_core/src/gplx/Bool_.java @@ -39,6 +39,11 @@ public class Bool_ implements GfoInvkAble { return false; throw Err_.new_parse_type(boolean.class, raw); } + public static int Compare(boolean lhs, boolean rhs) { + if ( lhs == rhs) return CompareAble_.Same; + else if (!lhs && rhs) return CompareAble_.Less; + else /*lhs && !rhs*/ return CompareAble_.More; + } public static boolean By_int(int v) {return v == Y_int;} public static int To_int(boolean v) {return v ? Y_int : N_int;} public static byte To_byte(boolean v) {return v ? Y_byte : N_byte;} diff --git a/100_core/src/gplx/Bool__tst.java b/100_core/src/gplx/Bool__tst.java new file mode 100644 index 000000000..eda10a59f --- /dev/null +++ b/100_core/src/gplx/Bool__tst.java @@ -0,0 +1,31 @@ +/* +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 . +*/ +package gplx; +import org.junit.*; +public class Bool__tst { + private final Bool__fxt fxt = new Bool__fxt(); + @Test public void Compare() { + fxt.Test__compare(Bool_.Y, Bool_.Y, CompareAble_.Same); + fxt.Test__compare(Bool_.N, Bool_.N, CompareAble_.Same); + fxt.Test__compare(Bool_.N, Bool_.Y, CompareAble_.Less); + fxt.Test__compare(Bool_.Y, Bool_.N, CompareAble_.More); + } +} +class Bool__fxt { + public void Test__compare(boolean lhs, boolean rhs, int expd) {Tfds.Eq(expd, Bool_.Compare(lhs, rhs));} +} diff --git a/100_core/src/gplx/Bry_.java b/100_core/src/gplx/Bry_.java index b3e0e976e..701009a46 100644 --- a/100_core/src/gplx/Bry_.java +++ b/100_core/src/gplx/Bry_.java @@ -23,14 +23,26 @@ public class Bry_ { public static final byte[] Empty = new byte[0]; public static final byte[][] Ary_empty = new byte[0][]; public static final Class Cls_ref_type = byte[].class; - public static byte[] new_bytes(byte... ary) {return ary;} - public static byte[] new_ints(int... ary) { + public static byte[] New_by_byte(byte b) {return new byte[] {b};} + public static byte[] New_by_ints(int... ary) { int len = ary.length; byte[] rv = new byte[len]; for (int i = 0; i < len; i++) rv[i] = (byte)ary[i]; return rv; } + public static byte[] New_by_objs(Bry_bfr bfr, Object... ary) { + int len = ary.length; + for (int i = 0; i < len; ++i) { + Object itm = ary[i]; + Class type = Type_adp_.ClassOf_obj(itm); + if (Type_adp_.Eq(type, int.class)) bfr.Add_byte((byte)Int_.cast(itm)); + else if (Type_adp_.Eq(type, String.class)) bfr.Add_str_u8((String)itm); + else if (Type_adp_.Eq(type, byte[].class)) bfr.Add((byte[])itm); + else throw Err_.new_unhandled(Type_adp_.FullNameOf_type(type)); + } + return bfr.To_bry_and_clear(); + } public static byte[] Coalesce_to_empty(byte[] v) {return v == null ? Bry_.Empty : v;} public static byte[] Coalesce(byte[] v, byte[] or) {return v == null ? or : v;} public static byte[] new_a7(String str) { @@ -210,6 +222,8 @@ public class Bry_ { if (src[i] == lkp) return true; return false; } + public static boolean Has_at_bgn(byte[] src, byte lkp) {return Has_at_bgn(src, lkp, 0);} + public static boolean Has_at_bgn(byte[] src, byte lkp, int src_bgn) {return src_bgn < src.length ? src[src_bgn] == lkp : false;} public static boolean Has_at_bgn(byte[] src, byte[] lkp) {return Has_at_bgn(src, lkp, 0, src.length);} public static boolean Has_at_bgn(byte[] src, byte[] lkp, int src_bgn, int src_end) { int lkp_len = lkp.length; @@ -229,7 +243,6 @@ public class Bry_ { } return true; } - public static boolean Has_at_bgn(byte[] src, byte lkp, int src_bgn) {return src_bgn < src.length ? src[src_bgn] == lkp : false;} public static void Set(byte[] src, int bgn, int end, byte[] repl) { int repl_len = repl.length; for (int i = 0; i < repl_len; i++) diff --git a/100_core/src/gplx/Bry__tst.java b/100_core/src/gplx/Bry__tst.java index 7bfb878f2..31b152e7f 100644 --- a/100_core/src/gplx/Bry__tst.java +++ b/100_core/src/gplx/Bry__tst.java @@ -20,17 +20,17 @@ import org.junit.*; import gplx.core.primitives.*; import gplx.core.brys.*; public class Bry__tst { private final Bry__fxt fxt = new Bry__fxt(); @Test public void new_ascii_() { - fxt.Test_new_a7("a" , Bry_.new_ints(97)); // one - fxt.Test_new_a7("abc" , Bry_.new_ints(97, 98, 99)); // many + fxt.Test_new_a7("a" , Bry_.New_by_ints(97)); // one + fxt.Test_new_a7("abc" , Bry_.New_by_ints(97, 98, 99)); // many fxt.Test_new_a7("" , Bry_.Empty); // none - fxt.Test_new_a7("¢€𤭢" , Bry_.new_ints(63, 63, 63, 63)); // non-ascii -> ? + fxt.Test_new_a7("¢€𤭢" , Bry_.New_by_ints(63, 63, 63, 63)); // non-ascii -> ? } @Test public void new_u8() { - fxt.Test_new_u8("a" , Bry_.new_ints(97)); // one - fxt.Test_new_u8("abc" , Bry_.new_ints(97, 98, 99)); // many - fxt.Test_new_u8("¢" , Bry_.new_ints(194, 162)); // bry_len=2; cent - fxt.Test_new_u8("€" , Bry_.new_ints(226, 130, 172)); // bry_len=3; euro - fxt.Test_new_u8("𤭢" , Bry_.new_ints(240, 164, 173, 162)); // bry_len=3; example from en.w:UTF-8 + fxt.Test_new_u8("a" , Bry_.New_by_ints(97)); // one + fxt.Test_new_u8("abc" , Bry_.New_by_ints(97, 98, 99)); // many + fxt.Test_new_u8("¢" , Bry_.New_by_ints(194, 162)); // bry_len=2; cent + fxt.Test_new_u8("€" , Bry_.New_by_ints(226, 130, 172)); // bry_len=3; euro + fxt.Test_new_u8("𤭢" , Bry_.New_by_ints(240, 164, 173, 162)); // bry_len=3; example from en.w:UTF-8 } @Test public void Add__bry_plus_byte() { fxt.Test_add("a" , Byte_ascii.Pipe , "a|"); // basic diff --git a/100_core/src/gplx/Bry_find_.java b/100_core/src/gplx/Bry_find_.java index 97289edb6..d1fea2de2 100644 --- a/100_core/src/gplx/Bry_find_.java +++ b/100_core/src/gplx/Bry_find_.java @@ -25,6 +25,10 @@ public class Bry_find_ { if (src[i] == lkp) return i; return Bry_find_.Not_found; } + public static int Find_fwd_or(byte[] src, byte lkp, int cur, int end, int or) { + int rv = Find_fwd(src, lkp, cur, end); + return rv == Bry_find_.Not_found ? or : rv; + } public static int Find_bwd(byte[] src, byte lkp) {return Find_bwd(src, lkp, src.length, 0);} public static int Find_bwd(byte[] src, byte lkp, int cur) {return Find_bwd(src, lkp, cur , 0);} public static int Find_bwd(byte[] src, byte lkp, int cur, int end) { @@ -177,6 +181,16 @@ public class Bry_find_ { } return bgn; } + public static int Find_bwd__skip(byte[] src, int end, int bgn, byte skip) { + int src_len = src.length; if (end == src_len) return end; + if (end > src_len || end < 0) return Bry_find_.Not_found; + int pos = end - 1; // start from end - 1; handles situations where len is passed in + for (int i = pos; i >= bgn; --i) { + if (src[i] != skip) + return i + 1; + } + return bgn; + } public static int Find_bwd_while(byte[] src, int cur, int end, byte while_byte) { --cur; while (true) { diff --git a/100_core/src/gplx/Byte_.java b/100_core/src/gplx/Byte_.java index 70da79d4f..96746c085 100644 --- a/100_core/src/gplx/Byte_.java +++ b/100_core/src/gplx/Byte_.java @@ -23,6 +23,8 @@ public class Byte_ { Zero = 0 , Min_value = Byte.MIN_VALUE , Max_value_127 = 127 + , Val_128 = -128 + , Val_255 = -1 ; public static byte cast(Object o) {try {return (Byte)o;} catch (Exception e) {throw Err_.new_type_mismatch_w_exc(e, byte.class, o);}} public static byte parse(String raw) {return Byte.parseByte(raw);} diff --git a/100_core/src/gplx/Byte_ascii.java b/100_core/src/gplx/Byte_ascii.java index 7989e323d..2678ef7aa 100644 --- a/100_core/src/gplx/Byte_ascii.java +++ b/100_core/src/gplx/Byte_ascii.java @@ -108,10 +108,12 @@ public class Byte_ascii { , Angle_end_bry = new byte[] {Byte_ascii.Angle_end} , Comma_bry = new byte[] {Byte_ascii.Comma} , Colon_bry = new byte[] {Byte_ascii.Colon} + , Semic_bry = new byte[] {Byte_ascii.Semic} , Eq_bry = new byte[] {Byte_ascii.Eq} , Amp_bry = new byte[] {Byte_ascii.Amp} , Lt_bry = new byte[] {Byte_ascii.Lt} , Gt_bry = new byte[] {Byte_ascii.Gt} + , Question_bry = new byte[] {Byte_ascii.Question} , Brack_bgn_bry = new byte[] {Byte_ascii.Brack_bgn} , Brack_end_bry = new byte[] {Byte_ascii.Brack_end} , Apos_bry = new byte[] {Byte_ascii.Apos} diff --git a/100_core/src/gplx/Cancelable_.java b/100_core/src/gplx/Cancelable_.java index dc1808aac..558a56e6e 100644 --- a/100_core/src/gplx/Cancelable_.java +++ b/100_core/src/gplx/Cancelable_.java @@ -18,9 +18,16 @@ along with this program. If not, see . package gplx; public class Cancelable_ { public static final Cancelable Never = new Cancelable_never(); + public static Cancelable New_proxy() {return new Cancelable_proxy();} } class Cancelable_never implements Cancelable { public boolean Canceled() {return false;} public void Cancel() {} public void Cancel_reset() {} } +class Cancelable_proxy implements Cancelable { + private boolean canceled = false; + public boolean Canceled() {return canceled;} + public void Cancel() {canceled = true;} + public void Cancel_reset() {canceled = false;} +} diff --git a/100_core/src/gplx/DateAdp.java b/100_core/src/gplx/DateAdp.java index cb4232cc6..0734de797 100644 --- a/100_core/src/gplx/DateAdp.java +++ b/100_core/src/gplx/DateAdp.java @@ -69,6 +69,7 @@ public class DateAdp implements CompareAble, GfoInvkAble { public String XtoStr_fmt_yyyy_MM_dd_HH_mm() {return XtoStr_fmt("yyyy-MM-dd HH:mm");} public String XtoStr_fmt_yyyy_MM_dd_HH_mm_ss() {return XtoStr_fmt("yyyy-MM-dd HH:mm:ss");} public String XtoStr_fmt_iso_8561() {return XtoStr_fmt("yyyy-MM-dd HH:mm:ss");} + public String XtoStr_fmt_iso_8561_w_tz() {return XtoStr_fmt("yyyy-MM-dd'T'HH:mm:ss'Z'");} public static int Timezone_offset_test = Int_.Min_value; public Calendar UnderDateTime() {return under;} Calendar under; public int Year() {return under.get(Calendar.YEAR);} diff --git a/100_core/src/gplx/Err.java b/100_core/src/gplx/Err.java index e7174a640..7f9d3b77d 100644 --- a/100_core/src/gplx/Err.java +++ b/100_core/src/gplx/Err.java @@ -58,7 +58,7 @@ public class Err extends RuntimeException { String nl_str = called_by_log ? "\t" : "\n"; String rv = ""; //nl_str + "----------------------------------------------------------------------" + nl_str; for (int i = 0; i < msgs_idx; ++i) { - rv += "[err " + Int_.To_str(i) + "] " + msgs_ary[i].To_str() + nl_str; + rv += "[err " + Int_.To_str(i) + "] " + String_.Replace(msgs_ary[i].To_str(), "\n", nl_str) + nl_str; } if (include_trace) rv += "[trace]:" + Trace_to_str(is_gplx, called_by_log, trace_ignore, trace == null ? Err_.Trace_lang(this) : trace); diff --git a/100_core/src/gplx/Float_.java b/100_core/src/gplx/Float_.java index e7d393810..b8e06df9e 100644 --- a/100_core/src/gplx/Float_.java +++ b/100_core/src/gplx/Float_.java @@ -23,6 +23,11 @@ public class Float_ { public static boolean IsNaN(float v) {return Float.isNaN(v);} public static float cast(Object obj) {try {return (Float)obj;} catch(Exception exc) {throw Err_.new_type_mismatch_w_exc(exc, float.class, obj);}} public static float parse(String raw) {try {return Float.parseFloat(raw);} catch(Exception exc) {throw Err_.new_parse_exc(exc, float.class, raw);}} + public static int Compare(float lhs, float rhs) { + if ( lhs == rhs) return CompareAble_.Same; + else if ( lhs < rhs) return CompareAble_.Less; + else /*lhs > rhs*/ return CompareAble_.More; + } public static String To_str(float v) { int v_int = (int)v; return v - v_int == 0 ? Int_.To_str(v_int) : Float.toString(v); diff --git a/100_core/src_311_gfoObj/gplx/GfoEvMgr.java b/100_core/src/gplx/GfoEvMgr.java similarity index 100% rename from 100_core/src_311_gfoObj/gplx/GfoEvMgr.java rename to 100_core/src/gplx/GfoEvMgr.java diff --git a/100_core/src_311_gfoObj/gplx/GfoEvMgrOwner.java b/100_core/src/gplx/GfoEvMgrOwner.java similarity index 100% rename from 100_core/src_311_gfoObj/gplx/GfoEvMgrOwner.java rename to 100_core/src/gplx/GfoEvMgrOwner.java diff --git a/100_core/src_311_gfoObj/gplx/GfoEvMgr_.java b/100_core/src/gplx/GfoEvMgr_.java similarity index 100% rename from 100_core/src_311_gfoObj/gplx/GfoEvMgr_.java rename to 100_core/src/gplx/GfoEvMgr_.java diff --git a/100_core/src_311_gfoObj/gplx/GfoEvMgr_tst.java b/100_core/src/gplx/GfoEvMgr_tst.java similarity index 100% rename from 100_core/src_311_gfoObj/gplx/GfoEvMgr_tst.java rename to 100_core/src/gplx/GfoEvMgr_tst.java diff --git a/100_core/src_311_gfoObj/gplx/GfoEvObj.java b/100_core/src/gplx/GfoEvObj.java similarity index 100% rename from 100_core/src_311_gfoObj/gplx/GfoEvObj.java rename to 100_core/src/gplx/GfoEvObj.java diff --git a/100_core/src_311_gfoObj/gplx/GfoInvkAble.java b/100_core/src/gplx/GfoInvkAble.java similarity index 100% rename from 100_core/src_311_gfoObj/gplx/GfoInvkAble.java rename to 100_core/src/gplx/GfoInvkAble.java diff --git a/100_core/src_311_gfoObj/gplx/GfoInvkAbleCmd.java b/100_core/src/gplx/GfoInvkAbleCmd.java similarity index 100% rename from 100_core/src_311_gfoObj/gplx/GfoInvkAbleCmd.java rename to 100_core/src/gplx/GfoInvkAbleCmd.java diff --git a/100_core/src_311_gfoObj/gplx/GfoInvkAble_.java b/100_core/src/gplx/GfoInvkAble_.java similarity index 100% rename from 100_core/src_311_gfoObj/gplx/GfoInvkAble_.java rename to 100_core/src/gplx/GfoInvkAble_.java diff --git a/100_core/src_311_gfoObj/gplx/GfoInvkCmdMgr.java b/100_core/src/gplx/GfoInvkCmdMgr.java similarity index 100% rename from 100_core/src_311_gfoObj/gplx/GfoInvkCmdMgr.java rename to 100_core/src/gplx/GfoInvkCmdMgr.java diff --git a/100_core/src_311_gfoObj/gplx/GfoInvkCmdMgrOwner.java b/100_core/src/gplx/GfoInvkCmdMgrOwner.java similarity index 100% rename from 100_core/src_311_gfoObj/gplx/GfoInvkCmdMgrOwner.java rename to 100_core/src/gplx/GfoInvkCmdMgrOwner.java diff --git a/100_core/src_311_gfoObj/gplx/GfoInvkRootWkr.java b/100_core/src/gplx/GfoInvkRootWkr.java similarity index 100% rename from 100_core/src_311_gfoObj/gplx/GfoInvkRootWkr.java rename to 100_core/src/gplx/GfoInvkRootWkr.java diff --git a/100_core/src_311_gfoObj/gplx/GfoInvkXtoStr.java b/100_core/src/gplx/GfoInvkXtoStr.java similarity index 100% rename from 100_core/src_311_gfoObj/gplx/GfoInvkXtoStr.java rename to 100_core/src/gplx/GfoInvkXtoStr.java diff --git a/100_core/src_311_gfoObj/gplx/GfoMsg.java b/100_core/src/gplx/GfoMsg.java similarity index 100% rename from 100_core/src_311_gfoObj/gplx/GfoMsg.java rename to 100_core/src/gplx/GfoMsg.java diff --git a/100_core/src_311_gfoObj/gplx/GfoMsgUtl.java b/100_core/src/gplx/GfoMsgUtl.java similarity index 100% rename from 100_core/src_311_gfoObj/gplx/GfoMsgUtl.java rename to 100_core/src/gplx/GfoMsgUtl.java diff --git a/100_core/src_311_gfoObj/gplx/GfoMsg_.java b/100_core/src/gplx/GfoMsg_.java similarity index 100% rename from 100_core/src_311_gfoObj/gplx/GfoMsg_.java rename to 100_core/src/gplx/GfoMsg_.java diff --git a/100_core/src_311_gfoObj/gplx/GfoMsg_tst.java b/100_core/src/gplx/GfoMsg_tst.java similarity index 100% rename from 100_core/src_311_gfoObj/gplx/GfoMsg_tst.java rename to 100_core/src/gplx/GfoMsg_tst.java diff --git a/100_core/src_311_gfoObj/gplx/GfoTemplate.java b/100_core/src/gplx/GfoTemplate.java similarity index 100% rename from 100_core/src_311_gfoObj/gplx/GfoTemplate.java rename to 100_core/src/gplx/GfoTemplate.java diff --git a/100_core/src_311_gfoObj/gplx/GfoTemplateFactory.java b/100_core/src/gplx/GfoTemplateFactory.java similarity index 100% rename from 100_core/src_311_gfoObj/gplx/GfoTemplateFactory.java rename to 100_core/src/gplx/GfoTemplateFactory.java diff --git a/100_core/src_420_usrMsg/gplx/Gfo_log_bfr.java b/100_core/src/gplx/Gfo_log_bfr.java similarity index 100% rename from 100_core/src_420_usrMsg/gplx/Gfo_log_bfr.java rename to 100_core/src/gplx/Gfo_log_bfr.java diff --git a/100_core/src_420_usrMsg/gplx/Gfo_usr_dlg.java b/100_core/src/gplx/Gfo_usr_dlg.java similarity index 100% rename from 100_core/src_420_usrMsg/gplx/Gfo_usr_dlg.java rename to 100_core/src/gplx/Gfo_usr_dlg.java diff --git a/100_core/src_420_usrMsg/gplx/Gfo_usr_dlg_.java b/100_core/src/gplx/Gfo_usr_dlg_.java similarity index 100% rename from 100_core/src_420_usrMsg/gplx/Gfo_usr_dlg_.java rename to 100_core/src/gplx/Gfo_usr_dlg_.java diff --git a/100_core/src_420_usrMsg/gplx/Gfo_usr_dlg__gui.java b/100_core/src/gplx/Gfo_usr_dlg__gui.java similarity index 100% rename from 100_core/src_420_usrMsg/gplx/Gfo_usr_dlg__gui.java rename to 100_core/src/gplx/Gfo_usr_dlg__gui.java diff --git a/100_core/src_420_usrMsg/gplx/Gfo_usr_dlg__gui_.java b/100_core/src/gplx/Gfo_usr_dlg__gui_.java similarity index 100% rename from 100_core/src_420_usrMsg/gplx/Gfo_usr_dlg__gui_.java rename to 100_core/src/gplx/Gfo_usr_dlg__gui_.java diff --git a/100_core/src_420_usrMsg/gplx/Gfo_usr_dlg__gui_test.java b/100_core/src/gplx/Gfo_usr_dlg__gui_test.java similarity index 100% rename from 100_core/src_420_usrMsg/gplx/Gfo_usr_dlg__gui_test.java rename to 100_core/src/gplx/Gfo_usr_dlg__gui_test.java diff --git a/100_core/src_420_usrMsg/gplx/Gfo_usr_dlg__log.java b/100_core/src/gplx/Gfo_usr_dlg__log.java similarity index 100% rename from 100_core/src_420_usrMsg/gplx/Gfo_usr_dlg__log.java rename to 100_core/src/gplx/Gfo_usr_dlg__log.java diff --git a/100_core/src_420_usrMsg/gplx/Gfo_usr_dlg__log_.java b/100_core/src/gplx/Gfo_usr_dlg__log_.java similarity index 100% rename from 100_core/src_420_usrMsg/gplx/Gfo_usr_dlg__log_.java rename to 100_core/src/gplx/Gfo_usr_dlg__log_.java diff --git a/100_core/src_420_usrMsg/gplx/Gfo_usr_dlg__log_base.java b/100_core/src/gplx/Gfo_usr_dlg__log_base.java similarity index 100% rename from 100_core/src_420_usrMsg/gplx/Gfo_usr_dlg__log_base.java rename to 100_core/src/gplx/Gfo_usr_dlg__log_base.java diff --git a/100_core/src_420_usrMsg/gplx/Gfo_usr_dlg_base.java b/100_core/src/gplx/Gfo_usr_dlg_base.java similarity index 100% rename from 100_core/src_420_usrMsg/gplx/Gfo_usr_dlg_base.java rename to 100_core/src/gplx/Gfo_usr_dlg_base.java diff --git a/100_core/src/gplx/Hash_adp_bry.java b/100_core/src/gplx/Hash_adp_bry.java index 5813ffdd6..201c2af6d 100644 --- a/100_core/src/gplx/Hash_adp_bry.java +++ b/100_core/src/gplx/Hash_adp_bry.java @@ -43,7 +43,7 @@ public class Hash_adp_bry extends gplx.core.lists.Hash_adp_base implements Hash_ } public Object Get_by_bry(byte[] src) {return super.Fetch_base(key_ref.Init(src));} public Object Get_by_mid(byte[] src, int bgn, int end) {return super.Fetch_base(key_ref.Init(src, bgn, end));} - public Hash_adp_bry Add_byte_int(byte key, int val) {this.Add_base(Bry_.new_bytes(key), Int_obj_val.new_(val)); return this;} + public Hash_adp_bry Add_byte_int(byte key, int val) {this.Add_base(new byte[]{key}, Int_obj_val.new_(val)); return this;} public Hash_adp_bry Add_bry_byte(byte[] key, byte val) {this.Add_base(key, Byte_obj_val.new_(val)); return this;} public Hash_adp_bry Add_bry_int(byte[] key, int val) {this.Add_base(key, Int_obj_val.new_(val)); return this;} public Hash_adp_bry Add_bry_bry(byte[] key) {this.Add_base(key, key); return this;} diff --git a/100_core/xtn/gplx/Internal.java b/100_core/src/gplx/Internal.java similarity index 95% rename from 100_core/xtn/gplx/Internal.java rename to 100_core/src/gplx/Internal.java index eb976259b..15e516551 100644 --- a/100_core/xtn/gplx/Internal.java +++ b/100_core/src/gplx/Internal.java @@ -16,5 +16,4 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx; -public @interface Internal {} - +public @interface Internal {} diff --git a/100_core/xtn/gplx/New.java b/100_core/src/gplx/New.java similarity index 96% rename from 100_core/xtn/gplx/New.java rename to 100_core/src/gplx/New.java index 4c0e76d55..4fe896357 100644 --- a/100_core/xtn/gplx/New.java +++ b/100_core/src/gplx/New.java @@ -16,5 +16,4 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx; -public @interface New {} - +public @interface New {} diff --git a/100_core/tst/gplx/TfdsTstr_fxt.java b/100_core/src/gplx/TfdsTstr_fxt.java similarity index 100% rename from 100_core/tst/gplx/TfdsTstr_fxt.java rename to 100_core/src/gplx/TfdsTstr_fxt.java diff --git a/100_core/src_420_usrMsg/gplx/UsrDlg.java b/100_core/src/gplx/UsrDlg.java similarity index 100% rename from 100_core/src_420_usrMsg/gplx/UsrDlg.java rename to 100_core/src/gplx/UsrDlg.java diff --git a/100_core/src_420_usrMsg/gplx/UsrDlg_.java b/100_core/src/gplx/UsrDlg_.java similarity index 100% rename from 100_core/src_420_usrMsg/gplx/UsrDlg_.java rename to 100_core/src/gplx/UsrDlg_.java diff --git a/100_core/src_420_usrMsg/gplx/UsrMsg.java b/100_core/src/gplx/UsrMsg.java similarity index 100% rename from 100_core/src_420_usrMsg/gplx/UsrMsg.java rename to 100_core/src/gplx/UsrMsg.java diff --git a/100_core/src_420_usrMsg/gplx/UsrMsgWkr.java b/100_core/src/gplx/UsrMsgWkr.java similarity index 100% rename from 100_core/src_420_usrMsg/gplx/UsrMsgWkr.java rename to 100_core/src/gplx/UsrMsgWkr.java diff --git a/100_core/src_420_usrMsg/gplx/UsrMsgWkr_.java b/100_core/src/gplx/UsrMsgWkr_.java similarity index 100% rename from 100_core/src_420_usrMsg/gplx/UsrMsgWkr_.java rename to 100_core/src/gplx/UsrMsgWkr_.java diff --git a/100_core/src_420_usrMsg/gplx/UsrMsgWkr_console.java b/100_core/src/gplx/UsrMsgWkr_console.java similarity index 100% rename from 100_core/src_420_usrMsg/gplx/UsrMsgWkr_console.java rename to 100_core/src/gplx/UsrMsgWkr_console.java diff --git a/100_core/src_420_usrMsg/gplx/UsrMsgWkr_test.java b/100_core/src/gplx/UsrMsgWkr_test.java similarity index 100% rename from 100_core/src_420_usrMsg/gplx/UsrMsgWkr_test.java rename to 100_core/src/gplx/UsrMsgWkr_test.java diff --git a/100_core/xtn/gplx/Virtual.java b/100_core/src/gplx/Virtual.java similarity index 95% rename from 100_core/xtn/gplx/Virtual.java rename to 100_core/src/gplx/Virtual.java index 6f019ddee..aeac6477e 100644 --- a/100_core/xtn/gplx/Virtual.java +++ b/100_core/src/gplx/Virtual.java @@ -16,5 +16,4 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx; -public @interface Virtual {} - +public @interface Virtual {} diff --git a/100_core/src/gplx/core/brys/Bfr_arg.java b/100_core/src/gplx/core/brys/Bfr_arg.java index 9e341e121..0c3312825 100644 --- a/100_core/src/gplx/core/brys/Bfr_arg.java +++ b/100_core/src/gplx/core/brys/Bfr_arg.java @@ -17,7 +17,5 @@ along with this program. If not, see . */ package gplx.core.brys; import gplx.*; import gplx.core.*; public interface Bfr_arg { - void Bfr_arg__clear(); - boolean Bfr_arg__exists(); void Bfr_arg__add(Bry_bfr bfr); } diff --git a/100_core/src/gplx/core/brys/Bfr_arg_.java b/100_core/src/gplx/core/brys/Bfr_arg_.java index 8c2b4ae91..8a58fba9f 100644 --- a/100_core/src/gplx/core/brys/Bfr_arg_.java +++ b/100_core/src/gplx/core/brys/Bfr_arg_.java @@ -20,18 +20,16 @@ import gplx.core.brys.args.*; import gplx.core.brys.fmtrs.*; public class Bfr_arg_ { public static Bfr_arg__int New_int(int v) {return new Bfr_arg__int(v);} public static Bfr_arg__byte New_byte(byte v) {return new Bfr_arg__byte(v);} - public static Bfr_arg__bry New_bry(String v) {return new Bfr_arg__bry(Bry_.new_u8(v));} - public static Bfr_arg__bry New_bry(byte[] v) {return new Bfr_arg__bry(v);} + public static Bfr_arg__bry New_bry(String v) {return Bfr_arg__bry.New(Bry_.new_u8(v));} + public static Bfr_arg__bry New_bry(byte[] v) {return Bfr_arg__bry.New(v);} public static Bfr_arg__bry_fmtr New_bry_fmtr__null() {return new Bfr_arg__bry_fmtr(null, null);} public static Bfr_arg__bry_fmtr New_bry_fmtr(Bry_fmtr v, Bfr_arg... arg_ary) {return new Bfr_arg__bry_fmtr(v, arg_ary);} public static final Bfr_arg Noop = new Bfr_arg___noop(); - public static void Clear(Bfr_arg... ary) { - for (Bfr_arg arg : ary) + public static void Clear(Bfr_arg_clearable... ary) { + for (Bfr_arg_clearable arg : ary) arg.Bfr_arg__clear(); } } class Bfr_arg___noop implements gplx.core.brys.Bfr_arg { - public void Bfr_arg__clear() {} - public boolean Bfr_arg__exists() {return false;} public void Bfr_arg__add(Bry_bfr bfr) {} } diff --git a/400_xowa/src/gplx/core/brys/Clear_able.java b/100_core/src/gplx/core/brys/Bfr_arg_clearable.java similarity index 87% rename from 400_xowa/src/gplx/core/brys/Clear_able.java rename to 100_core/src/gplx/core/brys/Bfr_arg_clearable.java index e37013d6d..84382c32e 100644 --- a/400_xowa/src/gplx/core/brys/Clear_able.java +++ b/100_core/src/gplx/core/brys/Bfr_arg_clearable.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 . */ package gplx.core.brys; import gplx.*; import gplx.core.*; -public interface Clear_able { - void Clear(); +public interface Bfr_arg_clearable extends Bfr_arg { + void Bfr_arg__clear(); + boolean Bfr_arg__missing(); } diff --git a/100_core/src/gplx/core/brys/args/Bfr_arg__bry.java b/100_core/src/gplx/core/brys/args/Bfr_arg__bry.java index 1fdbdfe91..f1168ea6d 100644 --- a/100_core/src/gplx/core/brys/args/Bfr_arg__bry.java +++ b/100_core/src/gplx/core/brys/args/Bfr_arg__bry.java @@ -16,9 +16,28 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.core.brys.args; import gplx.*; import gplx.core.*; import gplx.core.brys.*; -public class Bfr_arg__bry extends gplx.core.brys.Bfr_arg_base { - private byte[] bry; - public Bfr_arg__bry(byte[] v) {this.bry = v;} - public void Set(byte[] v) {this.bry = v;} - @Override public void Bfr_arg__add(Bry_bfr bfr) {bfr.Add(bry);} +public class Bfr_arg__bry implements Bfr_arg_clearable { + private int tid; + private byte[] src; private int src_bgn, src_end; + private Bfr_arg arg; + public void Set_by_mid(byte[] src, int bgn, int end) {this.tid = Tid_mid; this.src = src; this.src_bgn = bgn; this.src_end = end;} + public void Set_by_val(byte[] src) {this.tid = Tid_val; this.src = src;} + public void Set_by_arg(Bfr_arg arg) {this.tid = Tid_arg; this.arg = arg;} + public void Bfr_arg__clear() { + tid = Tid_nil; + src = null; src_bgn = src_end = -1; + arg = null; + } + public boolean Bfr_arg__missing() {return tid == Tid_nil;} + public void Bfr_arg__add(Bry_bfr bfr) { + switch (tid) { + case Tid_val: bfr.Add(src); break; + case Tid_mid: bfr.Add_mid(src, src_bgn, src_end); break; + case Tid_arg: arg.Bfr_arg__add(bfr); break; + case Tid_nil: break; + } + } + public static Bfr_arg__bry New_empty() {return new Bfr_arg__bry();} + public static Bfr_arg__bry New(byte[] v) {Bfr_arg__bry rv = new Bfr_arg__bry(); rv.Set_by_val(v); return rv;} + private static final int Tid_nil = 0, Tid_val = 1, Tid_mid = 2, Tid_arg = 3; } diff --git a/100_core/src/gplx/core/brys/args/Bfr_arg__bry_ary.java b/100_core/src/gplx/core/brys/args/Bfr_arg__bry_ary.java index 00571d658..b03015787 100644 --- a/100_core/src/gplx/core/brys/args/Bfr_arg__bry_ary.java +++ b/100_core/src/gplx/core/brys/args/Bfr_arg__bry_ary.java @@ -16,10 +16,10 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.core.brys.args; import gplx.*; import gplx.core.*; import gplx.core.brys.*; -public class Bfr_arg__bry_ary extends gplx.core.brys.Bfr_arg_base { +public class Bfr_arg__bry_ary implements Bfr_arg { private byte[][] bry_ary; - public Bfr_arg__bry_ary Set(byte[][] v) {this.bry_ary = v; return this;} - @Override public void Bfr_arg__add(Bry_bfr bfr) { + public Bfr_arg__bry_ary Set(byte[]... v) {this.bry_ary = v; return this;} + public void Bfr_arg__add(Bry_bfr bfr) { for (byte[] bry : bry_ary) bfr.Add(bry); } diff --git a/100_core/src/gplx/core/brys/args/Bfr_arg__bry_fmtr.java b/100_core/src/gplx/core/brys/args/Bfr_arg__bry_fmtr.java index c2edd2961..7698416dd 100644 --- a/100_core/src/gplx/core/brys/args/Bfr_arg__bry_fmtr.java +++ b/100_core/src/gplx/core/brys/args/Bfr_arg__bry_fmtr.java @@ -17,12 +17,12 @@ along with this program. If not, see . */ package gplx.core.brys.args; import gplx.*; import gplx.core.*; import gplx.core.brys.*; import gplx.core.brys.fmtrs.*; -public class Bfr_arg__bry_fmtr extends gplx.core.brys.Bfr_arg_base { +public class Bfr_arg__bry_fmtr implements Bfr_arg { private Bry_fmtr fmtr; private Object[] arg_ary; public Bfr_arg__bry_fmtr(Bry_fmtr fmtr, Object[] arg_ary) {Set(fmtr, arg_ary);} public Bfr_arg__bry_fmtr Set(Bry_fmtr fmtr, Object... arg_ary) { this.fmtr = fmtr; this.arg_ary = arg_ary; return this; } - @Override public void Bfr_arg__add(Bry_bfr bfr) {fmtr.Bld_bfr_many(bfr, arg_ary);} + public void Bfr_arg__add(Bry_bfr bfr) {fmtr.Bld_bfr_many(bfr, arg_ary);} } diff --git a/100_core/src/gplx/core/brys/args/Bfr_arg__byte.java b/100_core/src/gplx/core/brys/args/Bfr_arg__byte.java index f6c707935..34d695bba 100644 --- a/100_core/src/gplx/core/brys/args/Bfr_arg__byte.java +++ b/100_core/src/gplx/core/brys/args/Bfr_arg__byte.java @@ -16,8 +16,8 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.core.brys.args; import gplx.*; import gplx.core.*; import gplx.core.brys.*; -public class Bfr_arg__byte extends gplx.core.brys.Bfr_arg_base { +public class Bfr_arg__byte implements Bfr_arg { private final byte byt; public Bfr_arg__byte(byte byt) {this.byt = byt;} - @Override public void Bfr_arg__add(Bry_bfr bfr) {bfr.Add_byte(byt);} + public void Bfr_arg__add(Bry_bfr bfr) {bfr.Add_byte(byt);} } diff --git a/100_core/src/gplx/core/brys/args/Bfr_arg__decimal_int.java b/100_core/src/gplx/core/brys/args/Bfr_arg__decimal_int.java index fa38559c0..8942b1b75 100644 --- a/100_core/src/gplx/core/brys/args/Bfr_arg__decimal_int.java +++ b/100_core/src/gplx/core/brys/args/Bfr_arg__decimal_int.java @@ -16,10 +16,10 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.core.brys.args; import gplx.*; import gplx.core.*; import gplx.core.brys.*; -public class Bfr_arg__decimal_int extends gplx.core.brys.Bfr_arg_base { +public class Bfr_arg__decimal_int implements Bfr_arg { public int Val() {return val;} public Bfr_arg__decimal_int Val_(int v) {val = v; return this;} int val; public Bfr_arg__decimal_int Places_(int v) {places = v; multiple = (int)Math_.Pow(10, v); return this;} int multiple = 1000, places = 3; - @Override public void Bfr_arg__add(Bry_bfr bfr) { + public void Bfr_arg__add(Bry_bfr bfr) { bfr.Add_int_variable(val / multiple).Add_byte(Byte_ascii.Dot).Add_int_fixed(val % multiple, places); } } diff --git a/100_core/src/gplx/core/brys/args/Bfr_arg__int.java b/100_core/src/gplx/core/brys/args/Bfr_arg__int.java index 5c6089d53..2715e0947 100644 --- a/100_core/src/gplx/core/brys/args/Bfr_arg__int.java +++ b/100_core/src/gplx/core/brys/args/Bfr_arg__int.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 . */ package gplx.core.brys.args; import gplx.*; import gplx.core.*; import gplx.core.brys.*; -public class Bfr_arg__int extends gplx.core.brys.Bfr_arg_base { +public class Bfr_arg__int implements Bfr_arg { private int val, val_digits; public Bfr_arg__int(int v) {Set(v);} public Bfr_arg__int Set(int v) { @@ -24,5 +24,5 @@ public class Bfr_arg__int extends gplx.core.brys.Bfr_arg_base { this.val_digits = Int_.DigitCount(val); return this; } - @Override public void Bfr_arg__add(Bry_bfr bfr) {bfr.Add_int_digits(val_digits, val);} + public void Bfr_arg__add(Bry_bfr bfr) {bfr.Add_int_digits(val_digits, val);} } diff --git a/100_core/src/gplx/core/brys/args/Bfr_arg__time.java b/100_core/src/gplx/core/brys/args/Bfr_arg__time.java index f3a27a64f..bc1f7a742 100644 --- a/100_core/src/gplx/core/brys/args/Bfr_arg__time.java +++ b/100_core/src/gplx/core/brys/args/Bfr_arg__time.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 . */ package gplx.core.brys.args; import gplx.*; import gplx.core.*; import gplx.core.brys.*; -public class Bfr_arg__time extends gplx.core.brys.Bfr_arg_base { +public class Bfr_arg__time implements Bfr_arg { public Bfr_arg__time() { units_len = units.length; } @@ -30,7 +30,7 @@ public class Bfr_arg__time extends gplx.core.brys.Bfr_arg_base { int[] units = new int[] {86400, 3600, 60, 1}; int units_len; byte[] spr = new byte[] {Byte_ascii.Space}; - @Override public void Bfr_arg__add(Bry_bfr bfr) { + public void Bfr_arg__add(Bry_bfr bfr) { if (seconds == 0) { // handle 0 separately (since it will always be < than units[*] bfr.Add_int_fixed(0, 2).Add(segs[units_len - 1]); return; diff --git a/100_core/src/gplx/core/brys/fmtrs/Bfr_fmt_arg.java b/100_core/src/gplx/core/brys/fmtrs/Bfr_fmt_arg.java new file mode 100644 index 000000000..7cf0f1fb2 --- /dev/null +++ b/100_core/src/gplx/core/brys/fmtrs/Bfr_fmt_arg.java @@ -0,0 +1,24 @@ +/* +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 . +*/ +package gplx.core.brys.fmtrs; import gplx.*; import gplx.core.*; import gplx.core.brys.*; +public class Bfr_fmt_arg { + public Bfr_fmt_arg(byte[] key, Bfr_arg arg) {this.Key = key; this.Arg = arg;} + public byte[] Key; + public Bfr_arg Arg; + public static final Bfr_fmt_arg[] Ary_empty = new Bfr_fmt_arg[0]; +} diff --git a/100_core/src/gplx/core/brys/fmtrs/Bry_fmt.java b/100_core/src/gplx/core/brys/fmtrs/Bry_fmt.java new file mode 100644 index 000000000..2b5d43427 --- /dev/null +++ b/100_core/src/gplx/core/brys/fmtrs/Bry_fmt.java @@ -0,0 +1,71 @@ +/* +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 . +*/ +package gplx.core.brys.fmtrs; import gplx.*; import gplx.core.*; import gplx.core.brys.*; +public class Bry_fmt { + private byte[] src; + private Bry_fmt_itm[] itms; private int itms_len; + private Bfr_fmt_arg[] args = Bfr_fmt_arg.Ary_empty; + private byte[][] keys = Bry_.Ary_empty; + private boolean dirty; + public Bry_fmt(byte[] src, byte[][] keys, Bfr_fmt_arg[] args) { + dirty = true; + this.src = src; this.keys = keys; this.args = args; + } + public Bry_fmt Fmt_(String v) {dirty = true; src = Bry_.new_u8(v); return this;} + public Bry_fmt Args_(Bfr_fmt_arg... v) {dirty = true; args = v; return this;} + public Bry_fmt Keys_(byte[]... v) {dirty = true; keys = v; return this;} + public void Bld_bfr_many(Bry_bfr bfr, Object... vals) { + if (dirty) Compile(); + int vals_len = vals.length; + for (int i = 0; i < itms_len; ++i) { + Bry_fmt_itm itm = itms[i]; + switch (itm.Tid) { + case Bry_fmt_itm.Tid__txt: bfr.Add_mid(src, itm.Src_bgn, itm.Src_end); break; + case Bry_fmt_itm.Tid__arg: itm.Arg.Bfr_arg__add(bfr);break; + case Bry_fmt_itm.Tid__key: + int idx = itm.Key_idx; + if (idx > -1 && idx < vals_len) + bfr.Add_obj(vals[idx]); + else + bfr.Add_mid(src, itm.Src_bgn, itm.Src_end); + break; + default: throw Err_.new_unhandled(itm.Tid); + } + } + } + private void Compile() { + dirty = false; + this.itms = Bry_fmt_parser_.Parse(Byte_ascii.Tilde, Byte_ascii.Curly_bgn, Byte_ascii.Curly_end, args, keys, src); + this.itms_len = itms.length; + } + public static Bry_fmt New(String fmt, String... keys) {return new Bry_fmt(Bry_.new_u8(fmt), Bry_.Ary(keys), Bfr_fmt_arg.Ary_empty);} +} +class Bry_fmt_itm { + public Bry_fmt_itm(int tid, int src_bgn, int src_end) { + this.Tid = tid; + this.Src_bgn = src_bgn; + this.Src_end = src_end; + } + public int Tid; + public int Src_bgn; + public int Src_end; + public int Key_idx; + public Bfr_arg Arg; + + public static final int Tid__txt = 0, Tid__key = 1, Tid__arg = 2; +} diff --git a/100_core/src/gplx/core/brys/fmtrs/Bry_fmt_parser_.java b/100_core/src/gplx/core/brys/fmtrs/Bry_fmt_parser_.java new file mode 100644 index 000000000..ac60ed338 --- /dev/null +++ b/100_core/src/gplx/core/brys/fmtrs/Bry_fmt_parser_.java @@ -0,0 +1,77 @@ +/* +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 . +*/ +package gplx.core.brys.fmtrs; import gplx.*; import gplx.core.*; import gplx.core.brys.*; +class Bry_fmt_parser_ { + public static Bry_fmt_itm[] Parse(byte escape, byte grp_bgn, byte grp_end, Bfr_fmt_arg[] args, byte[][] keys, byte[] src) { + int src_len = src.length; + int pos = 0; + int txt_bgn = -1; + int key_idx = -1; + Hash_adp_bry keys_hash = Hash_adp_bry.cs(); + List_adp list = List_adp_.new_(); + while (true) { + boolean is_last = pos == src_len; + byte b = is_last ? escape : src[pos]; + if (b == escape) { + if (txt_bgn != -1) list.Add(new Bry_fmt_itm(Bry_fmt_itm.Tid__txt, txt_bgn, pos)); + if (is_last) break; + ++pos; + if (pos == src_len) throw Err_.new_("bry_fmtr", "fmt cannot end with escape", "escape", Byte_ascii.To_str(escape), "raw", src); + b = src[pos]; + if (b == escape) { + list.Add(new Bry_fmt_itm(Bry_fmt_itm.Tid__txt, pos, pos + 1)); + ++pos; + } + else if (b == grp_bgn) { + ++pos; + int grp_end_pos = Bry_find_.Find_fwd(src, grp_end, pos); if (grp_end_pos == Bry_find_.Not_found) throw Err_.new_("bry_fmtr", "grp_end missing", "grp_bgn", Byte_ascii.To_str(grp_bgn), "grp_end", Byte_ascii.To_str(grp_end), "raw", src); + byte[] key_bry = Bry_.Mid(src, pos, grp_end_pos); + Bry_fmt_itm key_itm = (Bry_fmt_itm)keys_hash.Get_by_bry(key_bry); + if (key_itm == null) { + key_itm = new Bry_fmt_itm(Bry_fmt_itm.Tid__key, pos - 2, grp_end_pos + 1); // -2 to get "~{"; +1 to get "}" + key_itm.Key_idx = ++key_idx; + keys_hash.Add(key_bry, key_itm); + } + list.Add(key_itm); + pos = grp_end_pos + 1; + } + else throw Err_.new_("bry_fmtr", "escape must be followed by escape or group_bgn", "escape", Byte_ascii.To_str(escape), "group_bgn", Byte_ascii.To_str(escape), "raw", src); + txt_bgn = -1; + } + else { + if (txt_bgn == -1) txt_bgn = pos; + ++pos; + } + } + Bry_fmt_itm[] rv = (Bry_fmt_itm[])list.To_ary_and_clear(Bry_fmt_itm.class); + int len = args.length; + for (int i = 0; i < len; ++i) { + Bfr_fmt_arg arg = args[i]; + Bry_fmt_itm key_itm = (Bry_fmt_itm)keys_hash.Get_by(arg.Key); if (key_itm == null) continue; + key_itm.Tid = Bry_fmt_itm.Tid__arg; + key_itm.Arg = arg.Arg; + } + len = keys.length; + for (int i = 0; i < len; ++i) { + byte[] key = keys[i]; + Bry_fmt_itm key_itm = (Bry_fmt_itm)keys_hash.Get_by(key); if (key_itm == null) throw Err_.new_("bry_fmtr", "could not find key", "key", key); + key_itm.Key_idx = i; + } + return rv; + } +} diff --git a/100_core/src/gplx/core/brys/fmtrs/Bry_fmt_tst.java b/100_core/src/gplx/core/brys/fmtrs/Bry_fmt_tst.java new file mode 100644 index 000000000..0cd0bbae9 --- /dev/null +++ b/100_core/src/gplx/core/brys/fmtrs/Bry_fmt_tst.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 . +*/ +package gplx.core.brys.fmtrs; import gplx.*; import gplx.core.*; import gplx.core.brys.*; +import org.junit.*; +public class Bry_fmt_tst { + private final Bry_fmt_fxt fxt = new Bry_fmt_fxt(); + @Test public void Text() {fxt.Clear().Fmt("a").Test("a");} + @Test public void Key__basic() {fxt.Clear().Fmt("~{key}").Vals("a").Test("a");} + @Test public void Key__mult() {fxt.Clear().Fmt("~{key1}~{key2}").Vals("a", "b").Test("ab");} + @Test public void Key__repeat() {fxt.Clear().Fmt("~{key1}~{key1}").Vals("a").Test("aa");} + @Test public void Key__missing() {fxt.Clear().Fmt("~{key}").Test("~{key}");} + @Test public void Tilde() {fxt.Clear().Fmt("~~~~").Test("~~");} + @Test public void Simple() {fxt.Clear().Fmt("0~{key1}1~{key2}2").Vals(".", ",").Test("0.1,2");} + @Test public void Arg() {fxt.Clear().Fmt("~{custom}").Args("custom", new Bfr_fmt_arg_mok(123)).Test("123");} + @Test public void Keys() {fxt.Clear().Fmt("~{b}~{c}~{a}").Keys("a", "b", "c").Vals("a", "b", "c").Test("bca");} +} +class Bfr_fmt_arg_mok implements Bfr_arg { + private int num; + public Bfr_fmt_arg_mok(int num) {this.num = num;} + public void Bfr_arg__add(Bry_bfr bfr) { + bfr.Add_int_variable(num); + } +} +class Bry_fmt_fxt { + private final Bry_fmt fmt = new Bry_fmt(Bry_.Empty, Bry_.Ary_empty, Bfr_fmt_arg.Ary_empty); + private final Bry_bfr bfr = Bry_bfr.new_(); + private Object[] vals; + public Bry_fmt_fxt Clear() {vals = Object_.Ary_empty; return this;} + public Bry_fmt_fxt Fmt(String s) {fmt.Fmt_(s); return this;} + public Bry_fmt_fxt Vals(Object... vals) {this.vals = vals; return this;} + public Bry_fmt_fxt Args(String key, Bfr_arg arg) {fmt.Args_(new Bfr_fmt_arg(Bry_.new_u8(key), arg)); return this;} + public Bry_fmt_fxt Keys(String... keys) {fmt.Keys_(Bry_.Ary(keys)); return this;} + public void Test(String expd) { + fmt.Bld_bfr_many(bfr, vals); + Tfds.Eq(expd, bfr.To_str_and_clear()); + } +} diff --git a/100_core/src/gplx/core/brys/fmtrs/Bry_fmtr_itm.java b/100_core/src/gplx/core/brys/fmtrs/Bry_fmtr_itm.java index 14366ba76..7e5ce85d1 100644 --- a/100_core/src/gplx/core/brys/fmtrs/Bry_fmtr_itm.java +++ b/100_core/src/gplx/core/brys/fmtrs/Bry_fmtr_itm.java @@ -17,6 +17,9 @@ along with this program. If not, see . */ package gplx.core.brys.fmtrs; import gplx.*; import gplx.core.*; import gplx.core.brys.*; public class Bry_fmtr_itm { + Bry_fmtr_itm(boolean arg, int argIdx, byte[] dat) { + this.Arg = arg; this.ArgIdx = argIdx; this.Dat = dat; + } public boolean Arg; public int ArgIdx; public byte[] Dat; @@ -27,7 +30,4 @@ public class Bry_fmtr_itm { public static Bry_fmtr_itm arg_(int idx) {return new Bry_fmtr_itm(true, idx, Bry_.Empty);} public static Bry_fmtr_itm dat_(byte[] dat, int len) {return new Bry_fmtr_itm(false, -1, Bry_.Mid(dat, 0, len));} public static Bry_fmtr_itm dat_bry_(byte[] bry) {return new Bry_fmtr_itm(false, -1, bry);} - Bry_fmtr_itm(boolean arg, int argIdx, byte[] dat) { - this.Arg = arg; this.ArgIdx = argIdx; this.Dat = dat; - } } diff --git a/100_core/src/gplx/core/brys/fmtrs/Bry_fmtr_tst.java b/100_core/src/gplx/core/brys/fmtrs/Bry_fmtr_tst.java index e04221dc1..9bbe99a81 100644 --- a/100_core/src/gplx/core/brys/fmtrs/Bry_fmtr_tst.java +++ b/100_core/src/gplx/core/brys/fmtrs/Bry_fmtr_tst.java @@ -18,17 +18,21 @@ along with this program. If not, see . package gplx.core.brys.fmtrs; import gplx.*; import gplx.core.*; import gplx.core.brys.*; import org.junit.*; public class Bry_fmtr_tst { - @Test public void Idx_text() {tst_Format("a", "a");} - @Test public void Idx_1() {tst_Format("a", "~{0}", "a");} - @Test public void Idx_3() {tst_Format("abc", "~{0}~{1}~{2}", "a", "b", "c");} - @Test public void Idx_mix() {tst_Format("abcde", "a~{0}c~{1}e", "b", "d");} - @Test public void Key_basic() {tst("~{key}" , String_.Ary("key") , ary_("a") , "a");} - @Test public void Key_mult() {tst("~{key1}~{key2}" , String_.Ary("key1", "key2") , ary_("a", "b") , "ab");} - @Test public void Key_mix() {tst("~{key1}~{1}" , String_.Ary("key1", "key2") , ary_("a", "b") , "ab");} - @Test public void Key_repeat() {tst("~{key1}~{key1}" , String_.Ary("key1") , ary_("a") , "aa");} + private final Bry_fmtr_fxt fxt = new Bry_fmtr_fxt(); + @Test public void Text() {fxt.Clear().Fmt("a").Test("a");} + @Test public void Idx__1() {fxt.Clear().Fmt("~{0}").Args("a").Test("a");} + @Test public void Idx__3() {fxt.Clear().Fmt("~{0}~{1}~{2}").Args("a", "b", "c").Test("abc");} + @Test public void Idx__mix() {fxt.Clear().Fmt("a~{0}c~{1}e").Args("b", "d").Test("abcde");} + @Test public void Idx__missing() {fxt.Clear().Fmt("~{0}").Test("~{0}");} + + @Test public void Key__basic() {fxt.Clear().Fmt("~{key}").Keys("key").Args("a").Test("a");} + @Test public void Key__mult() {fxt.Clear().Fmt("~{key1}~{key2}").Keys("key1", "key2").Args("a", "b").Test("ab");} + @Test public void Key__repeat() {fxt.Clear().Fmt("~{key1}~{key1}").Keys("key1").Args("a").Test("aa");} + + @Test public void Mix() {fxt.Clear().Fmt("~{key1}~{1}").Keys("key1", "key2").Args("a", "b").Test("ab");} + @Test public void Simple() { - Bry_fmtr fmtr = Bry_fmtr.new_("0~{key1}1~{key2}2", "key1", "key2"); - Tfds.Eq("0.1,2", fmtr.Bld_str_many(".", ",")); + fxt.Clear().Fmt("0~{key1}1~{key2}2").Keys("key1", "key2").Args(".", ",").Test("0.1,2"); } @Test public void Cmd() { Bry_fmtr_tst_mok mok = new Bry_fmtr_tst_mok(); @@ -37,20 +41,7 @@ public class Bry_fmtr_tst { mok.Enabled_(true); Tfds.Eq("01234", fmtr.Bld_str_many("1")); } - @Test public void Err_missing_idx() {tst_Format("~{0}", "~{0}");} - String[] ary_(String... ary) {return ary;} - void tst(String fmt, String[] keys, String[] args, String expd) { - Bry_fmtr fmtr = new Bry_fmtr().Fmt_(Bry_.new_u8(fmt)); - fmtr.Keys_(keys); - String actl = fmtr.Bld_str_many(args); - Tfds.Eq(expd, actl); - } - void tst_Format(String expd, String fmt, String... args) { - Bry_fmtr fmtr = new Bry_fmtr().Fmt_(fmt); - Tfds.Eq(expd, fmtr.Bld_str_many(args)); - } @Test public void Bld_bfr_many_and_set_fmt() { - Bry_fmtr_fxt fxt = new Bry_fmtr_fxt().Clear(); fxt.Bld_bfr_many_and_set_fmt("a~{0}c", Object_.Ary("b"), "abc"); } @Test public void Escape_tilde() { @@ -64,12 +55,17 @@ class Bry_fmtr_tst_mok implements Bry_fmtr_eval_mgr { } } class Bry_fmtr_fxt { - public Bry_fmtr_fxt Clear() { - if (fmtr == null) { - fmtr = Bry_fmtr.new_(); - } - return this; - } private Bry_fmtr fmtr; + private final Bry_fmtr fmtr = Bry_fmtr.new_(); + private final Bry_bfr bfr = Bry_bfr.new_(); + private Object[] args; + public Bry_fmtr_fxt Clear() {fmtr.Fmt_(String_.Empty).Keys_(String_.Empty); args = Object_.Ary_empty; return this;} + public Bry_fmtr_fxt Fmt (String fmt) {fmtr.Fmt_(fmt); return this;} + public Bry_fmtr_fxt Keys(String... args) {fmtr.Keys_(args); return this;} + public Bry_fmtr_fxt Args(Object... args) {this.args = args; return this;} + public void Test(String expd) { + fmtr.Bld_bfr_many(bfr, args); + Tfds.Eq(expd, bfr.To_str_and_clear()); + } public void Bld_bfr_many_and_set_fmt(String fmt, Object[] args, String expd) { fmtr.Fmt_(fmt); fmtr.Bld_bfr_many_and_set_fmt(args); diff --git a/100_core/src/gplx/core/brys/fmtrs/Bry_fmtr_vals.java b/100_core/src/gplx/core/brys/fmtrs/Bry_fmtr_vals.java index ac725b616..3a5d287ad 100644 --- a/100_core/src/gplx/core/brys/fmtrs/Bry_fmtr_vals.java +++ b/100_core/src/gplx/core/brys/fmtrs/Bry_fmtr_vals.java @@ -17,11 +17,11 @@ along with this program. If not, see . */ package gplx.core.brys.fmtrs; import gplx.*; import gplx.core.*; import gplx.core.brys.*; import gplx.core.brys.*; -public class Bry_fmtr_vals extends gplx.core.brys.Bfr_arg_base { +public class Bry_fmtr_vals implements Bfr_arg { private final Bry_fmtr fmtr; private Object[] vals; Bry_fmtr_vals(Bry_fmtr fmtr) {this.fmtr = fmtr;} public Bry_fmtr_vals Vals_(Object... v) {this.vals = v; return this;} - @Override public void Bfr_arg__add(Bry_bfr bfr) { + public void Bfr_arg__add(Bry_bfr bfr) { fmtr.Bld_bfr_ary(bfr, vals); } public static Bry_fmtr_vals new_fmt(String fmt, String... keys) { diff --git a/100_core/src/gplx/core/btries/Btrie_slim_mgr.java b/100_core/src/gplx/core/btries/Btrie_slim_mgr.java index bf42917b3..b16f5a87a 100644 --- a/100_core/src/gplx/core/btries/Btrie_slim_mgr.java +++ b/100_core/src/gplx/core/btries/Btrie_slim_mgr.java @@ -41,6 +41,10 @@ public class Btrie_slim_mgr implements Btrie_mgr { cur = nxt; } } + public byte Match_byte_or(byte[] src, int bgn, int end, byte or) { + Object rv_obj = Match_bgn(src, bgn, end); + return rv_obj == null ? or : ((Byte_obj_val)rv_obj).Val(); + } public Btrie_slim_mgr Add_bry_tid(byte[] bry, byte tid) {return (Btrie_slim_mgr)Add_obj(bry, Byte_obj_val.new_(tid));} public Btrie_slim_mgr Add_bry_int(byte[] key, int val) {return (Btrie_slim_mgr)Add_obj(key, Int_obj_val.new_(val));} public Btrie_slim_mgr Add_str_byte(String key, byte val) {return (Btrie_slim_mgr)Add_obj(Bry_.new_u8(key), Byte_obj_val.new_(val));} diff --git a/100_core/src/gplx/core/encoders/Base85_.java b/100_core/src/gplx/core/encoders/Base85_.java index 5643e8621..aa4d4519c 100644 --- a/100_core/src/gplx/core/encoders/Base85_.java +++ b/100_core/src/gplx/core/encoders/Base85_.java @@ -59,7 +59,8 @@ public class Base85_ { throw Err_.new_wo_type("neg number not allowed", "v", v); } public static final int Len_int = 5; - private static final int Pow85_last = 4, Radix = 85; private static final byte A7_offset = 33; + private static final int Pow85_last = 4, Radix = 85; + public static final byte A7_offset = 33; public static final int Pow85_0 = 1, Pow85_1 = 85, Pow85_2 = 7225, Pow85_3 = 614125, Pow85_4 = 52200625; public static int[] Pow85 = new int[]{Pow85_0, Pow85_1, Pow85_2, Pow85_3, Pow85_4}; // NOTE: ary constructed to match index to exponent; Pow85[1] = 85^1 } diff --git a/100_core/src/gplx/core/intls/Utf16__tst.java b/100_core/src/gplx/core/intls/Utf16__tst.java index 35bd8c8a9..65be9926a 100644 --- a/100_core/src/gplx/core/intls/Utf16__tst.java +++ b/100_core/src/gplx/core/intls/Utf16__tst.java @@ -38,7 +38,7 @@ public class Utf16__tst { class Utf16__fxt { private Int_obj_ref hi_ref = Int_obj_ref.neg1_(), lo_ref = Int_obj_ref.neg1_(); public void Test_encode_decode(int expd_c_int, int... expd_int) { - byte[] expd = Bry_.new_ints(expd_int); + byte[] expd = Bry_.New_by_ints(expd_int); byte[] bfr = new byte[10]; int bfr_len = Utf16_.Encode_int(expd_c_int, bfr, 0); byte[] actl = Bry_.Mid_by_len(bfr, 0, bfr_len); diff --git a/100_core/src/gplx/core/ios/IoEngine_system.java b/100_core/src/gplx/core/ios/IoEngine_system.java index 74c8c4886..fdfa91a72 100644 --- a/100_core/src/gplx/core/ios/IoEngine_system.java +++ b/100_core/src/gplx/core/ios/IoEngine_system.java @@ -129,6 +129,20 @@ public class IoEngine_system extends IoEngine_base { Closeable_close(reader, url_str, false); return sw.toString(); } + @SuppressWarnings("resource") public static byte[] Load_from_stream_as_bry(InputStream stream, String url_str) { + ByteArrayOutputStream buffer = new ByteArrayOutputStream(); + byte[] data = new byte[4096]; + int read = 0; + try { + while ((read = stream.read(data, 0, data.length)) != -1) { + buffer.write(data, 0, read); + } + buffer.flush(); + } catch (IOException e) { + e.printStackTrace(); + } + return buffer.toByteArray(); + } @Override public boolean ExistsDir(Io_url url) {return new File(url.Xto_api()).exists();} @Override public void CreateDir(Io_url url) {new File(url.Xto_api()).mkdirs();} @Override public void DeleteDir(Io_url url) { diff --git a/100_core/tst/gplx/core/ios/IoItm_fxt.java b/100_core/src/gplx/core/ios/IoItm_fxt.java similarity index 100% rename from 100_core/tst/gplx/core/ios/IoItm_fxt.java rename to 100_core/src/gplx/core/ios/IoItm_fxt.java diff --git a/100_core/src/gplx/core/ios/IoStream_mem_tst.java b/100_core/src/gplx/core/ios/IoStream_mem_tst.java index ce896f65d..0750b9fbf 100644 --- a/100_core/src/gplx/core/ios/IoStream_mem_tst.java +++ b/100_core/src/gplx/core/ios/IoStream_mem_tst.java @@ -20,7 +20,7 @@ import org.junit.*; //using System.IO; /*Stream*/ public class IoStream_mem_tst { @Test public void Write() { // confirm that changes written to Stream acquired via .AdpObj are written to IoStream_mem.Buffer IoStream_mem stream = IoStream_mem.wtr_data_(Io_url_.Empty, 0); - byte[] data = Bry_.new_ints(1); + byte[] data = Bry_.New_by_ints(1); stream.Write(data, 0, Array_.Len(data)); Tfds.Eq(1L , stream.Len()); diff --git a/100_core/src/gplx/core/ios/Io_size_.java b/100_core/src/gplx/core/ios/Io_size_.java index cf90d4839..aa3df4990 100644 --- a/100_core/src/gplx/core/ios/Io_size_.java +++ b/100_core/src/gplx/core/ios/Io_size_.java @@ -99,10 +99,10 @@ public class Io_size_ { return val == Int_.Min_value ? cur : (val * Io_mgr.Len_mb_long); } } -class Io_size_fmtr_arg extends gplx.core.brys.Bfr_arg_base { +class Io_size_fmtr_arg implements Bfr_arg { public long Val() {return val;} public Io_size_fmtr_arg Val_(long v) {val = v; return this;} long val; public byte[] Suffix() {return suffix;} public Io_size_fmtr_arg Suffix_(byte[] v) {suffix = v; return this;} private byte[] suffix; - @Override public void Bfr_arg__add(Bry_bfr bfr) { + public void Bfr_arg__add(Bry_bfr bfr) { long cur = val; int pow = 0; while (cur >= 1024) { cur /= 1024; diff --git a/100_core/src/gplx/core/primitives/Bry_obj_ref.java b/100_core/src/gplx/core/primitives/Bry_obj_ref.java index 5d1d641cc..82aa32963 100644 --- a/100_core/src/gplx/core/primitives/Bry_obj_ref.java +++ b/100_core/src/gplx/core/primitives/Bry_obj_ref.java @@ -30,11 +30,8 @@ public class Bry_obj_ref implements gplx.core.brys.Bfr_arg { Bry_obj_ref comp = (Bry_obj_ref)obj; return Bry_.Match(val, val_bgn, val_end, comp.val, comp.val_bgn, comp.val_end); } - public void Bfr_arg__clear() {val = null;} - public boolean Bfr_arg__exists() {return val != null;} public void Bfr_arg__add(Bry_bfr bfr) { - if (Bfr_arg__exists()) - bfr.Add_mid(val, val_bgn, val_end); + bfr.Add_mid(val, val_bgn, val_end); } public static int CalcHashCode(byte[] ary, int bgn, int end) { int rv = 0; @@ -44,4 +41,5 @@ public class Bry_obj_ref implements gplx.core.brys.Bfr_arg { } public static Bry_obj_ref New_empty() {return New(Bry_.Empty);} public static Bry_obj_ref New(byte[] val) {return new Bry_obj_ref().Val_(val);} + public static Bry_obj_ref New(String val) {return new Bry_obj_ref().Val_(Bry_.new_u8(val));} } diff --git a/140_dbs/tst/gplx/dbs/DbTstDat.java b/140_dbs/src/gplx/dbs/DbTstDat.java similarity index 100% rename from 140_dbs/tst/gplx/dbs/DbTstDat.java rename to 140_dbs/src/gplx/dbs/DbTstDat.java diff --git a/140_dbs/tst/gplx/dbs/DbTstRow.java b/140_dbs/src/gplx/dbs/DbTstRow.java similarity index 100% rename from 140_dbs/tst/gplx/dbs/DbTstRow.java rename to 140_dbs/src/gplx/dbs/DbTstRow.java diff --git a/140_dbs/src/gplx/dbs/Db_meta_fld_list.java b/140_dbs/src/gplx/dbs/Db_meta_fld_list.java index f015e349b..ea5a81b30 100644 --- a/140_dbs/src/gplx/dbs/Db_meta_fld_list.java +++ b/140_dbs/src/gplx/dbs/Db_meta_fld_list.java @@ -19,7 +19,7 @@ package gplx.dbs; import gplx.*; public class Db_meta_fld_list { private final Ordered_hash flds = Ordered_hash_.New(); private final List_adp keys = List_adp_.new_(); - public void Clear() {flds.Clear(); keys.Clear();} + public void Clear() {flds.Clear(); keys.Clear(); str_ary = null; fld_ary = null;} public Db_meta_fld Get_by(String name) {return (Db_meta_fld)flds.Get_by(name);} public Db_meta_fld Get_at(int idx) {return (Db_meta_fld)flds.Get_at(idx);} public String[] To_str_ary() {if (str_ary == null) str_ary = (String[])keys.To_ary(String.class); return str_ary;} private String[] str_ary; diff --git a/140_dbs/tst/gplx/dbs/Db_qry_fxt.java b/140_dbs/src/gplx/dbs/Db_qry_fxt.java similarity index 100% rename from 140_dbs/tst/gplx/dbs/Db_qry_fxt.java rename to 140_dbs/src/gplx/dbs/Db_qry_fxt.java diff --git a/400_xowa/src/gplx/core/brys/Bit_heap_rdr.java b/400_xowa/src/gplx/core/brys/Bit_heap_rdr.java new file mode 100644 index 000000000..2aca991e6 --- /dev/null +++ b/400_xowa/src/gplx/core/brys/Bit_heap_rdr.java @@ -0,0 +1,92 @@ +/* +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 . +*/ +package gplx.core.brys; import gplx.*; import gplx.core.*; +import gplx.xowa.htmls.core.hzips.*; +public class Bit_heap_rdr { + private final byte[] hzip_int_bry = new byte[5]; + public int Cur_val() {return cur_val;} private int cur_val; + public int Cur_bits() {return cur_bits;} private int cur_bits; + public int Cur_pos() {return cur_pos;} private int cur_pos; + public byte[] Src() {return src;} private byte[] src; + public int Src_end() {return src_end;} private int src_end; + public void Load(byte[] src, int src_bgn, int src_end) { + this.src = src; this.cur_pos = src_bgn; this.src_end = src_end; + this.cur_val = 0; this.cur_bits = 0; + } + public boolean Get_bool() { + Get_bgn(cur_bits); + int old_val = cur_val; + this.cur_val = cur_val >> 1; + int comp_val = cur_val << 1; + boolean rv = (old_val - comp_val) == 1; + Get_end(1); + return rv; + } + public byte Get_byte(int bits) { + int old_bits = bits; + int new_bits = cur_bits + bits; + boolean again = false; + if (new_bits > 7 && cur_bits > 0) { + old_bits = 8 - cur_bits; + again = true; + new_bits -= 8; + } + int rv = Get_byte_private(old_bits, cur_bits); + if (again) { + Get_end(old_bits); + int new_val = Get_byte_private(new_bits, 0); + rv += new_val << old_bits; + } + Get_end(new_bits); + return (byte)rv; + } + public int Get_int_hzip(int reqd_len) { + int full_len = reqd_len; int bgn_idx = 0; + byte b0 = Get_byte(8); + switch (b0) { + case Xoh_hzip_int.prefix__b256__2: full_len = 2; bgn_idx = 1; break; + case Xoh_hzip_int.prefix__b256__3: full_len = 3; bgn_idx = 1; break; + case Xoh_hzip_int.prefix__b256__4: full_len = 4; bgn_idx = 1; break; + case Xoh_hzip_int.prefix__b256__5: full_len = 5; bgn_idx = 1; break; + } + hzip_int_bry[0] = b0; + for (int i = 1; i < full_len; ++i) + hzip_int_bry[i] = Get_byte(8); + return Xoh_hzip_int.To_int_by_bry(hzip_int_bry, bgn_idx, full_len, Byte_.Zero, 256); + } + private byte Get_byte_private(int bits, int chk_bits) { + Get_bgn(chk_bits); + int old_val = cur_val; + this.cur_val = cur_val >> bits; + int comp_val = cur_val << bits; + byte rv = (byte)(old_val - comp_val); + return rv; + } + private void Get_bgn(int chk_bits) { + if (chk_bits == 0) cur_val = src[cur_pos] & 0xFF; // PATCH.JAVA:need to convert to unsigned byte + } + private void Get_end(int bits) { + int new_bits = cur_bits + bits; + if (new_bits == 8) { + cur_bits = 0; + cur_pos += 1; + } + else + cur_bits = new_bits; + } +} diff --git a/400_xowa/src/gplx/core/brys/Bit_heap_rdr_tst.java b/400_xowa/src/gplx/core/brys/Bit_heap_rdr_tst.java new file mode 100644 index 000000000..7e3000734 --- /dev/null +++ b/400_xowa/src/gplx/core/brys/Bit_heap_rdr_tst.java @@ -0,0 +1,84 @@ +/* +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 . +*/ +package gplx.core.brys; import gplx.*; import gplx.core.*; +import org.junit.*; +public class Bit_heap_rdr_tst { + private final Bit_heap_rdr_fxt fxt = new Bit_heap_rdr_fxt(); + @Test public void Get_bool() { + fxt.Load(255); + fxt.Test__get_bool(Bool_.Y).Test__cur(127, 1, 0); + fxt.Test__get_bool(Bool_.Y).Test__cur( 63, 2, 0); + fxt.Test__get_bool(Bool_.Y).Test__cur( 31, 3, 0); + fxt.Test__get_bool(Bool_.Y).Test__cur( 15, 4, 0); + fxt.Test__get_bool(Bool_.Y).Test__cur( 7, 5, 0); + fxt.Test__get_bool(Bool_.Y).Test__cur( 3, 6, 0); + fxt.Test__get_bool(Bool_.Y).Test__cur( 1, 7, 0); + fxt.Test__get_bool(Bool_.Y).Test__cur( 0, 0, 1); + + fxt.Load(0); + fxt.Test__get_bool(Bool_.N).Test__cur( 0, 1, 0); + + fxt.Load(6); + fxt.Test__get_bool(Bool_.N).Test__cur( 3, 1, 0); + fxt.Test__get_bool(Bool_.Y).Test__cur( 1, 2, 0); + fxt.Test__get_bool(Bool_.Y).Test__cur( 0, 3, 0); + } + @Test public void Get_byte() { + fxt.Load(255).Test__get_byte(2, 3).Test__cur(63, 2, 0); + + fxt.Load(255, 3); + fxt.Test__get_byte(7, 127); + fxt.Test__get_byte(3, 7); + + fxt.Load(10); + fxt.Test__get_bool(false); + fxt.Test__get_byte(3, 5); + } + @Test public void Get_int_hzip() { + fxt.Load(100).Test__get_int_hzip(1, 100).Test__cur(0, 0, 1); + fxt.Load(253, 1, 44).Test__get_int_hzip(1, 300).Test__cur(0, 0, 3); + fxt.Load(0, 100).Test__get_int_hzip(2, 100).Test__cur(0, 0, 2); + fxt.Load(250, 3, 88, 0).Test__get_bool(Bool_.N).Test__get_int_hzip(1, 300).Test__cur(0, 1, 3); + } +} +class Bit_heap_rdr_fxt { + private final Bit_heap_rdr heap = new Bit_heap_rdr(); + public Bit_heap_rdr_fxt Load(int... src) { + byte[] bry = Bry_.New_by_ints(src); + heap.Load(bry, 0, bry.length); + return this; + } + public Bit_heap_rdr_fxt Test__get_bool(boolean expd) { + Tfds.Eq_bool(expd, heap.Get_bool()); + return this; + } + public Bit_heap_rdr_fxt Test__get_byte(int bits, int expd) { + Tfds.Eq_byte((byte)expd, heap.Get_byte(bits)); + return this; + } + public Bit_heap_rdr_fxt Test__get_int_hzip(int reqd, int expd) { + Tfds.Eq_int(expd, heap.Get_int_hzip(reqd)); + return this; + } + public Bit_heap_rdr_fxt Test__cur(int cur_val, int cur_bits, int cur_pos) { + Tfds.Eq_int(cur_val, heap.Cur_val(), "val"); + Tfds.Eq_int(cur_bits, heap.Cur_bits(), "bits"); + Tfds.Eq_int(cur_pos, heap.Cur_pos(), "pos"); + return this; + } +} diff --git a/400_xowa/src/gplx/core/brys/Bit_heap_wtr.java b/400_xowa/src/gplx/core/brys/Bit_heap_wtr.java new file mode 100644 index 000000000..174971bd9 --- /dev/null +++ b/400_xowa/src/gplx/core/brys/Bit_heap_wtr.java @@ -0,0 +1,71 @@ +/* +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 . +*/ +package gplx.core.brys; import gplx.*; import gplx.core.*; +public class Bit_heap_wtr { + private final gplx.xowa.htmls.core.hzips.Xoh_hzip_int hzip_int = new gplx.xowa.htmls.core.hzips.Xoh_hzip_int().Mode_is_b256_(true); + private final Bry_bfr hzip_int_bfr = Bry_bfr.reset_(5); + public int Cur() {return cur;} private int cur; + public int Cur_bits() {return cur_bits;} private int cur_bits; + public Bry_bfr Heap() {return heap;} private final Bry_bfr heap = Bry_bfr.new_(); + public void Clear() {heap.Clear(); cur = 0; cur_bits = 0;} + public void Add_bool(boolean v) { + if (v) + cur += Pow_ary[cur_bits]; + if (cur_bits == 7) { + heap.Add_byte((byte)cur); + cur = 0; + cur_bits = 0; + } + else + ++cur_bits; + } + public void Add_byte(byte val_byte) { + int val_int = val_byte & 0xFF; // PATCH.JAVA:need to convert to unsigned byte + if (cur_bits == 0) + heap.Add_byte(val_byte); + else { + heap.Add_byte((byte)(cur + (val_int << cur_bits))); + this.cur = val_int >> cur_bits; + } + } + public void Add_byte(int val_bits, int val) { + int total_bits = cur_bits + val_bits; + int new_val = cur + (val << cur_bits); + if (total_bits < 8) { + this.cur_bits = total_bits; + this.cur = new_val; + } + else { + heap.Add_byte((byte)new_val); + this.cur = val >> (8 - cur_bits); + this.cur_bits = total_bits - 8; + } + } + public void Add_int_hzip(int reqd_len, int val) { + hzip_int.Encode(reqd_len, hzip_int_bfr, val); + int len = hzip_int_bfr.Len(); + byte[] hzip_bry = hzip_int_bfr.Bfr(); + for (int i = 0; i < len; ++i) { + byte b = hzip_bry[i]; + Add_byte(8, b & 0xFF); // PATCH.JAVA:need to convert to unsigned byte + } + hzip_int_bfr.Clear(); + } + public void Save(Bry_bfr bfr) {} + public static final int[] Pow_ary = new int[] {1, 2, 4, 8, 16, 32, 64, 128, 256}; +} diff --git a/400_xowa/src/gplx/core/brys/Bit_heap_wtr_tst.java b/400_xowa/src/gplx/core/brys/Bit_heap_wtr_tst.java new file mode 100644 index 000000000..cfa1b5697 --- /dev/null +++ b/400_xowa/src/gplx/core/brys/Bit_heap_wtr_tst.java @@ -0,0 +1,88 @@ +/* +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 . +*/ +package gplx.core.brys; import gplx.*; import gplx.core.*; +import org.junit.*; +public class Bit_heap_wtr_tst { + private final Bit_heap_wtr_fxt fxt = new Bit_heap_wtr_fxt(); + @Test public void Add_bool() { + fxt.Clear().Add_bool(Bool_.Y).Test__vals(1, 1); + fxt.Clear().Add_bool(Bool_.N).Test__vals(1, 0); + fxt.Clear().Add_bool(Bool_.Y, Bool_.Y, Bool_.Y, Bool_.Y).Test__vals(4, 15); + fxt.Clear().Add_bool(Bool_.Y, Bool_.N, Bool_.N, Bool_.Y).Test__vals(4, 9); + fxt.Clear().Add_bool(8, Bool_.Y).Test__vals(0, 0, 255); + } + @Test public void Add_byte() { + fxt.Clear().Add_byte(255).Test__vals(0, 0, 255); + } + @Test public void Add_bool_byte() { + fxt.Clear().Add_bool(Bool_.N).Add_byte(255).Test__vals(1, 127, 254); + fxt.Clear().Add_bool(Bool_.Y).Add_byte(255).Test__vals(1, 127, 255); + fxt.Clear().Add_bool(Bool_.Y, Bool_.Y, Bool_.Y, Bool_.Y).Add_byte(255).Test__vals(4, 15, 255); + } + @Test public void Add_byte_digits() { + fxt.Clear().Add_byte(4, 15).Test__vals(4, 15); + fxt.Clear().Add_byte(7, 127).Add_byte(2, 3).Test__vals(1, 1, 255); + + fxt.Clear().Add_byte(3, 7).Add_byte(3, 7).Test__vals(6, 63); + fxt.Clear().Add_byte(6, 63).Add_byte(3, 7).Test__vals(1, 1, 255); + + fxt.Clear().Add_byte(3, 6).Add_byte(3, 6).Test__vals(6, 54); + } + @Test public void Add_int_hzip() { + fxt.Clear().Add_int_hzip(1, 100).Test__vals(0, 0, 100); + fxt.Clear().Add_int_hzip(1, 300).Test__vals(0, 0, 253, 1, 44); + fxt.Clear().Add_int_hzip(2, 100).Test__vals(0, 0, 0, 100); + fxt.Clear().Add_bool(Bool_.N).Add_int_hzip(1, 300).Test__vals(1, 0, 250, 3, 88); + } +} +class Bit_heap_wtr_fxt { + private final Bit_heap_wtr heap = new Bit_heap_wtr(); + public Bit_heap_wtr_fxt Clear() {heap.Clear(); return this;} + public Bit_heap_wtr_fxt Add_bool(int len, boolean v) { + boolean[] ary = new boolean[len]; + for (int i = 0; i < len; ++i) + ary[i] = v; + Add_bool(ary); + return this; + } + public Bit_heap_wtr_fxt Add_bool(boolean... v) { + int len = v.length; + for (int i = 0; i < len; ++i) + heap.Add_bool(v[i]); + return this; + } + public Bit_heap_wtr_fxt Add_byte(int... v) { + int len = v.length; + for (int i = 0; i < len; ++i) + heap.Add_byte((byte)v[i]); + return this; + } + public Bit_heap_wtr_fxt Add_byte(int bits, int val) { + heap.Add_byte(bits, (byte)val); + return this; + } + public Bit_heap_wtr_fxt Add_int_hzip(int reqd, int val) { + heap.Add_int_hzip(reqd, val); + return this; + } + public void Test__vals(int expd_cur_bits, int expd_cur, int... expd_ary) { + Tfds.Eq_int (expd_cur_bits , heap.Cur_bits() , "cur_bits"); + Tfds.Eq_int (expd_cur , heap.Cur() , "cur"); + Tfds.Eq_ary (Bry_.New_by_ints(expd_ary) , heap.Heap().To_bry() , "heap"); + } +} diff --git a/400_xowa/src/gplx/core/brys/Bry_rdr.java b/400_xowa/src/gplx/core/brys/Bry_rdr.java index ddf9537ca..fd6323b40 100644 --- a/400_xowa/src/gplx/core/brys/Bry_rdr.java +++ b/400_xowa/src/gplx/core/brys/Bry_rdr.java @@ -20,8 +20,8 @@ import gplx.core.errs.*; public class Bry_rdr { private final gplx.core.primitives.Int_obj_ref pos_ref = gplx.core.primitives.Int_obj_ref.neg1_(); public byte[] Src() {return src;} private byte[] src; - public int Pos() {return pos;} private int pos; public int Src_end() {return src_end;} private int src_end; + public int Pos() {return pos;} private int pos; public Bry_rdr Dflt_dlm_(byte b) {this.dflt_dlm = b; return this;} private byte dflt_dlm; public Bry_rdr Fail_throws_err_(boolean v) {err_wkr.Fail_throws_err_(v); return this;} public Bry_rdr Init_by_page(byte[] page, byte[] src, int src_len) {err_wkr.Init_by_page(String_.new_u8(page), src); this.pos = 0; this.src = src; this.src_end = src_len; return this;} @@ -109,12 +109,7 @@ public class Bry_rdr { if (bgn == pos) {err_wkr.Fail("int is empty"); return Int_.Min_value;} return rv * negative; } - public byte Read_byte_as_a7_int() { - byte rv = Byte_ascii.To_a7_int(src[pos]); - ++pos; - return rv; - } - public int Read_int_by_base85(int reqd) { + public int Read_hzip_int(int reqd) { int rv = gplx.xowa.htmls.core.hzips.Xoh_hzip_int_.Decode(reqd, src, src_end, pos, pos_ref); pos = pos_ref.Val(); return rv; diff --git a/400_xowa/src/gplx/core/btries/Btrie_u8_mgr_tst.java b/400_xowa/src/gplx/core/btries/Btrie_u8_mgr_tst.java index 158f32403..b9285f7eb 100644 --- a/400_xowa/src/gplx/core/btries/Btrie_u8_mgr_tst.java +++ b/400_xowa/src/gplx/core/btries/Btrie_u8_mgr_tst.java @@ -45,9 +45,9 @@ public class Btrie_u8_mgr_tst { } @Test public void Uft8_asymmetric() { fxt.Init_add(Bry_.new_u8("İ") , "1"); - fxt.Test_match("İ" , "1"); // exact=y; İ = Bry_.new_ints(196,176) - fxt.Test_match("i" , "1"); // lower=y; i = Bry_.new_ints(105) - fxt.Test_match("I" , null); // upper=n; I = Bry_.new_ints( 73); see Btrie_u8_itm and rv.asymmetric_bry + fxt.Test_match("İ" , "1"); // exact=y; İ = Bry_.New_by_ints(196,176) + fxt.Test_match("i" , "1"); // lower=y; i = Bry_.New_by_ints(105) + fxt.Test_match("I" , null); // upper=n; I = Bry_.New_by_ints( 73); see Btrie_u8_itm and rv.asymmetric_bry fxt.Clear(); fxt.Init_add(Bry_.new_u8("i") , "1"); diff --git a/400_xowa/src/gplx/core/ios/Io_line_rdr.java b/400_xowa/src/gplx/core/ios/Io_line_rdr.java index f029b5a26..b52c976ac 100644 --- a/400_xowa/src/gplx/core/ios/Io_line_rdr.java +++ b/400_xowa/src/gplx/core/ios/Io_line_rdr.java @@ -88,9 +88,6 @@ public class Io_line_rdr { } while (true) { int compare = Bry_.Compare(ttl, 0, ttl.length, bfr, key_pos_bgn, key_pos_end); -// if (String_.new_u8(bfr, key_pos_bgn, key_pos_end) == "US Naval Jack.svg") { -// Tfds.Write(); -// } if (compare == CompareAble_.Same) { // eq; return true and move fwd; EX: "BA" and "BA" return true; } diff --git a/400_xowa/src/gplx/core/ios/Io_sort_split_itm_sorter.java b/400_xowa/src/gplx/core/ios/Io_sort_split_itm_sorter.java index 299cccba9..3d57222a4 100644 --- a/400_xowa/src/gplx/core/ios/Io_sort_split_itm_sorter.java +++ b/400_xowa/src/gplx/core/ios/Io_sort_split_itm_sorter.java @@ -19,7 +19,7 @@ package gplx.core.ios; import gplx.*; import gplx.core.*; public class Io_sort_split_itm_sorter implements gplx.core.lists.ComparerAble { public int compare(Object lhsObj, Object rhsObj) { Io_sort_split_itm lhs = (Io_sort_split_itm)lhsObj, rhs = (Io_sort_split_itm)rhsObj; -// Tfds.Write(String_.new_u8(lhs.Bfr(), lhs.Key_bgn(), lhs.Key_end()), String_.new_u8(rhs.Bfr(), rhs.Key_bgn(), rhs.Key_end())); +// Tfds.Dbg(String_.new_u8(lhs.Bfr(), lhs.Key_bgn(), lhs.Key_end()), String_.new_u8(rhs.Bfr(), rhs.Key_bgn(), rhs.Key_end())); return Bry_.Compare(lhs.Bfr(), lhs.Key_bgn(), lhs.Key_end(), rhs.Bfr(), rhs.Key_bgn(), rhs.Key_end()); } public static final Io_sort_split_itm_sorter Instance = new Io_sort_split_itm_sorter(); Io_sort_split_itm_sorter() {} diff --git a/400_xowa/src/gplx/core/net/Gfo_protocol_itm.java b/400_xowa/src/gplx/core/net/Gfo_protocol_itm.java index 40d86b7ea..2429e1810 100644 --- a/400_xowa/src/gplx/core/net/Gfo_protocol_itm.java +++ b/400_xowa/src/gplx/core/net/Gfo_protocol_itm.java @@ -106,6 +106,7 @@ public class Gfo_protocol_itm { ; public static final String Str_file = "file:", Str_xcmd = "xowa-cmd:"; public static final byte[] Bry_file = Bry_.new_a7(Str_file), Bry_xcmd = Bry_.new_a7(Str_xcmd); + public static final byte[] Bry_file_with_slashes = Bry_.new_a7("file:///"); public static final int Len_xcmd = Bry_xcmd.length; public static final byte[] Bry_relative = Bry_.new_a7("//"); public static Gfo_protocol_itm Get_or(byte tid, Gfo_protocol_itm or) { diff --git a/400_xowa/src/gplx/core/net/Gfo_url_parser.java b/400_xowa/src/gplx/core/net/Gfo_url_parser.java index 79bb1cc7a..364eedf4e 100644 --- a/400_xowa/src/gplx/core/net/Gfo_url_parser.java +++ b/400_xowa/src/gplx/core/net/Gfo_url_parser.java @@ -97,7 +97,7 @@ public class Gfo_url_parser { case Byte_ascii.Question: pos = Parse_qarg_key_1st(pos, b); break; case Byte_ascii.Amp: pos = Parse_qarg_key_nth(pos, b); break; case Byte_ascii.Eq: pos = Parse_qarg_val(pos, b); break; - case Byte_ascii.Hash: pos = Parse_anch(pos, b); break; + case Byte_ascii.Hash: if (anch_bgn == -1) pos = Parse_anch(pos, b); else ++pos; break; // anchor begins at 1st #, not last #; EX:A#B#C has anchor of "B#C" not "C" PAGE:en.w:Grand_Central_Terminal; DATE:2015-12-31 case Byte_ascii.Percent: encoded = true; ++pos; break; default: ++pos; diff --git a/400_xowa/src/gplx/core/net/Gfo_url_parser_tst.java b/400_xowa/src/gplx/core/net/Gfo_url_parser_tst.java index 49bd8ee92..33eb2073a 100644 --- a/400_xowa/src/gplx/core/net/Gfo_url_parser_tst.java +++ b/400_xowa/src/gplx/core/net/Gfo_url_parser_tst.java @@ -89,16 +89,16 @@ public class Gfo_url_parser_tst { tstr.Run_parse("https://site/A#B").Chk_page("A").Chk_anch("B"); } @Test public void Anch__repeat__2() { - tstr.Run_parse("https://site/A#B#C").Chk_page("A#B").Chk_anch("C"); + tstr.Run_parse("https://site/A#B#C").Chk_page("A").Chk_anch("B#C"); } @Test public void Anch__repeat__3() { - tstr.Run_parse("https://site/A#B#C#D").Chk_page("A#B#C").Chk_anch("D"); + tstr.Run_parse("https://site/A#B#C#D").Chk_page("A").Chk_anch("B#C#D"); } @Test public void Anch__missing() { tstr.Run_parse("https://site/A#").Chk_page("A#").Chk_anch(null); } @Test public void Anch__missing__eos() { - tstr.Run_parse("https://site/A#B#").Chk_page("A#B#").Chk_anch(null); + tstr.Run_parse("https://site/A#B#").Chk_page("A").Chk_anch("B#"); } @Test public void Anch__qargs__basic() { tstr.Run_parse("https://site/A?B=C&D=E#F").Chk_page("A").Chk_qargs("B", "C", "D", "E").Chk_anch("F"); diff --git a/400_xowa/src/gplx/xowa/drds/Xod_img_loader.java b/400_xowa/src/gplx/dbs/diffs/Gfdb_diff_db.java similarity index 76% rename from 400_xowa/src/gplx/xowa/drds/Xod_img_loader.java rename to 400_xowa/src/gplx/dbs/diffs/Gfdb_diff_db.java index 400127604..b0641f4b0 100644 --- a/400_xowa/src/gplx/xowa/drds/Xod_img_loader.java +++ b/400_xowa/src/gplx/dbs/diffs/Gfdb_diff_db.java @@ -15,10 +15,10 @@ 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.drds; import gplx.*; import gplx.xowa.*; -public interface Xod_img_loader { - void Show_img(int html_uid); +package gplx.dbs.diffs; import gplx.*; import gplx.dbs.*; +public class Gfdb_diff_db { + public Gfdb_diff_db(Db_conn conn) { + this.conn = conn; + } + public Db_conn Conn() {return conn;} private final Db_conn conn; } -/* -int uid -*/ diff --git a/400_xowa/src/gplx/dbs/diffs/Gfdb_diff_db_.java b/400_xowa/src/gplx/dbs/diffs/Gfdb_diff_db_.java new file mode 100644 index 000000000..c8cf3c41e --- /dev/null +++ b/400_xowa/src/gplx/dbs/diffs/Gfdb_diff_db_.java @@ -0,0 +1,34 @@ +/* +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 . +*/ +package gplx.dbs.diffs; import gplx.*; import gplx.dbs.*; +public class Gfdb_diff_db_ { + public static final String + Fld__diff_site = "diff_site" // -1 for single-site merge; 0+ for multiple-site merges where 0+ is defined in a registry + , Fld__diff_time = "diff_time" // -1 for single-time merge; 0+ for multiple-time merges where 0+ is defined in a registry + , Fld__diff_db_trg = "diff_db_trg" // -1 for single-db tables; 0+ for multiple-db tables + , Fld__diff_db_src = "diff_db_src" // -1 for I,U,D; 0+ for M + , Fld__diff_type = "diff_type" // I,U,D,M + , Fld__diff_uid = "diff_uid" // 0+ + ; + public static final byte + Tid__insert = 0 + , Tid__update = 1 + , Tid__delete = 2 + , Tid__move = 3 + ; +} diff --git a/400_xowa/src/gplx/dbs/diffs/Gfdb_diff_tbl.java b/400_xowa/src/gplx/dbs/diffs/Gfdb_diff_tbl.java new file mode 100644 index 000000000..cb3543a92 --- /dev/null +++ b/400_xowa/src/gplx/dbs/diffs/Gfdb_diff_tbl.java @@ -0,0 +1,34 @@ +/* +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 . +*/ +package gplx.dbs.diffs; import gplx.*; import gplx.dbs.*; +public class Gfdb_diff_tbl { + public Gfdb_diff_tbl(String name, Db_meta_fld[] keys, Db_meta_fld[] vals, Db_rdr rdr) { + this.name = name; this.keys = keys; this.vals = vals; this.rdr = rdr; + int keys_len = keys.length; int vals_len = vals.length; + this.flds = new Db_meta_fld[keys_len + vals_len]; + for (int i = 0; i < keys_len; ++i) + flds[i] = keys[i]; + for (int i = 0; i < vals_len; ++i) + flds[i + keys_len] = vals[i]; + } + public String Name() {return name;} private final String name; + public Db_meta_fld[] Flds() {return flds;} private final Db_meta_fld[] flds; + public Db_meta_fld[] Keys() {return keys;} private final Db_meta_fld[] keys; + public Db_meta_fld[] Vals() {return vals;} private final Db_meta_fld[] vals; + public Db_rdr Rdr() {return rdr;} private final Db_rdr rdr; +} diff --git a/400_xowa/src/gplx/dbs/diffs/Gfdb_rdr_utl_.java b/400_xowa/src/gplx/dbs/diffs/Gfdb_rdr_utl_.java new file mode 100644 index 000000000..896a2e05b --- /dev/null +++ b/400_xowa/src/gplx/dbs/diffs/Gfdb_rdr_utl_.java @@ -0,0 +1,56 @@ +/* +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 . +*/ +package gplx.dbs.diffs; import gplx.*; import gplx.dbs.*; +public class Gfdb_rdr_utl_ { + public static int Compare(Db_meta_fld[] flds, int len, Db_rdr lhs_rdr, Db_rdr rhs_rdr) { + int comp = CompareAble_.Same; + for (int i = 0; i < len; ++i) { + Db_meta_fld fld = flds[i]; + String fld_name = fld.Name(); + switch (fld.Tid()) { + case Db_meta_fld.Tid_bool: comp = Bool_.Compare (lhs_rdr.Read_bool_by_byte(fld_name), rhs_rdr.Read_bool_by_byte(fld_name)); break; + case Db_meta_fld.Tid_int: comp = Int_.Compare (lhs_rdr.Read_int(fld_name) , rhs_rdr.Read_int(fld_name)); break; + case Db_meta_fld.Tid_long: comp = Long_.Compare (lhs_rdr.Read_long(fld_name) , rhs_rdr.Read_long(fld_name)); break; + case Db_meta_fld.Tid_float: comp = Float_.Compare (lhs_rdr.Read_float(fld_name) , rhs_rdr.Read_float(fld_name)); break; + case Db_meta_fld.Tid_double: comp = Double_.Compare (lhs_rdr.Read_double(fld_name) , rhs_rdr.Read_double(fld_name)); break; + case Db_meta_fld.Tid_str: comp = String_.Compare (lhs_rdr.Read_str(fld_name) , rhs_rdr.Read_str(fld_name)); break; + case Db_meta_fld.Tid_bry: comp = Bry_.Compare (lhs_rdr.Read_bry(fld_name) , rhs_rdr.Read_bry(fld_name)); break; + default: throw Err_.new_unhandled(fld.Tid()); + } + if (comp != CompareAble_.Same) return comp; + } + return CompareAble_.Same; + } + public static void Stmt_args(Db_stmt stmt, Db_meta_fld[] flds, int len, Db_rdr rdr) { + for (int i = 0; i < len; ++i) { + Db_meta_fld fld = flds[i]; + String fld_name = fld.Name(); + switch (fld.Tid()) { + case Db_meta_fld.Tid_bool: stmt.Val_bool_as_byte (fld_name, rdr.Read_bool_by_byte(fld_name)); break; + case Db_meta_fld.Tid_byte: stmt.Val_byte (fld_name, rdr.Read_byte(fld_name)); break; + case Db_meta_fld.Tid_int: stmt.Val_int (fld_name, rdr.Read_int(fld_name)); break; + case Db_meta_fld.Tid_long: stmt.Val_long (fld_name, rdr.Read_long(fld_name)); break; + case Db_meta_fld.Tid_float: stmt.Val_float (fld_name, rdr.Read_float(fld_name)); break; + case Db_meta_fld.Tid_double: stmt.Val_double (fld_name, rdr.Read_double(fld_name)); break; + case Db_meta_fld.Tid_str: stmt.Val_str (fld_name, rdr.Read_str(fld_name)); break; + case Db_meta_fld.Tid_bry: stmt.Val_bry (fld_name, rdr.Read_bry(fld_name)); break; + default: throw Err_.new_unhandled(fld.Tid()); + } + } + } +} diff --git a/400_xowa/src/gplx/dbs/diffs/builds/Gfdb_diff_bldr.java b/400_xowa/src/gplx/dbs/diffs/builds/Gfdb_diff_bldr.java new file mode 100644 index 000000000..6c049773a --- /dev/null +++ b/400_xowa/src/gplx/dbs/diffs/builds/Gfdb_diff_bldr.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 . +*/ +package gplx.dbs.diffs.builds; import gplx.*; import gplx.dbs.*; import gplx.dbs.diffs.*; +import gplx.dbs.*; +public class Gfdb_diff_bldr { + private Gfdb_diff_rdr_comparer rdr_comparer = new Gfdb_diff_rdr_comparer(); + private Gfdb_diff_wkr diff_wkr; + public void Init(Gfdb_diff_wkr diff_wkr) {this.diff_wkr = diff_wkr;} + public void Compare(Gfdb_diff_tbl lhs_tbl, Gfdb_diff_tbl rhs_tbl) { + rdr_comparer.Init(lhs_tbl, rhs_tbl); + diff_wkr.Init_tbls(lhs_tbl, rhs_tbl); + boolean loop = true; + while (loop) { + int rslt = rdr_comparer.Compare(); + switch (rslt) { + case Gfdb_diff_rdr_comparer.Rslt__same: diff_wkr.Handle_same(); break; + case Gfdb_diff_rdr_comparer.Rslt__lhs_missing: diff_wkr.Handle_lhs_missing(); break; + case Gfdb_diff_rdr_comparer.Rslt__rhs_missing: diff_wkr.Handle_rhs_missing(); break; + case Gfdb_diff_rdr_comparer.Rslt__done: loop = false; break; + } + } + } +} diff --git a/400_xowa/src/gplx/dbs/diffs/builds/Gfdb_diff_bldr_tst.java b/400_xowa/src/gplx/dbs/diffs/builds/Gfdb_diff_bldr_tst.java new file mode 100644 index 000000000..db9d5cde9 --- /dev/null +++ b/400_xowa/src/gplx/dbs/diffs/builds/Gfdb_diff_bldr_tst.java @@ -0,0 +1,123 @@ +/* +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 . +*/ +package gplx.dbs.diffs.builds; import gplx.*; import gplx.dbs.*; import gplx.dbs.diffs.*; +import org.junit.*; +import gplx.dbs.*; import gplx.dbs.engines.mems.*; +public class Gfdb_diff_bldr_tst { + private final Gfdb_diff_bldr_fxt fxt = new Gfdb_diff_bldr_fxt(); + @Test public void Same() { + fxt.Init__tbl__lhs(Object_.Ary(1, "A") , Object_.Ary(2, "B")); + fxt.Init__tbl__rhs(Object_.Ary(1, "A") , Object_.Ary(2, "B")); + fxt.Test__bld(); + } + @Test public void Update() { + fxt.Init__tbl__lhs(Object_.Ary(1, "A") , Object_.Ary(2, "B")); + fxt.Init__tbl__rhs(Object_.Ary(1, "A1") , Object_.Ary(2, "B1")); + fxt.Test__bld("U|1|A1", "U|2|B1"); + } + @Test public void Insert() { + fxt.Init__tbl__lhs(Object_.Ary(1, "A")); + fxt.Init__tbl__rhs(Object_.Ary(1, "A") , Object_.Ary(2, "B")); + fxt.Test__bld("I|2|B"); + } + @Test public void Delete() { + fxt.Init__tbl__lhs(Object_.Ary(1, "A") , Object_.Ary(2, "B")); + fxt.Init__tbl__rhs(Object_.Ary(1, "A")); + fxt.Test__bld("D|2"); + } + @Test public void Basic() { + fxt.Init__tbl__lhs + ( Object_.Ary(1, "A") + , Object_.Ary(2, "B") + , Object_.Ary(3, "C") + ); + fxt.Init__tbl__rhs + ( Object_.Ary(1, "A") + , Object_.Ary(2, "B1") + , Object_.Ary(4, "D") + ); + fxt.Test__bld("U|2|B1", "D|3", "I|4|D"); + } +} +class Gfdb_diff_bldr_fxt { + private final Gfdb_diff_bldr bldr = new Gfdb_diff_bldr(); + private final Gfdb_diff_wkr__test wkr = new Gfdb_diff_wkr__test(); + private final Db_meta_fld[] key_flds, val_flds; + private Gfdb_diff_tbl lhs_tbl, rhs_tbl; + public Gfdb_diff_bldr_fxt() { + Db_meta_fld_list fld_list = new Db_meta_fld_list(); + fld_list.Add_int("id"); + key_flds = fld_list.To_fld_ary(); + fld_list.Clear(); + fld_list.Add_str("val", 255); + val_flds = fld_list.To_fld_ary(); + bldr.Init(wkr); + } + public void Init__tbl__lhs(Object[]... rows) {this.lhs_tbl = Make__tbl(key_flds, val_flds, rows);} + public void Init__tbl__rhs(Object[]... rows) {this.rhs_tbl = Make__tbl(key_flds, val_flds, rows);} + public void Test__bld(String... expd) { + bldr.Compare(lhs_tbl, rhs_tbl); + Tfds.Eq_ary_str(expd, wkr.To_str_ary()); + } + private static Gfdb_diff_tbl Make__tbl(Db_meta_fld[] keys, Db_meta_fld[] vals, Object[][] rows) { + int keys_len = keys.length; int vals_len = vals.length; + int cols_len = keys_len + vals_len; + String[] cols = new String[cols_len]; + for (int i = 0; i < keys_len; ++i) + cols[i] = keys[i].Name(); + for (int i = 0; i < vals_len; ++i) + cols[i + keys_len] = vals[i].Name(); + + int rows_len = rows.length; + Mem_row[] mem_rows = new Mem_row[rows_len]; + for (int i = 0; i < rows_len; ++i) { + Object[] row = rows[i]; + Mem_row mem_row = new Mem_row(); + mem_rows[i] = mem_row; + for (int j = 0; j < cols_len; ++j) { + Object cell = row[j]; + mem_row.Add(cols[j], cell); + } + } + Db_rdr rdr = new Db_rdr__mem(cols, mem_rows); + return new Gfdb_diff_tbl("tbl1", keys, vals, rdr); + } +} +class Gfdb_diff_wkr__test implements Gfdb_diff_wkr { + private final List_adp list = List_adp_.new_(); + private final Bry_bfr bfr = Bry_bfr.new_(); + private Db_rdr lhs_rdr, rhs_rdr; + public void Init_tbls(Gfdb_diff_tbl lhs_tbl, Gfdb_diff_tbl rhs_tbl) { + this.lhs_rdr = lhs_tbl.Rdr(); this.rhs_rdr = rhs_tbl.Rdr(); + } + public void Term_tbls() {} + public void Handle_same() { + String lhs_val = lhs_rdr.Read_str("val"); + String rhs_val = rhs_rdr.Read_str("val"); + if (!String_.Eq(lhs_val, rhs_val)) + list.Add(bfr.Add_str_a7("U").Add_byte_pipe().Add_obj(lhs_rdr.Read_obj("id")).Add_byte_pipe().Add_str_a7(rhs_val).To_str_and_clear()); + } + public void Handle_lhs_missing() { + String rhs_val = rhs_rdr.Read_str("val"); + list.Add(bfr.Add_str_a7("I").Add_byte_pipe().Add_obj(rhs_rdr.Read_obj("id")).Add_byte_pipe().Add_str_a7(rhs_val).To_str_and_clear()); + } + public void Handle_rhs_missing() { + list.Add(bfr.Add_str_a7("D").Add_byte_pipe().Add_obj(lhs_rdr.Read_obj("id")).To_str_and_clear()); + } + public String[] To_str_ary() {return list.To_str_ary_and_clear();} +} diff --git a/400_xowa/src/gplx/dbs/diffs/builds/Gfdb_diff_rdr_comparer.java b/400_xowa/src/gplx/dbs/diffs/builds/Gfdb_diff_rdr_comparer.java new file mode 100644 index 000000000..92bc99de4 --- /dev/null +++ b/400_xowa/src/gplx/dbs/diffs/builds/Gfdb_diff_rdr_comparer.java @@ -0,0 +1,66 @@ +/* +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 . +*/ +package gplx.dbs.diffs.builds; import gplx.*; import gplx.dbs.*; import gplx.dbs.diffs.*; +class Gfdb_diff_rdr_comparer { + private Db_rdr lhs_rdr, rhs_rdr; + private boolean lhs_rdr_move, rhs_rdr_move; + private boolean lhs_rdr_done, rhs_rdr_done; + private Db_meta_fld[] key_flds; private int key_flds_len; + public void Init(Gfdb_diff_tbl lhs_tbl, Gfdb_diff_tbl rhs_tbl) { + this.lhs_rdr = lhs_tbl.Rdr(); this.rhs_rdr = rhs_tbl.Rdr(); + this.lhs_rdr_move = rhs_rdr_move = Bool_.Y; + this.lhs_rdr_done = rhs_rdr_done = Bool_.N; + this.key_flds = rhs_tbl.Keys(); key_flds_len = key_flds.length; + } + public int Compare() { + if (lhs_rdr_move) { + lhs_rdr_move = lhs_rdr.Move_next(); + if (!lhs_rdr_move) lhs_rdr_done = true; + } + if (rhs_rdr_move) { + rhs_rdr_move = rhs_rdr.Move_next(); + if (!rhs_rdr_move) rhs_rdr_done = true; + } + if (lhs_rdr_done && rhs_rdr_done) return Gfdb_diff_rdr_comparer.Rslt__done; + else if (lhs_rdr_done) {rhs_rdr_move = true; return Gfdb_diff_rdr_comparer.Rslt__lhs_missing;} + else if (rhs_rdr_done) {lhs_rdr_move = true; return Gfdb_diff_rdr_comparer.Rslt__rhs_missing;} + else { + int comp = Gfdb_rdr_utl_.Compare(key_flds, key_flds_len, lhs_rdr, rhs_rdr); + switch (comp) { + case CompareAble_.Same: // lhs == rhs; move both + lhs_rdr_move = rhs_rdr_move = true; + return Gfdb_diff_rdr_comparer.Rslt__same; + case CompareAble_.Less: // lhs < rhs; EX: lhs == 2; rhs == 3 + lhs_rdr_move = true; + rhs_rdr_move = false; + return Gfdb_diff_rdr_comparer.Rslt__rhs_missing; + case CompareAble_.More: // lhs > rhs; EX: lhs == 4; rhs == 3 + lhs_rdr_move = false; + rhs_rdr_move = true; + return Gfdb_diff_rdr_comparer.Rslt__lhs_missing; + default: throw Err_.new_unhandled(comp); + } + } + } + public static final int + Rslt__same = 0 + , Rslt__lhs_missing = 1 + , Rslt__rhs_missing = 2 + , Rslt__done = 3 + ; +} diff --git a/100_core/src/gplx/core/brys/Bfr_arg_base.java b/400_xowa/src/gplx/dbs/diffs/builds/Gfdb_diff_wkr.java similarity index 71% rename from 100_core/src/gplx/core/brys/Bfr_arg_base.java rename to 400_xowa/src/gplx/dbs/diffs/builds/Gfdb_diff_wkr.java index 235790e5f..0010e0e2b 100644 --- a/100_core/src/gplx/core/brys/Bfr_arg_base.java +++ b/400_xowa/src/gplx/dbs/diffs/builds/Gfdb_diff_wkr.java @@ -15,9 +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 . */ -package gplx.core.brys; import gplx.*; import gplx.core.*; -public abstract class Bfr_arg_base implements Bfr_arg { - @gplx.Virtual public void Bfr_arg__clear() {} - @gplx.Virtual public boolean Bfr_arg__exists() {return true;} - public abstract void Bfr_arg__add(Bry_bfr bfr); +package gplx.dbs.diffs.builds; import gplx.*; import gplx.dbs.*; import gplx.dbs.diffs.*; +public interface Gfdb_diff_wkr { + void Init_tbls(Gfdb_diff_tbl lhs, Gfdb_diff_tbl rhs); + void Term_tbls(); + void Handle_same(); + void Handle_lhs_missing(); + void Handle_rhs_missing(); } diff --git a/400_xowa/src/gplx/dbs/diffs/builds/Gfdb_diff_wkr__db.java b/400_xowa/src/gplx/dbs/diffs/builds/Gfdb_diff_wkr__db.java new file mode 100644 index 000000000..e7bec3350 --- /dev/null +++ b/400_xowa/src/gplx/dbs/diffs/builds/Gfdb_diff_wkr__db.java @@ -0,0 +1,82 @@ +/* +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 . +*/ +package gplx.dbs.diffs.builds; import gplx.*; import gplx.dbs.*; import gplx.dbs.diffs.*; +class Gfdb_diff_wkr__db implements Gfdb_diff_wkr { + private Gfdb_diff_tbl lhs_tbl, rhs_tbl; + private Db_meta_fld[] val_flds; private int val_flds_len; + private Db_conn diff_conn; private Db_stmt stmt; + private int uid__upsert, uid__delete; private int prog_interval, prog_count; + public void Init_conn(Gfdb_diff_db diff_db, int prog_interval) {this.diff_conn = diff_db.Conn(); this.prog_interval = prog_interval;} + public void Init_tbls(Gfdb_diff_tbl lhs_tbl, Gfdb_diff_tbl rhs_tbl) { + this.lhs_tbl = lhs_tbl; this.rhs_tbl = rhs_tbl; + this.val_flds = lhs_tbl.Vals(); val_flds_len = val_flds.length; + this.uid__upsert = 0; uid__delete = 0; this.prog_count = 0; + String tbl_name = rhs_tbl.Name(); + Db_meta_fld[] diff_flds = Gfdb_diff_wkr__db_.New_diff_flds(rhs_tbl.Flds()); + if (!diff_conn.Meta_tbl_exists(tbl_name)) diff_conn.Ddl_create_tbl(Db_meta_tbl.new_(tbl_name, diff_flds)); + this.stmt = diff_conn.Stmt_insert(tbl_name, Gfdb_diff_wkr__db_.To_str_ary(diff_flds)); + diff_conn.Txn_bgn("diff_db"); + } + public void Term_tbls() { + diff_conn.Txn_end(); + } + public void Handle_same() { + if (Gfdb_rdr_utl_.Compare(val_flds, val_flds_len, lhs_tbl.Rdr(), rhs_tbl.Rdr()) != CompareAble_.Same) + Insert(Gfdb_diff_db_.Tid__update, uid__upsert++, rhs_tbl.Flds(), rhs_tbl.Rdr()); + } + public void Handle_lhs_missing() {Insert(Gfdb_diff_db_.Tid__insert, uid__upsert++, rhs_tbl.Flds(), rhs_tbl.Rdr());} + public void Handle_rhs_missing() {Insert(Gfdb_diff_db_.Tid__delete, uid__delete++, lhs_tbl.Keys(), lhs_tbl.Rdr());} + private void Insert(byte diff_type, int uid, Db_meta_fld[] flds, Db_rdr rdr) { + stmt.Val_int (Gfdb_diff_db_.Fld__diff_site , -1) + .Val_int (Gfdb_diff_db_.Fld__diff_time , -1) + .Val_int (Gfdb_diff_db_.Fld__diff_db_trg , -1) + .Val_int (Gfdb_diff_db_.Fld__diff_db_src , -1) + .Val_byte (Gfdb_diff_db_.Fld__diff_type , diff_type) + .Val_int (Gfdb_diff_db_.Fld__diff_type , uid) + ; + Gfdb_rdr_utl_.Stmt_args(stmt, flds, flds.length, rdr); + stmt.Exec_insert(); + if ((++prog_count % prog_interval) == 0) diff_conn.Txn_sav(); + } +} +class Gfdb_diff_wkr__db_ { + public static Db_meta_fld[] New_diff_flds(Db_meta_fld[] all_flds) { + int len = all_flds.length; + int system_flds = 6; + Db_meta_fld[] rv = new Db_meta_fld[len + system_flds]; + rv[0] = Db_meta_fld.new_int (Gfdb_diff_db_.Fld__diff_site); + rv[1] = Db_meta_fld.new_int (Gfdb_diff_db_.Fld__diff_time); + rv[2] = Db_meta_fld.new_int (Gfdb_diff_db_.Fld__diff_db_trg); + rv[3] = Db_meta_fld.new_int (Gfdb_diff_db_.Fld__diff_db_src); + rv[4] = Db_meta_fld.new_byte(Gfdb_diff_db_.Fld__diff_type); + rv[5] = Db_meta_fld.new_int (Gfdb_diff_db_.Fld__diff_uid); + for (int i = 0; i < len; ++i) { + Db_meta_fld orig_fld = all_flds[i]; + Db_meta_fld diff_fld = new Db_meta_fld(orig_fld.Name(), orig_fld.Tid(), orig_fld.Len()).Nullable_y_(); // keep same name and type, but make nullable + all_flds[i + system_flds] = diff_fld; + } + return rv; + } + public static String[] To_str_ary(Db_meta_fld[] ary) { + int len = ary.length; + String[] rv = new String[len]; + for (int i = 0; i < len; ++i) + rv[i] = ary[i].Name(); + return rv; + } +} diff --git a/400_xowa/src/gplx/dbs/diffs/merges/Gfdb_diff_cmd.java b/400_xowa/src/gplx/dbs/diffs/merges/Gfdb_diff_cmd.java new file mode 100644 index 000000000..e58d8f3f4 --- /dev/null +++ b/400_xowa/src/gplx/dbs/diffs/merges/Gfdb_diff_cmd.java @@ -0,0 +1,123 @@ +/* +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 . +*/ +package gplx.dbs.diffs.merges; import gplx.*; import gplx.dbs.*; import gplx.dbs.diffs.*; +import gplx.core.brys.fmtrs.*; +interface Gfdb_diff_cmd { + void Merge_undo(); + void Merge_exec(); +} +class Gfdb_diff_cmd__insert { +// else if I +// // txn_bgn +// // audit +// INSERT INTO db_temp.page (diff_type, diff, *) +// SELECT 'D', d.page_id, * +// FROM db_diff.page d +// JOIN db_main.page m ON d.page_id = m.page_id +// WHERE d.diff_type = 0 +// AND d.diff_idx BETWEEN lo and hi +// +// // update +// INSERT INTO db_main.page +// SELECT d.page_title +// FROM db_diff.page d +// JOIN db_main.page m +// // txn_end + private Db_conn conn; + private String exec_sql; + public void Init(Db_conn main_conn, Db_conn diff_conn, Db_conn temp_conn, Gfdb_diff_tbl tbl) { + this.conn = temp_conn; + this.exec_sql = ""; +// this.exec_sql = String_.Format(String_.Concat_lines_nl_skip_last +// ( "INSERT INTO db_curr.{tbl}" +// ), Gfdb_diff_cmd_ctx.Alias__curr); + } + public void Merge_exec() { + conn.Exec_sql(exec_sql); + } +} +class Gfdb_diff_cmd_sql_bldr { + private final Bry_fmtr fmtr = Bry_fmtr.new_(); + private final Bry_bfr tmp_bfr = Bry_bfr.new_(); + public void Bld_insert(Bry_bfr bfr, String tbl_name, String[] keys, String[] vals, int rng_bgn, int rng_end) { + fmtr.Fmt_(Insert__fmt).Keys_(Insert__keys); + fmtr.Bld_bfr_many(bfr, tbl_name, Bld_flds(tmp_bfr, ", ", "d.", keys, vals), Bld_join(keys), rng_bgn, rng_end); + } + public void Bld_update(Bry_bfr bfr, String tbl_name, String[] keys, String[] vals, int rng_bgn, int rng_end) { + fmtr.Fmt_(Update__fmt).Keys_(Update__keys); + fmtr.Bld_bfr_many(bfr, tbl_name, Bld_flds(tmp_bfr, ", ", "d.", keys, vals), Bld_join(keys), rng_bgn, rng_end); + } + public void Bld_delete(Bry_bfr bfr, String tbl_name, String[] keys, int rng_bgn, int rng_end) { + fmtr.Fmt_(Delete__fmt).Keys_(Delete__keys); + fmtr.Bld_bfr_many(bfr, tbl_name, Bld_flds(tmp_bfr, " || '|' || ", "", keys, String_.Ary_empty), Bld_flds(tmp_bfr, " || '|' || ", "k.", keys, String_.Ary_empty), Bld_join(keys), rng_bgn, rng_end); + } + private static String Bld_flds(Bry_bfr tmp_bfr, String dlm, String alias, String[] keys, String[] vals) { + int keys_len = keys.length; + for (int i = 0; i < keys_len; ++i) { + String key = keys[i]; + if (i != 0) tmp_bfr.Add_str_a7(dlm); + tmp_bfr.Add_str_a7(alias).Add_str_a7(key); + } + int flds_len = vals.length; + for (int i = 0; i < flds_len; ++i) { + String val = vals[i]; + tmp_bfr.Add_str_a7(dlm); + tmp_bfr.Add_str_a7(alias).Add_str_a7(val); + } + return tmp_bfr.To_str_and_clear(); + } + private String Bld_join(String[] keys) { + int len = keys.length; + for (int i = 0; i < len; ++i) { + String key = keys[i]; + tmp_bfr.Add_str_a7(i == 0 ? " ON " : " AND "); + tmp_bfr.Add_str_a7("k.").Add_str_a7(key).Add_str_a7(" = "); + tmp_bfr.Add_str_a7("d.").Add_str_a7(key); + } + return tmp_bfr.To_str_and_clear(); + } + private static final String[] Insert__keys = String_.Ary("tbl", "flds", "join", "rng_bgn", "rng_end"); + private static final String Insert__fmt = String_.Concat_lines_nl_skip_last + ( "INSERT INTO db_curr.~{tbl}" + , "SELECT ~{flds}" + , "FROM db_temp.~{tbl}_pkey k" + , " JOIN db_diff.~{tbl} d~{join}" + , "WHERE k.diff_type = 1" + , "AND k.diff_uid BETWEEN ~{rng_bgn} AND ~{rng_end};" + ); + private static final String[] Update__keys = String_.Ary("tbl", "flds", "join", "rng_bgn", "rng_end"); + private static final String Update__fmt = String_.Concat_lines_nl_skip_last + ( "REPLACE INTO db_curr.~{tbl}" + , "SELECT ~{flds}" + , "FROM db_temp.~{tbl}_pkey k" + , " JOIN db_diff.~{tbl} d~{join}" + , "WHERE k.diff_type = 2" + , "AND k.diff_uid BETWEEN ~{rng_bgn} AND ~{rng_end};" + ); + private static final String[] Delete__keys = String_.Ary("tbl", "pkey_where", "pkey_select", "join", "rng_bgn", "rng_end"); + private static final String Delete__fmt = String_.Concat_lines_nl_skip_last + ( "DELETE db_curr.~{tbl}" + , "WHERE ~{pkey_where} IN" + , "( SELECT ~{pkey_select}" + , " FROM db_temp.~{tbl}_pkey k" + , " JOIN db_diff.~{tbl} d~{join}" + , " WHERE k.diff_type = 0" + , " AND k.diff_uid BETWEEN ~{rng_bgn} AND ~{rng_end}" + , ");" + ); +} diff --git a/400_xowa/src/gplx/dbs/diffs/merges/Gfdb_diff_cmd_sql_bldr_tst.java b/400_xowa/src/gplx/dbs/diffs/merges/Gfdb_diff_cmd_sql_bldr_tst.java new file mode 100644 index 000000000..642b62d88 --- /dev/null +++ b/400_xowa/src/gplx/dbs/diffs/merges/Gfdb_diff_cmd_sql_bldr_tst.java @@ -0,0 +1,71 @@ +/* +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 . +*/ +package gplx.dbs.diffs.merges; import gplx.*; import gplx.dbs.*; import gplx.dbs.diffs.*; +import org.junit.*; +import gplx.dbs.*; import gplx.dbs.engines.mems.*; +public class Gfdb_diff_cmd_sql_bldr_tst { + private final Gfdb_diff_cmd_sql_bldr_fxt fxt = new Gfdb_diff_cmd_sql_bldr_fxt(); + @Test public void Insert() { + fxt.Test__insert("tbl1", String_.Ary("key1", "key2"), String_.Ary("fld1", "fld2"), 0, 99, String_.Concat_lines_nl_skip_last + ( "INSERT INTO db_curr.tbl1" + , "SELECT d.key1, d.key2, d.fld1, d.fld2" + , "FROM db_temp.tbl1_pkey k" + , " JOIN db_diff.tbl1 d ON k.key1 = d.key1 AND k.key2 = d.key2" + , "WHERE k.diff_type = 1" + , "AND k.diff_uid BETWEEN 0 AND 99;" + )); + } + @Test public void Update() { + fxt.Test__update("tbl1", String_.Ary("key1", "key2"), String_.Ary("fld1", "fld2"), 0, 99, String_.Concat_lines_nl_skip_last + ( "REPLACE INTO db_curr.tbl1" + , "SELECT d.key1, d.key2, d.fld1, d.fld2" + , "FROM db_temp.tbl1_pkey k" + , " JOIN db_diff.tbl1 d ON k.key1 = d.key1 AND k.key2 = d.key2" + , "WHERE k.diff_type = 2" + , "AND k.diff_uid BETWEEN 0 AND 99;" + )); + } + @Test public void Delete() { + fxt.Test__delete("tbl1", String_.Ary("key1", "key2"), 0, 99, String_.Concat_lines_nl_skip_last + ( "DELETE db_curr.tbl1" + , "WHERE key1 || '|' || key2 IN" + , "( SELECT k.key1 || '|' || k.key2" + , " FROM db_temp.tbl1_pkey k" + , " JOIN db_diff.tbl1 d ON k.key1 = d.key1 AND k.key2 = d.key2" + , " WHERE k.diff_type = 0" + , " AND k.diff_uid BETWEEN 0 AND 99" + , ");" + )); + } +} +class Gfdb_diff_cmd_sql_bldr_fxt { + private Gfdb_diff_cmd_sql_bldr bldr = new Gfdb_diff_cmd_sql_bldr(); + private final Bry_bfr bfr = Bry_bfr.new_(); + public void Test__insert(String tbl_name, String[] keys, String[] flds, int rng_bgn, int rng_end, String expd) { + bldr.Bld_insert(bfr, tbl_name, keys, flds, 0, 99); + Tfds.Eq_str_lines(expd, bfr.To_str_and_clear()); + } + public void Test__update(String tbl_name, String[] keys, String[] flds, int rng_bgn, int rng_end, String expd) { + bldr.Bld_update(bfr, tbl_name, keys, flds, 0, 99); + Tfds.Eq_str_lines(expd, bfr.To_str_and_clear()); + } + public void Test__delete(String tbl_name, String[] keys, int rng_bgn, int rng_end, String expd) { + bldr.Bld_delete(bfr, tbl_name, keys, 0, 99); + Tfds.Eq_str_lines(expd, bfr.To_str_and_clear()); + } +} diff --git a/400_xowa/src/gplx/langs/htmls/Gfh_atr_.java b/400_xowa/src/gplx/langs/htmls/Gfh_atr_.java new file mode 100644 index 000000000..2b05f468e --- /dev/null +++ b/400_xowa/src/gplx/langs/htmls/Gfh_atr_.java @@ -0,0 +1,57 @@ +/* +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 . +*/ +package gplx.langs.htmls; import gplx.*; import gplx.langs.*; +public class Gfh_atr_ { + public static final byte[] + // "coreattrs" + Bry__id = Bry_.new_a7("id") + , Bry__class = Bry_.new_a7("class") + , Bry__style = Bry_.new_a7("style") + , Bry__title = Bry_.new_a7("title") + // "i18n" + , Bry__lang = Bry_.new_a7("lang") + , Bry__dir = Bry_.new_a7("dir") + // + , Bry__href = Bry_.new_a7("href") + , Bry__rel = Bry_.new_a7("rel") + // + , Bry__alt = Bry_.new_a7("alt") + , Bry__src = Bry_.new_a7("src") + , Bry__width = Bry_.new_a7("width") + , Bry__height = Bry_.new_a7("height") + // + //, Bry__width = Bry_.new_a7("width") + , Bry__cellpadding = Bry_.new_a7("cellpadding") + , Bry__cellspacing = Bry_.new_a7("cellspacing") + , Bry__summary = Bry_.new_a7("summary") // HTML.ua + //
.borders_and_rules + , Bry__border = Bry_.new_a7("border") + , Bry__frames = Bry_.new_a7("frames") + , Bry__rules = Bry_.new_a7("rules") + //
, + , Bry__scope = Bry_.new_a7("scope") + , Bry__rowspan = Bry_.new_a7("rowspan") + , Bry__colspan = Bry_.new_a7("colspan") + , Bry__align = Bry_.new_a7("align") // HTML.v4 + , Bry__bgcolor = Bry_.new_a7("bgcolor") // HTML.v4 + , Bry__abbr = Bry_.new_a7("abbr") // HTML.ua + ; + public static byte[] Make(Bry_bfr bfr, byte[] key, byte[] val) { + return bfr.Add_byte_space().Add(key).Add_byte_eq().Add_byte_quote().Add(val).Add_byte_quote().To_bry_and_clear(); + } +} diff --git a/400_xowa/src/gplx/langs/htmls/Html_bldr_.java b/400_xowa/src/gplx/langs/htmls/Gfh_bldr_.java similarity index 94% rename from 400_xowa/src/gplx/langs/htmls/Html_bldr_.java rename to 400_xowa/src/gplx/langs/htmls/Gfh_bldr_.java index bd8f3ae9c..6bc588c1b 100644 --- a/400_xowa/src/gplx/langs/htmls/Html_bldr_.java +++ b/400_xowa/src/gplx/langs/htmls/Gfh_bldr_.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 . */ package gplx.langs.htmls; import gplx.*; import gplx.langs.*; -public class Html_bldr_ { +public class Gfh_bldr_ { public static final byte[] Bry__a_lhs_bgn = Bry_.new_a7("") @@ -34,6 +34,7 @@ public class Html_bldr_ { , Bry__src__nth = Bry_.new_a7("\" src=\"") , Bry__width__nth = Bry_.new_a7("\" width=\"") , Bry__height__nth = Bry_.new_a7("\" height=\"") + , Bry__lhs_end_head = Bry_.new_a7(">") , Bry__lhs_end_head_w_quote = Bry_.new_a7("\">") , Bry__lhs_end_inline = Bry_.new_a7("/>") , Bry__lhs_end_inline_w_quote = Bry_.new_a7("\"/>") diff --git a/400_xowa/src/gplx/langs/htmls/Html_entity_.java b/400_xowa/src/gplx/langs/htmls/Gfh_entity_.java similarity index 96% rename from 400_xowa/src/gplx/langs/htmls/Html_entity_.java rename to 400_xowa/src/gplx/langs/htmls/Gfh_entity_.java index aadab3b89..89c8822cc 100644 --- a/400_xowa/src/gplx/langs/htmls/Html_entity_.java +++ b/400_xowa/src/gplx/langs/htmls/Gfh_entity_.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 . */ package gplx.langs.htmls; import gplx.*; import gplx.langs.*; -public class Html_entity_ { +public class Gfh_entity_ { public static final String Nl_str = " " ; diff --git a/400_xowa/src/gplx/langs/htmls/Html_nde.java b/400_xowa/src/gplx/langs/htmls/Gfh_nde.java similarity index 75% rename from 400_xowa/src/gplx/langs/htmls/Html_nde.java rename to 400_xowa/src/gplx/langs/htmls/Gfh_nde.java index c400c7894..9615d5a59 100644 --- a/400_xowa/src/gplx/langs/htmls/Html_nde.java +++ b/400_xowa/src/gplx/langs/htmls/Gfh_nde.java @@ -16,8 +16,8 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.langs.htmls; import gplx.*; import gplx.langs.*; -public class Html_nde { - public Html_nde(byte[] src, boolean tag_tid_is_inline, int tag_lhs_bgn, int tag_lhs_end, int tag_rhs_bgn, int tag_rhs_end, int name_bgn, int name_end, int[] cur_atrs, int atrs_idx) { +public class Gfh_nde { + public Gfh_nde(byte[] src, boolean tag_tid_is_inline, int tag_lhs_bgn, int tag_lhs_end, int tag_rhs_bgn, int tag_rhs_end, int name_bgn, int name_end, int[] cur_atrs, int atrs_idx) { this.src = src; this.tag_tid_is_inline = tag_tid_is_inline; this.tag_lhs_bgn = tag_lhs_bgn; this.tag_lhs_end = tag_lhs_end; this.tag_rhs_bgn = tag_rhs_bgn; this.tag_rhs_end = tag_rhs_end; this.name_bgn = name_bgn; this.name_end = name_end; @@ -32,12 +32,12 @@ public class Html_nde { public int[] Atrs() {return atrs;} private int[] atrs = Int_.Ary_empty; public int Atrs_len() {return atrs_len;} private int atrs_len; public boolean Tag_tid_is_inline() {return tag_tid_is_inline;} private boolean tag_tid_is_inline; - public int Tag_lhs_bgn() {return tag_lhs_bgn;} public Html_nde Tag_lhs_bgn_(int v) {tag_lhs_bgn = v; return this;} private int tag_lhs_bgn; - public int Tag_lhs_end() {return tag_lhs_end;} public Html_nde Tag_lhs_end_(int v) {tag_lhs_end = v; return this;} private int tag_lhs_end; - public int Tag_rhs_bgn() {return tag_rhs_bgn;} public Html_nde Tag_rhs_bgn_(int v) {tag_rhs_bgn = v; return this;} private int tag_rhs_bgn; - public int Tag_rhs_end() {return tag_rhs_end;} public Html_nde Tag_rhs_end_(int v) {tag_rhs_end = v; return this;} private int tag_rhs_end; - public int Name_bgn() {return name_bgn;} public Html_nde Name_bgn_(int v) {name_bgn = v; return this;} private int name_bgn; - public int Name_end() {return name_end;} public Html_nde Name_end_(int v) {name_end = v; return this;} private int name_end; + public int Tag_lhs_bgn() {return tag_lhs_bgn;} public Gfh_nde Tag_lhs_bgn_(int v) {tag_lhs_bgn = v; return this;} private int tag_lhs_bgn; + public int Tag_lhs_end() {return tag_lhs_end;} public Gfh_nde Tag_lhs_end_(int v) {tag_lhs_end = v; return this;} private int tag_lhs_end; + public int Tag_rhs_bgn() {return tag_rhs_bgn;} public Gfh_nde Tag_rhs_bgn_(int v) {tag_rhs_bgn = v; return this;} private int tag_rhs_bgn; + public int Tag_rhs_end() {return tag_rhs_end;} public Gfh_nde Tag_rhs_end_(int v) {tag_rhs_end = v; return this;} private int tag_rhs_end; + public int Name_bgn() {return name_bgn;} public Gfh_nde Name_bgn_(int v) {name_bgn = v; return this;} private int name_bgn; + public int Name_end() {return name_end;} public Gfh_nde Name_end_(int v) {name_end = v; return this;} private int name_end; public void Clear() {tag_lhs_bgn = tag_rhs_bgn = -1;} public String Atrs_val_by_key_str(String find_key_str) {return String_.new_u8(Atrs_val_by_key_bry(Bry_.new_u8(find_key_str)));} public byte[] Atrs_val_by_key_bry(byte[] find_key_bry) { diff --git a/400_xowa/src/gplx/langs/htmls/Html_parser.java b/400_xowa/src/gplx/langs/htmls/Gfh_parser.java similarity index 84% rename from 400_xowa/src/gplx/langs/htmls/Html_parser.java rename to 400_xowa/src/gplx/langs/htmls/Gfh_parser.java index e377830de..cc3a042f6 100644 --- a/400_xowa/src/gplx/langs/htmls/Html_parser.java +++ b/400_xowa/src/gplx/langs/htmls/Gfh_parser.java @@ -17,17 +17,17 @@ along with this program. If not, see . */ package gplx.langs.htmls; import gplx.*; import gplx.langs.*; import gplx.core.brys.*; -public class Html_parser { - public Html_parser() { +public class Gfh_parser { + public Gfh_parser() { Bry_bldr bry_bldr = new Bry_bldr(); bry_xnde_name = bry_bldr.New_256().Set_rng_xml_identifier(Scan_valid).Set_rng_ws(Scan_stop).Val(); bry_atr_key = bry_bldr.New_256().Set_rng_xml_identifier(Scan_valid).Set_rng_ws(Scan_stop).Set_many(Scan_stop, Byte_ascii.Eq).Val(); } byte[] src; int pos, end; byte[] bry_xnde_name, bry_atr_key; int cur_atrs_idx = 0; int[] cur_atrs = new int[250];// define max of 50 atrs; - public Html_nde[] Parse_as_ary(byte[] src) {return Parse_as_ary(src, 0, src.length, Wildcard, Wildcard);} - public Html_nde[] Parse_as_ary(byte[] src, int bgn, int end) {return Parse_as_ary(src, bgn, end, Wildcard, Wildcard);} - public Html_nde[] Parse_as_ary(byte[] src, int bgn, int end, byte[] find_key, byte[] find_val) { // flattens html into a list of hndes; only used for Options + public Gfh_nde[] Parse_as_ary(byte[] src) {return Parse_as_ary(src, 0, src.length, Wildcard, Wildcard);} + public Gfh_nde[] Parse_as_ary(byte[] src, int bgn, int end) {return Parse_as_ary(src, bgn, end, Wildcard, Wildcard);} + public Gfh_nde[] Parse_as_ary(byte[] src, int bgn, int end, byte[] find_key, byte[] find_val) { // flattens html into a list of hndes; only used for Options this.src = src; pos = bgn; this.end = end; List_adp rv = List_adp_.new_(); while (pos < end) { @@ -37,14 +37,14 @@ public class Html_parser { if (xnde_init) { if (Parse_xnde_lhs()) { if (tag_tid_is_inline) - rv.Add(new Html_nde(src, tag_tid_is_inline, cur_lhs_bgn, cur_lhs_end, cur_rhs_bgn, pos, cur_name_bgn, cur_name_end, cur_atrs, cur_atrs_idx)); + rv.Add(new Gfh_nde(src, tag_tid_is_inline, cur_lhs_bgn, cur_lhs_end, cur_rhs_bgn, pos, cur_name_bgn, cur_name_end, cur_atrs, cur_atrs_idx)); else xnde_init = false; } } else { if (Parse_xnde_rhs()) { - rv.Add(new Html_nde(src, tag_tid_is_inline, cur_lhs_bgn, cur_lhs_end, cur_rhs_bgn, pos, cur_name_bgn, cur_name_end, cur_atrs, cur_atrs_idx)); + rv.Add(new Gfh_nde(src, tag_tid_is_inline, cur_lhs_bgn, cur_lhs_end, cur_rhs_bgn, pos, cur_name_bgn, cur_name_end, cur_atrs, cur_atrs_idx)); } xnde_init = true; } @@ -53,7 +53,7 @@ public class Html_parser { break; } } - return (Html_nde[])rv.To_ary(Html_nde.class); + return (Gfh_nde[])rv.To_ary(Gfh_nde.class); } int cur_lhs_bgn, cur_lhs_end, cur_name_bgn, cur_name_end, cur_rhs_bgn; boolean xnde_init = true, tag_tid_is_inline = false; private boolean Parse_xnde_rhs() { diff --git a/400_xowa/src/gplx/langs/htmls/Html_parser_tst.java b/400_xowa/src/gplx/langs/htmls/Gfh_parser_tst.java similarity index 71% rename from 400_xowa/src/gplx/langs/htmls/Html_parser_tst.java rename to 400_xowa/src/gplx/langs/htmls/Gfh_parser_tst.java index 38b2589fd..a1a777747 100644 --- a/400_xowa/src/gplx/langs/htmls/Html_parser_tst.java +++ b/400_xowa/src/gplx/langs/htmls/Gfh_parser_tst.java @@ -17,8 +17,8 @@ along with this program. If not, see . */ package gplx.langs.htmls; import gplx.*; import gplx.langs.*; import org.junit.*; -public class Html_parser_tst { - @Before public void init() {fxt.Clear();} private Html_parser_fxt fxt = new Html_parser_fxt(); +public class Gfh_parser_tst { + @Before public void init() {fxt.Clear();} private Gfh_parser_fxt fxt = new Gfh_parser_fxt(); @Test public void One() {fxt.Test_parse_find_all("", "id0");} @Test public void Many() {fxt.Test_parse_find_all("", "id0", "id1", "id2");} @Test public void Inline() {fxt.Test_parse_find_all("", "id0");} @@ -26,25 +26,25 @@ public class Html_parser_tst { @Test public void Quote_double() {fxt.Test_parse_find_all("", "id'0");} @Test public void Quote_escape() {fxt.Test_parse_find_all("", "id'0");} } -class Html_parser_fxt { +class Gfh_parser_fxt { public void Clear() { if (parser == null) { - parser = new Html_parser(); + parser = new Gfh_parser(); } - } private Html_parser parser; - public Html_parser_fxt Test_parse_find_all(String raw_str, String... expd) {return Test_parse_find(raw_str, Html_parser.Wildcard_str, Html_parser.Wildcard_str, expd);} - public Html_parser_fxt Test_parse_find(String raw_str, String find_key, String find_val, String... expd) { + } private Gfh_parser parser; + public Gfh_parser_fxt Test_parse_find_all(String raw_str, String... expd) {return Test_parse_find(raw_str, Gfh_parser.Wildcard_str, Gfh_parser.Wildcard_str, expd);} + public Gfh_parser_fxt Test_parse_find(String raw_str, String find_key, String find_val, String... expd) { byte[] raw = Bry_.new_a7(raw_str); - Html_nde[] actl_ndes = parser.Parse_as_ary(raw, 0, raw.length, Bry_.new_a7(find_key), Bry_.new_a7(find_val)); + Gfh_nde[] actl_ndes = parser.Parse_as_ary(raw, 0, raw.length, Bry_.new_a7(find_key), Bry_.new_a7(find_val)); String[] actl = Xto_ids(raw, actl_ndes); Tfds.Eq_ary_str(expd, actl); return this; } - private String[] Xto_ids(byte[] src, Html_nde[] ary) { + private String[] Xto_ids(byte[] src, Gfh_nde[] ary) { int len = ary.length; String[] rv = new String[len]; for (int i = 0; i < len; i++) { - Html_nde itm = ary[i]; + Gfh_nde itm = ary[i]; String atr_val = itm.Atrs_val_by_key_str("id"); rv[i] = atr_val; } diff --git a/400_xowa/src/gplx/langs/htmls/Html_selecter.java b/400_xowa/src/gplx/langs/htmls/Gfh_selecter.java similarity index 84% rename from 400_xowa/src/gplx/langs/htmls/Html_selecter.java rename to 400_xowa/src/gplx/langs/htmls/Gfh_selecter.java index 0217fba01..4184001cf 100644 --- a/400_xowa/src/gplx/langs/htmls/Html_selecter.java +++ b/400_xowa/src/gplx/langs/htmls/Gfh_selecter.java @@ -16,12 +16,12 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.langs.htmls; import gplx.*; import gplx.langs.*; -public class Html_selecter { - public static Html_nde[] Select(byte[] src, Html_nde[] ary, Hash_adp_bry hash) { +public class Gfh_selecter { + public static Gfh_nde[] Select(byte[] src, Gfh_nde[] ary, Hash_adp_bry hash) { List_adp list = List_adp_.new_(); int xndes_len = ary.length; for (int i = 0; i < xndes_len; i++) { - Html_nde hnde = ary[i]; + Gfh_nde hnde = ary[i]; int[] atrs = hnde.Atrs(); int atrs_len = atrs.length; for (int j = 0; j < atrs_len; j += 5) { @@ -33,7 +33,7 @@ public class Html_selecter { } } } - Html_nde[] rv = (Html_nde[])list.To_ary(Html_nde.class); + Gfh_nde[] rv = (Gfh_nde[])list.To_ary(Gfh_nde.class); list.Clear(); return rv; } diff --git a/400_xowa/src/gplx/langs/htmls/Html_tag_.java b/400_xowa/src/gplx/langs/htmls/Gfh_tag_.java similarity index 86% rename from 400_xowa/src/gplx/langs/htmls/Html_tag_.java rename to 400_xowa/src/gplx/langs/htmls/Gfh_tag_.java index c995470f7..ccff7578a 100644 --- a/400_xowa/src/gplx/langs/htmls/Html_tag_.java +++ b/400_xowa/src/gplx/langs/htmls/Gfh_tag_.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 . */ package gplx.langs.htmls; import gplx.*; import gplx.langs.*; -public class Html_tag_ { +public class Gfh_tag_ { public static final int Id__eos = -2 , Id__any = -1 @@ -34,11 +34,15 @@ public class Html_tag_ { , Id__ul = 11 , Id__li = 12 , Id__p = 13 - , Id__hr = 14 + , Id__br = 14 + , Id__hr = 15 + , Id__td = 16 ; public static final byte[] Bry__a = Bry_.new_a7("a") , Bry__ul = Bry_.new_a7("ul") + , Bry__td = Bry_.new_a7("td") + , Bry__th = Bry_.new_a7("th") ; public static final Hash_adp_bry Hash = Hash_adp_bry.ci_a7() .Add_bry_int(Bry__a , Id__a) @@ -50,8 +54,12 @@ public class Html_tag_ { .Add_str_int("span" , Id__span) .Add_str_int("div" , Id__div) .Add_str_int("img" , Id__img) + .Add_str_int("br" , Id__br) .Add_str_int("hr" , Id__hr) .Add_str_int("ul" , Id__ul) + .Add_str_int("li" , Id__li) + .Add_str_int("td" , Id__td) + .Add_str_int("p" , Id__p) ; public static String To_str(int tid) { switch (tid) { @@ -68,12 +76,18 @@ public class Html_tag_ { case Id__span: return "span"; case Id__div: return "div"; case Id__img: return "img"; + case Id__p: return "p"; + case Id__br: return "br"; case Id__hr: return "hr"; + case Id__td: return "td"; + case Id__ul: return "ul"; + case Id__li: return "li"; default: throw Err_.new_unhandled(tid); } } public static final byte[] Br_inl = Bry_.new_a7("
") + , Br_lhs = Bry_.new_a7("
") , Hr_inl = Bry_.new_a7("
") , Body_lhs = Bry_.new_a7("") , Body_rhs = Bry_.new_a7("") , B_lhs = Bry_.new_a7("") , B_rhs = Bry_.new_a7("") diff --git a/400_xowa/src/gplx/langs/htmls/Html_utl.java b/400_xowa/src/gplx/langs/htmls/Gfh_utl.java similarity index 84% rename from 400_xowa/src/gplx/langs/htmls/Html_utl.java rename to 400_xowa/src/gplx/langs/htmls/Gfh_utl.java index d42010d55..42b4447c2 100644 --- a/400_xowa/src/gplx/langs/htmls/Html_utl.java +++ b/400_xowa/src/gplx/langs/htmls/Gfh_utl.java @@ -17,7 +17,7 @@ along with this program. If not, see . */ package gplx.langs.htmls; import gplx.*; import gplx.langs.*; import gplx.core.primitives.*; import gplx.core.btries.*; import gplx.langs.htmls.encoders.*; -public class Html_utl { +public class Gfh_utl { private static final Gfo_url_encoder encoder_id = Gfo_url_encoder_.Id; private static final Bry_bfr tmp_bfr = Bry_bfr.reset_(255); public static String Encode_id_as_str(byte[] key) {return String_.new_u8(Encode_id_as_bry(key));} public static byte[] Encode_id_as_bry(byte[] key) { @@ -44,8 +44,8 @@ public class Html_utl { dirty = true; } switch (quote_byte) { - case Byte_ascii.Apos: bfr.Add(Html_entity_.Apos_num_bry); break; - case Byte_ascii.Quote: bfr.Add(Html_entity_.Quote_bry); break; + case Byte_ascii.Apos: bfr.Add(Gfh_entity_.Apos_num_bry); break; + case Byte_ascii.Quote: bfr.Add(Gfh_entity_.Quote_bry); break; default: throw Err_.new_unhandled(quote_byte); } } @@ -73,11 +73,11 @@ public class Html_utl { for (int i = bgn; i < end; i++) { byte b = bry[i]; switch (b) { - case Byte_ascii.Lt: if (escape_lt) escaped = Html_entity_.Lt_bry; break; - case Byte_ascii.Gt: if (escape_gt) escaped = Html_entity_.Gt_bry; break; - case Byte_ascii.Amp: if (escape_amp) escaped = Html_entity_.Amp_bry; break; - case Byte_ascii.Quote: if (escape_quote) escaped = Html_entity_.Quote_bry; break; - case Byte_ascii.Apos: if (escape_apos) escaped = Html_entity_.Apos_num_bry; break; + case Byte_ascii.Lt: if (escape_lt) escaped = Gfh_entity_.Lt_bry; break; + case Byte_ascii.Gt: if (escape_gt) escaped = Gfh_entity_.Gt_bry; break; + case Byte_ascii.Amp: if (escape_amp) escaped = Gfh_entity_.Amp_bry; break; + case Byte_ascii.Quote: if (escape_quote) escaped = Gfh_entity_.Quote_bry; break; + case Byte_ascii.Apos: if (escape_apos) escaped = Gfh_entity_.Apos_num_bry; break; default: if (dirty || write_to_bfr) bfr.Add_byte(b); @@ -104,11 +104,11 @@ public class Html_utl { } private static final Btrie_slim_mgr unescape_trie = Btrie_slim_mgr.ci_a7() - .Add_bry_byte(Html_entity_.Lt_bry , Byte_ascii.Lt) - .Add_bry_byte(Html_entity_.Gt_bry , Byte_ascii.Gt) - .Add_bry_byte(Html_entity_.Amp_bry , Byte_ascii.Amp) - .Add_bry_byte(Html_entity_.Quote_bry , Byte_ascii.Quote) - .Add_bry_byte(Html_entity_.Apos_num_bry , Byte_ascii.Apos) + .Add_bry_byte(Gfh_entity_.Lt_bry , Byte_ascii.Lt) + .Add_bry_byte(Gfh_entity_.Gt_bry , Byte_ascii.Gt) + .Add_bry_byte(Gfh_entity_.Amp_bry , Byte_ascii.Amp) + .Add_bry_byte(Gfh_entity_.Quote_bry , Byte_ascii.Quote) + .Add_bry_byte(Gfh_entity_.Apos_num_bry , Byte_ascii.Apos) ; public static String Unescape_as_str(String src) { Bry_bfr bfr = Bry_bfr.reset_(255); @@ -162,18 +162,18 @@ public class Html_utl { public static byte[] Del_comments(Bry_bfr bfr, byte[] src, int pos, int end) { while (true) { if (pos >= end) break; - int comm_bgn = Bry_find_.Find_fwd(src, Html_tag_.Comm_bgn, pos); // look for + int comm_end = Bry_find_.Find_fwd(src, Gfh_tag_.Comm_end, comm_bgn + Gfh_tag_.Comm_bgn_len); // look for --> if (comm_end == Bry_find_.Not_found) { // not found; consume rest bfr.Add_mid(src, pos, end); break; } bfr.Add_mid(src, pos, comm_bgn); // add everything between pos and comm_bgn - pos = comm_end + Html_tag_.Comm_end_len; // reposition pos after comm_end + pos = comm_end + Gfh_tag_.Comm_end_len; // reposition pos after comm_end } return bfr.To_bry_and_clear(); } diff --git a/400_xowa/src/gplx/langs/htmls/Html_utl_tst.java b/400_xowa/src/gplx/langs/htmls/Gfh_utl_tst.java similarity index 82% rename from 400_xowa/src/gplx/langs/htmls/Html_utl_tst.java rename to 400_xowa/src/gplx/langs/htmls/Gfh_utl_tst.java index 22713df7b..08bed497f 100644 --- a/400_xowa/src/gplx/langs/htmls/Html_utl_tst.java +++ b/400_xowa/src/gplx/langs/htmls/Gfh_utl_tst.java @@ -17,8 +17,8 @@ along with this program. If not, see . */ package gplx.langs.htmls; import gplx.*; import gplx.langs.*; import org.junit.*; -public class Html_utl_tst { - @Before public void init() {fxt.Clear();} private Html_atr_class_fxt fxt = new Html_atr_class_fxt(); +public class Gfh_utl_tst { + @Before public void init() {fxt.Clear();} private Gfh_class_fxt fxt = new Gfh_class_fxt(); @Test public void Basic() {fxt.Test_del_comments("ac" , "ac");} @Test public void Bgn_missing() {fxt.Test_del_comments("a b c" , "a b c");} @Test public void End_missing() {fxt.Test_del_comments("a35
6
"); - fxt.Test__move_fwd_head(Html_tag_.Id__comment , "") ; fxt.Test__pos("3"); - fxt.Test__move_fwd_head(Html_tag_.Id__any , "
") ; fxt.Test__pos("6"); + fxt.Test__move_fwd_head(Gfh_tag_.Id__comment , "") ; fxt.Test__pos("3"); + fxt.Test__move_fwd_head(Gfh_tag_.Id__any , "
") ; fxt.Test__pos("6"); } @Test public void Meta() { fxt.Init("1
2
3"); - fxt.Test__move_fwd_head(Html_tag_.Id__div , "
") ; fxt.Test__pos("2"); + fxt.Test__move_fwd_head(Gfh_tag_.Id__div , "
") ; fxt.Test__pos("2"); } @Test public void Recursive__same_tags() { fxt.Init("12345"); - fxt.Test__move_fwd_head(Html_tag_.Id__a , "") ; fxt.Test__pos("2"); - fxt.Test__move_fwd_tail(Html_tag_.Id__a , "") ; fxt.Test__pos("5"); + fxt.Test__move_fwd_head(Gfh_tag_.Id__a , "") ; fxt.Test__pos("2"); + fxt.Test__move_fwd_tail(Gfh_tag_.Id__a , "") ; fxt.Test__pos("5"); } @Test public void Recursive__diff_tags() { fxt.Init("1
2345
6"); - fxt.Test__move_fwd_head(Html_tag_.Id__div , "
") ; fxt.Test__pos("2"); - fxt.Test__move_fwd_tail(Html_tag_.Id__div , "
") ; fxt.Test__pos("6"); + fxt.Test__move_fwd_head(Gfh_tag_.Id__div , "
") ; fxt.Test__pos("2"); + fxt.Test__move_fwd_tail(Gfh_tag_.Id__div , "
") ; fxt.Test__pos("6"); } } -class Html_tag_rdr_fxt { - private final Html_tag_rdr rdr = new Html_tag_rdr(); +class Gfh_tag_rdr_fxt { + private final Gfh_tag_rdr rdr = new Gfh_tag_rdr(); public void Init(String src_str) { byte[] src_bry = Bry_.new_u8(src_str); rdr.Init(Bry_.Empty, src_bry, 0, src_bry.length); } - public void Test__move_fwd_head(String expd) {Test__move_fwd_head(Html_tag_.Id__any, expd);} + public void Test__move_fwd_head(String expd) {Test__move_fwd_head(Gfh_tag_.Id__any, expd);} public void Test__move_fwd_head(int match_name_id, String expd) { - Html_tag actl_tag = rdr.Tag__move_fwd_head(match_name_id).Chk_id(match_name_id); + Gfh_tag actl_tag = rdr.Tag__move_fwd_head(match_name_id).Chk_name_or_fail(match_name_id); Tfds.Eq_str(expd, String_.new_u8(rdr.Src(), actl_tag.Src_bgn(), actl_tag.Src_end())); } public void Test__move_fwd_tail(int match_name_id, String expd) { - Html_tag actl_tag = rdr.Tag__move_fwd_tail(match_name_id); + Gfh_tag actl_tag = rdr.Tag__move_fwd_tail(match_name_id); Tfds.Eq_str(expd, String_.new_u8(rdr.Src(), actl_tag.Src_bgn(), actl_tag.Src_end())); } public void Test__peek_fwd_head(String expd) { - Html_tag actl_tag = rdr.Tag__peek_fwd_head(); + Gfh_tag actl_tag = rdr.Tag__peek_fwd_head(); Tfds.Eq_str(expd, String_.new_u8(rdr.Src(), actl_tag.Src_bgn(), actl_tag.Src_end())); } public void Test__peek_bwd_tail(String expd_str) { byte[] expd_bry = Bry_.new_u8(expd_str); - Html_tag actl_tag = rdr.Tag__peek_bwd_tail(-1); + Gfh_tag actl_tag = rdr.Tag__peek_bwd_tail(-1); Tfds.Eq_bry(expd_bry, Bry_.Mid(rdr.Src(), actl_tag.Src_bgn(), actl_tag.Src_bgn() + expd_bry.length)); } public void Test__pos(String expd_str) { diff --git a/400_xowa/src/gplx/langs/htmls/parsers/Html_txt_wkr.java b/400_xowa/src/gplx/langs/htmls/docs/Gfh_txt_wkr.java similarity index 85% rename from 400_xowa/src/gplx/langs/htmls/parsers/Html_txt_wkr.java rename to 400_xowa/src/gplx/langs/htmls/docs/Gfh_txt_wkr.java index dc5c9e32c..d13b0a192 100644 --- a/400_xowa/src/gplx/langs/htmls/parsers/Html_txt_wkr.java +++ b/400_xowa/src/gplx/langs/htmls/docs/Gfh_txt_wkr.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 . */ -package gplx.langs.htmls.parsers; import gplx.*; import gplx.langs.*; import gplx.langs.htmls.*; -public interface Html_txt_wkr { +package gplx.langs.htmls.docs; import gplx.*; import gplx.langs.*; import gplx.langs.htmls.*; +public interface Gfh_txt_wkr { void Parse(int rng_bgn, int rng_end); } \ No newline at end of file diff --git a/400_xowa/src/gplx/langs/htmls/parsers/Html_doc_log.java b/400_xowa/src/gplx/langs/htmls/parsers/Html_doc_log.java deleted file mode 100644 index a2612637b..000000000 --- a/400_xowa/src/gplx/langs/htmls/parsers/Html_doc_log.java +++ /dev/null @@ -1,38 +0,0 @@ -/* -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 . -*/ -//namespace gplx.langs.htmls.parsers { -// public class Html_doc_log { -// private byte[] src; private byte[] page_url; private String wkr_name; private int src_bgn; private int src_end; -// public Html_doc_log Init_by_page(byte[] src, byte[] page_url) { -// this.src = src; this.page_url = page_url; -// return this; -// } -// public Html_doc_log Init_by_wkr(String wkr_name, int src_bgn, int src_end) { -// this.wkr_name = wkr_name; this.src_bgn = src_bgn; this.src_end = src_end; -// return this; -// } -// public Err Fail_w_args(String fail_msg, params Object[] custom_args) {return Fail_w_excerpt(fail_msg, src_bgn, src_end + 255, custom_args);} -// public Err Fail_w_excerpt(String fail_msg, int excerpt_bgn, int excerpt_end, params Object[] custom_args) { -// Object[] dflt_args = Object_.Ary("page", page_url, "wkr", wkr_name, "excerpt", Bry_.Mid_safe(src, excerpt_bgn, excerpt_end)); -// Object[] fail_args = Object_.Ary_add(custom_args, dflt_args); -// String msg = Err_msg.To_str(fail_msg, fail_args); -// Gfo_usr_dlg_.Instance.Warn_many("", "", msg); -// return Err_.new_("Xoh_hdoc_err", msg); -// } -// } -//} diff --git a/400_xowa/src/gplx/langs/htmls/styles/Gfh_style_itm.java b/400_xowa/src/gplx/langs/htmls/styles/Gfh_style_itm.java new file mode 100644 index 000000000..f18d5db3d --- /dev/null +++ b/400_xowa/src/gplx/langs/htmls/styles/Gfh_style_itm.java @@ -0,0 +1,25 @@ +/* +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 . +*/ +package gplx.langs.htmls.styles; import gplx.*; import gplx.langs.*; import gplx.langs.htmls.*; +public class Gfh_style_itm implements To_str_able { + public Gfh_style_itm(int idx, byte[] key, byte[] val) {this.idx = idx; this.key = key; this.val = val;} + public int Idx() {return idx;} private final int idx; + public byte[] Key() {return key;} private final byte[] key; + public byte[] Val() {return val;} private final byte[] val; + public String To_str() {return String_.new_u8(Bry_.Add(key, Byte_ascii.Colon_bry, val, Byte_ascii.Semic_bry));} +} diff --git a/400_xowa/src/gplx/langs/htmls/parsers/styles/Html_atr_style_.java b/400_xowa/src/gplx/langs/htmls/styles/Gfh_style_key_.java similarity index 77% rename from 400_xowa/src/gplx/langs/htmls/parsers/styles/Html_atr_style_.java rename to 400_xowa/src/gplx/langs/htmls/styles/Gfh_style_key_.java index 8bc1fa6c1..4528f707a 100644 --- a/400_xowa/src/gplx/langs/htmls/parsers/styles/Html_atr_style_.java +++ b/400_xowa/src/gplx/langs/htmls/styles/Gfh_style_key_.java @@ -15,9 +15,10 @@ 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.langs.htmls.parsers.styles; import gplx.*; import gplx.langs.*; import gplx.langs.htmls.*; import gplx.langs.htmls.parsers.*; -public class Html_atr_style_ { +package gplx.langs.htmls.styles; import gplx.*; import gplx.langs.*; import gplx.langs.htmls.*; +public class Gfh_style_key_ { public static final byte[] - Bry__width = Bry_.new_a7("width") + Bry__width = Bry_.new_a7("width") + , Bry__margin = Bry_.new_a7("margin") ; } diff --git a/400_xowa/src/gplx/langs/htmls/parsers/styles/Html_atr_style_parser_.java b/400_xowa/src/gplx/langs/htmls/styles/Gfh_style_parser_.java similarity index 70% rename from 400_xowa/src/gplx/langs/htmls/parsers/styles/Html_atr_style_parser_.java rename to 400_xowa/src/gplx/langs/htmls/styles/Gfh_style_parser_.java index 4566f39d2..0b3c87704 100644 --- a/400_xowa/src/gplx/langs/htmls/parsers/styles/Html_atr_style_parser_.java +++ b/400_xowa/src/gplx/langs/htmls/styles/Gfh_style_parser_.java @@ -15,15 +15,16 @@ 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.langs.htmls.parsers.styles; import gplx.*; import gplx.langs.*; import gplx.langs.htmls.*; import gplx.langs.htmls.parsers.*; -public class Html_atr_style_parser_ { - public static void Parse(Html_tag tag, Html_atr_style_wkr wkr) { - Html_atr atr = tag.Atrs__get_by_or_empty(Html_atr_.Bry__style); +package gplx.langs.htmls.styles; import gplx.*; import gplx.langs.*; import gplx.langs.htmls.*; +import gplx.langs.htmls.docs.*; +public class Gfh_style_parser_ { + public static void Parse(Gfh_tag tag, Gfh_style_wkr wkr) { + Gfh_atr atr = tag.Atrs__get_by_or_empty(Gfh_atr_.Bry__style); if (atr.Val_dat_exists()) Parse(tag.Src(), atr.Val_bgn(), atr.Val_end(), wkr); } - public static void Parse(byte[] src, int src_bgn, int src_end, Html_atr_style_wkr wkr) { - int atr_idx = 0, atr_bgn = -1, atr_end = -1, key_bgn = -1, key_end = -1, tmp_bgn = -1, tmp_end = -1; + public static void Parse(byte[] src, int src_bgn, int src_end, Gfh_style_wkr wkr) { + int atr_idx = 0, key_bgn = -1, key_end = -1, tmp_bgn = -1, tmp_end = -1; int pos = src_bgn; while (true) { boolean pos_is_last = pos == src_end; @@ -31,10 +32,10 @@ public class Html_atr_style_parser_ { switch (b) { case Byte_ascii.Semic: if (key_bgn != -1) { // ignore empty atrs - if (!wkr.On_atr(src, atr_idx, atr_bgn, atr_end, key_bgn, key_end, tmp_bgn, tmp_end)) + if (!wkr.On_atr(src, atr_idx, src_bgn, src_end, key_bgn, key_end, tmp_bgn, tmp_end)) pos_is_last = true; } - ++atr_idx; atr_bgn = -1; atr_end = -1; key_bgn = -1; key_end = -1; tmp_bgn = -1; tmp_end = -1; + ++atr_idx; key_bgn = -1; key_end = -1; tmp_bgn = -1; tmp_end = -1; break; case Byte_ascii.Colon: key_bgn = tmp_bgn; diff --git a/400_xowa/src/gplx/langs/htmls/parsers/styles/Html_atr_style_parser__tst.java b/400_xowa/src/gplx/langs/htmls/styles/Gfh_style_parser__tst.java similarity index 53% rename from 400_xowa/src/gplx/langs/htmls/parsers/styles/Html_atr_style_parser__tst.java rename to 400_xowa/src/gplx/langs/htmls/styles/Gfh_style_parser__tst.java index bd224314b..9a9bbe228 100644 --- a/400_xowa/src/gplx/langs/htmls/parsers/styles/Html_atr_style_parser__tst.java +++ b/400_xowa/src/gplx/langs/htmls/styles/Gfh_style_parser__tst.java @@ -15,10 +15,10 @@ 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.langs.htmls.parsers.styles; import gplx.*; import gplx.langs.*; import gplx.langs.htmls.*; import gplx.langs.htmls.parsers.*; +package gplx.langs.htmls.styles; import gplx.*; import gplx.langs.*; import gplx.langs.htmls.*; import org.junit.*; -public class Html_atr_style_parser__tst { - private final Html_atr_style_parser__fxt fxt = new Html_atr_style_parser__fxt(); +public class Gfh_style_parser__tst { + private final Gfh_style_parser__fxt fxt = new Gfh_style_parser__fxt(); @Test public void Basic() { fxt.Test__parse("k_0:v_0" , fxt.Make("k_0", "v_0")); fxt.Test__parse("k_0:v_0;" , fxt.Make("k_0", "v_0")); @@ -29,25 +29,17 @@ public class Html_atr_style_parser__tst { fxt.Test__parse(" k_0 : v_0 ; k_1 : v_1 " , fxt.Make("k_0", "v_0"), fxt.Make("k_1", "v_1")); fxt.Test__parse(" k_0 : v 0 ;" , fxt.Make("k_0", "v 0")); } + @Test public void Empty() { + fxt.Test__parse("k_0:v_0;;" , fxt.Make("k_0", "v_0")); + fxt.Test__parse("k_0:v_0; ; " , fxt.Make("k_0", "v_0")); + } } -class Html_atr_style_parser__fxt { - private final Html_atr_style_wkr__kv_list wkr = new Html_atr_style_wkr__kv_list(); - public KeyVal Make(String k, String v) {return KeyVal_.new_(k, v);} - public void Test__parse(String src_str, KeyVal... expd) { +class Gfh_style_parser__fxt { + private final Gfh_style_wkr__ary wkr = Gfh_style_wkr__ary.Instance; + public Gfh_style_itm Make(String k, String v) {return new Gfh_style_itm(-1, Bry_.new_u8(k), Bry_.new_u8(v));} + public void Test__parse(String src_str, Gfh_style_itm... expd) { byte[] src_bry = Bry_.new_u8(src_str); - KeyVal[] actl = wkr.Parse(src_bry, 0, src_bry.length); + Gfh_style_itm[] actl = wkr.Parse(src_bry, 0, src_bry.length); Tfds.Eq_ary_str(expd, actl); } } -class Html_atr_style_wkr__kv_list implements Html_atr_style_wkr { - private final List_adp list = List_adp_.new_(); - public boolean On_atr(byte[] src, int atr_idx, int atr_bgn, int atr_end, int key_bgn, int key_end, int val_bgn, int val_end) { - KeyVal kv = KeyVal_.new_(String_.new_u8(src, key_bgn, key_end), String_.new_u8(src, val_bgn, val_end)); - list.Add(kv); - return true; - } - public KeyVal[] Parse(byte[] src, int src_bgn, int src_end) { - Html_atr_style_parser_.Parse(src, src_bgn, src_end, this); - return (KeyVal[])list.To_ary_and_clear(KeyVal.class); - } -} diff --git a/400_xowa/src/gplx/langs/htmls/parsers/styles/Html_atr_style_wkr.java b/400_xowa/src/gplx/langs/htmls/styles/Gfh_style_wkr.java similarity index 82% rename from 400_xowa/src/gplx/langs/htmls/parsers/styles/Html_atr_style_wkr.java rename to 400_xowa/src/gplx/langs/htmls/styles/Gfh_style_wkr.java index b9ba21a80..3b8ddad9a 100644 --- a/400_xowa/src/gplx/langs/htmls/parsers/styles/Html_atr_style_wkr.java +++ b/400_xowa/src/gplx/langs/htmls/styles/Gfh_style_wkr.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 . */ -package gplx.langs.htmls.parsers.styles; import gplx.*; import gplx.langs.*; import gplx.langs.htmls.*; import gplx.langs.htmls.parsers.*; -public interface Html_atr_style_wkr { +package gplx.langs.htmls.styles; import gplx.*; import gplx.langs.*; import gplx.langs.htmls.*; +public interface Gfh_style_wkr { boolean On_atr(byte[] src, int atr_idx, int atr_bgn, int atr_end, int key_bgn, int key_end, int val_bgn, int val_end); } diff --git a/400_xowa/src/gplx/langs/htmls/styles/Gfh_style_wkr__ary.java b/400_xowa/src/gplx/langs/htmls/styles/Gfh_style_wkr__ary.java new file mode 100644 index 000000000..87c5c5bda --- /dev/null +++ b/400_xowa/src/gplx/langs/htmls/styles/Gfh_style_wkr__ary.java @@ -0,0 +1,32 @@ +/* +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 . +*/ +package gplx.langs.htmls.styles; import gplx.*; import gplx.langs.*; import gplx.langs.htmls.*; +public class Gfh_style_wkr__ary implements Gfh_style_wkr { + private final List_adp list = List_adp_.new_(); + public boolean On_atr(byte[] src, int atr_idx, int atr_bgn, int atr_end, int key_bgn, int key_end, int val_bgn, int val_end) { + byte[] key = Bry_.Mid(src, key_bgn, key_end); + byte[] val = Bry_.Mid(src, val_bgn, val_end); + list.Add(new Gfh_style_itm(list.Count(), key, val)); + return true; + } + public Gfh_style_itm[] Parse(byte[] src, int src_bgn, int src_end) { + Gfh_style_parser_.Parse(src, src_bgn, src_end, this); + return (Gfh_style_itm[])list.To_ary_and_clear(Gfh_style_itm.class); + } + public static final Gfh_style_wkr__ary Instance = new Gfh_style_wkr__ary(); Gfh_style_wkr__ary() {} +} diff --git a/400_xowa/src/gplx/langs/htmls/parsers/styles/Html_atr_style_wkr__get_val_as_int.java b/400_xowa/src/gplx/langs/htmls/styles/Gfh_style_wkr__val_as_int.java similarity index 80% rename from 400_xowa/src/gplx/langs/htmls/parsers/styles/Html_atr_style_wkr__get_val_as_int.java rename to 400_xowa/src/gplx/langs/htmls/styles/Gfh_style_wkr__val_as_int.java index fb686090a..fa60c68cc 100644 --- a/400_xowa/src/gplx/langs/htmls/parsers/styles/Html_atr_style_wkr__get_val_as_int.java +++ b/400_xowa/src/gplx/langs/htmls/styles/Gfh_style_wkr__val_as_int.java @@ -15,8 +15,8 @@ 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.langs.htmls.parsers.styles; import gplx.*; import gplx.langs.*; import gplx.langs.htmls.*; import gplx.langs.htmls.parsers.*; -public class Html_atr_style_wkr__get_val_as_int implements Html_atr_style_wkr { +package gplx.langs.htmls.styles; import gplx.*; import gplx.langs.*; import gplx.langs.htmls.*; +public class Gfh_style_wkr__val_as_int implements Gfh_style_wkr { private byte[] find_key; private int val_bgn, val_end; public boolean On_atr(byte[] src, int atr_idx, int atr_bgn, int atr_end, int key_bgn, int key_end, int val_bgn, int val_end) { @@ -29,7 +29,7 @@ public class Html_atr_style_wkr__get_val_as_int implements Html_atr_style_wkr { } public int Parse(byte[] src, int src_bgn, int src_end, byte[] find_key) { this.find_key = find_key; - Html_atr_style_parser_.Parse(src, src_bgn, src_end, this); + Gfh_style_parser_.Parse(src, src_bgn, src_end, this); return Bry_.To_int_or__lax(src, val_bgn, val_end, -1); } } \ No newline at end of file diff --git a/400_xowa/src/gplx/langs/jsons/Json_itm_str.java b/400_xowa/src/gplx/langs/jsons/Json_itm_str.java index 386971191..c25e4f7ab 100644 --- a/400_xowa/src/gplx/langs/jsons/Json_itm_str.java +++ b/400_xowa/src/gplx/langs/jsons/Json_itm_str.java @@ -23,7 +23,7 @@ class Json_itm_str extends Json_itm_base { @Override public byte Tid() {return Json_itm_.Tid__str;} @Override public void Print_as_json(Bry_bfr bfr, int depth) { bfr.Add_byte(Byte_ascii.Quote); - gplx.langs.htmls.Html_utl.Escape_html_to_bfr(bfr, doc.Src(), this.Src_bgn(), this.Src_end(), true, true, true, true, false); // false to apos for backwards compatibility + gplx.langs.htmls.Gfh_utl.Escape_html_to_bfr(bfr, doc.Src(), this.Src_bgn(), this.Src_end(), true, true, true, true, false); // false to apos for backwards compatibility bfr.Add_byte(Byte_ascii.Quote); } @Override public Object Data() { diff --git a/400_xowa/src/gplx/xowa/Xoa_app_.java b/400_xowa/src/gplx/xowa/Xoa_app_.java index 4f2634781..e11c28f3c 100644 --- a/400_xowa/src/gplx/xowa/Xoa_app_.java +++ b/400_xowa/src/gplx/xowa/Xoa_app_.java @@ -34,7 +34,7 @@ public class Xoa_app_ { } } public static final String Name = "xowa"; - public static final String Version = "2.12.1.1"; + public static final String Version = "3.1.1.1"; public static String Build_date = "2012-12-30 00:00:00"; public static String Op_sys_str; public static String User_agent = ""; diff --git a/400_xowa/src/gplx/xowa/Xoa_app_fxt.java b/400_xowa/src/gplx/xowa/Xoa_app_fxt.java index dd9fe28e8..6647f14de 100644 --- a/400_xowa/src/gplx/xowa/Xoa_app_fxt.java +++ b/400_xowa/src/gplx/xowa/Xoa_app_fxt.java @@ -39,6 +39,8 @@ public class Xoa_app_fxt { Io_url user_dir = root_dir.GenSubDir_nest("user", "test_user"); Gfo_usr_dlg__log_base.Instance.Log_dir_(user_dir.GenSubDir_nest("tmp", "current")); Xoav_app rv = new Xoav_app(Gfo_usr_dlg_.Test(), Xoa_app_mode.Itm_gui, op_sys, root_dir, root_dir.GenSubDir("file"), root_dir.GenSubDir("css")); + rv.Init_by_app(user_dir); + rv.Wiki_mgr().Add(new Xowv_wiki(rv, Xow_domain_itm_.Bry__home, user_dir)); return rv; } public static Xoae_app app_(String op_sys, Io_url root_dir) { diff --git a/400_xowa/src/gplx/xowa/Xoa_ttl.java b/400_xowa/src/gplx/xowa/Xoa_ttl.java index b5d143013..6c267d522 100644 --- a/400_xowa/src/gplx/xowa/Xoa_ttl.java +++ b/400_xowa/src/gplx/xowa/Xoa_ttl.java @@ -103,7 +103,7 @@ public class Xoa_ttl { // PAGE:en.w:http://en.wikipedia.org/wiki/Help:Link; REF. // $dbkey = preg_replace( '/[ _\xA0\x{1680}\x{180E}\x{2000}-\x{200A}\x{2028}\x{2029}\x{202F}\x{205F}\x{3000}]+/u', '_', $dbkey ); private static final int Char__bidi = 1, Char__ws = 2; private static final Btrie_slim_mgr char_trie = Btrie_slim_mgr.cs() - .Add_many_int(Char__bidi , Bry_.new_ints(0xE2, 0x80, 0x8E), Bry_.new_ints(0xE2, 0x80, 0x8F), Bry_.new_ints(0xE2, 0x80, 0xAA), Bry_.new_ints(0xE2, 0x80, 0xAB), Bry_.new_ints(0xE2, 0x80, 0xAC), Bry_.new_ints(0xE2, 0x80, 0xAD), Bry_.new_ints(0xE2, 0x80, 0xAE)) + .Add_many_int(Char__bidi , Bry_.New_by_ints(0xE2, 0x80, 0x8E), Bry_.New_by_ints(0xE2, 0x80, 0x8F), Bry_.New_by_ints(0xE2, 0x80, 0xAA), Bry_.New_by_ints(0xE2, 0x80, 0xAB), Bry_.New_by_ints(0xE2, 0x80, 0xAC), Bry_.New_by_ints(0xE2, 0x80, 0xAD), Bry_.New_by_ints(0xE2, 0x80, 0xAE)) .Add_many_int(Char__ws , "\u00A0", "\u1680", "\u180E", "\u2000", "\u2001", "\u2002", "\u2003", "\u2004", "\u2005", "\u2006", "\u2007", "\u2008", "\u2009", "\u200A", "\u2028", "\u2029", "\u202F", "\u205F", "\u3000") ; public static Xoa_ttl new_(Xowe_wiki wiki, Gfo_msg_log msg_log, byte[] src, int bgn, int end) { @@ -196,7 +196,10 @@ public class Xoa_ttl { // PAGE:en.w:http://en.wikipedia.org/wiki/Help:Link; REF. colon_count++; // increment colon count break; } - case Byte_ascii.Hash: anch_bgn = (txt_bb_len) + 1; break; // flag last anch_bgn + case Byte_ascii.Hash: + if (anch_bgn == -1) // anchor begins at 1st #, not last #; EX:A#B#C has anchor of "B#C" not "C" PAGE:en.w:Grand_Central_Terminal; DATE:2015-12-31 + anch_bgn = (txt_bb_len) + 1; + break; case Byte_ascii.Slash: if (root_bgn == -1) root_bgn = (txt_bb_len) + 1; diff --git a/400_xowa/src/gplx/xowa/Xoae_page.java b/400_xowa/src/gplx/xowa/Xoae_page.java index b8afbc812..d3c521314 100644 --- a/400_xowa/src/gplx/xowa/Xoae_page.java +++ b/400_xowa/src/gplx/xowa/Xoae_page.java @@ -19,7 +19,7 @@ package gplx.xowa; import gplx.*; import gplx.xowa.langs.*; import gplx.xowa.wikis.pages.*; import gplx.xowa.guis.*; import gplx.xowa.guis.views.*; import gplx.xowa.files.*; import gplx.xowa.files.xfers.*; -import gplx.xowa.parsers.*; import gplx.xowa.parsers.lnkis.redlinks.*; import gplx.xowa.xtns.cite.*; import gplx.xowa.xtns.wdatas.*; import gplx.xowa.xtns.wdatas.pfuncs.*; +import gplx.xowa.parsers.*; import gplx.xowa.parsers.lnkis.redlinks.*; import gplx.xowa.xtns.cites.*; import gplx.xowa.xtns.wdatas.*; import gplx.xowa.xtns.wdatas.pfuncs.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.htmls.*; import gplx.xowa.htmls.tocs.*; import gplx.xowa.htmls.modules.popups.*; public class Xoae_page implements Xoa_page { Xoae_page(Xowe_wiki wiki, Xoa_ttl ttl) { diff --git a/400_xowa/src/gplx/xowa/Xop_fxt.java b/400_xowa/src/gplx/xowa/Xop_fxt.java index af7e1fe7a..b23c0a578 100644 --- a/400_xowa/src/gplx/xowa/Xop_fxt.java +++ b/400_xowa/src/gplx/xowa/Xop_fxt.java @@ -64,6 +64,7 @@ public class Xop_fxt { ctx.Clear_all(); ctx.App().Free_mem(false); ctx.Cur_page().Clear_all(); + wiki.File_mgr().Clear_for_tests(); wiki.Db_mgr().Load_mgr().Clear(); app.Wiki_mgr().Clear(); Io_mgr.Instance.InitEngine_mem(); // clear created pages @@ -221,6 +222,8 @@ public class Xop_fxt { public byte[] Test_parse_tmpl_str_rv(String raw) { byte[] raw_bry = Bry_.new_u8(raw); Xop_root_tkn root = tkn_mkr.Root(raw_bry); + ctx.Cur_page().Root_(root); + ctx.Cur_page().Data_raw_(raw_bry); return parser.Parse_text_to_wtxt(root, ctx, tkn_mkr, raw_bry); } public Xot_defn_tmpl run_Parse_tmpl(byte[] name, byte[] raw) {return parser.Parse_text_to_defn_obj(ctx, ctx.Tkn_mkr(), wiki.Ns_mgr().Ns_template(), name, raw);} @@ -358,7 +361,7 @@ public class Xop_fxt { wiki.Appe().Usere().Wiki().Xwiki_mgr().Add_by_atrs(domain_bry, domain_bry); } public static String html_img_none(String trg, String alt, String src, String ttl) { - return String_.Format(String_.Concat_lines_nl_skip_last("\"{1}\""), trg, alt, src, ttl); + return String_.Format(String_.Concat_lines_nl_skip_last("\"{1}\""), trg, alt, src, ttl); } private String Exec_html_full(String raw) {return this.Exec_parse_page_all_as_str(raw);} private String Exec_html_wiki(String raw) {return this.Exec_parse_page_wiki_as_str(raw);} @@ -369,7 +372,7 @@ public class Xop_fxt { public void Test_html_full_frag_n(String raw, String... expd_frags) {Test_str_part_n(Exec_html_full(raw), expd_frags);} public void Test__parse__wtxt_to_html(String raw, String expd) { String actl = Exec_html_wiki(raw); - Tfds.Eq_str_lines(gplx.langs.htmls.Html_utl.Replace_apos(expd), actl, raw); + Tfds.Eq_str_lines(gplx.langs.htmls.Gfh_utl.Replace_apos(expd), actl, raw); } public void Test_str_full(String raw, String expd, String actl) {Tfds.Eq_str_lines(expd, actl, raw);} @@ -436,6 +439,7 @@ public class Xop_fxt { html_wtr.Cfg().Toc__show_(Bool_.Y); // needed for hdr to show ctx.Cur_page().Redlink_lnki_list().Clear(); html_wtr.Write_all(tmp_bfr, ctx, hctx, src_bry, root); + // Tfds.Dbg(tmp_bfr.To_str()); return tmp_bfr.To_str_and_clear(); } } diff --git a/400_xowa/src/gplx/xowa/apps/fsys/Xoa_fsys_eval.java b/400_xowa/src/gplx/xowa/apps/fsys/Xoa_fsys_eval.java index 1430a6254..d4b393766 100644 --- a/400_xowa/src/gplx/xowa/apps/fsys/Xoa_fsys_eval.java +++ b/400_xowa/src/gplx/xowa/apps/fsys/Xoa_fsys_eval.java @@ -26,18 +26,18 @@ public class Xoa_fsys_eval implements Bry_fmtr_eval_mgr { Object o = hash.Get_by_bry(cmd); if (o == null) return null; byte val = ((Byte_obj_val)o).Val(); switch (val) { - case Tid_xowa_root_dir: return app_fsys_mgr.Root_dir().RawBry(); - case Tid_bin_plat_dir: return app_fsys_mgr.Bin_plat_dir().RawBry(); - case Tid_user_temp_dir: return usr_fsys_mgr.App_temp_dir().RawBry(); - case Tid_user_cfg_dir: return usr_fsys_mgr.App_data_cfg_dir().RawBry(); + case Tid__xowa_root_dir: return app_fsys_mgr.Root_dir().RawBry(); + case Tid__bin_plat_dir: return app_fsys_mgr.Bin_plat_dir().RawBry(); + case Tid__user_temp_dir: return usr_fsys_mgr.App_temp_dir().RawBry(); + case Tid__user_cfg_dir: return usr_fsys_mgr.App_data_cfg_dir().RawBry(); default: throw Err_.new_unhandled(val); } } - private static final byte Tid_bin_plat_dir = 0, Tid_user_temp_dir = 1, Tid_xowa_root_dir = 2, Tid_user_cfg_dir = 3; + private static final byte Tid__bin_plat_dir = 0, Tid__user_temp_dir = 1, Tid__xowa_root_dir = 2, Tid__user_cfg_dir = 3; private static final Hash_adp_bry hash = Hash_adp_bry.ci_a7() - .Add_str_byte("bin_plat_dir" , Tid_bin_plat_dir) - .Add_str_byte("user_temp_dir" , Tid_user_temp_dir) - .Add_str_byte("xowa_root_dir" , Tid_xowa_root_dir) - .Add_str_byte("user_cfg_dir" , Tid_user_cfg_dir) + .Add_str_byte("bin_plat_dir" , Tid__bin_plat_dir) + .Add_str_byte("user_temp_dir" , Tid__user_temp_dir) + .Add_str_byte("xowa_root_dir" , Tid__xowa_root_dir) + .Add_str_byte("user_cfg_dir" , Tid__user_cfg_dir) ; } diff --git a/400_xowa/src/gplx/xowa/apps/progs/Xoa_prog_mgr.java b/400_xowa/src/gplx/xowa/apps/progs/Xoa_prog_mgr.java index 263171872..90028d115 100644 --- a/400_xowa/src/gplx/xowa/apps/progs/Xoa_prog_mgr.java +++ b/400_xowa/src/gplx/xowa/apps/progs/Xoa_prog_mgr.java @@ -25,17 +25,17 @@ public class Xoa_prog_mgr implements GfoInvkAble { Process_adp.ini_(this, usr_dlg, app_convert_svg_to_png , cmd_eval, Process_adp.Run_mode_sync_timeout , 10 * 60, "~{<>bin_plat_dir<>}inkscape\\inkscape", "-z -w ~{width} -f \"~{source}\" -e \"~{target}\"", "source", "target", "width").Thread_kill_name_("inkscape.exe"); // // -z=without-gui; -w=width; -f=file -e=export-png Process_adp.ini_(this, usr_dlg, app_convert_tex_to_dvi , cmd_eval, Process_adp.Run_mode_sync_timeout , 2 * 60, "~{<>bin_plat_dir<>}miktex\\miktex\\bin\\latex", "-quiet -output-directory=~{temp_dir} -job-name=xowa_temp ~{tex_file}", "tex_file", "temp_dir"); Process_adp.ini_(this, usr_dlg, app_convert_dvi_to_png , cmd_eval, Process_adp.Run_mode_sync_timeout , 2 * 60, "~{<>bin_plat_dir<>}miktex\\miktex\\bin\\dvipng", "~{dvi_file} -o ~{png_file} -q* -T tight -bg Transparent", "dvi_file", "png_file", "temp_dir"); - Process_adp.ini_(this, usr_dlg, app_convert_djvu_to_tiff , cmd_eval, Process_adp.Run_mode_sync_timeout , 1 * 60, "~{<>bin_plat_dir<>}djvulibre\\ddjvu", "-format=tiff -page=1 \"~{source}\" \"~{target}\"", "source", "target"); + Process_adp.ini_(this, usr_dlg, app_convert_djvu_to_tiff , cmd_eval, Process_adp.Run_mode_sync_timeout , 1 * 60, "~{<>bin_plat_dir<>}djvulibre\\ddjvu", "-format=tiff -page=1 \"~{source}\" \"~{target}\"", "source", "target"); Process_adp.ini_(this, usr_dlg, app_decompress_bz2 , cmd_eval, Process_adp.Run_mode_sync_timeout , 0 , "~{<>bin_plat_dir<>}7-zip\\7za", "x -y \"~{src}\" -o\"~{trg_dir}\"", "src", "trg", "trg_dir"); // x=extract; -y=yes on all queries; -o=output_dir - Process_adp.ini_(this, usr_dlg, app_decompress_bz2_by_stdout , cmd_eval, Process_adp.Run_mode_sync_timeout , 0 , "~{<>bin_plat_dir<>}7-zip\\7za", "x -so \"~{src}\"", "src"); // x=extract; -so=stdout + Process_adp.ini_(this, usr_dlg, app_decompress_bz2_by_stdout, cmd_eval, Process_adp.Run_mode_sync_timeout , 0 , "~{<>bin_plat_dir<>}7-zip\\7za", "x -so \"~{src}\"", "src"); // x=extract; -so=stdout Process_adp.ini_(this, usr_dlg, app_decompress_zip , cmd_eval, Process_adp.Run_mode_sync_timeout , 0 , "~{<>bin_plat_dir<>}7-zip\\7za", "x -y \"~{src}\" -o\"~{trg_dir}\"", "src", "trg", "trg_dir"); // x=extract; -y=yes on all queries; -o=output_dir Process_adp.ini_(this, usr_dlg, app_decompress_gz , cmd_eval, Process_adp.Run_mode_sync_timeout , 0 , "~{<>bin_plat_dir<>}7-zip\\7za", "x -y \"~{src}\" -o\"~{trg_dir}\"", "src", "trg", "trg_dir"); // x=extract; -y=yes on all queries; -o=output_dir Process_adp.ini_(this, usr_dlg, app_lua , cmd_eval, Process_adp.Run_mode_async , 0 , "~{<>bin_plat_dir<>}lua\\lua", "", ""); - Process_adp.ini_(this, usr_dlg, app_lilypond , cmd_eval, Process_adp.Run_mode_sync_timeout , 1 * 60, "~{<>bin_plat_dir<>}lilypond\\usr\\bin\\lilypond.exe", "\"-dsafe=#t\" -dbackend=ps --png --header=texidoc -dmidi-extension=midi \"~{file}\"", "file"); + Process_adp.ini_(this, usr_dlg, app_lilypond , cmd_eval, Process_adp.Run_mode_sync_timeout , 1 * 60, "~{<>bin_plat_dir<>}lilypond\\usr\\bin\\lilypond.exe", "\"-dsafe=#t\" -dbackend=ps --png --header=texidoc -dmidi-extension=midi \"~{file}\"", "file"); Process_adp.ini_(this, usr_dlg, app_abc2ly , cmd_eval, Process_adp.Run_mode_sync_timeout , 1 * 60, "~{<>bin_plat_dir<>}lilypond\\usr\\bin\\python.exe", "abc2ly.py -s \"--output=~{target}\" \"~{source}\"", "source", "target"); - Process_adp.ini_(this, usr_dlg, app_trim_img , cmd_eval, Process_adp.Run_mode_sync_timeout , 1 * 60, "~{<>bin_plat_dir<>}imagemagick\\convert", "-trim \"~{source}\" \"~{target}\"", "source", "target"); + Process_adp.ini_(this, usr_dlg, app_trim_img , cmd_eval, Process_adp.Run_mode_sync_timeout , 1 * 60, "~{<>bin_plat_dir<>}imagemagick\\convert", "-trim \"~{source}\" \"~{target}\"", "source", "target"); Process_adp.ini_(this, usr_dlg, app_convert_midi_to_ogg , cmd_eval, Process_adp.Run_mode_sync_timeout , 1 * 60, "~{<>bin_plat_dir<>}timidity\\timidity", "-Ov \"--output-file=~{target}\" \"~{source}\"", "source", "target"); - Process_adp.ini_(this, usr_dlg, app_view_web , cmd_eval, Process_adp.Run_mode_async , 0 , "cmd", "/c start \"~{url}\"", "url"); + Process_adp.ini_(this, usr_dlg, app_view_web , cmd_eval, Process_adp.Run_mode_async , 0 , "cmd", "/c start \"~{url}\"", "url"); Process_adp.ini_(this, usr_dlg, app_view_text , cmd_eval, Process_adp.Run_mode_async , 0 , "cmd", "/c start \"~{url}\"", "url"); int cmds_view_file_by_ext_len = cmds_view_file_by_ext.length; for (int i= 0; i < cmds_view_file_by_ext_len; i++) { @@ -56,11 +56,11 @@ public class Xoa_prog_mgr implements GfoInvkAble { public Process_adp App_decompress_zip() {return app_decompress_zip;} private Process_adp app_decompress_zip = new Process_adp(); public Process_adp App_decompress_gz() {return app_decompress_gz;} private Process_adp app_decompress_gz = new Process_adp(); public Process_adp App_decompress_bz2_by_stdout() {return app_decompress_bz2_by_stdout;} private Process_adp app_decompress_bz2_by_stdout = new Process_adp(); - public Process_adp App_lua() {return app_lua;} private Process_adp app_lua = new Process_adp(); + public Process_adp App_lua() {return app_lua;} private Process_adp app_lua = new Process_adp(); public Process_adp App_lilypond() {return app_lilypond;} private Process_adp app_lilypond = new Process_adp(); public Process_adp App_abc2ly() {return app_abc2ly;} private Process_adp app_abc2ly = new Process_adp(); public Process_adp App_trim_img() {return app_trim_img;} private Process_adp app_trim_img = new Process_adp(); - public Process_adp App_convert_midi_to_ogg() {return app_convert_midi_to_ogg;} private Process_adp app_convert_midi_to_ogg = new Process_adp(); + public Process_adp App_convert_midi_to_ogg() {return app_convert_midi_to_ogg;} private Process_adp app_convert_midi_to_ogg = new Process_adp(); public Process_adp App_by_ext(String ext) {return App_by_ext_key(String_.Mid(ext, 1));} // ignore 1st . in ext; EX: ".png" -> "png" public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { if (ctx.Match(k, Invk_query_img_size)) return app_query_img_size; diff --git a/400_xowa/src/gplx/xowa/apps/site_cfgs/Xoa_site_cfg_mgr_tst.java b/400_xowa/src/gplx/xowa/apps/site_cfgs/Xoa_site_cfg_mgr_tst.java index 1afeb1d7b..7ac3cdf51 100644 --- a/400_xowa/src/gplx/xowa/apps/site_cfgs/Xoa_site_cfg_mgr_tst.java +++ b/400_xowa/src/gplx/xowa/apps/site_cfgs/Xoa_site_cfg_mgr_tst.java @@ -63,7 +63,7 @@ public class Xoa_site_cfg_mgr_tst { } // @Test public void Print() { // String s = fxt.Make_api(fxt.Make_api_interwikimap("k1", "v1", "k2", "v2"), fxt.Make_api_extensiontags2("k3", "v3", "k4", "v4")); -// Tfds.Write(s); +// Tfds.Dbg(s); // } } class Xoa_site_cfg_mgr_fxt { diff --git a/400_xowa/src/gplx/xowa/bldrs/Xob_cmd_keys.java b/400_xowa/src/gplx/xowa/bldrs/Xob_cmd_keys.java index dd10ba1b5..e184b8b09 100644 --- a/400_xowa/src/gplx/xowa/bldrs/Xob_cmd_keys.java +++ b/400_xowa/src/gplx/xowa/bldrs/Xob_cmd_keys.java @@ -54,6 +54,9 @@ public class Xob_cmd_keys { , Key_wbase_pid = "wbase.pid" // "text.wdata.pid" , Key_wbase_db = "wbase.db" // "wiki.wdata_db" , Key_site_meta = "util.site_meta" + , Key_diff_build = "diff.build" + , Key_diff_merge = "diff.merge" + , Key_tdb_text_init = "tdb.text.init" // "core.init" , Key_tdb_make_page = "tdb.text.page" // "core.make_page" , Key_tdb_make_id = "core.make_id" diff --git a/400_xowa/src/gplx/xowa/bldrs/cfgs/Xob_wiki_cfg_bldr_tst.java b/400_xowa/src/gplx/xowa/bldrs/cfgs/Xob_wiki_cfg_bldr_tst.java index 847c55643..daa35261f 100644 --- a/400_xowa/src/gplx/xowa/bldrs/cfgs/Xob_wiki_cfg_bldr_tst.java +++ b/400_xowa/src/gplx/xowa/bldrs/cfgs/Xob_wiki_cfg_bldr_tst.java @@ -89,7 +89,7 @@ public class Xob_wiki_cfg_bldr_tst { // String[] terms = String_.Split(line, '|'); // sb.Add(lang_code).Add("|").Add(String_.Trim(terms[0])).Add("|").Add(String_.Trim(terms[1])).Add("\n"); // } -// Tfds.Write(sb.To_str_and_clear()); +// Tfds.Dbg(sb.To_str_and_clear()); // } @Test public void Ns_aliases() { Io_mgr.Instance.InitEngine_mem(); diff --git a/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Uca_trie.java b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Uca_trie.java index 7b59284d2..d3bcd9365 100644 --- a/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Uca_trie.java +++ b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Uca_trie.java @@ -20,1030 +20,1030 @@ import gplx.core.btries.*; class Uca_trie { private final Btrie_slim_mgr trie = Btrie_slim_mgr.cs(); public void Init() { -Init_itm(1, Bry_.new_ints(1,1)); -Init_itm(2, Bry_.new_ints(1,1)); -Init_itm(3, Bry_.new_ints(1,1)); -Init_itm(4, Bry_.new_ints(1,1)); -Init_itm(5, Bry_.new_ints(1,1)); -Init_itm(6, Bry_.new_ints(1,1)); -Init_itm(7, Bry_.new_ints(1,1)); -Init_itm(8, Bry_.new_ints(1,1)); -Init_itm(9, Bry_.new_ints(3,64,1,5,1,5)); -Init_itm(10, Bry_.new_ints(3,66,1,5,1,5)); -Init_itm(11, Bry_.new_ints(3,68,1,5,1,5)); -Init_itm(12, Bry_.new_ints(3,70,1,5,1,5)); -Init_itm(13, Bry_.new_ints(3,72,1,5,1,5)); -Init_itm(14, Bry_.new_ints(1,1)); -Init_itm(15, Bry_.new_ints(1,1)); -Init_itm(16, Bry_.new_ints(1,1)); -Init_itm(17, Bry_.new_ints(1,1)); -Init_itm(18, Bry_.new_ints(1,1)); -Init_itm(19, Bry_.new_ints(1,1)); -Init_itm(20, Bry_.new_ints(1,1)); -Init_itm(21, Bry_.new_ints(1,1)); -Init_itm(22, Bry_.new_ints(1,1)); -Init_itm(23, Bry_.new_ints(1,1)); -Init_itm(24, Bry_.new_ints(1,1)); -Init_itm(25, Bry_.new_ints(1,1)); -Init_itm(26, Bry_.new_ints(1,1)); -Init_itm(27, Bry_.new_ints(1,1)); -Init_itm(28, Bry_.new_ints(1,1)); -Init_itm(29, Bry_.new_ints(1,1)); -Init_itm(30, Bry_.new_ints(1,1)); -Init_itm(31, Bry_.new_ints(1,1)); -Init_itm(32, Bry_.new_ints(4,1,5,1,5)); -Init_itm(33, Bry_.new_ints(8,129,1,5,1,5)); -Init_itm(34, Bry_.new_ints(10,161,1,5,1,5)); -Init_itm(35, Bry_.new_ints(11,177,1,5,1,5)); -Init_itm(36, Bry_.new_ints(15,14,1,5,1,5)); -Init_itm(37, Bry_.new_ints(11,179,1,5,1,5)); -Init_itm(38, Bry_.new_ints(11,173,1,5,1,5)); -Init_itm(39, Bry_.new_ints(10,147,1,5,1,5)); -Init_itm(40, Bry_.new_ints(10,181,1,5,1,5)); -Init_itm(41, Bry_.new_ints(10,183,1,5,1,5)); -Init_itm(42, Bry_.new_ints(11,159,1,5,1,5)); -Init_itm(43, Bry_.new_ints(13,95,1,5,1,5)); -Init_itm(44, Bry_.new_ints(7,1,5,1,5)); -Init_itm(45, Bry_.new_ints(6,70,1,5,1,5)); -Init_itm(46, Bry_.new_ints(9,1,5,1,5)); -Init_itm(47, Bry_.new_ints(11,169,1,5,1,5)); -Init_itm(48, Bry_.new_ints(18,1,5,1,5)); -Init_itm(49, Bry_.new_ints(20,1,5,1,5)); -Init_itm(50, Bry_.new_ints(22,1,5,1,5)); -Init_itm(51, Bry_.new_ints(24,1,5,1,5)); -Init_itm(52, Bry_.new_ints(26,1,5,1,5)); -Init_itm(53, Bry_.new_ints(28,1,5,1,5)); -Init_itm(54, Bry_.new_ints(30,1,5,1,5)); -Init_itm(55, Bry_.new_ints(32,1,5,1,5)); -Init_itm(56, Bry_.new_ints(34,1,5,1,5)); -Init_itm(57, Bry_.new_ints(36,1,5,1,5)); -Init_itm(58, Bry_.new_ints(8,97,1,5,1,5)); -Init_itm(59, Bry_.new_ints(8,88,1,5,1,5)); -Init_itm(60, Bry_.new_ints(13,103,1,5,1,5)); -Init_itm(61, Bry_.new_ints(13,105,1,5,1,5)); -Init_itm(62, Bry_.new_ints(13,107,1,5,1,5)); -Init_itm(63, Bry_.new_ints(8,136,1,5,1,5)); -Init_itm(64, Bry_.new_ints(11,157,1,5,1,5)); -Init_itm(65, Bry_.new_ints(39,1,5,1,143)); -Init_itm(66, Bry_.new_ints(41,1,5,1,143)); -Init_itm(67, Bry_.new_ints(43,1,5,1,143)); -Init_itm(68, Bry_.new_ints(45,1,5,1,143)); -Init_itm(69, Bry_.new_ints(47,1,5,1,143)); -Init_itm(70, Bry_.new_ints(49,1,5,1,143)); -Init_itm(71, Bry_.new_ints(51,1,5,1,143)); -Init_itm(72, Bry_.new_ints(53,1,5,1,143)); -Init_itm(73, Bry_.new_ints(55,1,5,1,143)); -Init_itm(74, Bry_.new_ints(57,1,5,1,143)); -Init_itm(75, Bry_.new_ints(59,1,5,1,143)); -Init_itm(76, Bry_.new_ints(61,1,5,1,143)); -Init_itm(77, Bry_.new_ints(63,1,5,1,143)); -Init_itm(78, Bry_.new_ints(65,1,5,1,143)); -Init_itm(79, Bry_.new_ints(67,1,5,1,143)); -Init_itm(80, Bry_.new_ints(69,1,5,1,143)); -Init_itm(81, Bry_.new_ints(71,1,5,1,143)); -Init_itm(82, Bry_.new_ints(73,1,5,1,143)); -Init_itm(83, Bry_.new_ints(75,1,5,1,143)); -Init_itm(84, Bry_.new_ints(77,1,5,1,143)); -Init_itm(85, Bry_.new_ints(79,1,5,1,143)); -Init_itm(86, Bry_.new_ints(81,1,5,1,143)); -Init_itm(87, Bry_.new_ints(83,1,5,1,143)); -Init_itm(88, Bry_.new_ints(85,1,5,1,143)); -Init_itm(89, Bry_.new_ints(87,1,5,1,143)); -Init_itm(90, Bry_.new_ints(89,1,5,1,143)); -Init_itm(91, Bry_.new_ints(10,185,1,5,1,5)); -Init_itm(92, Bry_.new_ints(11,171,1,5,1,5)); -Init_itm(93, Bry_.new_ints(10,187,1,5,1,5)); -Init_itm(94, Bry_.new_ints(13,15,1,5,1,5)); -Init_itm(95, Bry_.new_ints(6,66,1,5,1,5)); -Init_itm(96, Bry_.new_ints(13,10,1,5,1,5)); -Init_itm(97, Bry_.new_ints(39,1,5,1,5)); -Init_itm(98, Bry_.new_ints(41,1,5,1,5)); -Init_itm(99, Bry_.new_ints(43,1,5,1,5)); -Init_itm(100, Bry_.new_ints(45,1,5,1,5)); -Init_itm(101, Bry_.new_ints(47,1,5,1,5)); -Init_itm(102, Bry_.new_ints(49,1,5,1,5)); -Init_itm(103, Bry_.new_ints(51,1,5,1,5)); -Init_itm(104, Bry_.new_ints(53,1,5,1,5)); -Init_itm(105, Bry_.new_ints(55,1,5,1,5)); -Init_itm(106, Bry_.new_ints(57,1,5,1,5)); -Init_itm(107, Bry_.new_ints(59,1,5,1,5)); -Init_itm(108, Bry_.new_ints(61,1,5,1,5)); -Init_itm(109, Bry_.new_ints(63,1,5,1,5)); -Init_itm(110, Bry_.new_ints(65,1,5,1,5)); -Init_itm(111, Bry_.new_ints(67,1,5,1,5)); -Init_itm(112, Bry_.new_ints(69,1,5,1,5)); -Init_itm(113, Bry_.new_ints(71,1,5,1,5)); -Init_itm(114, Bry_.new_ints(73,1,5,1,5)); -Init_itm(115, Bry_.new_ints(75,1,5,1,5)); -Init_itm(116, Bry_.new_ints(77,1,5,1,5)); -Init_itm(117, Bry_.new_ints(79,1,5,1,5)); -Init_itm(118, Bry_.new_ints(81,1,5,1,5)); -Init_itm(119, Bry_.new_ints(83,1,5,1,5)); -Init_itm(120, Bry_.new_ints(85,1,5,1,5)); -Init_itm(121, Bry_.new_ints(87,1,5,1,5)); -Init_itm(122, Bry_.new_ints(89,1,5,1,5)); -Init_itm(123, Bry_.new_ints(10,189,1,5,1,5)); -Init_itm(124, Bry_.new_ints(13,111,1,5,1,5)); -Init_itm(125, Bry_.new_ints(10,191,1,5,1,5)); -Init_itm(126, Bry_.new_ints(13,115,1,5,1,5)); -Init_itm(127, Bry_.new_ints(1,1)); -Init_itm(128, Bry_.new_ints(1,1)); -Init_itm(129, Bry_.new_ints(1,1)); -Init_itm(130, Bry_.new_ints(1,1)); -Init_itm(131, Bry_.new_ints(1,1)); -Init_itm(132, Bry_.new_ints(1,1)); -Init_itm(133, Bry_.new_ints(3,74,1,5,1,5)); -Init_itm(134, Bry_.new_ints(1,1)); -Init_itm(135, Bry_.new_ints(1,1)); -Init_itm(136, Bry_.new_ints(1,1)); -Init_itm(137, Bry_.new_ints(1,1)); -Init_itm(138, Bry_.new_ints(1,1)); -Init_itm(139, Bry_.new_ints(1,1)); -Init_itm(140, Bry_.new_ints(1,1)); -Init_itm(141, Bry_.new_ints(1,1)); -Init_itm(142, Bry_.new_ints(1,1)); -Init_itm(143, Bry_.new_ints(1,1)); -Init_itm(144, Bry_.new_ints(1,1)); -Init_itm(145, Bry_.new_ints(1,1)); -Init_itm(146, Bry_.new_ints(1,1)); -Init_itm(147, Bry_.new_ints(1,1)); -Init_itm(148, Bry_.new_ints(1,1)); -Init_itm(149, Bry_.new_ints(1,1)); -Init_itm(150, Bry_.new_ints(1,1)); -Init_itm(151, Bry_.new_ints(1,1)); -Init_itm(152, Bry_.new_ints(1,1)); -Init_itm(153, Bry_.new_ints(1,1)); -Init_itm(154, Bry_.new_ints(1,1)); -Init_itm(155, Bry_.new_ints(1,1)); -Init_itm(156, Bry_.new_ints(1,1)); -Init_itm(157, Bry_.new_ints(1,1)); -Init_itm(158, Bry_.new_ints(1,1)); -Init_itm(159, Bry_.new_ints(1,1)); -Init_itm(160, Bry_.new_ints(4,1,5,1,181)); -Init_itm(161, Bry_.new_ints(8,131,1,5,1,5)); -Init_itm(162, Bry_.new_ints(15,12,1,5,1,5)); -Init_itm(163, Bry_.new_ints(15,16,1,5,1,5)); -Init_itm(164, Bry_.new_ints(15,10,1,5,1,5)); -Init_itm(165, Bry_.new_ints(15,18,1,5,1,5)); -Init_itm(166, Bry_.new_ints(13,113,1,5,1,5)); -Init_itm(167, Bry_.new_ints(11,149,1,5,1,5)); -Init_itm(168, Bry_.new_ints(13,20,1,5,1,5)); -Init_itm(169, Bry_.new_ints(13,86,1,5,1,5)); -Init_itm(170, Bry_.new_ints(39,1,5,1,167)); -Init_itm(171, Bry_.new_ints(10,177,1,5,1,5)); -Init_itm(172, Bry_.new_ints(13,109,1,5,1,5)); -Init_itm(173, Bry_.new_ints(1,1)); -Init_itm(174, Bry_.new_ints(13,88,1,5,1,5)); -Init_itm(175, Bry_.new_ints(13,17,1,5,1,5)); -Init_itm(176, Bry_.new_ints(13,79,1,5,1,5)); -Init_itm(177, Bry_.new_ints(13,97,1,5,1,5)); -Init_itm(178, Bry_.new_ints(22,1,5,1,167)); -Init_itm(179, Bry_.new_ints(24,1,5,1,167)); -Init_itm(180, Bry_.new_ints(13,12,1,5,1,5)); -Init_itm(181, Bry_.new_ints(91,46,1,5,1,137)); -Init_itm(182, Bry_.new_ints(11,153,1,5,1,5)); -Init_itm(183, Bry_.new_ints(10,78,1,5,1,5)); -Init_itm(184, Bry_.new_ints(13,23,1,5,1,5)); -Init_itm(185, Bry_.new_ints(20,1,5,1,167)); -Init_itm(186, Bry_.new_ints(67,1,5,1,167)); -Init_itm(187, Bry_.new_ints(10,179,1,5,1,5)); -Init_itm(188, Bry_.new_ints(20,13,117,44,26,1,7,1,187,187,189)); -Init_itm(189, Bry_.new_ints(20,13,117,44,22,1,7,1,187,187,189)); -Init_itm(190, Bry_.new_ints(24,13,117,44,26,1,7,1,187,187,189)); -Init_itm(191, Bry_.new_ints(8,138,1,5,1,5)); -Init_itm(192, Bry_.new_ints(39,1,134,143,1,143,5)); -Init_itm(193, Bry_.new_ints(39,1,134,141,1,143,5)); -Init_itm(194, Bry_.new_ints(39,1,134,147,1,143,5)); -Init_itm(195, Bry_.new_ints(39,1,134,161,1,143,5)); -Init_itm(196, Bry_.new_ints(39,1,134,157,1,143,5)); -Init_itm(197, Bry_.new_ints(39,1,134,153,1,143,5)); -Init_itm(198, Bry_.new_ints(39,47,1,134,219,169,5,1,147,137,189)); -Init_itm(199, Bry_.new_ints(43,1,134,167,1,143,5)); -Init_itm(200, Bry_.new_ints(47,1,134,143,1,143,5)); -Init_itm(201, Bry_.new_ints(47,1,134,141,1,143,5)); -Init_itm(202, Bry_.new_ints(47,1,134,147,1,143,5)); -Init_itm(203, Bry_.new_ints(47,1,134,157,1,143,5)); -Init_itm(204, Bry_.new_ints(55,1,134,143,1,143,5)); -Init_itm(205, Bry_.new_ints(55,1,134,141,1,143,5)); -Init_itm(206, Bry_.new_ints(55,1,134,147,1,143,5)); -Init_itm(207, Bry_.new_ints(55,1,134,157,1,143,5)); -Init_itm(208, Bry_.new_ints(45,1,134,219,169,1,147,137)); -Init_itm(209, Bry_.new_ints(65,1,134,161,1,143,5)); -Init_itm(210, Bry_.new_ints(67,1,134,143,1,143,5)); -Init_itm(211, Bry_.new_ints(67,1,134,141,1,143,5)); -Init_itm(212, Bry_.new_ints(67,1,134,147,1,143,5)); -Init_itm(213, Bry_.new_ints(67,1,134,161,1,143,5)); -Init_itm(214, Bry_.new_ints(67,1,134,157,1,143,5)); -Init_itm(215, Bry_.new_ints(13,101,1,5,1,5)); -Init_itm(216, Bry_.new_ints(67,1,134,165,1,143,5)); -Init_itm(217, Bry_.new_ints(79,1,134,143,1,143,5)); -Init_itm(218, Bry_.new_ints(79,1,134,141,1,143,5)); -Init_itm(219, Bry_.new_ints(79,1,134,147,1,143,5)); -Init_itm(220, Bry_.new_ints(79,1,134,157,1,143,5)); -Init_itm(221, Bry_.new_ints(87,1,134,141,1,143,5)); -Init_itm(222, Bry_.new_ints(90,96,1,5,1,143)); -Init_itm(223, Bry_.new_ints(75,75,1,134,219,169,5,1,137,137,189)); -Init_itm(224, Bry_.new_ints(39,1,134,143,1,6)); -Init_itm(225, Bry_.new_ints(39,1,134,141,1,6)); -Init_itm(226, Bry_.new_ints(39,1,134,147,1,6)); -Init_itm(227, Bry_.new_ints(39,1,134,161,1,6)); -Init_itm(228, Bry_.new_ints(39,1,134,157,1,6)); -Init_itm(229, Bry_.new_ints(39,1,134,153,1,6)); -Init_itm(230, Bry_.new_ints(39,47,1,134,219,169,5,1,137,137,189)); -Init_itm(231, Bry_.new_ints(43,1,134,167,1,6)); -Init_itm(232, Bry_.new_ints(47,1,134,143,1,6)); -Init_itm(233, Bry_.new_ints(47,1,134,141,1,6)); -Init_itm(234, Bry_.new_ints(47,1,134,147,1,6)); -Init_itm(235, Bry_.new_ints(47,1,134,157,1,6)); -Init_itm(236, Bry_.new_ints(55,1,134,143,1,6)); -Init_itm(237, Bry_.new_ints(55,1,134,141,1,6)); -Init_itm(238, Bry_.new_ints(55,1,134,147,1,6)); -Init_itm(239, Bry_.new_ints(55,1,134,157,1,6)); -Init_itm(240, Bry_.new_ints(45,1,134,219,169,1,137,137)); -Init_itm(241, Bry_.new_ints(65,1,134,161,1,6)); -Init_itm(242, Bry_.new_ints(67,1,134,143,1,6)); -Init_itm(243, Bry_.new_ints(67,1,134,141,1,6)); -Init_itm(244, Bry_.new_ints(67,1,134,147,1,6)); -Init_itm(245, Bry_.new_ints(67,1,134,161,1,6)); -Init_itm(246, Bry_.new_ints(67,1,134,157,1,6)); -Init_itm(247, Bry_.new_ints(13,99,1,5,1,5)); -Init_itm(248, Bry_.new_ints(67,1,134,165,1,6)); -Init_itm(249, Bry_.new_ints(79,1,134,143,1,6)); -Init_itm(250, Bry_.new_ints(79,1,134,141,1,6)); -Init_itm(251, Bry_.new_ints(79,1,134,147,1,6)); -Init_itm(252, Bry_.new_ints(79,1,134,157,1,6)); -Init_itm(253, Bry_.new_ints(87,1,134,141,1,6)); -Init_itm(254, Bry_.new_ints(90,96,1,5,1,5)); -Init_itm(255, Bry_.new_ints(87,1,134,157,1,6)); -Init_itm(256, Bry_.new_ints(39,1,134,171,1,143,5)); -Init_itm(257, Bry_.new_ints(39,1,134,171,1,6)); -Init_itm(258, Bry_.new_ints(39,1,134,145,1,143,5)); -Init_itm(259, Bry_.new_ints(39,1,134,145,1,6)); -Init_itm(260, Bry_.new_ints(39,1,134,169,1,143,5)); -Init_itm(261, Bry_.new_ints(39,1,134,169,1,6)); -Init_itm(262, Bry_.new_ints(43,1,134,141,1,143,5)); -Init_itm(263, Bry_.new_ints(43,1,134,141,1,6)); -Init_itm(264, Bry_.new_ints(43,1,134,147,1,143,5)); -Init_itm(265, Bry_.new_ints(43,1,134,147,1,6)); -Init_itm(266, Bry_.new_ints(43,1,134,163,1,143,5)); -Init_itm(267, Bry_.new_ints(43,1,134,163,1,6)); -Init_itm(268, Bry_.new_ints(43,1,134,151,1,143,5)); -Init_itm(269, Bry_.new_ints(43,1,134,151,1,6)); -Init_itm(270, Bry_.new_ints(45,1,134,151,1,143,5)); -Init_itm(271, Bry_.new_ints(45,1,134,151,1,6)); -Init_itm(272, Bry_.new_ints(45,1,134,208,61,1,143,5)); -Init_itm(273, Bry_.new_ints(45,1,134,208,61,1,6)); -Init_itm(274, Bry_.new_ints(47,1,134,171,1,143,5)); -Init_itm(275, Bry_.new_ints(47,1,134,171,1,6)); -Init_itm(276, Bry_.new_ints(47,1,134,145,1,143,5)); -Init_itm(277, Bry_.new_ints(47,1,134,145,1,6)); -Init_itm(278, Bry_.new_ints(47,1,134,163,1,143,5)); -Init_itm(279, Bry_.new_ints(47,1,134,163,1,6)); -Init_itm(280, Bry_.new_ints(47,1,134,169,1,143,5)); -Init_itm(281, Bry_.new_ints(47,1,134,169,1,6)); -Init_itm(282, Bry_.new_ints(47,1,134,151,1,143,5)); -Init_itm(283, Bry_.new_ints(47,1,134,151,1,6)); -Init_itm(284, Bry_.new_ints(51,1,134,147,1,143,5)); -Init_itm(285, Bry_.new_ints(51,1,134,147,1,6)); -Init_itm(286, Bry_.new_ints(51,1,134,145,1,143,5)); -Init_itm(287, Bry_.new_ints(51,1,134,145,1,6)); -Init_itm(288, Bry_.new_ints(51,1,134,163,1,143,5)); -Init_itm(289, Bry_.new_ints(51,1,134,163,1,6)); -Init_itm(290, Bry_.new_ints(51,1,134,167,1,143,5)); -Init_itm(291, Bry_.new_ints(51,1,134,167,1,6)); -Init_itm(292, Bry_.new_ints(53,1,134,147,1,143,5)); -Init_itm(293, Bry_.new_ints(53,1,134,147,1,6)); -Init_itm(294, Bry_.new_ints(53,1,134,208,61,1,143,5)); -Init_itm(295, Bry_.new_ints(53,1,134,208,61,1,6)); -Init_itm(296, Bry_.new_ints(55,1,134,161,1,143,5)); -Init_itm(297, Bry_.new_ints(55,1,134,161,1,6)); -Init_itm(298, Bry_.new_ints(55,1,134,171,1,143,5)); -Init_itm(299, Bry_.new_ints(55,1,134,171,1,6)); -Init_itm(300, Bry_.new_ints(55,1,134,145,1,143,5)); -Init_itm(301, Bry_.new_ints(55,1,134,145,1,6)); -Init_itm(302, Bry_.new_ints(55,1,134,169,1,143,5)); -Init_itm(303, Bry_.new_ints(55,1,134,169,1,6)); -Init_itm(304, Bry_.new_ints(55,1,134,163,1,143,5)); -Init_itm(305, Bry_.new_ints(56,64,1,5,1,5)); -Init_itm(306, Bry_.new_ints(55,57,1,6,1,147,147)); -Init_itm(307, Bry_.new_ints(55,57,1,6,1,137,137)); -Init_itm(308, Bry_.new_ints(57,1,134,147,1,143,5)); -Init_itm(309, Bry_.new_ints(57,1,134,147,1,6)); -Init_itm(310, Bry_.new_ints(59,1,134,167,1,143,5)); -Init_itm(311, Bry_.new_ints(59,1,134,167,1,6)); -Init_itm(312, Bry_.new_ints(72,72,1,5,1,5)); -Init_itm(313, Bry_.new_ints(61,1,134,141,1,143,5)); -Init_itm(314, Bry_.new_ints(61,1,134,141,1,6)); -Init_itm(315, Bry_.new_ints(61,1,134,167,1,143,5)); -Init_itm(316, Bry_.new_ints(61,1,134,167,1,6)); -Init_itm(317, Bry_.new_ints(61,1,134,151,1,143,5)); -Init_itm(318, Bry_.new_ints(61,1,134,151,1,6)); -Init_itm(319, Bry_.new_ints(61,1,134,219,169,1,143,5)); -Init_itm(320, Bry_.new_ints(61,1,134,219,169,1,6)); -Init_itm(321, Bry_.new_ints(61,1,134,208,61,1,143,5)); -Init_itm(322, Bry_.new_ints(61,1,134,208,61,1,6)); -Init_itm(323, Bry_.new_ints(65,1,134,141,1,143,5)); -Init_itm(324, Bry_.new_ints(65,1,134,141,1,6)); -Init_itm(325, Bry_.new_ints(65,1,134,167,1,143,5)); -Init_itm(326, Bry_.new_ints(65,1,134,167,1,6)); -Init_itm(327, Bry_.new_ints(65,1,134,151,1,143,5)); -Init_itm(328, Bry_.new_ints(65,1,134,151,1,6)); -Init_itm(329, Bry_.new_ints(90,134,65,1,6,1,137,137)); -Init_itm(330, Bry_.new_ints(66,86,1,5,1,143)); -Init_itm(331, Bry_.new_ints(66,86,1,5,1,5)); -Init_itm(332, Bry_.new_ints(67,1,134,171,1,143,5)); -Init_itm(333, Bry_.new_ints(67,1,134,171,1,6)); -Init_itm(334, Bry_.new_ints(67,1,134,145,1,143,5)); -Init_itm(335, Bry_.new_ints(67,1,134,145,1,6)); -Init_itm(336, Bry_.new_ints(67,1,134,159,1,143,5)); -Init_itm(337, Bry_.new_ints(67,1,134,159,1,6)); -Init_itm(338, Bry_.new_ints(67,47,1,134,219,169,5,1,147,137,189)); -Init_itm(339, Bry_.new_ints(67,47,1,134,219,169,5,1,137,137,189)); -Init_itm(340, Bry_.new_ints(73,1,134,141,1,143,5)); -Init_itm(341, Bry_.new_ints(73,1,134,141,1,6)); -Init_itm(342, Bry_.new_ints(73,1,134,167,1,143,5)); -Init_itm(343, Bry_.new_ints(73,1,134,167,1,6)); -Init_itm(344, Bry_.new_ints(73,1,134,151,1,143,5)); -Init_itm(345, Bry_.new_ints(73,1,134,151,1,6)); -Init_itm(346, Bry_.new_ints(75,1,134,141,1,143,5)); -Init_itm(347, Bry_.new_ints(75,1,134,141,1,6)); -Init_itm(348, Bry_.new_ints(75,1,134,147,1,143,5)); -Init_itm(349, Bry_.new_ints(75,1,134,147,1,6)); -Init_itm(350, Bry_.new_ints(75,1,134,167,1,143,5)); -Init_itm(351, Bry_.new_ints(75,1,134,167,1,6)); -Init_itm(352, Bry_.new_ints(75,1,134,151,1,143,5)); -Init_itm(353, Bry_.new_ints(75,1,134,151,1,6)); -Init_itm(354, Bry_.new_ints(77,1,134,167,1,143,5)); -Init_itm(355, Bry_.new_ints(77,1,134,167,1,6)); -Init_itm(356, Bry_.new_ints(77,1,134,151,1,143,5)); -Init_itm(357, Bry_.new_ints(77,1,134,151,1,6)); -Init_itm(358, Bry_.new_ints(78,66,1,5,1,143)); -Init_itm(359, Bry_.new_ints(78,66,1,5,1,5)); -Init_itm(360, Bry_.new_ints(79,1,134,161,1,143,5)); -Init_itm(361, Bry_.new_ints(79,1,134,161,1,6)); -Init_itm(362, Bry_.new_ints(79,1,134,171,1,143,5)); -Init_itm(363, Bry_.new_ints(79,1,134,171,1,6)); -Init_itm(364, Bry_.new_ints(79,1,134,145,1,143,5)); -Init_itm(365, Bry_.new_ints(79,1,134,145,1,6)); -Init_itm(366, Bry_.new_ints(79,1,134,153,1,143,5)); -Init_itm(367, Bry_.new_ints(79,1,134,153,1,6)); -Init_itm(368, Bry_.new_ints(79,1,134,159,1,143,5)); -Init_itm(369, Bry_.new_ints(79,1,134,159,1,6)); -Init_itm(370, Bry_.new_ints(79,1,134,169,1,143,5)); -Init_itm(371, Bry_.new_ints(79,1,134,169,1,6)); -Init_itm(372, Bry_.new_ints(83,1,134,147,1,143,5)); -Init_itm(373, Bry_.new_ints(83,1,134,147,1,6)); -Init_itm(374, Bry_.new_ints(87,1,134,147,1,143,5)); -Init_itm(375, Bry_.new_ints(87,1,134,147,1,6)); -Init_itm(376, Bry_.new_ints(87,1,134,157,1,143,5)); -Init_itm(377, Bry_.new_ints(89,1,134,141,1,143,5)); -Init_itm(378, Bry_.new_ints(89,1,134,141,1,6)); -Init_itm(379, Bry_.new_ints(89,1,134,163,1,143,5)); -Init_itm(380, Bry_.new_ints(89,1,134,163,1,6)); -Init_itm(381, Bry_.new_ints(89,1,134,151,1,143,5)); -Init_itm(382, Bry_.new_ints(89,1,134,151,1,6)); -Init_itm(383, Bry_.new_ints(75,1,134,219,185,1,137,137)); -Init_itm(384, Bry_.new_ints(42,66,1,5,1,5)); -Init_itm(385, Bry_.new_ints(42,76,1,5,1,143)); -Init_itm(386, Bry_.new_ints(42,78,1,5,1,143)); -Init_itm(387, Bry_.new_ints(42,78,1,5,1,5)); -Init_itm(388, Bry_.new_ints(90,126,1,5,1,143)); -Init_itm(389, Bry_.new_ints(90,126,1,5,1,5)); -Init_itm(390, Bry_.new_ints(68,74,1,5,1,143)); -Init_itm(391, Bry_.new_ints(44,70,1,5,1,143)); -Init_itm(392, Bry_.new_ints(44,70,1,5,1,5)); -Init_itm(393, Bry_.new_ints(46,72,1,5,1,143)); -Init_itm(394, Bry_.new_ints(46,74,1,5,1,143)); -Init_itm(395, Bry_.new_ints(46,78,1,5,1,143)); -Init_itm(396, Bry_.new_ints(46,78,1,5,1,5)); -Init_itm(397, Bry_.new_ints(89,83,1,6,1,137,137)); -Init_itm(398, Bry_.new_ints(48,72,1,5,1,143)); -Init_itm(399, Bry_.new_ints(48,76,1,5,1,143)); -Init_itm(400, Bry_.new_ints(48,80,1,5,1,143)); -Init_itm(401, Bry_.new_ints(50,70,1,5,1,143)); -Init_itm(402, Bry_.new_ints(50,70,1,5,1,5)); -Init_itm(403, Bry_.new_ints(52,72,1,5,1,143)); -Init_itm(404, Bry_.new_ints(52,80,1,5,1,143)); -Init_itm(405, Bry_.new_ints(54,66,1,5,1,5)); -Init_itm(406, Bry_.new_ints(56,78,1,5,1,143)); -Init_itm(407, Bry_.new_ints(56,72,1,5,1,143)); -Init_itm(408, Bry_.new_ints(60,68,1,5,1,143)); -Init_itm(409, Bry_.new_ints(60,68,1,5,1,5)); -Init_itm(410, Bry_.new_ints(62,72,1,5,1,5)); -Init_itm(411, Bry_.new_ints(62,94,1,5,1,5)); -Init_itm(412, Bry_.new_ints(80,84,1,5,1,143)); -Init_itm(413, Bry_.new_ints(66,72,1,5,1,143)); -Init_itm(414, Bry_.new_ints(66,74,1,5,1,5)); -Init_itm(415, Bry_.new_ints(68,90,1,5,1,143)); -Init_itm(416, Bry_.new_ints(67,1,134,191,1,143,5)); -Init_itm(417, Bry_.new_ints(67,1,134,191,1,6)); -Init_itm(418, Bry_.new_ints(52,82,1,5,1,143)); -Init_itm(419, Bry_.new_ints(52,82,1,5,1,5)); -Init_itm(420, Bry_.new_ints(70,74,1,5,1,143)); -Init_itm(421, Bry_.new_ints(70,74,1,5,1,5)); -Init_itm(422, Bry_.new_ints(74,64,1,5,1,143)); -Init_itm(423, Bry_.new_ints(90,122,1,5,1,143)); -Init_itm(424, Bry_.new_ints(90,122,1,5,1,5)); -Init_itm(425, Bry_.new_ints(76,78,1,5,1,143)); -Init_itm(426, Bry_.new_ints(76,82,1,5,1,5)); -Init_itm(427, Bry_.new_ints(78,72,1,5,1,5)); -Init_itm(428, Bry_.new_ints(78,74,1,5,1,143)); -Init_itm(429, Bry_.new_ints(78,74,1,5,1,5)); -Init_itm(430, Bry_.new_ints(78,76,1,5,1,143)); -Init_itm(431, Bry_.new_ints(79,1,134,191,1,143,5)); -Init_itm(432, Bry_.new_ints(79,1,134,191,1,6)); -Init_itm(433, Bry_.new_ints(80,92,1,5,1,143)); -Init_itm(434, Bry_.new_ints(82,70,1,5,1,143)); -Init_itm(435, Bry_.new_ints(88,68,1,5,1,143)); -Init_itm(436, Bry_.new_ints(88,68,1,5,1,5)); -Init_itm(437, Bry_.new_ints(90,66,1,5,1,143)); -Init_itm(438, Bry_.new_ints(90,66,1,5,1,5)); -Init_itm(439, Bry_.new_ints(90,84,1,5,1,143)); -Init_itm(440, Bry_.new_ints(90,88,1,5,1,143)); -Init_itm(441, Bry_.new_ints(90,88,1,5,1,5)); -Init_itm(442, Bry_.new_ints(90,92,1,5,1,5)); -Init_itm(443, Bry_.new_ints(90,114,1,5,1,5)); -Init_itm(444, Bry_.new_ints(90,124,1,5,1,143)); -Init_itm(445, Bry_.new_ints(90,124,1,5,1,5)); -Init_itm(446, Bry_.new_ints(77,75,1,6,1,137,137)); -Init_itm(447, Bry_.new_ints(90,102,1,5,1,5)); -Init_itm(448, Bry_.new_ints(90,162,1,5,1,5)); -Init_itm(449, Bry_.new_ints(90,164,1,5,1,5)); -Init_itm(450, Bry_.new_ints(90,166,1,5,1,5)); -Init_itm(451, Bry_.new_ints(90,168,1,5,1,5)); -Init_itm(452, Bry_.new_ints(45,89,1,133,151,1,147,147,189)); -Init_itm(453, Bry_.new_ints(45,89,1,133,151,1,147,137,189)); -Init_itm(454, Bry_.new_ints(45,89,1,133,151,1,137,137,189)); -Init_itm(455, Bry_.new_ints(61,57,1,6,1,147,147)); -Init_itm(456, Bry_.new_ints(61,57,1,6,1,147,137)); -Init_itm(457, Bry_.new_ints(61,57,1,6,1,137,137)); -Init_itm(458, Bry_.new_ints(65,57,1,6,1,147,147)); -Init_itm(459, Bry_.new_ints(65,57,1,6,1,147,137)); -Init_itm(460, Bry_.new_ints(65,57,1,6,1,137,137)); -Init_itm(461, Bry_.new_ints(39,1,134,151,1,143,5)); -Init_itm(462, Bry_.new_ints(39,1,134,151,1,6)); -Init_itm(463, Bry_.new_ints(55,1,134,151,1,143,5)); -Init_itm(464, Bry_.new_ints(55,1,134,151,1,6)); -Init_itm(465, Bry_.new_ints(67,1,134,151,1,143,5)); -Init_itm(466, Bry_.new_ints(67,1,134,151,1,6)); -Init_itm(467, Bry_.new_ints(79,1,134,151,1,143,5)); -Init_itm(468, Bry_.new_ints(79,1,134,151,1,6)); -Init_itm(469, Bry_.new_ints(79,1,134,157,171,1,143,6)); -Init_itm(470, Bry_.new_ints(79,1,134,157,171,1,7)); -Init_itm(471, Bry_.new_ints(79,1,134,157,141,1,143,6)); -Init_itm(472, Bry_.new_ints(79,1,134,157,141,1,7)); -Init_itm(473, Bry_.new_ints(79,1,134,157,151,1,143,6)); -Init_itm(474, Bry_.new_ints(79,1,134,157,151,1,7)); -Init_itm(475, Bry_.new_ints(79,1,134,157,143,1,143,6)); -Init_itm(476, Bry_.new_ints(79,1,134,157,143,1,7)); -Init_itm(477, Bry_.new_ints(48,72,1,5,1,5)); -Init_itm(478, Bry_.new_ints(39,1,134,157,171,1,143,6)); -Init_itm(479, Bry_.new_ints(39,1,134,157,171,1,7)); -Init_itm(480, Bry_.new_ints(39,1,134,163,171,1,143,6)); -Init_itm(481, Bry_.new_ints(39,1,134,163,171,1,7)); -Init_itm(482, Bry_.new_ints(39,47,1,134,219,169,134,171,1,147,137,189,5)); -Init_itm(483, Bry_.new_ints(39,47,1,134,219,169,134,171,1,137,137,189,5)); -Init_itm(484, Bry_.new_ints(52,68,1,5,1,143)); -Init_itm(485, Bry_.new_ints(52,68,1,5,1,5)); -Init_itm(486, Bry_.new_ints(51,1,134,151,1,143,5)); -Init_itm(487, Bry_.new_ints(51,1,134,151,1,6)); -Init_itm(488, Bry_.new_ints(59,1,134,151,1,143,5)); -Init_itm(489, Bry_.new_ints(59,1,134,151,1,6)); -Init_itm(490, Bry_.new_ints(67,1,134,169,1,143,5)); -Init_itm(491, Bry_.new_ints(67,1,134,169,1,6)); -Init_itm(492, Bry_.new_ints(67,1,134,169,171,1,143,6)); -Init_itm(493, Bry_.new_ints(67,1,134,169,171,1,7)); -Init_itm(494, Bry_.new_ints(90,84,1,134,151,1,143,5)); -Init_itm(495, Bry_.new_ints(90,84,1,134,151,1,6)); -Init_itm(496, Bry_.new_ints(57,1,134,151,1,6)); -Init_itm(497, Bry_.new_ints(45,89,1,6,1,147,147)); -Init_itm(498, Bry_.new_ints(45,89,1,6,1,147,137)); -Init_itm(499, Bry_.new_ints(45,89,1,6,1,137,137)); -Init_itm(500, Bry_.new_ints(51,1,134,141,1,143,5)); -Init_itm(501, Bry_.new_ints(51,1,134,141,1,6)); -Init_itm(502, Bry_.new_ints(54,66,1,5,1,143)); -Init_itm(503, Bry_.new_ints(90,102,1,5,1,143)); -Init_itm(504, Bry_.new_ints(65,1,134,143,1,143,5)); -Init_itm(505, Bry_.new_ints(65,1,134,143,1,6)); -Init_itm(506, Bry_.new_ints(39,1,134,153,141,1,143,6)); -Init_itm(507, Bry_.new_ints(39,1,134,153,141,1,7)); -Init_itm(508, Bry_.new_ints(39,47,1,134,219,169,134,141,1,147,137,189,5)); -Init_itm(509, Bry_.new_ints(39,47,1,134,219,169,134,141,1,137,137,189,5)); -Init_itm(510, Bry_.new_ints(67,1,134,165,141,1,143,6)); -Init_itm(511, Bry_.new_ints(67,1,134,165,141,1,7)); -Init_itm(512, Bry_.new_ints(39,1,134,185,1,143,5)); -Init_itm(513, Bry_.new_ints(39,1,134,185,1,6)); -Init_itm(514, Bry_.new_ints(39,1,134,189,1,143,5)); -Init_itm(515, Bry_.new_ints(39,1,134,189,1,6)); -Init_itm(516, Bry_.new_ints(47,1,134,185,1,143,5)); -Init_itm(517, Bry_.new_ints(47,1,134,185,1,6)); -Init_itm(518, Bry_.new_ints(47,1,134,189,1,143,5)); -Init_itm(519, Bry_.new_ints(47,1,134,189,1,6)); -Init_itm(520, Bry_.new_ints(55,1,134,185,1,143,5)); -Init_itm(521, Bry_.new_ints(55,1,134,185,1,6)); -Init_itm(522, Bry_.new_ints(55,1,134,189,1,143,5)); -Init_itm(523, Bry_.new_ints(55,1,134,189,1,6)); -Init_itm(524, Bry_.new_ints(67,1,134,185,1,143,5)); -Init_itm(525, Bry_.new_ints(67,1,134,185,1,6)); -Init_itm(526, Bry_.new_ints(67,1,134,189,1,143,5)); -Init_itm(527, Bry_.new_ints(67,1,134,189,1,6)); -Init_itm(528, Bry_.new_ints(73,1,134,185,1,143,5)); -Init_itm(529, Bry_.new_ints(73,1,134,185,1,6)); -Init_itm(530, Bry_.new_ints(73,1,134,189,1,143,5)); -Init_itm(531, Bry_.new_ints(73,1,134,189,1,6)); -Init_itm(532, Bry_.new_ints(79,1,134,185,1,143,5)); -Init_itm(533, Bry_.new_ints(79,1,134,185,1,6)); -Init_itm(534, Bry_.new_ints(79,1,134,189,1,143,5)); -Init_itm(535, Bry_.new_ints(79,1,134,189,1,6)); -Init_itm(536, Bry_.new_ints(75,1,134,203,1,143,5)); -Init_itm(537, Bry_.new_ints(75,1,134,203,1,6)); -Init_itm(538, Bry_.new_ints(77,1,134,203,1,143,5)); -Init_itm(539, Bry_.new_ints(77,1,134,203,1,6)); -Init_itm(540, Bry_.new_ints(88,72,1,5,1,143)); -Init_itm(541, Bry_.new_ints(88,72,1,5,1,5)); -Init_itm(542, Bry_.new_ints(53,1,134,151,1,143,5)); -Init_itm(543, Bry_.new_ints(53,1,134,151,1,6)); -Init_itm(544, Bry_.new_ints(66,74,1,5,1,143)); -Init_itm(545, Bry_.new_ints(46,80,1,5,1,5)); -Init_itm(546, Bry_.new_ints(68,96,1,5,1,143)); -Init_itm(547, Bry_.new_ints(68,96,1,5,1,5)); -Init_itm(548, Bry_.new_ints(90,72,1,5,1,143)); -Init_itm(549, Bry_.new_ints(90,72,1,5,1,5)); -Init_itm(550, Bry_.new_ints(39,1,134,163,1,143,5)); -Init_itm(551, Bry_.new_ints(39,1,134,163,1,6)); -Init_itm(552, Bry_.new_ints(47,1,134,167,1,143,5)); -Init_itm(553, Bry_.new_ints(47,1,134,167,1,6)); -Init_itm(554, Bry_.new_ints(67,1,134,157,171,1,143,6)); -Init_itm(555, Bry_.new_ints(67,1,134,157,171,1,7)); -Init_itm(556, Bry_.new_ints(67,1,134,161,171,1,143,6)); -Init_itm(557, Bry_.new_ints(67,1,134,161,171,1,7)); -Init_itm(558, Bry_.new_ints(67,1,134,163,1,143,5)); -Init_itm(559, Bry_.new_ints(67,1,134,163,1,6)); -Init_itm(560, Bry_.new_ints(67,1,134,163,171,1,143,6)); -Init_itm(561, Bry_.new_ints(67,1,134,163,171,1,7)); -Init_itm(562, Bry_.new_ints(87,1,134,171,1,143,5)); -Init_itm(563, Bry_.new_ints(87,1,134,171,1,6)); -Init_itm(564, Bry_.new_ints(62,86,1,5,1,5)); -Init_itm(565, Bry_.new_ints(66,82,1,5,1,5)); -Init_itm(566, Bry_.new_ints(78,78,1,5,1,5)); -Init_itm(567, Bry_.new_ints(58,64,1,5,1,5)); -Init_itm(568, Bry_.new_ints(45,41,1,6,1,137,137)); -Init_itm(569, Bry_.new_ints(71,69,1,6,1,137,137)); -Init_itm(570, Bry_.new_ints(40,66,1,5,1,143)); -Init_itm(571, Bry_.new_ints(44,66,1,5,1,143)); -Init_itm(572, Bry_.new_ints(44,66,1,5,1,5)); -Init_itm(573, Bry_.new_ints(62,72,1,5,1,143)); -Init_itm(574, Bry_.new_ints(78,68,1,5,1,143)); -Init_itm(575, Bry_.new_ints(76,72,1,5,1,5)); -Init_itm(576, Bry_.new_ints(90,78,1,5,1,5)); -Init_itm(577, Bry_.new_ints(90,130,1,5,1,143)); -Init_itm(578, Bry_.new_ints(90,130,1,5,1,5)); -Init_itm(579, Bry_.new_ints(42,66,1,5,1,143)); -Init_itm(580, Bry_.new_ints(80,72,1,5,1,143)); -Init_itm(581, Bry_.new_ints(82,78,1,5,1,143)); -Init_itm(582, Bry_.new_ints(48,66,1,5,1,143)); -Init_itm(583, Bry_.new_ints(48,66,1,5,1,5)); -Init_itm(584, Bry_.new_ints(58,68,1,5,1,143)); -Init_itm(585, Bry_.new_ints(58,68,1,5,1,5)); -Init_itm(586, Bry_.new_ints(72,70,1,5,1,143)); -Init_itm(587, Bry_.new_ints(72,70,1,5,1,5)); -Init_itm(588, Bry_.new_ints(74,70,1,5,1,143)); -Init_itm(589, Bry_.new_ints(74,70,1,5,1,5)); -Init_itm(590, Bry_.new_ints(88,66,1,5,1,143)); -Init_itm(591, Bry_.new_ints(88,66,1,5,1,5)); -Init_itm(592, Bry_.new_ints(40,74,1,5,1,5)); -Init_itm(593, Bry_.new_ints(40,76,1,5,1,5)); -Init_itm(594, Bry_.new_ints(40,80,1,5,1,5)); -Init_itm(595, Bry_.new_ints(42,76,1,5,1,5)); -Init_itm(596, Bry_.new_ints(68,74,1,5,1,5)); -Init_itm(597, Bry_.new_ints(44,72,1,5,1,5)); -Init_itm(598, Bry_.new_ints(46,72,1,5,1,5)); -Init_itm(599, Bry_.new_ints(46,74,1,5,1,5)); -Init_itm(600, Bry_.new_ints(48,84,1,5,1,5)); -Init_itm(601, Bry_.new_ints(48,76,1,5,1,5)); -Init_itm(602, Bry_.new_ints(48,86,1,5,1,5)); -Init_itm(603, Bry_.new_ints(48,80,1,5,1,5)); -Init_itm(604, Bry_.new_ints(48,88,1,5,1,5)); -Init_itm(605, Bry_.new_ints(48,94,1,5,1,5)); -Init_itm(606, Bry_.new_ints(48,96,1,5,1,5)); -Init_itm(607, Bry_.new_ints(58,72,1,5,1,5)); -Init_itm(608, Bry_.new_ints(52,72,1,5,1,5)); -Init_itm(609, Bry_.new_ints(52,64,1,5,1,5)); -Init_itm(610, Bry_.new_ints(52,66,1,5,1,5)); -Init_itm(611, Bry_.new_ints(52,80,1,5,1,5)); -Init_itm(612, Bry_.new_ints(48,100,1,5,1,5)); -Init_itm(613, Bry_.new_ints(80,78,1,5,1,5)); -Init_itm(614, Bry_.new_ints(54,68,1,5,1,5)); -Init_itm(615, Bry_.new_ints(54,76,1,5,1,5)); -Init_itm(616, Bry_.new_ints(56,72,1,5,1,5)); -Init_itm(617, Bry_.new_ints(56,78,1,5,1,5)); -Init_itm(618, Bry_.new_ints(56,66,1,5,1,5)); -Init_itm(619, Bry_.new_ints(62,76,1,5,1,5)); -Init_itm(620, Bry_.new_ints(62,78,1,5,1,5)); -Init_itm(621, Bry_.new_ints(62,82,1,5,1,5)); -Init_itm(622, Bry_.new_ints(62,90,1,5,1,5)); -Init_itm(623, Bry_.new_ints(80,84,1,5,1,5)); -Init_itm(624, Bry_.new_ints(80,90,1,5,1,5)); -Init_itm(625, Bry_.new_ints(64,70,1,5,1,5)); -Init_itm(626, Bry_.new_ints(66,72,1,5,1,5)); -Init_itm(627, Bry_.new_ints(66,80,1,5,1,5)); -Init_itm(628, Bry_.new_ints(66,64,1,5,1,5)); -Init_itm(629, Bry_.new_ints(68,90,1,5,1,5)); -Init_itm(630, Bry_.new_ints(68,68,1,5,1,5)); -Init_itm(631, Bry_.new_ints(68,94,1,5,1,5)); -Init_itm(632, Bry_.new_ints(70,82,1,5,1,5)); -Init_itm(633, Bry_.new_ints(74,74,1,5,1,5)); -Init_itm(634, Bry_.new_ints(74,78,1,5,1,5)); -Init_itm(635, Bry_.new_ints(74,82,1,5,1,5)); -Init_itm(636, Bry_.new_ints(74,86,1,5,1,5)); -Init_itm(637, Bry_.new_ints(74,88,1,5,1,5)); -Init_itm(638, Bry_.new_ints(74,90,1,5,1,5)); -Init_itm(639, Bry_.new_ints(74,94,1,5,1,5)); -Init_itm(640, Bry_.new_ints(74,64,1,5,1,5)); -Init_itm(641, Bry_.new_ints(74,96,1,5,1,5)); -Init_itm(642, Bry_.new_ints(76,70,1,5,1,5)); -Init_itm(643, Bry_.new_ints(76,78,1,5,1,5)); -Init_itm(644, Bry_.new_ints(58,74,1,5,1,5)); -Init_itm(645, Bry_.new_ints(76,84,1,5,1,5)); -Init_itm(646, Bry_.new_ints(76,88,1,5,1,5)); -Init_itm(647, Bry_.new_ints(78,82,1,5,1,5)); -Init_itm(648, Bry_.new_ints(78,76,1,5,1,5)); -Init_itm(649, Bry_.new_ints(80,72,1,5,1,5)); -Init_itm(650, Bry_.new_ints(80,92,1,5,1,5)); -Init_itm(651, Bry_.new_ints(82,70,1,5,1,5)); -Init_itm(652, Bry_.new_ints(82,78,1,5,1,5)); -Init_itm(653, Bry_.new_ints(84,68,1,5,1,5)); -Init_itm(654, Bry_.new_ints(62,96,1,5,1,5)); -Init_itm(655, Bry_.new_ints(88,64,1,5,1,5)); -Init_itm(656, Bry_.new_ints(90,74,1,5,1,5)); -Init_itm(657, Bry_.new_ints(90,76,1,5,1,5)); -Init_itm(658, Bry_.new_ints(90,84,1,5,1,5)); -Init_itm(659, Bry_.new_ints(90,94,1,5,1,5)); -Init_itm(660, Bry_.new_ints(90,128,1,5,1,5)); -Init_itm(661, Bry_.new_ints(90,144,1,5,1,5)); -Init_itm(662, Bry_.new_ints(90,160,1,5,1,5)); -Init_itm(663, Bry_.new_ints(90,170,1,5,1,5)); -Init_itm(664, Bry_.new_ints(90,172,1,5,1,5)); -Init_itm(665, Bry_.new_ints(42,64,1,5,1,5)); -Init_itm(666, Bry_.new_ints(48,98,1,5,1,5)); -Init_itm(667, Bry_.new_ints(52,74,1,5,1,5)); -Init_itm(668, Bry_.new_ints(54,64,1,5,1,5)); -Init_itm(669, Bry_.new_ints(58,70,1,5,1,5)); -Init_itm(670, Bry_.new_ints(60,78,1,5,1,5)); -Init_itm(671, Bry_.new_ints(62,64,1,5,1,5)); -Init_itm(672, Bry_.new_ints(72,68,1,5,1,5)); -Init_itm(673, Bry_.new_ints(90,156,1,5,1,5)); -Init_itm(674, Bry_.new_ints(90,158,1,5,1,5)); -Init_itm(675, Bry_.new_ints(45,89,1,6,1,137,137)); -Init_itm(676, Bry_.new_ints(45,90,84,1,6,1,137,137)); -Init_itm(677, Bry_.new_ints(45,90,76,1,6,1,137,137)); -Init_itm(678, Bry_.new_ints(77,75,1,6,1,137,137)); -Init_itm(679, Bry_.new_ints(77,76,78,1,6,1,137,137)); -Init_itm(680, Bry_.new_ints(77,44,72,1,6,1,137,137)); -Init_itm(681, Bry_.new_ints(49,66,86,1,6,1,137,137)); -Init_itm(682, Bry_.new_ints(61,75,1,6,1,137,137)); -Init_itm(683, Bry_.new_ints(61,89,1,6,1,137,137)); -Init_itm(684, Bry_.new_ints(90,174,1,5,1,5)); -Init_itm(685, Bry_.new_ints(90,176,1,5,1,5)); -Init_itm(686, Bry_.new_ints(80,80,1,5,1,5)); -Init_itm(687, Bry_.new_ints(80,82,1,5,1,5)); -Init_itm(688, Bry_.new_ints(53,1,5,1,167)); -Init_itm(689, Bry_.new_ints(54,68,1,5,1,167)); -Init_itm(690, Bry_.new_ints(57,1,5,1,167)); -Init_itm(691, Bry_.new_ints(73,1,5,1,167)); -Init_itm(692, Bry_.new_ints(74,74,1,5,1,167)); -Init_itm(693, Bry_.new_ints(74,82,1,5,1,167)); -Init_itm(694, Bry_.new_ints(74,96,1,5,1,167)); -Init_itm(695, Bry_.new_ints(83,1,5,1,167)); -Init_itm(696, Bry_.new_ints(87,1,5,1,167)); -Init_itm(697, Bry_.new_ints(13,26,1,5,1,5)); -Init_itm(698, Bry_.new_ints(13,29,1,5,1,5)); -Init_itm(699, Bry_.new_ints(54,78,1,5,1,5)); -Init_itm(700, Bry_.new_ints(90,134,1,5,1,5)); -Init_itm(701, Bry_.new_ints(54,80,1,5,1,5)); -Init_itm(702, Bry_.new_ints(90,138,1,5,1,5)); -Init_itm(703, Bry_.new_ints(90,146,1,5,1,5)); -Init_itm(704, Bry_.new_ints(90,132,1,5,1,5)); -Init_itm(705, Bry_.new_ints(90,148,1,5,1,5)); -Init_itm(706, Bry_.new_ints(13,31,4,1,5,1,5)); -Init_itm(707, Bry_.new_ints(13,31,12,1,5,1,5)); -Init_itm(708, Bry_.new_ints(13,31,20,1,5,1,5)); -Init_itm(709, Bry_.new_ints(13,31,28,1,5,1,5)); -Init_itm(710, Bry_.new_ints(13,32,1,5,1,5)); -Init_itm(711, Bry_.new_ints(13,34,1,5,1,5)); -Init_itm(712, Bry_.new_ints(13,36,1,5,1,5)); -Init_itm(713, Bry_.new_ints(13,38,1,5,1,5)); -Init_itm(714, Bry_.new_ints(13,40,1,5,1,5)); -Init_itm(715, Bry_.new_ints(13,42,1,5,1,5)); -Init_itm(716, Bry_.new_ints(13,44,1,5,1,5)); -Init_itm(717, Bry_.new_ints(13,46,1,5,1,5)); -Init_itm(718, Bry_.new_ints(13,48,1,5,1,5)); -Init_itm(719, Bry_.new_ints(13,50,1,5,1,5)); -Init_itm(720, Bry_.new_ints(14,11,1,5,1,5)); -Init_itm(721, Bry_.new_ints(14,13,1,5,1,5)); -Init_itm(722, Bry_.new_ints(13,52,4,1,5,1,5)); -Init_itm(723, Bry_.new_ints(13,52,12,1,5,1,5)); -Init_itm(724, Bry_.new_ints(13,52,20,1,5,1,5)); -Init_itm(725, Bry_.new_ints(13,52,28,1,5,1,5)); -Init_itm(726, Bry_.new_ints(13,52,36,1,5,1,5)); -Init_itm(727, Bry_.new_ints(13,52,44,1,5,1,5)); -Init_itm(728, Bry_.new_ints(13,19,4,1,5,1,5)); -Init_itm(729, Bry_.new_ints(13,19,12,1,5,1,5)); -Init_itm(730, Bry_.new_ints(13,22,4,1,5,1,5)); -Init_itm(731, Bry_.new_ints(13,25,4,1,5,1,5)); -Init_itm(732, Bry_.new_ints(13,14,4,1,5,1,5)); -Init_itm(733, Bry_.new_ints(13,22,12,1,5,1,5)); -Init_itm(734, Bry_.new_ints(13,52,52,1,5,1,5)); -Init_itm(735, Bry_.new_ints(13,52,60,1,5,1,5)); -Init_itm(736, Bry_.new_ints(52,80,1,5,1,167)); -Init_itm(737, Bry_.new_ints(61,1,5,1,167)); -Init_itm(738, Bry_.new_ints(75,1,5,1,167)); -Init_itm(739, Bry_.new_ints(85,1,5,1,167)); -Init_itm(740, Bry_.new_ints(90,144,1,5,1,167)); -Init_itm(741, Bry_.new_ints(13,52,68,1,5,1,5)); -Init_itm(742, Bry_.new_ints(13,52,76,1,5,1,5)); -Init_itm(743, Bry_.new_ints(13,52,84,1,5,1,5)); -Init_itm(744, Bry_.new_ints(13,52,92,1,5,1,5)); -Init_itm(745, Bry_.new_ints(13,52,100,1,5,1,5)); -Init_itm(746, Bry_.new_ints(13,52,108,1,5,1,5)); -Init_itm(747, Bry_.new_ints(13,52,116,1,5,1,5)); -Init_itm(748, Bry_.new_ints(13,53,1,5,1,5)); -Init_itm(749, Bry_.new_ints(13,55,4,1,5,1,5)); -Init_itm(750, Bry_.new_ints(90,136,1,5,1,5)); -Init_itm(751, Bry_.new_ints(13,55,12,1,5,1,5)); -Init_itm(752, Bry_.new_ints(13,55,20,1,5,1,5)); -Init_itm(753, Bry_.new_ints(13,55,28,1,5,1,5)); -Init_itm(754, Bry_.new_ints(13,55,36,1,5,1,5)); -Init_itm(755, Bry_.new_ints(13,55,44,1,5,1,5)); -Init_itm(756, Bry_.new_ints(13,55,52,1,5,1,5)); -Init_itm(757, Bry_.new_ints(13,55,60,1,5,1,5)); -Init_itm(758, Bry_.new_ints(13,55,68,1,5,1,5)); -Init_itm(759, Bry_.new_ints(13,55,76,1,5,1,5)); -Init_itm(760, Bry_.new_ints(13,55,84,1,5,1,5)); -Init_itm(761, Bry_.new_ints(13,55,92,1,5,1,5)); -Init_itm(762, Bry_.new_ints(13,55,100,1,5,1,5)); -Init_itm(763, Bry_.new_ints(13,55,108,1,5,1,5)); -Init_itm(764, Bry_.new_ints(13,55,116,1,5,1,5)); -Init_itm(765, Bry_.new_ints(13,55,124,1,5,1,5)); -Init_itm(766, Bry_.new_ints(13,55,132,1,5,1,5)); -Init_itm(767, Bry_.new_ints(13,55,140,1,5,1,5)); -Init_itm(768, Bry_.new_ints(1,143,1,5)); -Init_itm(769, Bry_.new_ints(1,141,1,5)); -Init_itm(770, Bry_.new_ints(1,147,1,5)); -Init_itm(771, Bry_.new_ints(1,161,1,5)); -Init_itm(772, Bry_.new_ints(1,171,1,5)); -Init_itm(773, Bry_.new_ints(1,181,1,5)); -Init_itm(774, Bry_.new_ints(1,145,1,5)); -Init_itm(775, Bry_.new_ints(1,163,1,5)); -Init_itm(776, Bry_.new_ints(1,157,1,5)); -Init_itm(777, Bry_.new_ints(1,183,1,5)); -Init_itm(778, Bry_.new_ints(1,153,1,5)); -Init_itm(779, Bry_.new_ints(1,159,1,5)); -Init_itm(780, Bry_.new_ints(1,151,1,5)); -Init_itm(781, Bry_.new_ints(1,173,1,5)); -Init_itm(782, Bry_.new_ints(1,173,1,5)); -Init_itm(783, Bry_.new_ints(1,185,1,5)); -Init_itm(784, Bry_.new_ints(1,187,1,5)); -Init_itm(785, Bry_.new_ints(1,189,1,5)); -Init_itm(786, Bry_.new_ints(1,173,1,5)); -Init_itm(787, Bry_.new_ints(1,137,1,5)); -Init_itm(788, Bry_.new_ints(1,139,1,5)); -Init_itm(789, Bry_.new_ints(1,173,1,5)); -Init_itm(790, Bry_.new_ints(1,175,1,5)); -Init_itm(791, Bry_.new_ints(1,175,1,5)); -Init_itm(792, Bry_.new_ints(1,175,1,5)); -Init_itm(793, Bry_.new_ints(1,175,1,5)); -Init_itm(794, Bry_.new_ints(1,173,1,5)); -Init_itm(795, Bry_.new_ints(1,191,1,5)); -Init_itm(796, Bry_.new_ints(1,175,1,5)); -Init_itm(797, Bry_.new_ints(1,175,1,5)); -Init_itm(798, Bry_.new_ints(1,175,1,5)); -Init_itm(799, Bry_.new_ints(1,175,1,5)); -Init_itm(800, Bry_.new_ints(1,175,1,5)); -Init_itm(801, Bry_.new_ints(1,193,1,5)); -Init_itm(802, Bry_.new_ints(1,195,1,5)); -Init_itm(803, Bry_.new_ints(1,197,1,5)); -Init_itm(804, Bry_.new_ints(1,199,1,5)); -Init_itm(805, Bry_.new_ints(1,201,1,5)); -Init_itm(806, Bry_.new_ints(1,203,1,5)); -Init_itm(807, Bry_.new_ints(1,167,1,5)); -Init_itm(808, Bry_.new_ints(1,169,1,5)); -Init_itm(809, Bry_.new_ints(1,175,1,5)); -Init_itm(810, Bry_.new_ints(1,175,1,5)); -Init_itm(811, Bry_.new_ints(1,175,1,5)); -Init_itm(812, Bry_.new_ints(1,175,1,5)); -Init_itm(813, Bry_.new_ints(1,205,1,5)); -Init_itm(814, Bry_.new_ints(1,207,1,5)); -Init_itm(815, Bry_.new_ints(1,175,1,5)); -Init_itm(816, Bry_.new_ints(1,208,13,1,5)); -Init_itm(817, Bry_.new_ints(1,208,29,1,5)); -Init_itm(818, Bry_.new_ints(1,135,1,5)); -Init_itm(819, Bry_.new_ints(1,175,1,5)); -Init_itm(820, Bry_.new_ints(1,208,45,1,5)); -Init_itm(821, Bry_.new_ints(1,208,61,1,5)); -Init_itm(822, Bry_.new_ints(1,177,1,5)); -Init_itm(823, Bry_.new_ints(1,177,1,5)); -Init_itm(824, Bry_.new_ints(1,165,1,5)); -Init_itm(825, Bry_.new_ints(1,208,77,1,5)); -Init_itm(826, Bry_.new_ints(1,175,1,5)); -Init_itm(827, Bry_.new_ints(1,175,1,5)); -Init_itm(828, Bry_.new_ints(1,175,1,5)); -Init_itm(829, Bry_.new_ints(1,173,1,5)); -Init_itm(830, Bry_.new_ints(1,173,1,5)); -Init_itm(831, Bry_.new_ints(1,173,1,5)); -Init_itm(832, Bry_.new_ints(1,143,1,5)); -Init_itm(833, Bry_.new_ints(1,141,1,5)); -Init_itm(834, Bry_.new_ints(1,155,1,5)); -Init_itm(835, Bry_.new_ints(1,137,1,5)); -Init_itm(836, Bry_.new_ints(1,157,141,1,6)); -Init_itm(837, Bry_.new_ints(1,208,93,1,5)); -Init_itm(838, Bry_.new_ints(1,173,1,5)); -Init_itm(839, Bry_.new_ints(1,175,1,5)); -Init_itm(840, Bry_.new_ints(1,175,1,5)); -Init_itm(841, Bry_.new_ints(1,175,1,5)); -Init_itm(842, Bry_.new_ints(1,173,1,5)); -Init_itm(843, Bry_.new_ints(1,173,1,5)); -Init_itm(844, Bry_.new_ints(1,173,1,5)); -Init_itm(845, Bry_.new_ints(1,175,1,5)); -Init_itm(846, Bry_.new_ints(1,175,1,5)); -Init_itm(847, Bry_.new_ints(1,1)); -Init_itm(848, Bry_.new_ints(1,173,1,5)); -Init_itm(849, Bry_.new_ints(1,173,1,5)); -Init_itm(850, Bry_.new_ints(1,173,1,5)); -Init_itm(851, Bry_.new_ints(1,175,1,5)); -Init_itm(852, Bry_.new_ints(1,175,1,5)); -Init_itm(853, Bry_.new_ints(1,175,1,5)); -Init_itm(854, Bry_.new_ints(1,175,1,5)); -Init_itm(855, Bry_.new_ints(1,173,1,5)); -Init_itm(856, Bry_.new_ints(1,208,109,1,5)); -Init_itm(857, Bry_.new_ints(1,175,1,5)); -Init_itm(858, Bry_.new_ints(1,175,1,5)); -Init_itm(859, Bry_.new_ints(1,173,1,5)); -Init_itm(860, Bry_.new_ints(1,175,1,5)); -Init_itm(861, Bry_.new_ints(1,173,1,5)); -Init_itm(862, Bry_.new_ints(1,173,1,5)); -Init_itm(863, Bry_.new_ints(1,175,1,5)); -Init_itm(864, Bry_.new_ints(1,208,125,1,5)); -Init_itm(865, Bry_.new_ints(1,208,141,1,5)); -Init_itm(866, Bry_.new_ints(1,175,1,5)); -Init_itm(867, Bry_.new_ints(39,1,5,1,137)); -Init_itm(868, Bry_.new_ints(47,1,5,1,137)); -Init_itm(869, Bry_.new_ints(55,1,5,1,137)); -Init_itm(870, Bry_.new_ints(67,1,5,1,137)); -Init_itm(871, Bry_.new_ints(79,1,5,1,137)); -Init_itm(872, Bry_.new_ints(43,1,5,1,137)); -Init_itm(873, Bry_.new_ints(45,1,5,1,137)); -Init_itm(874, Bry_.new_ints(53,1,5,1,137)); -Init_itm(875, Bry_.new_ints(63,1,5,1,137)); -Init_itm(876, Bry_.new_ints(73,1,5,1,137)); -Init_itm(877, Bry_.new_ints(77,1,5,1,137)); -Init_itm(878, Bry_.new_ints(81,1,5,1,137)); -Init_itm(879, Bry_.new_ints(85,1,5,1,137)); -Init_itm(880, Bry_.new_ints(91,30,1,5,1,143)); -Init_itm(881, Bry_.new_ints(91,30,1,5,1,5)); -Init_itm(882, Bry_.new_ints(91,94,1,5,1,143)); -Init_itm(883, Bry_.new_ints(91,94,1,5,1,5)); -Init_itm(884, Bry_.new_ints(13,26,1,5,1,5)); -Init_itm(885, Bry_.new_ints(13,28,4,1,5,1,5)); -Init_itm(886, Bry_.new_ints(91,24,1,5,1,143)); -Init_itm(887, Bry_.new_ints(91,24,1,5,1,5)); -Init_itm(888, Bry_.new_ints(226,232,177,228,1,5,1,5)); -Init_itm(889, Bry_.new_ints(226,232,178,4,1,5,1,5)); -Init_itm(890, Bry_.new_ints(91,36,1,5,1,137)); -Init_itm(891, Bry_.new_ints(91,74,1,5,1,5)); -Init_itm(892, Bry_.new_ints(91,72,1,5,1,5)); -Init_itm(893, Bry_.new_ints(91,76,1,5,1,5)); -Init_itm(894, Bry_.new_ints(8,88,1,5,1,5)); -Init_itm(895, Bry_.new_ints(226,232,178,172,1,5,1,5)); -Init_itm(896, Bry_.new_ints(226,232,178,200,1,5,1,5)); -Init_itm(897, Bry_.new_ints(226,232,178,228,1,5,1,5)); -Init_itm(898, Bry_.new_ints(226,232,179,4,1,5,1,5)); -Init_itm(899, Bry_.new_ints(226,232,179,32,1,5,1,5)); -Init_itm(900, Bry_.new_ints(13,12,1,5,1,5)); -Init_itm(901, Bry_.new_ints(13,20,1,134,141,1,6)); -Init_itm(902, Bry_.new_ints(91,10,1,134,141,1,143,5)); -Init_itm(903, Bry_.new_ints(10,78,1,5,1,5)); -Init_itm(904, Bry_.new_ints(91,20,1,134,141,1,143,5)); -Init_itm(905, Bry_.new_ints(91,32,1,134,141,1,143,5)); -Init_itm(906, Bry_.new_ints(91,36,1,134,141,1,143,5)); -Init_itm(907, Bry_.new_ints(226,232,180,4,1,5,1,5)); -Init_itm(908, Bry_.new_ints(91,52,1,134,141,1,143,5)); -Init_itm(909, Bry_.new_ints(226,232,180,60,1,5,1,5)); -Init_itm(910, Bry_.new_ints(91,80,1,134,141,1,143,5)); -Init_itm(911, Bry_.new_ints(91,90,1,134,141,1,143,5)); -Init_itm(912, Bry_.new_ints(91,36,1,134,157,141,1,7)); -Init_itm(913, Bry_.new_ints(91,10,1,5,1,143)); -Init_itm(914, Bry_.new_ints(91,12,1,5,1,143)); -Init_itm(915, Bry_.new_ints(91,14,1,5,1,143)); -Init_itm(916, Bry_.new_ints(91,18,1,5,1,143)); -Init_itm(917, Bry_.new_ints(91,20,1,5,1,143)); -Init_itm(918, Bry_.new_ints(91,28,1,5,1,143)); -Init_itm(919, Bry_.new_ints(91,32,1,5,1,143)); -Init_itm(920, Bry_.new_ints(91,34,1,5,1,143)); -Init_itm(921, Bry_.new_ints(91,36,1,5,1,143)); -Init_itm(922, Bry_.new_ints(91,40,1,5,1,143)); -Init_itm(923, Bry_.new_ints(91,42,1,5,1,143)); -Init_itm(924, Bry_.new_ints(91,46,1,5,1,143)); -Init_itm(925, Bry_.new_ints(91,48,1,5,1,143)); -Init_itm(926, Bry_.new_ints(91,50,1,5,1,143)); -Init_itm(927, Bry_.new_ints(91,52,1,5,1,143)); -Init_itm(928, Bry_.new_ints(91,54,1,5,1,143)); -Init_itm(929, Bry_.new_ints(91,64,1,5,1,143)); -Init_itm(930, Bry_.new_ints(226,232,182,144,1,5,1,5)); -Init_itm(931, Bry_.new_ints(91,70,1,5,1,143)); -Init_itm(932, Bry_.new_ints(91,78,1,5,1,143)); -Init_itm(933, Bry_.new_ints(91,80,1,5,1,143)); -Init_itm(934, Bry_.new_ints(91,82,1,5,1,143)); -Init_itm(935, Bry_.new_ints(91,84,1,5,1,143)); -Init_itm(936, Bry_.new_ints(91,86,1,5,1,143)); -Init_itm(937, Bry_.new_ints(91,90,1,5,1,143)); -Init_itm(938, Bry_.new_ints(91,36,1,134,157,1,143,5)); -Init_itm(939, Bry_.new_ints(91,80,1,134,157,1,143,5)); -Init_itm(940, Bry_.new_ints(91,10,1,134,141,1,6)); -Init_itm(941, Bry_.new_ints(91,20,1,134,141,1,6)); -Init_itm(942, Bry_.new_ints(91,32,1,134,141,1,6)); -Init_itm(943, Bry_.new_ints(91,36,1,134,141,1,6)); -Init_itm(944, Bry_.new_ints(91,80,1,134,157,141,1,7)); -Init_itm(945, Bry_.new_ints(91,10,1,5,1,5)); -Init_itm(946, Bry_.new_ints(91,12,1,5,1,5)); -Init_itm(947, Bry_.new_ints(91,14,1,5,1,5)); -Init_itm(948, Bry_.new_ints(91,18,1,5,1,5)); -Init_itm(949, Bry_.new_ints(91,20,1,5,1,5)); -Init_itm(950, Bry_.new_ints(91,28,1,5,1,5)); -Init_itm(951, Bry_.new_ints(91,32,1,5,1,5)); -Init_itm(952, Bry_.new_ints(91,34,1,5,1,5)); -Init_itm(953, Bry_.new_ints(91,36,1,5,1,5)); -Init_itm(954, Bry_.new_ints(91,40,1,5,1,5)); -Init_itm(955, Bry_.new_ints(91,42,1,5,1,5)); -Init_itm(956, Bry_.new_ints(91,46,1,5,1,5)); -Init_itm(957, Bry_.new_ints(91,48,1,5,1,5)); -Init_itm(958, Bry_.new_ints(91,50,1,5,1,5)); -Init_itm(959, Bry_.new_ints(91,52,1,5,1,5)); -Init_itm(960, Bry_.new_ints(91,54,1,5,1,5)); -Init_itm(961, Bry_.new_ints(91,64,1,5,1,5)); -Init_itm(962, Bry_.new_ints(91,70,1,5,1,177)); -Init_itm(963, Bry_.new_ints(91,70,1,5,1,5)); -Init_itm(964, Bry_.new_ints(91,78,1,5,1,5)); -Init_itm(965, Bry_.new_ints(91,80,1,5,1,5)); -Init_itm(966, Bry_.new_ints(91,82,1,5,1,5)); -Init_itm(967, Bry_.new_ints(91,84,1,5,1,5)); -Init_itm(968, Bry_.new_ints(91,86,1,5,1,5)); -Init_itm(969, Bry_.new_ints(91,90,1,5,1,5)); -Init_itm(970, Bry_.new_ints(91,36,1,134,157,1,6)); -Init_itm(971, Bry_.new_ints(91,80,1,134,157,1,6)); -Init_itm(972, Bry_.new_ints(91,52,1,134,141,1,6)); -Init_itm(973, Bry_.new_ints(91,80,1,134,141,1,6)); -Init_itm(974, Bry_.new_ints(91,90,1,134,141,1,6)); -Init_itm(975, Bry_.new_ints(91,40,10,36,1,7,1,147,137,189)); -Init_itm(976, Bry_.new_ints(91,12,1,5,1,137)); -Init_itm(977, Bry_.new_ints(91,34,1,5,1,137)); -Init_itm(978, Bry_.new_ints(91,80,1,5,1,147)); -Init_itm(979, Bry_.new_ints(91,80,1,134,141,1,147,5)); -Init_itm(980, Bry_.new_ints(91,80,1,134,157,1,147,5)); -Init_itm(981, Bry_.new_ints(91,82,1,5,1,137)); -Init_itm(982, Bry_.new_ints(91,54,1,5,1,137)); -Init_itm(983, Bry_.new_ints(91,40,10,36,1,7,1,137,137,189)); -Init_itm(984, Bry_.new_ints(91,62,1,5,1,143)); -Init_itm(985, Bry_.new_ints(91,62,1,5,1,5)); -Init_itm(986, Bry_.new_ints(91,26,1,5,1,143)); -Init_itm(987, Bry_.new_ints(91,26,1,5,1,5)); -Init_itm(988, Bry_.new_ints(91,22,1,5,1,143)); -Init_itm(989, Bry_.new_ints(91,22,1,5,1,5)); -Init_itm(990, Bry_.new_ints(91,60,1,5,1,143)); -Init_itm(991, Bry_.new_ints(91,60,1,5,1,5)); -Init_itm(992, Bry_.new_ints(91,92,1,5,1,143)); -Init_itm(993, Bry_.new_ints(91,92,1,5,1,5)); -Init_itm(994, Bry_.new_ints(91,98,252,1,5,1,143)); -Init_itm(995, Bry_.new_ints(91,98,252,1,5,1,5)); -Init_itm(996, Bry_.new_ints(91,99,42,1,5,1,143)); -Init_itm(997, Bry_.new_ints(91,99,42,1,5,1,5)); -Init_itm(998, Bry_.new_ints(91,99,50,1,5,1,143)); -Init_itm(999, Bry_.new_ints(91,99,50,1,5,1,5)); -Init_itm(1000, Bry_.new_ints(91,99,74,1,5,1,143)); -Init_itm(1001, Bry_.new_ints(91,99,74,1,5,1,5)); -Init_itm(1002, Bry_.new_ints(91,99,130,1,5,1,143)); -Init_itm(1003, Bry_.new_ints(91,99,130,1,5,1,5)); -Init_itm(1004, Bry_.new_ints(91,99,154,1,5,1,143)); -Init_itm(1005, Bry_.new_ints(91,99,154,1,5,1,5)); -Init_itm(1006, Bry_.new_ints(91,99,186,1,5,1,143)); -Init_itm(1007, Bry_.new_ints(91,99,186,1,5,1,5)); -Init_itm(1008, Bry_.new_ints(91,40,1,5,1,137)); -Init_itm(1009, Bry_.new_ints(91,64,1,5,1,137)); -Init_itm(1010, Bry_.new_ints(91,70,1,5,1,137)); -Init_itm(1011, Bry_.new_ints(91,38,1,5,1,5)); -Init_itm(1012, Bry_.new_ints(91,34,1,5,1,147)); -Init_itm(1013, Bry_.new_ints(91,20,1,5,1,137)); -Init_itm(1014, Bry_.new_ints(13,94,100,1,5,1,5)); -Init_itm(1015, Bry_.new_ints(91,96,1,5,1,143)); -Init_itm(1016, Bry_.new_ints(91,96,1,5,1,5)); -Init_itm(1017, Bry_.new_ints(91,70,1,5,1,147)); -Init_itm(1018, Bry_.new_ints(91,58,1,5,1,143)); -Init_itm(1019, Bry_.new_ints(91,58,1,5,1,5)); -Init_itm(1020, Bry_.new_ints(91,68,1,5,1,5)); -Init_itm(1021, Bry_.new_ints(91,74,1,5,1,143)); -Init_itm(1022, Bry_.new_ints(91,72,1,5,1,143)); -Init_itm(1023, Bry_.new_ints(91,76,1,5,1,143)); -Init_itm(1024, Bry_.new_ints(92,52,1,134,143,1,143,5)); +Init_itm(1, Bry_.New_by_ints(1,1)); +Init_itm(2, Bry_.New_by_ints(1,1)); +Init_itm(3, Bry_.New_by_ints(1,1)); +Init_itm(4, Bry_.New_by_ints(1,1)); +Init_itm(5, Bry_.New_by_ints(1,1)); +Init_itm(6, Bry_.New_by_ints(1,1)); +Init_itm(7, Bry_.New_by_ints(1,1)); +Init_itm(8, Bry_.New_by_ints(1,1)); +Init_itm(9, Bry_.New_by_ints(3,64,1,5,1,5)); +Init_itm(10, Bry_.New_by_ints(3,66,1,5,1,5)); +Init_itm(11, Bry_.New_by_ints(3,68,1,5,1,5)); +Init_itm(12, Bry_.New_by_ints(3,70,1,5,1,5)); +Init_itm(13, Bry_.New_by_ints(3,72,1,5,1,5)); +Init_itm(14, Bry_.New_by_ints(1,1)); +Init_itm(15, Bry_.New_by_ints(1,1)); +Init_itm(16, Bry_.New_by_ints(1,1)); +Init_itm(17, Bry_.New_by_ints(1,1)); +Init_itm(18, Bry_.New_by_ints(1,1)); +Init_itm(19, Bry_.New_by_ints(1,1)); +Init_itm(20, Bry_.New_by_ints(1,1)); +Init_itm(21, Bry_.New_by_ints(1,1)); +Init_itm(22, Bry_.New_by_ints(1,1)); +Init_itm(23, Bry_.New_by_ints(1,1)); +Init_itm(24, Bry_.New_by_ints(1,1)); +Init_itm(25, Bry_.New_by_ints(1,1)); +Init_itm(26, Bry_.New_by_ints(1,1)); +Init_itm(27, Bry_.New_by_ints(1,1)); +Init_itm(28, Bry_.New_by_ints(1,1)); +Init_itm(29, Bry_.New_by_ints(1,1)); +Init_itm(30, Bry_.New_by_ints(1,1)); +Init_itm(31, Bry_.New_by_ints(1,1)); +Init_itm(32, Bry_.New_by_ints(4,1,5,1,5)); +Init_itm(33, Bry_.New_by_ints(8,129,1,5,1,5)); +Init_itm(34, Bry_.New_by_ints(10,161,1,5,1,5)); +Init_itm(35, Bry_.New_by_ints(11,177,1,5,1,5)); +Init_itm(36, Bry_.New_by_ints(15,14,1,5,1,5)); +Init_itm(37, Bry_.New_by_ints(11,179,1,5,1,5)); +Init_itm(38, Bry_.New_by_ints(11,173,1,5,1,5)); +Init_itm(39, Bry_.New_by_ints(10,147,1,5,1,5)); +Init_itm(40, Bry_.New_by_ints(10,181,1,5,1,5)); +Init_itm(41, Bry_.New_by_ints(10,183,1,5,1,5)); +Init_itm(42, Bry_.New_by_ints(11,159,1,5,1,5)); +Init_itm(43, Bry_.New_by_ints(13,95,1,5,1,5)); +Init_itm(44, Bry_.New_by_ints(7,1,5,1,5)); +Init_itm(45, Bry_.New_by_ints(6,70,1,5,1,5)); +Init_itm(46, Bry_.New_by_ints(9,1,5,1,5)); +Init_itm(47, Bry_.New_by_ints(11,169,1,5,1,5)); +Init_itm(48, Bry_.New_by_ints(18,1,5,1,5)); +Init_itm(49, Bry_.New_by_ints(20,1,5,1,5)); +Init_itm(50, Bry_.New_by_ints(22,1,5,1,5)); +Init_itm(51, Bry_.New_by_ints(24,1,5,1,5)); +Init_itm(52, Bry_.New_by_ints(26,1,5,1,5)); +Init_itm(53, Bry_.New_by_ints(28,1,5,1,5)); +Init_itm(54, Bry_.New_by_ints(30,1,5,1,5)); +Init_itm(55, Bry_.New_by_ints(32,1,5,1,5)); +Init_itm(56, Bry_.New_by_ints(34,1,5,1,5)); +Init_itm(57, Bry_.New_by_ints(36,1,5,1,5)); +Init_itm(58, Bry_.New_by_ints(8,97,1,5,1,5)); +Init_itm(59, Bry_.New_by_ints(8,88,1,5,1,5)); +Init_itm(60, Bry_.New_by_ints(13,103,1,5,1,5)); +Init_itm(61, Bry_.New_by_ints(13,105,1,5,1,5)); +Init_itm(62, Bry_.New_by_ints(13,107,1,5,1,5)); +Init_itm(63, Bry_.New_by_ints(8,136,1,5,1,5)); +Init_itm(64, Bry_.New_by_ints(11,157,1,5,1,5)); +Init_itm(65, Bry_.New_by_ints(39,1,5,1,143)); +Init_itm(66, Bry_.New_by_ints(41,1,5,1,143)); +Init_itm(67, Bry_.New_by_ints(43,1,5,1,143)); +Init_itm(68, Bry_.New_by_ints(45,1,5,1,143)); +Init_itm(69, Bry_.New_by_ints(47,1,5,1,143)); +Init_itm(70, Bry_.New_by_ints(49,1,5,1,143)); +Init_itm(71, Bry_.New_by_ints(51,1,5,1,143)); +Init_itm(72, Bry_.New_by_ints(53,1,5,1,143)); +Init_itm(73, Bry_.New_by_ints(55,1,5,1,143)); +Init_itm(74, Bry_.New_by_ints(57,1,5,1,143)); +Init_itm(75, Bry_.New_by_ints(59,1,5,1,143)); +Init_itm(76, Bry_.New_by_ints(61,1,5,1,143)); +Init_itm(77, Bry_.New_by_ints(63,1,5,1,143)); +Init_itm(78, Bry_.New_by_ints(65,1,5,1,143)); +Init_itm(79, Bry_.New_by_ints(67,1,5,1,143)); +Init_itm(80, Bry_.New_by_ints(69,1,5,1,143)); +Init_itm(81, Bry_.New_by_ints(71,1,5,1,143)); +Init_itm(82, Bry_.New_by_ints(73,1,5,1,143)); +Init_itm(83, Bry_.New_by_ints(75,1,5,1,143)); +Init_itm(84, Bry_.New_by_ints(77,1,5,1,143)); +Init_itm(85, Bry_.New_by_ints(79,1,5,1,143)); +Init_itm(86, Bry_.New_by_ints(81,1,5,1,143)); +Init_itm(87, Bry_.New_by_ints(83,1,5,1,143)); +Init_itm(88, Bry_.New_by_ints(85,1,5,1,143)); +Init_itm(89, Bry_.New_by_ints(87,1,5,1,143)); +Init_itm(90, Bry_.New_by_ints(89,1,5,1,143)); +Init_itm(91, Bry_.New_by_ints(10,185,1,5,1,5)); +Init_itm(92, Bry_.New_by_ints(11,171,1,5,1,5)); +Init_itm(93, Bry_.New_by_ints(10,187,1,5,1,5)); +Init_itm(94, Bry_.New_by_ints(13,15,1,5,1,5)); +Init_itm(95, Bry_.New_by_ints(6,66,1,5,1,5)); +Init_itm(96, Bry_.New_by_ints(13,10,1,5,1,5)); +Init_itm(97, Bry_.New_by_ints(39,1,5,1,5)); +Init_itm(98, Bry_.New_by_ints(41,1,5,1,5)); +Init_itm(99, Bry_.New_by_ints(43,1,5,1,5)); +Init_itm(100, Bry_.New_by_ints(45,1,5,1,5)); +Init_itm(101, Bry_.New_by_ints(47,1,5,1,5)); +Init_itm(102, Bry_.New_by_ints(49,1,5,1,5)); +Init_itm(103, Bry_.New_by_ints(51,1,5,1,5)); +Init_itm(104, Bry_.New_by_ints(53,1,5,1,5)); +Init_itm(105, Bry_.New_by_ints(55,1,5,1,5)); +Init_itm(106, Bry_.New_by_ints(57,1,5,1,5)); +Init_itm(107, Bry_.New_by_ints(59,1,5,1,5)); +Init_itm(108, Bry_.New_by_ints(61,1,5,1,5)); +Init_itm(109, Bry_.New_by_ints(63,1,5,1,5)); +Init_itm(110, Bry_.New_by_ints(65,1,5,1,5)); +Init_itm(111, Bry_.New_by_ints(67,1,5,1,5)); +Init_itm(112, Bry_.New_by_ints(69,1,5,1,5)); +Init_itm(113, Bry_.New_by_ints(71,1,5,1,5)); +Init_itm(114, Bry_.New_by_ints(73,1,5,1,5)); +Init_itm(115, Bry_.New_by_ints(75,1,5,1,5)); +Init_itm(116, Bry_.New_by_ints(77,1,5,1,5)); +Init_itm(117, Bry_.New_by_ints(79,1,5,1,5)); +Init_itm(118, Bry_.New_by_ints(81,1,5,1,5)); +Init_itm(119, Bry_.New_by_ints(83,1,5,1,5)); +Init_itm(120, Bry_.New_by_ints(85,1,5,1,5)); +Init_itm(121, Bry_.New_by_ints(87,1,5,1,5)); +Init_itm(122, Bry_.New_by_ints(89,1,5,1,5)); +Init_itm(123, Bry_.New_by_ints(10,189,1,5,1,5)); +Init_itm(124, Bry_.New_by_ints(13,111,1,5,1,5)); +Init_itm(125, Bry_.New_by_ints(10,191,1,5,1,5)); +Init_itm(126, Bry_.New_by_ints(13,115,1,5,1,5)); +Init_itm(127, Bry_.New_by_ints(1,1)); +Init_itm(128, Bry_.New_by_ints(1,1)); +Init_itm(129, Bry_.New_by_ints(1,1)); +Init_itm(130, Bry_.New_by_ints(1,1)); +Init_itm(131, Bry_.New_by_ints(1,1)); +Init_itm(132, Bry_.New_by_ints(1,1)); +Init_itm(133, Bry_.New_by_ints(3,74,1,5,1,5)); +Init_itm(134, Bry_.New_by_ints(1,1)); +Init_itm(135, Bry_.New_by_ints(1,1)); +Init_itm(136, Bry_.New_by_ints(1,1)); +Init_itm(137, Bry_.New_by_ints(1,1)); +Init_itm(138, Bry_.New_by_ints(1,1)); +Init_itm(139, Bry_.New_by_ints(1,1)); +Init_itm(140, Bry_.New_by_ints(1,1)); +Init_itm(141, Bry_.New_by_ints(1,1)); +Init_itm(142, Bry_.New_by_ints(1,1)); +Init_itm(143, Bry_.New_by_ints(1,1)); +Init_itm(144, Bry_.New_by_ints(1,1)); +Init_itm(145, Bry_.New_by_ints(1,1)); +Init_itm(146, Bry_.New_by_ints(1,1)); +Init_itm(147, Bry_.New_by_ints(1,1)); +Init_itm(148, Bry_.New_by_ints(1,1)); +Init_itm(149, Bry_.New_by_ints(1,1)); +Init_itm(150, Bry_.New_by_ints(1,1)); +Init_itm(151, Bry_.New_by_ints(1,1)); +Init_itm(152, Bry_.New_by_ints(1,1)); +Init_itm(153, Bry_.New_by_ints(1,1)); +Init_itm(154, Bry_.New_by_ints(1,1)); +Init_itm(155, Bry_.New_by_ints(1,1)); +Init_itm(156, Bry_.New_by_ints(1,1)); +Init_itm(157, Bry_.New_by_ints(1,1)); +Init_itm(158, Bry_.New_by_ints(1,1)); +Init_itm(159, Bry_.New_by_ints(1,1)); +Init_itm(160, Bry_.New_by_ints(4,1,5,1,181)); +Init_itm(161, Bry_.New_by_ints(8,131,1,5,1,5)); +Init_itm(162, Bry_.New_by_ints(15,12,1,5,1,5)); +Init_itm(163, Bry_.New_by_ints(15,16,1,5,1,5)); +Init_itm(164, Bry_.New_by_ints(15,10,1,5,1,5)); +Init_itm(165, Bry_.New_by_ints(15,18,1,5,1,5)); +Init_itm(166, Bry_.New_by_ints(13,113,1,5,1,5)); +Init_itm(167, Bry_.New_by_ints(11,149,1,5,1,5)); +Init_itm(168, Bry_.New_by_ints(13,20,1,5,1,5)); +Init_itm(169, Bry_.New_by_ints(13,86,1,5,1,5)); +Init_itm(170, Bry_.New_by_ints(39,1,5,1,167)); +Init_itm(171, Bry_.New_by_ints(10,177,1,5,1,5)); +Init_itm(172, Bry_.New_by_ints(13,109,1,5,1,5)); +Init_itm(173, Bry_.New_by_ints(1,1)); +Init_itm(174, Bry_.New_by_ints(13,88,1,5,1,5)); +Init_itm(175, Bry_.New_by_ints(13,17,1,5,1,5)); +Init_itm(176, Bry_.New_by_ints(13,79,1,5,1,5)); +Init_itm(177, Bry_.New_by_ints(13,97,1,5,1,5)); +Init_itm(178, Bry_.New_by_ints(22,1,5,1,167)); +Init_itm(179, Bry_.New_by_ints(24,1,5,1,167)); +Init_itm(180, Bry_.New_by_ints(13,12,1,5,1,5)); +Init_itm(181, Bry_.New_by_ints(91,46,1,5,1,137)); +Init_itm(182, Bry_.New_by_ints(11,153,1,5,1,5)); +Init_itm(183, Bry_.New_by_ints(10,78,1,5,1,5)); +Init_itm(184, Bry_.New_by_ints(13,23,1,5,1,5)); +Init_itm(185, Bry_.New_by_ints(20,1,5,1,167)); +Init_itm(186, Bry_.New_by_ints(67,1,5,1,167)); +Init_itm(187, Bry_.New_by_ints(10,179,1,5,1,5)); +Init_itm(188, Bry_.New_by_ints(20,13,117,44,26,1,7,1,187,187,189)); +Init_itm(189, Bry_.New_by_ints(20,13,117,44,22,1,7,1,187,187,189)); +Init_itm(190, Bry_.New_by_ints(24,13,117,44,26,1,7,1,187,187,189)); +Init_itm(191, Bry_.New_by_ints(8,138,1,5,1,5)); +Init_itm(192, Bry_.New_by_ints(39,1,134,143,1,143,5)); +Init_itm(193, Bry_.New_by_ints(39,1,134,141,1,143,5)); +Init_itm(194, Bry_.New_by_ints(39,1,134,147,1,143,5)); +Init_itm(195, Bry_.New_by_ints(39,1,134,161,1,143,5)); +Init_itm(196, Bry_.New_by_ints(39,1,134,157,1,143,5)); +Init_itm(197, Bry_.New_by_ints(39,1,134,153,1,143,5)); +Init_itm(198, Bry_.New_by_ints(39,47,1,134,219,169,5,1,147,137,189)); +Init_itm(199, Bry_.New_by_ints(43,1,134,167,1,143,5)); +Init_itm(200, Bry_.New_by_ints(47,1,134,143,1,143,5)); +Init_itm(201, Bry_.New_by_ints(47,1,134,141,1,143,5)); +Init_itm(202, Bry_.New_by_ints(47,1,134,147,1,143,5)); +Init_itm(203, Bry_.New_by_ints(47,1,134,157,1,143,5)); +Init_itm(204, Bry_.New_by_ints(55,1,134,143,1,143,5)); +Init_itm(205, Bry_.New_by_ints(55,1,134,141,1,143,5)); +Init_itm(206, Bry_.New_by_ints(55,1,134,147,1,143,5)); +Init_itm(207, Bry_.New_by_ints(55,1,134,157,1,143,5)); +Init_itm(208, Bry_.New_by_ints(45,1,134,219,169,1,147,137)); +Init_itm(209, Bry_.New_by_ints(65,1,134,161,1,143,5)); +Init_itm(210, Bry_.New_by_ints(67,1,134,143,1,143,5)); +Init_itm(211, Bry_.New_by_ints(67,1,134,141,1,143,5)); +Init_itm(212, Bry_.New_by_ints(67,1,134,147,1,143,5)); +Init_itm(213, Bry_.New_by_ints(67,1,134,161,1,143,5)); +Init_itm(214, Bry_.New_by_ints(67,1,134,157,1,143,5)); +Init_itm(215, Bry_.New_by_ints(13,101,1,5,1,5)); +Init_itm(216, Bry_.New_by_ints(67,1,134,165,1,143,5)); +Init_itm(217, Bry_.New_by_ints(79,1,134,143,1,143,5)); +Init_itm(218, Bry_.New_by_ints(79,1,134,141,1,143,5)); +Init_itm(219, Bry_.New_by_ints(79,1,134,147,1,143,5)); +Init_itm(220, Bry_.New_by_ints(79,1,134,157,1,143,5)); +Init_itm(221, Bry_.New_by_ints(87,1,134,141,1,143,5)); +Init_itm(222, Bry_.New_by_ints(90,96,1,5,1,143)); +Init_itm(223, Bry_.New_by_ints(75,75,1,134,219,169,5,1,137,137,189)); +Init_itm(224, Bry_.New_by_ints(39,1,134,143,1,6)); +Init_itm(225, Bry_.New_by_ints(39,1,134,141,1,6)); +Init_itm(226, Bry_.New_by_ints(39,1,134,147,1,6)); +Init_itm(227, Bry_.New_by_ints(39,1,134,161,1,6)); +Init_itm(228, Bry_.New_by_ints(39,1,134,157,1,6)); +Init_itm(229, Bry_.New_by_ints(39,1,134,153,1,6)); +Init_itm(230, Bry_.New_by_ints(39,47,1,134,219,169,5,1,137,137,189)); +Init_itm(231, Bry_.New_by_ints(43,1,134,167,1,6)); +Init_itm(232, Bry_.New_by_ints(47,1,134,143,1,6)); +Init_itm(233, Bry_.New_by_ints(47,1,134,141,1,6)); +Init_itm(234, Bry_.New_by_ints(47,1,134,147,1,6)); +Init_itm(235, Bry_.New_by_ints(47,1,134,157,1,6)); +Init_itm(236, Bry_.New_by_ints(55,1,134,143,1,6)); +Init_itm(237, Bry_.New_by_ints(55,1,134,141,1,6)); +Init_itm(238, Bry_.New_by_ints(55,1,134,147,1,6)); +Init_itm(239, Bry_.New_by_ints(55,1,134,157,1,6)); +Init_itm(240, Bry_.New_by_ints(45,1,134,219,169,1,137,137)); +Init_itm(241, Bry_.New_by_ints(65,1,134,161,1,6)); +Init_itm(242, Bry_.New_by_ints(67,1,134,143,1,6)); +Init_itm(243, Bry_.New_by_ints(67,1,134,141,1,6)); +Init_itm(244, Bry_.New_by_ints(67,1,134,147,1,6)); +Init_itm(245, Bry_.New_by_ints(67,1,134,161,1,6)); +Init_itm(246, Bry_.New_by_ints(67,1,134,157,1,6)); +Init_itm(247, Bry_.New_by_ints(13,99,1,5,1,5)); +Init_itm(248, Bry_.New_by_ints(67,1,134,165,1,6)); +Init_itm(249, Bry_.New_by_ints(79,1,134,143,1,6)); +Init_itm(250, Bry_.New_by_ints(79,1,134,141,1,6)); +Init_itm(251, Bry_.New_by_ints(79,1,134,147,1,6)); +Init_itm(252, Bry_.New_by_ints(79,1,134,157,1,6)); +Init_itm(253, Bry_.New_by_ints(87,1,134,141,1,6)); +Init_itm(254, Bry_.New_by_ints(90,96,1,5,1,5)); +Init_itm(255, Bry_.New_by_ints(87,1,134,157,1,6)); +Init_itm(256, Bry_.New_by_ints(39,1,134,171,1,143,5)); +Init_itm(257, Bry_.New_by_ints(39,1,134,171,1,6)); +Init_itm(258, Bry_.New_by_ints(39,1,134,145,1,143,5)); +Init_itm(259, Bry_.New_by_ints(39,1,134,145,1,6)); +Init_itm(260, Bry_.New_by_ints(39,1,134,169,1,143,5)); +Init_itm(261, Bry_.New_by_ints(39,1,134,169,1,6)); +Init_itm(262, Bry_.New_by_ints(43,1,134,141,1,143,5)); +Init_itm(263, Bry_.New_by_ints(43,1,134,141,1,6)); +Init_itm(264, Bry_.New_by_ints(43,1,134,147,1,143,5)); +Init_itm(265, Bry_.New_by_ints(43,1,134,147,1,6)); +Init_itm(266, Bry_.New_by_ints(43,1,134,163,1,143,5)); +Init_itm(267, Bry_.New_by_ints(43,1,134,163,1,6)); +Init_itm(268, Bry_.New_by_ints(43,1,134,151,1,143,5)); +Init_itm(269, Bry_.New_by_ints(43,1,134,151,1,6)); +Init_itm(270, Bry_.New_by_ints(45,1,134,151,1,143,5)); +Init_itm(271, Bry_.New_by_ints(45,1,134,151,1,6)); +Init_itm(272, Bry_.New_by_ints(45,1,134,208,61,1,143,5)); +Init_itm(273, Bry_.New_by_ints(45,1,134,208,61,1,6)); +Init_itm(274, Bry_.New_by_ints(47,1,134,171,1,143,5)); +Init_itm(275, Bry_.New_by_ints(47,1,134,171,1,6)); +Init_itm(276, Bry_.New_by_ints(47,1,134,145,1,143,5)); +Init_itm(277, Bry_.New_by_ints(47,1,134,145,1,6)); +Init_itm(278, Bry_.New_by_ints(47,1,134,163,1,143,5)); +Init_itm(279, Bry_.New_by_ints(47,1,134,163,1,6)); +Init_itm(280, Bry_.New_by_ints(47,1,134,169,1,143,5)); +Init_itm(281, Bry_.New_by_ints(47,1,134,169,1,6)); +Init_itm(282, Bry_.New_by_ints(47,1,134,151,1,143,5)); +Init_itm(283, Bry_.New_by_ints(47,1,134,151,1,6)); +Init_itm(284, Bry_.New_by_ints(51,1,134,147,1,143,5)); +Init_itm(285, Bry_.New_by_ints(51,1,134,147,1,6)); +Init_itm(286, Bry_.New_by_ints(51,1,134,145,1,143,5)); +Init_itm(287, Bry_.New_by_ints(51,1,134,145,1,6)); +Init_itm(288, Bry_.New_by_ints(51,1,134,163,1,143,5)); +Init_itm(289, Bry_.New_by_ints(51,1,134,163,1,6)); +Init_itm(290, Bry_.New_by_ints(51,1,134,167,1,143,5)); +Init_itm(291, Bry_.New_by_ints(51,1,134,167,1,6)); +Init_itm(292, Bry_.New_by_ints(53,1,134,147,1,143,5)); +Init_itm(293, Bry_.New_by_ints(53,1,134,147,1,6)); +Init_itm(294, Bry_.New_by_ints(53,1,134,208,61,1,143,5)); +Init_itm(295, Bry_.New_by_ints(53,1,134,208,61,1,6)); +Init_itm(296, Bry_.New_by_ints(55,1,134,161,1,143,5)); +Init_itm(297, Bry_.New_by_ints(55,1,134,161,1,6)); +Init_itm(298, Bry_.New_by_ints(55,1,134,171,1,143,5)); +Init_itm(299, Bry_.New_by_ints(55,1,134,171,1,6)); +Init_itm(300, Bry_.New_by_ints(55,1,134,145,1,143,5)); +Init_itm(301, Bry_.New_by_ints(55,1,134,145,1,6)); +Init_itm(302, Bry_.New_by_ints(55,1,134,169,1,143,5)); +Init_itm(303, Bry_.New_by_ints(55,1,134,169,1,6)); +Init_itm(304, Bry_.New_by_ints(55,1,134,163,1,143,5)); +Init_itm(305, Bry_.New_by_ints(56,64,1,5,1,5)); +Init_itm(306, Bry_.New_by_ints(55,57,1,6,1,147,147)); +Init_itm(307, Bry_.New_by_ints(55,57,1,6,1,137,137)); +Init_itm(308, Bry_.New_by_ints(57,1,134,147,1,143,5)); +Init_itm(309, Bry_.New_by_ints(57,1,134,147,1,6)); +Init_itm(310, Bry_.New_by_ints(59,1,134,167,1,143,5)); +Init_itm(311, Bry_.New_by_ints(59,1,134,167,1,6)); +Init_itm(312, Bry_.New_by_ints(72,72,1,5,1,5)); +Init_itm(313, Bry_.New_by_ints(61,1,134,141,1,143,5)); +Init_itm(314, Bry_.New_by_ints(61,1,134,141,1,6)); +Init_itm(315, Bry_.New_by_ints(61,1,134,167,1,143,5)); +Init_itm(316, Bry_.New_by_ints(61,1,134,167,1,6)); +Init_itm(317, Bry_.New_by_ints(61,1,134,151,1,143,5)); +Init_itm(318, Bry_.New_by_ints(61,1,134,151,1,6)); +Init_itm(319, Bry_.New_by_ints(61,1,134,219,169,1,143,5)); +Init_itm(320, Bry_.New_by_ints(61,1,134,219,169,1,6)); +Init_itm(321, Bry_.New_by_ints(61,1,134,208,61,1,143,5)); +Init_itm(322, Bry_.New_by_ints(61,1,134,208,61,1,6)); +Init_itm(323, Bry_.New_by_ints(65,1,134,141,1,143,5)); +Init_itm(324, Bry_.New_by_ints(65,1,134,141,1,6)); +Init_itm(325, Bry_.New_by_ints(65,1,134,167,1,143,5)); +Init_itm(326, Bry_.New_by_ints(65,1,134,167,1,6)); +Init_itm(327, Bry_.New_by_ints(65,1,134,151,1,143,5)); +Init_itm(328, Bry_.New_by_ints(65,1,134,151,1,6)); +Init_itm(329, Bry_.New_by_ints(90,134,65,1,6,1,137,137)); +Init_itm(330, Bry_.New_by_ints(66,86,1,5,1,143)); +Init_itm(331, Bry_.New_by_ints(66,86,1,5,1,5)); +Init_itm(332, Bry_.New_by_ints(67,1,134,171,1,143,5)); +Init_itm(333, Bry_.New_by_ints(67,1,134,171,1,6)); +Init_itm(334, Bry_.New_by_ints(67,1,134,145,1,143,5)); +Init_itm(335, Bry_.New_by_ints(67,1,134,145,1,6)); +Init_itm(336, Bry_.New_by_ints(67,1,134,159,1,143,5)); +Init_itm(337, Bry_.New_by_ints(67,1,134,159,1,6)); +Init_itm(338, Bry_.New_by_ints(67,47,1,134,219,169,5,1,147,137,189)); +Init_itm(339, Bry_.New_by_ints(67,47,1,134,219,169,5,1,137,137,189)); +Init_itm(340, Bry_.New_by_ints(73,1,134,141,1,143,5)); +Init_itm(341, Bry_.New_by_ints(73,1,134,141,1,6)); +Init_itm(342, Bry_.New_by_ints(73,1,134,167,1,143,5)); +Init_itm(343, Bry_.New_by_ints(73,1,134,167,1,6)); +Init_itm(344, Bry_.New_by_ints(73,1,134,151,1,143,5)); +Init_itm(345, Bry_.New_by_ints(73,1,134,151,1,6)); +Init_itm(346, Bry_.New_by_ints(75,1,134,141,1,143,5)); +Init_itm(347, Bry_.New_by_ints(75,1,134,141,1,6)); +Init_itm(348, Bry_.New_by_ints(75,1,134,147,1,143,5)); +Init_itm(349, Bry_.New_by_ints(75,1,134,147,1,6)); +Init_itm(350, Bry_.New_by_ints(75,1,134,167,1,143,5)); +Init_itm(351, Bry_.New_by_ints(75,1,134,167,1,6)); +Init_itm(352, Bry_.New_by_ints(75,1,134,151,1,143,5)); +Init_itm(353, Bry_.New_by_ints(75,1,134,151,1,6)); +Init_itm(354, Bry_.New_by_ints(77,1,134,167,1,143,5)); +Init_itm(355, Bry_.New_by_ints(77,1,134,167,1,6)); +Init_itm(356, Bry_.New_by_ints(77,1,134,151,1,143,5)); +Init_itm(357, Bry_.New_by_ints(77,1,134,151,1,6)); +Init_itm(358, Bry_.New_by_ints(78,66,1,5,1,143)); +Init_itm(359, Bry_.New_by_ints(78,66,1,5,1,5)); +Init_itm(360, Bry_.New_by_ints(79,1,134,161,1,143,5)); +Init_itm(361, Bry_.New_by_ints(79,1,134,161,1,6)); +Init_itm(362, Bry_.New_by_ints(79,1,134,171,1,143,5)); +Init_itm(363, Bry_.New_by_ints(79,1,134,171,1,6)); +Init_itm(364, Bry_.New_by_ints(79,1,134,145,1,143,5)); +Init_itm(365, Bry_.New_by_ints(79,1,134,145,1,6)); +Init_itm(366, Bry_.New_by_ints(79,1,134,153,1,143,5)); +Init_itm(367, Bry_.New_by_ints(79,1,134,153,1,6)); +Init_itm(368, Bry_.New_by_ints(79,1,134,159,1,143,5)); +Init_itm(369, Bry_.New_by_ints(79,1,134,159,1,6)); +Init_itm(370, Bry_.New_by_ints(79,1,134,169,1,143,5)); +Init_itm(371, Bry_.New_by_ints(79,1,134,169,1,6)); +Init_itm(372, Bry_.New_by_ints(83,1,134,147,1,143,5)); +Init_itm(373, Bry_.New_by_ints(83,1,134,147,1,6)); +Init_itm(374, Bry_.New_by_ints(87,1,134,147,1,143,5)); +Init_itm(375, Bry_.New_by_ints(87,1,134,147,1,6)); +Init_itm(376, Bry_.New_by_ints(87,1,134,157,1,143,5)); +Init_itm(377, Bry_.New_by_ints(89,1,134,141,1,143,5)); +Init_itm(378, Bry_.New_by_ints(89,1,134,141,1,6)); +Init_itm(379, Bry_.New_by_ints(89,1,134,163,1,143,5)); +Init_itm(380, Bry_.New_by_ints(89,1,134,163,1,6)); +Init_itm(381, Bry_.New_by_ints(89,1,134,151,1,143,5)); +Init_itm(382, Bry_.New_by_ints(89,1,134,151,1,6)); +Init_itm(383, Bry_.New_by_ints(75,1,134,219,185,1,137,137)); +Init_itm(384, Bry_.New_by_ints(42,66,1,5,1,5)); +Init_itm(385, Bry_.New_by_ints(42,76,1,5,1,143)); +Init_itm(386, Bry_.New_by_ints(42,78,1,5,1,143)); +Init_itm(387, Bry_.New_by_ints(42,78,1,5,1,5)); +Init_itm(388, Bry_.New_by_ints(90,126,1,5,1,143)); +Init_itm(389, Bry_.New_by_ints(90,126,1,5,1,5)); +Init_itm(390, Bry_.New_by_ints(68,74,1,5,1,143)); +Init_itm(391, Bry_.New_by_ints(44,70,1,5,1,143)); +Init_itm(392, Bry_.New_by_ints(44,70,1,5,1,5)); +Init_itm(393, Bry_.New_by_ints(46,72,1,5,1,143)); +Init_itm(394, Bry_.New_by_ints(46,74,1,5,1,143)); +Init_itm(395, Bry_.New_by_ints(46,78,1,5,1,143)); +Init_itm(396, Bry_.New_by_ints(46,78,1,5,1,5)); +Init_itm(397, Bry_.New_by_ints(89,83,1,6,1,137,137)); +Init_itm(398, Bry_.New_by_ints(48,72,1,5,1,143)); +Init_itm(399, Bry_.New_by_ints(48,76,1,5,1,143)); +Init_itm(400, Bry_.New_by_ints(48,80,1,5,1,143)); +Init_itm(401, Bry_.New_by_ints(50,70,1,5,1,143)); +Init_itm(402, Bry_.New_by_ints(50,70,1,5,1,5)); +Init_itm(403, Bry_.New_by_ints(52,72,1,5,1,143)); +Init_itm(404, Bry_.New_by_ints(52,80,1,5,1,143)); +Init_itm(405, Bry_.New_by_ints(54,66,1,5,1,5)); +Init_itm(406, Bry_.New_by_ints(56,78,1,5,1,143)); +Init_itm(407, Bry_.New_by_ints(56,72,1,5,1,143)); +Init_itm(408, Bry_.New_by_ints(60,68,1,5,1,143)); +Init_itm(409, Bry_.New_by_ints(60,68,1,5,1,5)); +Init_itm(410, Bry_.New_by_ints(62,72,1,5,1,5)); +Init_itm(411, Bry_.New_by_ints(62,94,1,5,1,5)); +Init_itm(412, Bry_.New_by_ints(80,84,1,5,1,143)); +Init_itm(413, Bry_.New_by_ints(66,72,1,5,1,143)); +Init_itm(414, Bry_.New_by_ints(66,74,1,5,1,5)); +Init_itm(415, Bry_.New_by_ints(68,90,1,5,1,143)); +Init_itm(416, Bry_.New_by_ints(67,1,134,191,1,143,5)); +Init_itm(417, Bry_.New_by_ints(67,1,134,191,1,6)); +Init_itm(418, Bry_.New_by_ints(52,82,1,5,1,143)); +Init_itm(419, Bry_.New_by_ints(52,82,1,5,1,5)); +Init_itm(420, Bry_.New_by_ints(70,74,1,5,1,143)); +Init_itm(421, Bry_.New_by_ints(70,74,1,5,1,5)); +Init_itm(422, Bry_.New_by_ints(74,64,1,5,1,143)); +Init_itm(423, Bry_.New_by_ints(90,122,1,5,1,143)); +Init_itm(424, Bry_.New_by_ints(90,122,1,5,1,5)); +Init_itm(425, Bry_.New_by_ints(76,78,1,5,1,143)); +Init_itm(426, Bry_.New_by_ints(76,82,1,5,1,5)); +Init_itm(427, Bry_.New_by_ints(78,72,1,5,1,5)); +Init_itm(428, Bry_.New_by_ints(78,74,1,5,1,143)); +Init_itm(429, Bry_.New_by_ints(78,74,1,5,1,5)); +Init_itm(430, Bry_.New_by_ints(78,76,1,5,1,143)); +Init_itm(431, Bry_.New_by_ints(79,1,134,191,1,143,5)); +Init_itm(432, Bry_.New_by_ints(79,1,134,191,1,6)); +Init_itm(433, Bry_.New_by_ints(80,92,1,5,1,143)); +Init_itm(434, Bry_.New_by_ints(82,70,1,5,1,143)); +Init_itm(435, Bry_.New_by_ints(88,68,1,5,1,143)); +Init_itm(436, Bry_.New_by_ints(88,68,1,5,1,5)); +Init_itm(437, Bry_.New_by_ints(90,66,1,5,1,143)); +Init_itm(438, Bry_.New_by_ints(90,66,1,5,1,5)); +Init_itm(439, Bry_.New_by_ints(90,84,1,5,1,143)); +Init_itm(440, Bry_.New_by_ints(90,88,1,5,1,143)); +Init_itm(441, Bry_.New_by_ints(90,88,1,5,1,5)); +Init_itm(442, Bry_.New_by_ints(90,92,1,5,1,5)); +Init_itm(443, Bry_.New_by_ints(90,114,1,5,1,5)); +Init_itm(444, Bry_.New_by_ints(90,124,1,5,1,143)); +Init_itm(445, Bry_.New_by_ints(90,124,1,5,1,5)); +Init_itm(446, Bry_.New_by_ints(77,75,1,6,1,137,137)); +Init_itm(447, Bry_.New_by_ints(90,102,1,5,1,5)); +Init_itm(448, Bry_.New_by_ints(90,162,1,5,1,5)); +Init_itm(449, Bry_.New_by_ints(90,164,1,5,1,5)); +Init_itm(450, Bry_.New_by_ints(90,166,1,5,1,5)); +Init_itm(451, Bry_.New_by_ints(90,168,1,5,1,5)); +Init_itm(452, Bry_.New_by_ints(45,89,1,133,151,1,147,147,189)); +Init_itm(453, Bry_.New_by_ints(45,89,1,133,151,1,147,137,189)); +Init_itm(454, Bry_.New_by_ints(45,89,1,133,151,1,137,137,189)); +Init_itm(455, Bry_.New_by_ints(61,57,1,6,1,147,147)); +Init_itm(456, Bry_.New_by_ints(61,57,1,6,1,147,137)); +Init_itm(457, Bry_.New_by_ints(61,57,1,6,1,137,137)); +Init_itm(458, Bry_.New_by_ints(65,57,1,6,1,147,147)); +Init_itm(459, Bry_.New_by_ints(65,57,1,6,1,147,137)); +Init_itm(460, Bry_.New_by_ints(65,57,1,6,1,137,137)); +Init_itm(461, Bry_.New_by_ints(39,1,134,151,1,143,5)); +Init_itm(462, Bry_.New_by_ints(39,1,134,151,1,6)); +Init_itm(463, Bry_.New_by_ints(55,1,134,151,1,143,5)); +Init_itm(464, Bry_.New_by_ints(55,1,134,151,1,6)); +Init_itm(465, Bry_.New_by_ints(67,1,134,151,1,143,5)); +Init_itm(466, Bry_.New_by_ints(67,1,134,151,1,6)); +Init_itm(467, Bry_.New_by_ints(79,1,134,151,1,143,5)); +Init_itm(468, Bry_.New_by_ints(79,1,134,151,1,6)); +Init_itm(469, Bry_.New_by_ints(79,1,134,157,171,1,143,6)); +Init_itm(470, Bry_.New_by_ints(79,1,134,157,171,1,7)); +Init_itm(471, Bry_.New_by_ints(79,1,134,157,141,1,143,6)); +Init_itm(472, Bry_.New_by_ints(79,1,134,157,141,1,7)); +Init_itm(473, Bry_.New_by_ints(79,1,134,157,151,1,143,6)); +Init_itm(474, Bry_.New_by_ints(79,1,134,157,151,1,7)); +Init_itm(475, Bry_.New_by_ints(79,1,134,157,143,1,143,6)); +Init_itm(476, Bry_.New_by_ints(79,1,134,157,143,1,7)); +Init_itm(477, Bry_.New_by_ints(48,72,1,5,1,5)); +Init_itm(478, Bry_.New_by_ints(39,1,134,157,171,1,143,6)); +Init_itm(479, Bry_.New_by_ints(39,1,134,157,171,1,7)); +Init_itm(480, Bry_.New_by_ints(39,1,134,163,171,1,143,6)); +Init_itm(481, Bry_.New_by_ints(39,1,134,163,171,1,7)); +Init_itm(482, Bry_.New_by_ints(39,47,1,134,219,169,134,171,1,147,137,189,5)); +Init_itm(483, Bry_.New_by_ints(39,47,1,134,219,169,134,171,1,137,137,189,5)); +Init_itm(484, Bry_.New_by_ints(52,68,1,5,1,143)); +Init_itm(485, Bry_.New_by_ints(52,68,1,5,1,5)); +Init_itm(486, Bry_.New_by_ints(51,1,134,151,1,143,5)); +Init_itm(487, Bry_.New_by_ints(51,1,134,151,1,6)); +Init_itm(488, Bry_.New_by_ints(59,1,134,151,1,143,5)); +Init_itm(489, Bry_.New_by_ints(59,1,134,151,1,6)); +Init_itm(490, Bry_.New_by_ints(67,1,134,169,1,143,5)); +Init_itm(491, Bry_.New_by_ints(67,1,134,169,1,6)); +Init_itm(492, Bry_.New_by_ints(67,1,134,169,171,1,143,6)); +Init_itm(493, Bry_.New_by_ints(67,1,134,169,171,1,7)); +Init_itm(494, Bry_.New_by_ints(90,84,1,134,151,1,143,5)); +Init_itm(495, Bry_.New_by_ints(90,84,1,134,151,1,6)); +Init_itm(496, Bry_.New_by_ints(57,1,134,151,1,6)); +Init_itm(497, Bry_.New_by_ints(45,89,1,6,1,147,147)); +Init_itm(498, Bry_.New_by_ints(45,89,1,6,1,147,137)); +Init_itm(499, Bry_.New_by_ints(45,89,1,6,1,137,137)); +Init_itm(500, Bry_.New_by_ints(51,1,134,141,1,143,5)); +Init_itm(501, Bry_.New_by_ints(51,1,134,141,1,6)); +Init_itm(502, Bry_.New_by_ints(54,66,1,5,1,143)); +Init_itm(503, Bry_.New_by_ints(90,102,1,5,1,143)); +Init_itm(504, Bry_.New_by_ints(65,1,134,143,1,143,5)); +Init_itm(505, Bry_.New_by_ints(65,1,134,143,1,6)); +Init_itm(506, Bry_.New_by_ints(39,1,134,153,141,1,143,6)); +Init_itm(507, Bry_.New_by_ints(39,1,134,153,141,1,7)); +Init_itm(508, Bry_.New_by_ints(39,47,1,134,219,169,134,141,1,147,137,189,5)); +Init_itm(509, Bry_.New_by_ints(39,47,1,134,219,169,134,141,1,137,137,189,5)); +Init_itm(510, Bry_.New_by_ints(67,1,134,165,141,1,143,6)); +Init_itm(511, Bry_.New_by_ints(67,1,134,165,141,1,7)); +Init_itm(512, Bry_.New_by_ints(39,1,134,185,1,143,5)); +Init_itm(513, Bry_.New_by_ints(39,1,134,185,1,6)); +Init_itm(514, Bry_.New_by_ints(39,1,134,189,1,143,5)); +Init_itm(515, Bry_.New_by_ints(39,1,134,189,1,6)); +Init_itm(516, Bry_.New_by_ints(47,1,134,185,1,143,5)); +Init_itm(517, Bry_.New_by_ints(47,1,134,185,1,6)); +Init_itm(518, Bry_.New_by_ints(47,1,134,189,1,143,5)); +Init_itm(519, Bry_.New_by_ints(47,1,134,189,1,6)); +Init_itm(520, Bry_.New_by_ints(55,1,134,185,1,143,5)); +Init_itm(521, Bry_.New_by_ints(55,1,134,185,1,6)); +Init_itm(522, Bry_.New_by_ints(55,1,134,189,1,143,5)); +Init_itm(523, Bry_.New_by_ints(55,1,134,189,1,6)); +Init_itm(524, Bry_.New_by_ints(67,1,134,185,1,143,5)); +Init_itm(525, Bry_.New_by_ints(67,1,134,185,1,6)); +Init_itm(526, Bry_.New_by_ints(67,1,134,189,1,143,5)); +Init_itm(527, Bry_.New_by_ints(67,1,134,189,1,6)); +Init_itm(528, Bry_.New_by_ints(73,1,134,185,1,143,5)); +Init_itm(529, Bry_.New_by_ints(73,1,134,185,1,6)); +Init_itm(530, Bry_.New_by_ints(73,1,134,189,1,143,5)); +Init_itm(531, Bry_.New_by_ints(73,1,134,189,1,6)); +Init_itm(532, Bry_.New_by_ints(79,1,134,185,1,143,5)); +Init_itm(533, Bry_.New_by_ints(79,1,134,185,1,6)); +Init_itm(534, Bry_.New_by_ints(79,1,134,189,1,143,5)); +Init_itm(535, Bry_.New_by_ints(79,1,134,189,1,6)); +Init_itm(536, Bry_.New_by_ints(75,1,134,203,1,143,5)); +Init_itm(537, Bry_.New_by_ints(75,1,134,203,1,6)); +Init_itm(538, Bry_.New_by_ints(77,1,134,203,1,143,5)); +Init_itm(539, Bry_.New_by_ints(77,1,134,203,1,6)); +Init_itm(540, Bry_.New_by_ints(88,72,1,5,1,143)); +Init_itm(541, Bry_.New_by_ints(88,72,1,5,1,5)); +Init_itm(542, Bry_.New_by_ints(53,1,134,151,1,143,5)); +Init_itm(543, Bry_.New_by_ints(53,1,134,151,1,6)); +Init_itm(544, Bry_.New_by_ints(66,74,1,5,1,143)); +Init_itm(545, Bry_.New_by_ints(46,80,1,5,1,5)); +Init_itm(546, Bry_.New_by_ints(68,96,1,5,1,143)); +Init_itm(547, Bry_.New_by_ints(68,96,1,5,1,5)); +Init_itm(548, Bry_.New_by_ints(90,72,1,5,1,143)); +Init_itm(549, Bry_.New_by_ints(90,72,1,5,1,5)); +Init_itm(550, Bry_.New_by_ints(39,1,134,163,1,143,5)); +Init_itm(551, Bry_.New_by_ints(39,1,134,163,1,6)); +Init_itm(552, Bry_.New_by_ints(47,1,134,167,1,143,5)); +Init_itm(553, Bry_.New_by_ints(47,1,134,167,1,6)); +Init_itm(554, Bry_.New_by_ints(67,1,134,157,171,1,143,6)); +Init_itm(555, Bry_.New_by_ints(67,1,134,157,171,1,7)); +Init_itm(556, Bry_.New_by_ints(67,1,134,161,171,1,143,6)); +Init_itm(557, Bry_.New_by_ints(67,1,134,161,171,1,7)); +Init_itm(558, Bry_.New_by_ints(67,1,134,163,1,143,5)); +Init_itm(559, Bry_.New_by_ints(67,1,134,163,1,6)); +Init_itm(560, Bry_.New_by_ints(67,1,134,163,171,1,143,6)); +Init_itm(561, Bry_.New_by_ints(67,1,134,163,171,1,7)); +Init_itm(562, Bry_.New_by_ints(87,1,134,171,1,143,5)); +Init_itm(563, Bry_.New_by_ints(87,1,134,171,1,6)); +Init_itm(564, Bry_.New_by_ints(62,86,1,5,1,5)); +Init_itm(565, Bry_.New_by_ints(66,82,1,5,1,5)); +Init_itm(566, Bry_.New_by_ints(78,78,1,5,1,5)); +Init_itm(567, Bry_.New_by_ints(58,64,1,5,1,5)); +Init_itm(568, Bry_.New_by_ints(45,41,1,6,1,137,137)); +Init_itm(569, Bry_.New_by_ints(71,69,1,6,1,137,137)); +Init_itm(570, Bry_.New_by_ints(40,66,1,5,1,143)); +Init_itm(571, Bry_.New_by_ints(44,66,1,5,1,143)); +Init_itm(572, Bry_.New_by_ints(44,66,1,5,1,5)); +Init_itm(573, Bry_.New_by_ints(62,72,1,5,1,143)); +Init_itm(574, Bry_.New_by_ints(78,68,1,5,1,143)); +Init_itm(575, Bry_.New_by_ints(76,72,1,5,1,5)); +Init_itm(576, Bry_.New_by_ints(90,78,1,5,1,5)); +Init_itm(577, Bry_.New_by_ints(90,130,1,5,1,143)); +Init_itm(578, Bry_.New_by_ints(90,130,1,5,1,5)); +Init_itm(579, Bry_.New_by_ints(42,66,1,5,1,143)); +Init_itm(580, Bry_.New_by_ints(80,72,1,5,1,143)); +Init_itm(581, Bry_.New_by_ints(82,78,1,5,1,143)); +Init_itm(582, Bry_.New_by_ints(48,66,1,5,1,143)); +Init_itm(583, Bry_.New_by_ints(48,66,1,5,1,5)); +Init_itm(584, Bry_.New_by_ints(58,68,1,5,1,143)); +Init_itm(585, Bry_.New_by_ints(58,68,1,5,1,5)); +Init_itm(586, Bry_.New_by_ints(72,70,1,5,1,143)); +Init_itm(587, Bry_.New_by_ints(72,70,1,5,1,5)); +Init_itm(588, Bry_.New_by_ints(74,70,1,5,1,143)); +Init_itm(589, Bry_.New_by_ints(74,70,1,5,1,5)); +Init_itm(590, Bry_.New_by_ints(88,66,1,5,1,143)); +Init_itm(591, Bry_.New_by_ints(88,66,1,5,1,5)); +Init_itm(592, Bry_.New_by_ints(40,74,1,5,1,5)); +Init_itm(593, Bry_.New_by_ints(40,76,1,5,1,5)); +Init_itm(594, Bry_.New_by_ints(40,80,1,5,1,5)); +Init_itm(595, Bry_.New_by_ints(42,76,1,5,1,5)); +Init_itm(596, Bry_.New_by_ints(68,74,1,5,1,5)); +Init_itm(597, Bry_.New_by_ints(44,72,1,5,1,5)); +Init_itm(598, Bry_.New_by_ints(46,72,1,5,1,5)); +Init_itm(599, Bry_.New_by_ints(46,74,1,5,1,5)); +Init_itm(600, Bry_.New_by_ints(48,84,1,5,1,5)); +Init_itm(601, Bry_.New_by_ints(48,76,1,5,1,5)); +Init_itm(602, Bry_.New_by_ints(48,86,1,5,1,5)); +Init_itm(603, Bry_.New_by_ints(48,80,1,5,1,5)); +Init_itm(604, Bry_.New_by_ints(48,88,1,5,1,5)); +Init_itm(605, Bry_.New_by_ints(48,94,1,5,1,5)); +Init_itm(606, Bry_.New_by_ints(48,96,1,5,1,5)); +Init_itm(607, Bry_.New_by_ints(58,72,1,5,1,5)); +Init_itm(608, Bry_.New_by_ints(52,72,1,5,1,5)); +Init_itm(609, Bry_.New_by_ints(52,64,1,5,1,5)); +Init_itm(610, Bry_.New_by_ints(52,66,1,5,1,5)); +Init_itm(611, Bry_.New_by_ints(52,80,1,5,1,5)); +Init_itm(612, Bry_.New_by_ints(48,100,1,5,1,5)); +Init_itm(613, Bry_.New_by_ints(80,78,1,5,1,5)); +Init_itm(614, Bry_.New_by_ints(54,68,1,5,1,5)); +Init_itm(615, Bry_.New_by_ints(54,76,1,5,1,5)); +Init_itm(616, Bry_.New_by_ints(56,72,1,5,1,5)); +Init_itm(617, Bry_.New_by_ints(56,78,1,5,1,5)); +Init_itm(618, Bry_.New_by_ints(56,66,1,5,1,5)); +Init_itm(619, Bry_.New_by_ints(62,76,1,5,1,5)); +Init_itm(620, Bry_.New_by_ints(62,78,1,5,1,5)); +Init_itm(621, Bry_.New_by_ints(62,82,1,5,1,5)); +Init_itm(622, Bry_.New_by_ints(62,90,1,5,1,5)); +Init_itm(623, Bry_.New_by_ints(80,84,1,5,1,5)); +Init_itm(624, Bry_.New_by_ints(80,90,1,5,1,5)); +Init_itm(625, Bry_.New_by_ints(64,70,1,5,1,5)); +Init_itm(626, Bry_.New_by_ints(66,72,1,5,1,5)); +Init_itm(627, Bry_.New_by_ints(66,80,1,5,1,5)); +Init_itm(628, Bry_.New_by_ints(66,64,1,5,1,5)); +Init_itm(629, Bry_.New_by_ints(68,90,1,5,1,5)); +Init_itm(630, Bry_.New_by_ints(68,68,1,5,1,5)); +Init_itm(631, Bry_.New_by_ints(68,94,1,5,1,5)); +Init_itm(632, Bry_.New_by_ints(70,82,1,5,1,5)); +Init_itm(633, Bry_.New_by_ints(74,74,1,5,1,5)); +Init_itm(634, Bry_.New_by_ints(74,78,1,5,1,5)); +Init_itm(635, Bry_.New_by_ints(74,82,1,5,1,5)); +Init_itm(636, Bry_.New_by_ints(74,86,1,5,1,5)); +Init_itm(637, Bry_.New_by_ints(74,88,1,5,1,5)); +Init_itm(638, Bry_.New_by_ints(74,90,1,5,1,5)); +Init_itm(639, Bry_.New_by_ints(74,94,1,5,1,5)); +Init_itm(640, Bry_.New_by_ints(74,64,1,5,1,5)); +Init_itm(641, Bry_.New_by_ints(74,96,1,5,1,5)); +Init_itm(642, Bry_.New_by_ints(76,70,1,5,1,5)); +Init_itm(643, Bry_.New_by_ints(76,78,1,5,1,5)); +Init_itm(644, Bry_.New_by_ints(58,74,1,5,1,5)); +Init_itm(645, Bry_.New_by_ints(76,84,1,5,1,5)); +Init_itm(646, Bry_.New_by_ints(76,88,1,5,1,5)); +Init_itm(647, Bry_.New_by_ints(78,82,1,5,1,5)); +Init_itm(648, Bry_.New_by_ints(78,76,1,5,1,5)); +Init_itm(649, Bry_.New_by_ints(80,72,1,5,1,5)); +Init_itm(650, Bry_.New_by_ints(80,92,1,5,1,5)); +Init_itm(651, Bry_.New_by_ints(82,70,1,5,1,5)); +Init_itm(652, Bry_.New_by_ints(82,78,1,5,1,5)); +Init_itm(653, Bry_.New_by_ints(84,68,1,5,1,5)); +Init_itm(654, Bry_.New_by_ints(62,96,1,5,1,5)); +Init_itm(655, Bry_.New_by_ints(88,64,1,5,1,5)); +Init_itm(656, Bry_.New_by_ints(90,74,1,5,1,5)); +Init_itm(657, Bry_.New_by_ints(90,76,1,5,1,5)); +Init_itm(658, Bry_.New_by_ints(90,84,1,5,1,5)); +Init_itm(659, Bry_.New_by_ints(90,94,1,5,1,5)); +Init_itm(660, Bry_.New_by_ints(90,128,1,5,1,5)); +Init_itm(661, Bry_.New_by_ints(90,144,1,5,1,5)); +Init_itm(662, Bry_.New_by_ints(90,160,1,5,1,5)); +Init_itm(663, Bry_.New_by_ints(90,170,1,5,1,5)); +Init_itm(664, Bry_.New_by_ints(90,172,1,5,1,5)); +Init_itm(665, Bry_.New_by_ints(42,64,1,5,1,5)); +Init_itm(666, Bry_.New_by_ints(48,98,1,5,1,5)); +Init_itm(667, Bry_.New_by_ints(52,74,1,5,1,5)); +Init_itm(668, Bry_.New_by_ints(54,64,1,5,1,5)); +Init_itm(669, Bry_.New_by_ints(58,70,1,5,1,5)); +Init_itm(670, Bry_.New_by_ints(60,78,1,5,1,5)); +Init_itm(671, Bry_.New_by_ints(62,64,1,5,1,5)); +Init_itm(672, Bry_.New_by_ints(72,68,1,5,1,5)); +Init_itm(673, Bry_.New_by_ints(90,156,1,5,1,5)); +Init_itm(674, Bry_.New_by_ints(90,158,1,5,1,5)); +Init_itm(675, Bry_.New_by_ints(45,89,1,6,1,137,137)); +Init_itm(676, Bry_.New_by_ints(45,90,84,1,6,1,137,137)); +Init_itm(677, Bry_.New_by_ints(45,90,76,1,6,1,137,137)); +Init_itm(678, Bry_.New_by_ints(77,75,1,6,1,137,137)); +Init_itm(679, Bry_.New_by_ints(77,76,78,1,6,1,137,137)); +Init_itm(680, Bry_.New_by_ints(77,44,72,1,6,1,137,137)); +Init_itm(681, Bry_.New_by_ints(49,66,86,1,6,1,137,137)); +Init_itm(682, Bry_.New_by_ints(61,75,1,6,1,137,137)); +Init_itm(683, Bry_.New_by_ints(61,89,1,6,1,137,137)); +Init_itm(684, Bry_.New_by_ints(90,174,1,5,1,5)); +Init_itm(685, Bry_.New_by_ints(90,176,1,5,1,5)); +Init_itm(686, Bry_.New_by_ints(80,80,1,5,1,5)); +Init_itm(687, Bry_.New_by_ints(80,82,1,5,1,5)); +Init_itm(688, Bry_.New_by_ints(53,1,5,1,167)); +Init_itm(689, Bry_.New_by_ints(54,68,1,5,1,167)); +Init_itm(690, Bry_.New_by_ints(57,1,5,1,167)); +Init_itm(691, Bry_.New_by_ints(73,1,5,1,167)); +Init_itm(692, Bry_.New_by_ints(74,74,1,5,1,167)); +Init_itm(693, Bry_.New_by_ints(74,82,1,5,1,167)); +Init_itm(694, Bry_.New_by_ints(74,96,1,5,1,167)); +Init_itm(695, Bry_.New_by_ints(83,1,5,1,167)); +Init_itm(696, Bry_.New_by_ints(87,1,5,1,167)); +Init_itm(697, Bry_.New_by_ints(13,26,1,5,1,5)); +Init_itm(698, Bry_.New_by_ints(13,29,1,5,1,5)); +Init_itm(699, Bry_.New_by_ints(54,78,1,5,1,5)); +Init_itm(700, Bry_.New_by_ints(90,134,1,5,1,5)); +Init_itm(701, Bry_.New_by_ints(54,80,1,5,1,5)); +Init_itm(702, Bry_.New_by_ints(90,138,1,5,1,5)); +Init_itm(703, Bry_.New_by_ints(90,146,1,5,1,5)); +Init_itm(704, Bry_.New_by_ints(90,132,1,5,1,5)); +Init_itm(705, Bry_.New_by_ints(90,148,1,5,1,5)); +Init_itm(706, Bry_.New_by_ints(13,31,4,1,5,1,5)); +Init_itm(707, Bry_.New_by_ints(13,31,12,1,5,1,5)); +Init_itm(708, Bry_.New_by_ints(13,31,20,1,5,1,5)); +Init_itm(709, Bry_.New_by_ints(13,31,28,1,5,1,5)); +Init_itm(710, Bry_.New_by_ints(13,32,1,5,1,5)); +Init_itm(711, Bry_.New_by_ints(13,34,1,5,1,5)); +Init_itm(712, Bry_.New_by_ints(13,36,1,5,1,5)); +Init_itm(713, Bry_.New_by_ints(13,38,1,5,1,5)); +Init_itm(714, Bry_.New_by_ints(13,40,1,5,1,5)); +Init_itm(715, Bry_.New_by_ints(13,42,1,5,1,5)); +Init_itm(716, Bry_.New_by_ints(13,44,1,5,1,5)); +Init_itm(717, Bry_.New_by_ints(13,46,1,5,1,5)); +Init_itm(718, Bry_.New_by_ints(13,48,1,5,1,5)); +Init_itm(719, Bry_.New_by_ints(13,50,1,5,1,5)); +Init_itm(720, Bry_.New_by_ints(14,11,1,5,1,5)); +Init_itm(721, Bry_.New_by_ints(14,13,1,5,1,5)); +Init_itm(722, Bry_.New_by_ints(13,52,4,1,5,1,5)); +Init_itm(723, Bry_.New_by_ints(13,52,12,1,5,1,5)); +Init_itm(724, Bry_.New_by_ints(13,52,20,1,5,1,5)); +Init_itm(725, Bry_.New_by_ints(13,52,28,1,5,1,5)); +Init_itm(726, Bry_.New_by_ints(13,52,36,1,5,1,5)); +Init_itm(727, Bry_.New_by_ints(13,52,44,1,5,1,5)); +Init_itm(728, Bry_.New_by_ints(13,19,4,1,5,1,5)); +Init_itm(729, Bry_.New_by_ints(13,19,12,1,5,1,5)); +Init_itm(730, Bry_.New_by_ints(13,22,4,1,5,1,5)); +Init_itm(731, Bry_.New_by_ints(13,25,4,1,5,1,5)); +Init_itm(732, Bry_.New_by_ints(13,14,4,1,5,1,5)); +Init_itm(733, Bry_.New_by_ints(13,22,12,1,5,1,5)); +Init_itm(734, Bry_.New_by_ints(13,52,52,1,5,1,5)); +Init_itm(735, Bry_.New_by_ints(13,52,60,1,5,1,5)); +Init_itm(736, Bry_.New_by_ints(52,80,1,5,1,167)); +Init_itm(737, Bry_.New_by_ints(61,1,5,1,167)); +Init_itm(738, Bry_.New_by_ints(75,1,5,1,167)); +Init_itm(739, Bry_.New_by_ints(85,1,5,1,167)); +Init_itm(740, Bry_.New_by_ints(90,144,1,5,1,167)); +Init_itm(741, Bry_.New_by_ints(13,52,68,1,5,1,5)); +Init_itm(742, Bry_.New_by_ints(13,52,76,1,5,1,5)); +Init_itm(743, Bry_.New_by_ints(13,52,84,1,5,1,5)); +Init_itm(744, Bry_.New_by_ints(13,52,92,1,5,1,5)); +Init_itm(745, Bry_.New_by_ints(13,52,100,1,5,1,5)); +Init_itm(746, Bry_.New_by_ints(13,52,108,1,5,1,5)); +Init_itm(747, Bry_.New_by_ints(13,52,116,1,5,1,5)); +Init_itm(748, Bry_.New_by_ints(13,53,1,5,1,5)); +Init_itm(749, Bry_.New_by_ints(13,55,4,1,5,1,5)); +Init_itm(750, Bry_.New_by_ints(90,136,1,5,1,5)); +Init_itm(751, Bry_.New_by_ints(13,55,12,1,5,1,5)); +Init_itm(752, Bry_.New_by_ints(13,55,20,1,5,1,5)); +Init_itm(753, Bry_.New_by_ints(13,55,28,1,5,1,5)); +Init_itm(754, Bry_.New_by_ints(13,55,36,1,5,1,5)); +Init_itm(755, Bry_.New_by_ints(13,55,44,1,5,1,5)); +Init_itm(756, Bry_.New_by_ints(13,55,52,1,5,1,5)); +Init_itm(757, Bry_.New_by_ints(13,55,60,1,5,1,5)); +Init_itm(758, Bry_.New_by_ints(13,55,68,1,5,1,5)); +Init_itm(759, Bry_.New_by_ints(13,55,76,1,5,1,5)); +Init_itm(760, Bry_.New_by_ints(13,55,84,1,5,1,5)); +Init_itm(761, Bry_.New_by_ints(13,55,92,1,5,1,5)); +Init_itm(762, Bry_.New_by_ints(13,55,100,1,5,1,5)); +Init_itm(763, Bry_.New_by_ints(13,55,108,1,5,1,5)); +Init_itm(764, Bry_.New_by_ints(13,55,116,1,5,1,5)); +Init_itm(765, Bry_.New_by_ints(13,55,124,1,5,1,5)); +Init_itm(766, Bry_.New_by_ints(13,55,132,1,5,1,5)); +Init_itm(767, Bry_.New_by_ints(13,55,140,1,5,1,5)); +Init_itm(768, Bry_.New_by_ints(1,143,1,5)); +Init_itm(769, Bry_.New_by_ints(1,141,1,5)); +Init_itm(770, Bry_.New_by_ints(1,147,1,5)); +Init_itm(771, Bry_.New_by_ints(1,161,1,5)); +Init_itm(772, Bry_.New_by_ints(1,171,1,5)); +Init_itm(773, Bry_.New_by_ints(1,181,1,5)); +Init_itm(774, Bry_.New_by_ints(1,145,1,5)); +Init_itm(775, Bry_.New_by_ints(1,163,1,5)); +Init_itm(776, Bry_.New_by_ints(1,157,1,5)); +Init_itm(777, Bry_.New_by_ints(1,183,1,5)); +Init_itm(778, Bry_.New_by_ints(1,153,1,5)); +Init_itm(779, Bry_.New_by_ints(1,159,1,5)); +Init_itm(780, Bry_.New_by_ints(1,151,1,5)); +Init_itm(781, Bry_.New_by_ints(1,173,1,5)); +Init_itm(782, Bry_.New_by_ints(1,173,1,5)); +Init_itm(783, Bry_.New_by_ints(1,185,1,5)); +Init_itm(784, Bry_.New_by_ints(1,187,1,5)); +Init_itm(785, Bry_.New_by_ints(1,189,1,5)); +Init_itm(786, Bry_.New_by_ints(1,173,1,5)); +Init_itm(787, Bry_.New_by_ints(1,137,1,5)); +Init_itm(788, Bry_.New_by_ints(1,139,1,5)); +Init_itm(789, Bry_.New_by_ints(1,173,1,5)); +Init_itm(790, Bry_.New_by_ints(1,175,1,5)); +Init_itm(791, Bry_.New_by_ints(1,175,1,5)); +Init_itm(792, Bry_.New_by_ints(1,175,1,5)); +Init_itm(793, Bry_.New_by_ints(1,175,1,5)); +Init_itm(794, Bry_.New_by_ints(1,173,1,5)); +Init_itm(795, Bry_.New_by_ints(1,191,1,5)); +Init_itm(796, Bry_.New_by_ints(1,175,1,5)); +Init_itm(797, Bry_.New_by_ints(1,175,1,5)); +Init_itm(798, Bry_.New_by_ints(1,175,1,5)); +Init_itm(799, Bry_.New_by_ints(1,175,1,5)); +Init_itm(800, Bry_.New_by_ints(1,175,1,5)); +Init_itm(801, Bry_.New_by_ints(1,193,1,5)); +Init_itm(802, Bry_.New_by_ints(1,195,1,5)); +Init_itm(803, Bry_.New_by_ints(1,197,1,5)); +Init_itm(804, Bry_.New_by_ints(1,199,1,5)); +Init_itm(805, Bry_.New_by_ints(1,201,1,5)); +Init_itm(806, Bry_.New_by_ints(1,203,1,5)); +Init_itm(807, Bry_.New_by_ints(1,167,1,5)); +Init_itm(808, Bry_.New_by_ints(1,169,1,5)); +Init_itm(809, Bry_.New_by_ints(1,175,1,5)); +Init_itm(810, Bry_.New_by_ints(1,175,1,5)); +Init_itm(811, Bry_.New_by_ints(1,175,1,5)); +Init_itm(812, Bry_.New_by_ints(1,175,1,5)); +Init_itm(813, Bry_.New_by_ints(1,205,1,5)); +Init_itm(814, Bry_.New_by_ints(1,207,1,5)); +Init_itm(815, Bry_.New_by_ints(1,175,1,5)); +Init_itm(816, Bry_.New_by_ints(1,208,13,1,5)); +Init_itm(817, Bry_.New_by_ints(1,208,29,1,5)); +Init_itm(818, Bry_.New_by_ints(1,135,1,5)); +Init_itm(819, Bry_.New_by_ints(1,175,1,5)); +Init_itm(820, Bry_.New_by_ints(1,208,45,1,5)); +Init_itm(821, Bry_.New_by_ints(1,208,61,1,5)); +Init_itm(822, Bry_.New_by_ints(1,177,1,5)); +Init_itm(823, Bry_.New_by_ints(1,177,1,5)); +Init_itm(824, Bry_.New_by_ints(1,165,1,5)); +Init_itm(825, Bry_.New_by_ints(1,208,77,1,5)); +Init_itm(826, Bry_.New_by_ints(1,175,1,5)); +Init_itm(827, Bry_.New_by_ints(1,175,1,5)); +Init_itm(828, Bry_.New_by_ints(1,175,1,5)); +Init_itm(829, Bry_.New_by_ints(1,173,1,5)); +Init_itm(830, Bry_.New_by_ints(1,173,1,5)); +Init_itm(831, Bry_.New_by_ints(1,173,1,5)); +Init_itm(832, Bry_.New_by_ints(1,143,1,5)); +Init_itm(833, Bry_.New_by_ints(1,141,1,5)); +Init_itm(834, Bry_.New_by_ints(1,155,1,5)); +Init_itm(835, Bry_.New_by_ints(1,137,1,5)); +Init_itm(836, Bry_.New_by_ints(1,157,141,1,6)); +Init_itm(837, Bry_.New_by_ints(1,208,93,1,5)); +Init_itm(838, Bry_.New_by_ints(1,173,1,5)); +Init_itm(839, Bry_.New_by_ints(1,175,1,5)); +Init_itm(840, Bry_.New_by_ints(1,175,1,5)); +Init_itm(841, Bry_.New_by_ints(1,175,1,5)); +Init_itm(842, Bry_.New_by_ints(1,173,1,5)); +Init_itm(843, Bry_.New_by_ints(1,173,1,5)); +Init_itm(844, Bry_.New_by_ints(1,173,1,5)); +Init_itm(845, Bry_.New_by_ints(1,175,1,5)); +Init_itm(846, Bry_.New_by_ints(1,175,1,5)); +Init_itm(847, Bry_.New_by_ints(1,1)); +Init_itm(848, Bry_.New_by_ints(1,173,1,5)); +Init_itm(849, Bry_.New_by_ints(1,173,1,5)); +Init_itm(850, Bry_.New_by_ints(1,173,1,5)); +Init_itm(851, Bry_.New_by_ints(1,175,1,5)); +Init_itm(852, Bry_.New_by_ints(1,175,1,5)); +Init_itm(853, Bry_.New_by_ints(1,175,1,5)); +Init_itm(854, Bry_.New_by_ints(1,175,1,5)); +Init_itm(855, Bry_.New_by_ints(1,173,1,5)); +Init_itm(856, Bry_.New_by_ints(1,208,109,1,5)); +Init_itm(857, Bry_.New_by_ints(1,175,1,5)); +Init_itm(858, Bry_.New_by_ints(1,175,1,5)); +Init_itm(859, Bry_.New_by_ints(1,173,1,5)); +Init_itm(860, Bry_.New_by_ints(1,175,1,5)); +Init_itm(861, Bry_.New_by_ints(1,173,1,5)); +Init_itm(862, Bry_.New_by_ints(1,173,1,5)); +Init_itm(863, Bry_.New_by_ints(1,175,1,5)); +Init_itm(864, Bry_.New_by_ints(1,208,125,1,5)); +Init_itm(865, Bry_.New_by_ints(1,208,141,1,5)); +Init_itm(866, Bry_.New_by_ints(1,175,1,5)); +Init_itm(867, Bry_.New_by_ints(39,1,5,1,137)); +Init_itm(868, Bry_.New_by_ints(47,1,5,1,137)); +Init_itm(869, Bry_.New_by_ints(55,1,5,1,137)); +Init_itm(870, Bry_.New_by_ints(67,1,5,1,137)); +Init_itm(871, Bry_.New_by_ints(79,1,5,1,137)); +Init_itm(872, Bry_.New_by_ints(43,1,5,1,137)); +Init_itm(873, Bry_.New_by_ints(45,1,5,1,137)); +Init_itm(874, Bry_.New_by_ints(53,1,5,1,137)); +Init_itm(875, Bry_.New_by_ints(63,1,5,1,137)); +Init_itm(876, Bry_.New_by_ints(73,1,5,1,137)); +Init_itm(877, Bry_.New_by_ints(77,1,5,1,137)); +Init_itm(878, Bry_.New_by_ints(81,1,5,1,137)); +Init_itm(879, Bry_.New_by_ints(85,1,5,1,137)); +Init_itm(880, Bry_.New_by_ints(91,30,1,5,1,143)); +Init_itm(881, Bry_.New_by_ints(91,30,1,5,1,5)); +Init_itm(882, Bry_.New_by_ints(91,94,1,5,1,143)); +Init_itm(883, Bry_.New_by_ints(91,94,1,5,1,5)); +Init_itm(884, Bry_.New_by_ints(13,26,1,5,1,5)); +Init_itm(885, Bry_.New_by_ints(13,28,4,1,5,1,5)); +Init_itm(886, Bry_.New_by_ints(91,24,1,5,1,143)); +Init_itm(887, Bry_.New_by_ints(91,24,1,5,1,5)); +Init_itm(888, Bry_.New_by_ints(226,232,177,228,1,5,1,5)); +Init_itm(889, Bry_.New_by_ints(226,232,178,4,1,5,1,5)); +Init_itm(890, Bry_.New_by_ints(91,36,1,5,1,137)); +Init_itm(891, Bry_.New_by_ints(91,74,1,5,1,5)); +Init_itm(892, Bry_.New_by_ints(91,72,1,5,1,5)); +Init_itm(893, Bry_.New_by_ints(91,76,1,5,1,5)); +Init_itm(894, Bry_.New_by_ints(8,88,1,5,1,5)); +Init_itm(895, Bry_.New_by_ints(226,232,178,172,1,5,1,5)); +Init_itm(896, Bry_.New_by_ints(226,232,178,200,1,5,1,5)); +Init_itm(897, Bry_.New_by_ints(226,232,178,228,1,5,1,5)); +Init_itm(898, Bry_.New_by_ints(226,232,179,4,1,5,1,5)); +Init_itm(899, Bry_.New_by_ints(226,232,179,32,1,5,1,5)); +Init_itm(900, Bry_.New_by_ints(13,12,1,5,1,5)); +Init_itm(901, Bry_.New_by_ints(13,20,1,134,141,1,6)); +Init_itm(902, Bry_.New_by_ints(91,10,1,134,141,1,143,5)); +Init_itm(903, Bry_.New_by_ints(10,78,1,5,1,5)); +Init_itm(904, Bry_.New_by_ints(91,20,1,134,141,1,143,5)); +Init_itm(905, Bry_.New_by_ints(91,32,1,134,141,1,143,5)); +Init_itm(906, Bry_.New_by_ints(91,36,1,134,141,1,143,5)); +Init_itm(907, Bry_.New_by_ints(226,232,180,4,1,5,1,5)); +Init_itm(908, Bry_.New_by_ints(91,52,1,134,141,1,143,5)); +Init_itm(909, Bry_.New_by_ints(226,232,180,60,1,5,1,5)); +Init_itm(910, Bry_.New_by_ints(91,80,1,134,141,1,143,5)); +Init_itm(911, Bry_.New_by_ints(91,90,1,134,141,1,143,5)); +Init_itm(912, Bry_.New_by_ints(91,36,1,134,157,141,1,7)); +Init_itm(913, Bry_.New_by_ints(91,10,1,5,1,143)); +Init_itm(914, Bry_.New_by_ints(91,12,1,5,1,143)); +Init_itm(915, Bry_.New_by_ints(91,14,1,5,1,143)); +Init_itm(916, Bry_.New_by_ints(91,18,1,5,1,143)); +Init_itm(917, Bry_.New_by_ints(91,20,1,5,1,143)); +Init_itm(918, Bry_.New_by_ints(91,28,1,5,1,143)); +Init_itm(919, Bry_.New_by_ints(91,32,1,5,1,143)); +Init_itm(920, Bry_.New_by_ints(91,34,1,5,1,143)); +Init_itm(921, Bry_.New_by_ints(91,36,1,5,1,143)); +Init_itm(922, Bry_.New_by_ints(91,40,1,5,1,143)); +Init_itm(923, Bry_.New_by_ints(91,42,1,5,1,143)); +Init_itm(924, Bry_.New_by_ints(91,46,1,5,1,143)); +Init_itm(925, Bry_.New_by_ints(91,48,1,5,1,143)); +Init_itm(926, Bry_.New_by_ints(91,50,1,5,1,143)); +Init_itm(927, Bry_.New_by_ints(91,52,1,5,1,143)); +Init_itm(928, Bry_.New_by_ints(91,54,1,5,1,143)); +Init_itm(929, Bry_.New_by_ints(91,64,1,5,1,143)); +Init_itm(930, Bry_.New_by_ints(226,232,182,144,1,5,1,5)); +Init_itm(931, Bry_.New_by_ints(91,70,1,5,1,143)); +Init_itm(932, Bry_.New_by_ints(91,78,1,5,1,143)); +Init_itm(933, Bry_.New_by_ints(91,80,1,5,1,143)); +Init_itm(934, Bry_.New_by_ints(91,82,1,5,1,143)); +Init_itm(935, Bry_.New_by_ints(91,84,1,5,1,143)); +Init_itm(936, Bry_.New_by_ints(91,86,1,5,1,143)); +Init_itm(937, Bry_.New_by_ints(91,90,1,5,1,143)); +Init_itm(938, Bry_.New_by_ints(91,36,1,134,157,1,143,5)); +Init_itm(939, Bry_.New_by_ints(91,80,1,134,157,1,143,5)); +Init_itm(940, Bry_.New_by_ints(91,10,1,134,141,1,6)); +Init_itm(941, Bry_.New_by_ints(91,20,1,134,141,1,6)); +Init_itm(942, Bry_.New_by_ints(91,32,1,134,141,1,6)); +Init_itm(943, Bry_.New_by_ints(91,36,1,134,141,1,6)); +Init_itm(944, Bry_.New_by_ints(91,80,1,134,157,141,1,7)); +Init_itm(945, Bry_.New_by_ints(91,10,1,5,1,5)); +Init_itm(946, Bry_.New_by_ints(91,12,1,5,1,5)); +Init_itm(947, Bry_.New_by_ints(91,14,1,5,1,5)); +Init_itm(948, Bry_.New_by_ints(91,18,1,5,1,5)); +Init_itm(949, Bry_.New_by_ints(91,20,1,5,1,5)); +Init_itm(950, Bry_.New_by_ints(91,28,1,5,1,5)); +Init_itm(951, Bry_.New_by_ints(91,32,1,5,1,5)); +Init_itm(952, Bry_.New_by_ints(91,34,1,5,1,5)); +Init_itm(953, Bry_.New_by_ints(91,36,1,5,1,5)); +Init_itm(954, Bry_.New_by_ints(91,40,1,5,1,5)); +Init_itm(955, Bry_.New_by_ints(91,42,1,5,1,5)); +Init_itm(956, Bry_.New_by_ints(91,46,1,5,1,5)); +Init_itm(957, Bry_.New_by_ints(91,48,1,5,1,5)); +Init_itm(958, Bry_.New_by_ints(91,50,1,5,1,5)); +Init_itm(959, Bry_.New_by_ints(91,52,1,5,1,5)); +Init_itm(960, Bry_.New_by_ints(91,54,1,5,1,5)); +Init_itm(961, Bry_.New_by_ints(91,64,1,5,1,5)); +Init_itm(962, Bry_.New_by_ints(91,70,1,5,1,177)); +Init_itm(963, Bry_.New_by_ints(91,70,1,5,1,5)); +Init_itm(964, Bry_.New_by_ints(91,78,1,5,1,5)); +Init_itm(965, Bry_.New_by_ints(91,80,1,5,1,5)); +Init_itm(966, Bry_.New_by_ints(91,82,1,5,1,5)); +Init_itm(967, Bry_.New_by_ints(91,84,1,5,1,5)); +Init_itm(968, Bry_.New_by_ints(91,86,1,5,1,5)); +Init_itm(969, Bry_.New_by_ints(91,90,1,5,1,5)); +Init_itm(970, Bry_.New_by_ints(91,36,1,134,157,1,6)); +Init_itm(971, Bry_.New_by_ints(91,80,1,134,157,1,6)); +Init_itm(972, Bry_.New_by_ints(91,52,1,134,141,1,6)); +Init_itm(973, Bry_.New_by_ints(91,80,1,134,141,1,6)); +Init_itm(974, Bry_.New_by_ints(91,90,1,134,141,1,6)); +Init_itm(975, Bry_.New_by_ints(91,40,10,36,1,7,1,147,137,189)); +Init_itm(976, Bry_.New_by_ints(91,12,1,5,1,137)); +Init_itm(977, Bry_.New_by_ints(91,34,1,5,1,137)); +Init_itm(978, Bry_.New_by_ints(91,80,1,5,1,147)); +Init_itm(979, Bry_.New_by_ints(91,80,1,134,141,1,147,5)); +Init_itm(980, Bry_.New_by_ints(91,80,1,134,157,1,147,5)); +Init_itm(981, Bry_.New_by_ints(91,82,1,5,1,137)); +Init_itm(982, Bry_.New_by_ints(91,54,1,5,1,137)); +Init_itm(983, Bry_.New_by_ints(91,40,10,36,1,7,1,137,137,189)); +Init_itm(984, Bry_.New_by_ints(91,62,1,5,1,143)); +Init_itm(985, Bry_.New_by_ints(91,62,1,5,1,5)); +Init_itm(986, Bry_.New_by_ints(91,26,1,5,1,143)); +Init_itm(987, Bry_.New_by_ints(91,26,1,5,1,5)); +Init_itm(988, Bry_.New_by_ints(91,22,1,5,1,143)); +Init_itm(989, Bry_.New_by_ints(91,22,1,5,1,5)); +Init_itm(990, Bry_.New_by_ints(91,60,1,5,1,143)); +Init_itm(991, Bry_.New_by_ints(91,60,1,5,1,5)); +Init_itm(992, Bry_.New_by_ints(91,92,1,5,1,143)); +Init_itm(993, Bry_.New_by_ints(91,92,1,5,1,5)); +Init_itm(994, Bry_.New_by_ints(91,98,252,1,5,1,143)); +Init_itm(995, Bry_.New_by_ints(91,98,252,1,5,1,5)); +Init_itm(996, Bry_.New_by_ints(91,99,42,1,5,1,143)); +Init_itm(997, Bry_.New_by_ints(91,99,42,1,5,1,5)); +Init_itm(998, Bry_.New_by_ints(91,99,50,1,5,1,143)); +Init_itm(999, Bry_.New_by_ints(91,99,50,1,5,1,5)); +Init_itm(1000, Bry_.New_by_ints(91,99,74,1,5,1,143)); +Init_itm(1001, Bry_.New_by_ints(91,99,74,1,5,1,5)); +Init_itm(1002, Bry_.New_by_ints(91,99,130,1,5,1,143)); +Init_itm(1003, Bry_.New_by_ints(91,99,130,1,5,1,5)); +Init_itm(1004, Bry_.New_by_ints(91,99,154,1,5,1,143)); +Init_itm(1005, Bry_.New_by_ints(91,99,154,1,5,1,5)); +Init_itm(1006, Bry_.New_by_ints(91,99,186,1,5,1,143)); +Init_itm(1007, Bry_.New_by_ints(91,99,186,1,5,1,5)); +Init_itm(1008, Bry_.New_by_ints(91,40,1,5,1,137)); +Init_itm(1009, Bry_.New_by_ints(91,64,1,5,1,137)); +Init_itm(1010, Bry_.New_by_ints(91,70,1,5,1,137)); +Init_itm(1011, Bry_.New_by_ints(91,38,1,5,1,5)); +Init_itm(1012, Bry_.New_by_ints(91,34,1,5,1,147)); +Init_itm(1013, Bry_.New_by_ints(91,20,1,5,1,137)); +Init_itm(1014, Bry_.New_by_ints(13,94,100,1,5,1,5)); +Init_itm(1015, Bry_.New_by_ints(91,96,1,5,1,143)); +Init_itm(1016, Bry_.New_by_ints(91,96,1,5,1,5)); +Init_itm(1017, Bry_.New_by_ints(91,70,1,5,1,147)); +Init_itm(1018, Bry_.New_by_ints(91,58,1,5,1,143)); +Init_itm(1019, Bry_.New_by_ints(91,58,1,5,1,5)); +Init_itm(1020, Bry_.New_by_ints(91,68,1,5,1,5)); +Init_itm(1021, Bry_.New_by_ints(91,74,1,5,1,143)); +Init_itm(1022, Bry_.New_by_ints(91,72,1,5,1,143)); +Init_itm(1023, Bry_.New_by_ints(91,76,1,5,1,143)); +Init_itm(1024, Bry_.New_by_ints(92,52,1,134,143,1,143,5)); } public void Clear() {trie.Clear();} public void Decode(Bry_bfr tmp, byte[] src, int bgn, int end) { diff --git a/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Uca_trie_tst.java b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Uca_trie_tst.java index a1ea69a54..e6cb3aac3 100644 --- a/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Uca_trie_tst.java +++ b/400_xowa/src/gplx/xowa/bldrs/cmds/ctgs/Uca_trie_tst.java @@ -22,11 +22,11 @@ public class Uca_trie_tst { @Test public void Basic() { Uca_trie_fxt fxt = new Uca_trie_fxt(); fxt.Clear(); - fxt.Init_trie_itm("a", Bry_.new_ints(10, 11)); - fxt.Init_trie_itm("b", Bry_.new_ints(20, 21)); - fxt.Init_trie_itm("c", Bry_.new_ints(30, 31)); - fxt.Test_decode(Bry_.new_ints(10, 11), "a"); - fxt.Test_decode(Bry_.new_ints(10, 11, 20, 21, 30, 31), "abc"); + fxt.Init_trie_itm("a", Bry_.New_by_ints(10, 11)); + fxt.Init_trie_itm("b", Bry_.New_by_ints(20, 21)); + fxt.Init_trie_itm("c", Bry_.New_by_ints(30, 31)); + fxt.Test_decode(Bry_.New_by_ints(10, 11), "a"); + fxt.Test_decode(Bry_.New_by_ints(10, 11, 20, 21, 30, 31), "abc"); } } class Uca_trie_fxt { diff --git a/400_xowa/src/gplx/xowa/bldrs/cmds/diffs/Xob_diff_build_cmd.java b/400_xowa/src/gplx/xowa/bldrs/cmds/diffs/Xob_diff_build_cmd.java new file mode 100644 index 000000000..50386e344 --- /dev/null +++ b/400_xowa/src/gplx/xowa/bldrs/cmds/diffs/Xob_diff_build_cmd.java @@ -0,0 +1,40 @@ +/* +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 . +*/ +package gplx.xowa.bldrs.cmds.diffs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*; +public class Xob_diff_build_cmd implements Xob_cmd { + private final Xob_bldr bldr; private final Xowe_wiki wiki; + private String prev_url, curr_url, diff_url; private int commit_interval; + public Xob_diff_build_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.bldr = bldr; this.wiki = wiki;} + public String Cmd_key() {return Xob_cmd_keys.Key_diff_build;} + public void Cmd_run() { + new Xob_diff_build_wkr(bldr, wiki, prev_url, curr_url, diff_url, commit_interval).Exec(); + } + public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { + if (ctx.Match(k, Invk__prev_url_)) prev_url = m.ReadStr("v"); + else if (ctx.Match(k, Invk__curr_url_)) curr_url = m.ReadStr("v"); + else if (ctx.Match(k, Invk__diff_url_)) diff_url = m.ReadStr("v"); + else if (ctx.Match(k, Invk__commit_interval_)) commit_interval = m.ReadInt("v"); + else return GfoInvkAble_.Rv_unhandled; + return this; + } + public void Cmd_init(Xob_bldr bldr) {} + public void Cmd_bgn(Xob_bldr bldr) {} + public void Cmd_end() {} + public void Cmd_term() {} + private static final String Invk__prev_url_ = "prev_url_", Invk__curr_url_ = "curr_url_", Invk__diff_url_ = "diff_url_", Invk__commit_interval_ = "commit_interval_"; +} diff --git a/400_xowa/src/gplx/xowa/bldrs/cmds/diffs/Xob_diff_build_wkr.java b/400_xowa/src/gplx/xowa/bldrs/cmds/diffs/Xob_diff_build_wkr.java new file mode 100644 index 000000000..c27f28368 --- /dev/null +++ b/400_xowa/src/gplx/xowa/bldrs/cmds/diffs/Xob_diff_build_wkr.java @@ -0,0 +1,55 @@ +/* +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 . +*/ +package gplx.xowa.bldrs.cmds.diffs; import gplx.*; import gplx.xowa.*; import gplx.xowa.bldrs.*; import gplx.xowa.bldrs.cmds.*; +import gplx.core.brys.*; import gplx.core.brys.fmtrs.*; +import gplx.dbs.*; import gplx.dbs.diffs.*; import gplx.dbs.diffs.builds.*; +class Xob_diff_build_wkr { + private final Gfdb_diff_bldr diff_bldr = new Gfdb_diff_bldr(); + private Db_conn prev_conn, curr_conn, diff_conn; + public Xob_diff_build_wkr(Xob_bldr bldr, Xowe_wiki wiki, String prev_url, String curr_url, String diff_url, int commit_interval) { + Bry_fmt url_fmt = Bry_fmt.New("").Args_(New_url_args(wiki)); + Bry_bfr tmp_bfr = Bry_bfr.new_(); + prev_conn = New_conn(wiki, url_fmt, prev_url, tmp_bfr); + curr_conn = New_conn(wiki, url_fmt, curr_url, tmp_bfr); + diff_conn = New_conn(wiki, url_fmt, diff_url, tmp_bfr); + // get Gfdb_diff_tbl; format urls + Tfds.Write(prev_conn, curr_conn, diff_conn); + } + public void Exec() { + diff_bldr.Init(null); // diff_db_wkr + diff_bldr.Compare(null, null); // lhs_tbl, rhs_tbl + } + public static Db_conn New_conn(Xow_wiki wiki, Bry_fmt fmtr, String url_fmt, Bry_bfr tmp_bfr) { + fmtr.Fmt_(url_fmt).Bld_bfr_many(tmp_bfr); + Db_conn conn = Db_conn_pool.Instance.Get_or_new(tmp_bfr.To_str_and_clear()); + return conn; + } + private static Bfr_fmt_arg[] New_url_args(Xow_wiki wiki) { + return null; + } + //prev_url='~{.dump_dir}-prev/~{.dump_core}'; + //curr_url='~{.dump_dir}/~{.dump_core}'; + //diff_url='~{.dump_dir}/~{.dump_domain}-diff.xowa'; +} +// class Bfr_arg__dump_dir : Bfr_arg { +// public void Bfr_arg__add(Bry_bfr bfr) { +// // dump_dir = bfr.Add("C:\xowa\wiki\en.wikipedia.org"); +// // dump_core = en.wikipedia.org-core.xowa +// // dump_domain = en.wikipedia.org +// } +// } diff --git a/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_diff_regy_make_cmd.java b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_diff_regy_make_cmd.java index 9d647b8c5..d99526526 100644 --- a/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_diff_regy_make_cmd.java +++ b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_diff_regy_make_cmd.java @@ -35,8 +35,8 @@ public class Xob_diff_regy_make_cmd extends Xob_itm_basic_base implements Xob_cm } private void Make_join_indexes(Db_conn make_db_provider) { try { - Sqlite_engine_.Idx_create(make_db_provider, Xob_diff_regy_tbl.Idx_fsdb_regy__join); - Sqlite_engine_.Idx_create(make_db_provider, Xob_diff_regy_tbl.Idx_xfer_regy__join); + make_db_provider.Ddl_create_idx(Db_meta_idx.new_normal_by_name("fsdb_regy", "fsdb_regy__join", "fsdb_name", "fsdb_is_orig", "fsdb_repo", "fsdb_w", "fsdb_time", "fsdb_page")); + make_db_provider.Ddl_create_idx(Db_meta_idx.new_normal_by_name("xfer_regy", "xfer_regy__join", "lnki_ttl", "file_is_orig", "orig_repo", "file_w", "lnki_time", "lnki_page")); } catch (Exception exc) { app.Usr_dlg().Warn_many("", "", "error while making indexes: err=~{0}", Err_.Message_gplx_full(exc)); @@ -110,8 +110,8 @@ class Xob_diff_regy_tbl { , ", diff_size bigint NOT NULL" , ");" ); - public static final Db_idx_itm Idx_fsdb_regy__join = Db_idx_itm.sql_("CREATE INDEX fsdb_regy__join ON fsdb_regy (fsdb_name, fsdb_is_orig, fsdb_repo, fsdb_w, fsdb_time, fsdb_page);"); - public static final Db_idx_itm Idx_xfer_regy__join = Db_idx_itm.sql_("CREATE INDEX xfer_regy__join ON xfer_regy (lnki_ttl , file_is_orig, orig_repo, file_w, lnki_time, lnki_page);"); +// public static final Db_idx_itm Idx_fsdb_regy__join = Db_idx_itm.sql_("CREATE INDEX fsdb_regy__join ON fsdb_regy (fsdb_name, fsdb_is_orig, fsdb_repo, fsdb_w, fsdb_time, fsdb_page);"); +// public static final Db_idx_itm Idx_xfer_regy__join = Db_idx_itm.sql_("CREATE INDEX xfer_regy__join ON xfer_regy (lnki_ttl , file_is_orig, orig_repo, file_w, lnki_time, lnki_page);"); public static final Db_idx_itm Idx_diff_regy__load = Db_idx_itm.sql_("CREATE INDEX diff_regy__load ON diff_regy (diff_status, diff_db_id, diff_is_orig, diff_fil_id, diff_thm_id);"); public static final String Make_diff_regy = String_.Concat_lines_nl diff --git a/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_lnki_temp_wkr.java b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_lnki_temp_wkr.java index 3b21f3ce4..6ad5c61d0 100644 --- a/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_lnki_temp_wkr.java +++ b/400_xowa/src/gplx/xowa/bldrs/cmds/files/Xob_lnki_temp_wkr.java @@ -65,7 +65,7 @@ public class Xob_lnki_temp_wkr extends Xob_dump_mgr_base implements Xopg_redlink property_wkr = this.Property_wkr(); // set member reference property_wkr = log_mgr.Make_wkr_property(); wiki.Appe().Wiki_mgr().Wdata_mgr().Enabled_(wdata_enabled); - if (!xtn_ref_enabled) gplx.xowa.xtns.cite.References_nde.Enabled = false; + if (!xtn_ref_enabled) gplx.xowa.xtns.cites.References_nde.Enabled = false; gplx.xowa.xtns.gallery.Gallery_xnde.Log_wkr = log_mgr.Make_wkr().Save_src_str_(Bool_.Y); gplx.xowa.xtns.imaps.Imap_xnde.Log_wkr = log_mgr.Make_wkr(); gplx.xowa.parsers.xndes.Xop_xnde_wkr.Timeline_log_wkr = log_mgr.Make_wkr(); diff --git a/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_search_sql_wkr.java b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_search_sql_wkr.java index eaecb5c0a..6a563e5ae 100644 --- a/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_search_sql_wkr.java +++ b/400_xowa/src/gplx/xowa/bldrs/cmds/texts/sqls/Xob_search_sql_wkr.java @@ -39,7 +39,7 @@ public class Xob_search_sql_wkr extends Xob_search_base implements Io_make_cmd { byte[] bry = rdr.Bfr(); byte[] cur_word = Bry_.Mid(bry, rdr.Key_pos_bgn(), rdr.Key_pos_end()); if (!Bry_.Eq(cur_word, prv_word)) { - search_word_tbl.Insert_cmd_by_batch(++search_id, cur_word, page_count); + search_word_tbl.Insert_cmd_by_batch(++search_id, prv_word, page_count); prv_word = cur_word; page_count = 0; } diff --git a/400_xowa/src/gplx/xowa/bldrs/cmds/wikis/Xob_redirect_cmd.java b/400_xowa/src/gplx/xowa/bldrs/cmds/wikis/Xob_redirect_cmd.java index f29d33db9..732ca4678 100644 --- a/400_xowa/src/gplx/xowa/bldrs/cmds/wikis/Xob_redirect_cmd.java +++ b/400_xowa/src/gplx/xowa/bldrs/cmds/wikis/Xob_redirect_cmd.java @@ -26,7 +26,7 @@ public class Xob_redirect_cmd extends Xob_dump_mgr_base { public Xob_redirect_cmd(Xob_bldr bldr, Xowe_wiki wiki) {this.Cmd_ctor(bldr, wiki); this.Reset_db_y_();} @Override public String Cmd_key() {return Xob_cmd_keys.Key_wiki_redirect;} @Override public int[] Init_ns_ary() {return Int_.Ary(Xow_ns_.Tid__file);} // restrict to file ns - @Override public byte Init_redirect() {return Bool_.Y_byte;} // restrict to redirects + @Override public byte Init_redirect() {return Bool_.Y_byte;} // restrict to redirects @Override protected void Init_reset(Db_conn conn) { Db_cfg_tbl cfg_tbl = new Db_cfg_tbl(conn, "xowa_cfg"); cfg_tbl.Delete_all(); diff --git a/400_xowa/src/gplx/xowa/bldrs/installs/Xoi_cmd_wiki_tst.java b/400_xowa/src/gplx/xowa/bldrs/installs/Xoi_cmd_wiki_tst.java index b8b99dd4e..dac07c253 100644 --- a/400_xowa/src/gplx/xowa/bldrs/installs/Xoi_cmd_wiki_tst.java +++ b/400_xowa/src/gplx/xowa/bldrs/installs/Xoi_cmd_wiki_tst.java @@ -46,10 +46,10 @@ public class Xoi_cmd_wiki_tst { for (int j = 0; j < 5; ++j) { latest_html = Io_mgr.Instance.DownloadFil_args("", Io_url_.Empty).Exec_as_bry(url); if (latest_html != null) break; - Tfds.Write("fail|" + url); + Tfds.Dbg("fail|" + url); if (j == 4) return; } - Tfds.Write("pass|" + url); + Tfds.Dbg("pass|" + url); parser.Parse(latest_html); Xowm_dump_file dump_file = new Xowm_dump_file(domain_str, "latest", Xowm_dump_type_.Str__pages_articles); dump_file.Server_url_(Xowm_dump_file_.Server_wmf_https); diff --git a/400_xowa/src/gplx/xowa/bldrs/setups/maints/Wmf_latest_parser_tst.java b/400_xowa/src/gplx/xowa/bldrs/setups/maints/Wmf_latest_parser_tst.java index 5c24dddd4..fff3dda64 100644 --- a/400_xowa/src/gplx/xowa/bldrs/setups/maints/Wmf_latest_parser_tst.java +++ b/400_xowa/src/gplx/xowa/bldrs/setups/maints/Wmf_latest_parser_tst.java @@ -28,7 +28,7 @@ public class Wmf_latest_parser_tst { // @Test public void Smoke() { // Wmf_latest_parser parser = new Wmf_latest_parser(); // parser.Parse(Io_mgr.Instance.LoadFilBry("C:\\wmf_latest.html")); -// Tfds.Write(String_.Concat_lines_nl(Wmf_latest_parser_fxt.Xto_str_ary(parser.To_ary()))); +// Tfds.Dbg(String_.Concat_lines_nl(Wmf_latest_parser_fxt.Xto_str_ary(parser.To_ary()))); // } } class Wmf_latest_parser_fxt { diff --git a/400_xowa/src/gplx/xowa/drds/Xod_app.java b/400_xowa/src/gplx/xowa/drds/Xod_app.java index b4baee742..c19be48c8 100644 --- a/400_xowa/src/gplx/xowa/drds/Xod_app.java +++ b/400_xowa/src/gplx/xowa/drds/Xod_app.java @@ -19,6 +19,7 @@ package gplx.xowa.drds; import gplx.*; import gplx.xowa.*; import gplx.xowa.drds.pages.*; import gplx.xowa.drds.files.*; import gplx.xowa.apps.*; import gplx.xowa.wikis.data.tbls.*; import gplx.xowa.files.gui.*; +import gplx.xowa.specials.search.*; public class Xod_app { private final Xoav_app app; private final Xod_page_mgr page_mgr = new Xod_page_mgr(); @@ -26,13 +27,29 @@ public class Xod_app { public Xod_app(Xoav_app app) { this.app = app; } + public int Get_wiki_count() { + int rv = app.Wiki_mgri().Count(); + return rv - 1; // ignore home wiki + } public Xow_wiki Get_wiki(String wiki_domain) { - return app.Wiki_mgri().Get_by_key_or_make_init_y(Bry_.new_u8(wiki_domain)); + Xow_wiki rv = app.Wiki_mgri().Get_by_key_or_make_init_y(Bry_.new_u8(wiki_domain)); + if (rv.Data__core_mgr() == null) rv.Init_by_wiki(); + return rv; } - public Xod_page_itm Get_page(Xow_wiki wiki, String page_ttl) { - return page_mgr.Get_page(wiki, page_ttl); + public Xod_page_itm Get_page(Xow_wiki wiki, Xoa_url page_url) { + return page_mgr.Get_page(wiki, page_url); } public void Load_files(Xow_wiki wiki, Xod_page_itm pg, Xog_js_wkr js_wkr) { file_mgr.Load_files(wiki, pg, js_wkr); } + public String[] Search_titles(Cancelable cancelable, Xow_wiki wiki, Xows_ui_async ui_async, String search) { + Xows_db_wkr search_wkr = new Xows_db_wkr(); + Xows_db_row[] rows = search_wkr.Search_by_drd(cancelable, wiki, ui_async, Bry_.new_u8(search), 50); + int len = rows.length; + String[] rv = new String[len]; + for (int i = 0; i < len; ++i) { + rv[i] = String_.new_u8(rows[i].Page_ttl().Page_txt()); + } + return rv; + } } diff --git a/400_xowa/src/gplx/xowa/drds/Xod_app_tst.java b/400_xowa/src/gplx/xowa/drds/Xod_app_tst.java index 9646c3883..85ea4093e 100644 --- a/400_xowa/src/gplx/xowa/drds/Xod_app_tst.java +++ b/400_xowa/src/gplx/xowa/drds/Xod_app_tst.java @@ -23,7 +23,7 @@ public class Xod_app_tst { @Test public void Get() { tstr.Data_mgr().Page__insert(1, "A", "2015-10-19 00:01:02"); tstr.Data_mgr().Html__insert(1, "abc"); - tstr.Test__get("A", tstr.Make_page(1, "A", "2015-10-19 00:01:02", tstr.Make_section(0, 2, "", "", "abc"))); + tstr.Test__get("A", tstr.Make_page(1, "A", "2015-10-19T00:01:02Z", tstr.Make_section(0, 2, "", "", "abc"))); } } class Xod_app_tstr { @@ -42,7 +42,8 @@ class Xod_app_tstr { } public void Test__get(String ttl, Xod_page_itm expd) { Xow_wiki wiki = drd_provider.Get_wiki("en.wikipedia.org"); - Xod_page_itm itm = drd_provider.Get_page(wiki, ttl); + Xoa_url page_url = wiki.Utl__url_parser().Parse(Bry_.new_u8(ttl)); + Xod_page_itm itm = drd_provider.Get_page(wiki, page_url); Tfds.Eq(expd.To_str(), itm.To_str()); } public Xod_page_itm Make_page(int page_id, String ttl, String modified_on, Xoh_section_itm... section_ary) { diff --git a/400_xowa/src/gplx/xowa/drds/pages/Xod_page_itm.java b/400_xowa/src/gplx/xowa/drds/pages/Xod_page_itm.java index f42cbf50c..985f2748b 100644 --- a/400_xowa/src/gplx/xowa/drds/pages/Xod_page_itm.java +++ b/400_xowa/src/gplx/xowa/drds/pages/Xod_page_itm.java @@ -51,7 +51,7 @@ public class Xod_page_itm { this.rev_id = page_id; this.ttl_text = String_.new_u8(ttl.Page_txt()); this.ttl_db = ttl.Page_db_as_str(); - this.modified_on = db_page.Modified_on().XtoStr_fmt_iso_8561(); + this.modified_on = db_page.Modified_on().XtoStr_fmt_iso_8561_w_tz(); this.lang_count = 1; this.redirected = null; this.description = null; diff --git a/400_xowa/src/gplx/xowa/drds/pages/Xod_page_mgr.java b/400_xowa/src/gplx/xowa/drds/pages/Xod_page_mgr.java index 243ef951b..f99cc359d 100644 --- a/400_xowa/src/gplx/xowa/drds/pages/Xod_page_mgr.java +++ b/400_xowa/src/gplx/xowa/drds/pages/Xod_page_mgr.java @@ -18,12 +18,14 @@ along with this program. If not, see . package gplx.xowa.drds.pages; import gplx.*; import gplx.xowa.*; import gplx.xowa.drds.*; import gplx.xowa.wikis.data.tbls.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.sections.*; +import gplx.core.net.*; import gplx.xowa.specials.xowa.file_browsers.*; public class Xod_page_mgr { - public Xod_page_itm Get_page(Xow_wiki wiki, String page_ttl) { + public Xod_page_itm Get_page(Xow_wiki wiki, Xoa_url page_url) { Xod_page_itm rv = new Xod_page_itm(); // load meta info like page_id, modified, etc - Xoa_ttl ttl = wiki.Ttl_parse(Bry_.new_u8(page_ttl)); + Xoa_ttl ttl = wiki.Ttl_parse(page_url.Page_bry()); + if (ttl.Ns().Id_is_special()) return Load_special(rv, wiki, ttl, page_url.Qargs_ary()); Xowd_page_itm dbpg = new Xowd_page_itm(); wiki.Data__core_mgr().Tbl__page().Select_by_ttl(dbpg, ttl.Ns(), ttl.Page_db()); rv.Init_by_dbpg(ttl, dbpg); @@ -44,4 +46,13 @@ public class Xod_page_mgr { rv.Section_list().Add(itm); } } + private Xod_page_itm Load_special(Xod_page_itm rv, Xow_wiki wiki, Xoa_ttl ttl, Gfo_qarg_itm[] qargs) { + Xosp_fbrow_rslt rslt = Xosp_fbrow_special.Gen(qargs, wiki.App().Wiki_mgri()); + rv.Init(-1, -1, String_.new_u8(ttl.Page_txt()), String_.new_u8(ttl.Page_db()), null, null, DateAdp_.Now().XtoStr_fmt_iso_8561(), false, false, false, 0, "", "", ""); + rv.Init_by_hpg(new Xoh_page()); + Xoh_section_itm section = new Xoh_section_itm(1, 1, Bry_.Empty, Bry_.Empty); + section.Content_(rslt.Html_body()); + rv.Section_list().Add(section); + return rv; + } } diff --git a/400_xowa/src/gplx/xowa/files/Xof_file_wkr.java b/400_xowa/src/gplx/xowa/files/Xof_file_wkr.java index 08399c3d4..fb9c77f94 100644 --- a/400_xowa/src/gplx/xowa/files/Xof_file_wkr.java +++ b/400_xowa/src/gplx/xowa/files/Xof_file_wkr.java @@ -33,6 +33,12 @@ public class Xof_file_wkr implements Gfo_thread_wkr { public String Name() {return "xowa.load_imgs";} public boolean Resume() {return true;} public void Exec() { + int len = imgs.Count(); + for (int i = 0; i < len; ++i) + Exec_by_fsdb((Xof_fsdb_itm)imgs.Get_at(i)); + Xoa_app_.Usr_dlg().Prog_none("", "", ""); + } + public void Exec_old() { int len = imgs.Count(); for (int i = 0; i < len; ++i) Ctor_by_hdump(hpg, (Xohd_img_itm__base)imgs.Get_at(i)); @@ -42,6 +48,9 @@ public class Xof_file_wkr implements Gfo_thread_wkr { Xof_fsdb_itm fsdb = new Xof_fsdb_itm(); fsdb.Init_at_lnki(Xof_exec_tid.Tid_wiki_page, hpg.Wiki().Domain_itm().Abrv_xo(), hdump.Lnki_ttl(), hdump.Lnki_type(), hdump.Lnki_upright(), hdump.Lnki_w(), hdump.Lnki_h(), hdump.Lnki_time(), hdump.Lnki_page(), Xof_patch_upright_tid_.Tid_all); fsdb.Init_at_hdoc(hdump.Html_uid(), hdump.Html_elem_tid()); + Exec_by_fsdb(fsdb); + } + private void Exec_by_fsdb(Xof_fsdb_itm fsdb) { fsdb.Orig_exists_n_(); Xof_orig_itm orig = orig_mgr.Find_by_ttl_or_null(fsdb.Lnki_ttl()); if (orig == Xof_orig_itm.Null) return; Eval_orig(orig, fsdb, url_bldr, repo_mgr, img_size); diff --git a/400_xowa/src/gplx/xowa/files/Xow_file_mgr.java b/400_xowa/src/gplx/xowa/files/Xow_file_mgr.java index b6aed33b9..533bf5748 100644 --- a/400_xowa/src/gplx/xowa/files/Xow_file_mgr.java +++ b/400_xowa/src/gplx/xowa/files/Xow_file_mgr.java @@ -89,6 +89,10 @@ public class Xow_file_mgr implements GfoInvkAble { return fsdb_mgr.Mnt_mgr().Mnts__get_main().Cfg_mgr().Grps_get_or_load(grp); } public Xof_fsdb_mgr Fsdb_mgr() {return fsdb_mgr;} private Xof_fsdb_mgr fsdb_mgr = new Xof_fsdb_mgr__sql(); + public void Clear_for_tests() { // NOTE: must clear else fsdb_mode will be cached for multiple runs; will generally be v1, but some tests will set to v2; DATE:2015-12-22 + version = Bool_.__byte; + fsdb_mode = null; + } public boolean Find_meta(Xof_xfer_itm xfer_itm) { xfer_itm.Orig_repo_id_(Xof_meta_itm.Repo_unknown); byte[] xfer_itm_ttl = xfer_itm.Lnki_ttl(); diff --git a/400_xowa/src/gplx/xowa/files/gui/Js_img_mgr.java b/400_xowa/src/gplx/xowa/files/gui/Js_img_mgr.java index a783084e6..ce950facf 100644 --- a/400_xowa/src/gplx/xowa/files/gui/Js_img_mgr.java +++ b/400_xowa/src/gplx/xowa/files/gui/Js_img_mgr.java @@ -53,5 +53,5 @@ public class Js_img_mgr { break; } } - public static String To_doc_uid(int html_uid) {return "xowa_file_img_" + Int_.To_str(html_uid);} + public static String To_doc_uid(int html_uid) {return gplx.xowa.htmls.Xoh_img_mgr.Str__html_uid + Int_.To_str(html_uid);} } diff --git a/400_xowa/src/gplx/xowa/guis/views/Xog_win_itm.java b/400_xowa/src/gplx/xowa/guis/views/Xog_win_itm.java index 8478b14dc..14344d5d9 100644 --- a/400_xowa/src/gplx/xowa/guis/views/Xog_win_itm.java +++ b/400_xowa/src/gplx/xowa/guis/views/Xog_win_itm.java @@ -123,7 +123,7 @@ public class Xog_win_itm implements GfoInvkAble, GfoEvObj { } private void Win__link_clicked(String anchor_raw) { String url = url_box.Text(); - int pos = String_.FindFwd(url, gplx.langs.htmls.Html_tag_.Anchor_str); + int pos = String_.FindFwd(url, gplx.langs.htmls.Gfh_tag_.Anchor_str); if (pos != Bry_find_.Not_found) url = String_.Mid(url, 0, pos); String anchor_str = Parse_evt_location_changing(anchor_raw); byte[] anchor_bry = Bry_.new_u8(anchor_str); @@ -145,7 +145,7 @@ public class Xog_win_itm implements GfoInvkAble, GfoEvObj { app.Gfs_mgr().Run_str(snippet); } private static String Parse_evt_location_changing(String v) { // EX: about:blank#anchor -> anchor - int pos = String_.FindFwd(v, gplx.langs.htmls.Html_tag_.Anchor_str); + int pos = String_.FindFwd(v, gplx.langs.htmls.Gfh_tag_.Anchor_str); return pos == Bry_find_.Not_found ? null : String_.Mid(v, pos + 1); diff --git a/400_xowa/src/gplx/xowa/htmls/Xoh_consts.java b/400_xowa/src/gplx/xowa/htmls/Xoh_consts.java index 6a6c7293f..df6bf09e0 100644 --- a/400_xowa/src/gplx/xowa/htmls/Xoh_consts.java +++ b/400_xowa/src/gplx/xowa/htmls/Xoh_consts.java @@ -29,11 +29,8 @@ public class Xoh_consts { , __inline_quote = Bry_.new_a7("\"/>") , Space_2 = Bry_.new_a7(" ") - , A_bgn = Bry_.new_a7("") , Div_bgn_open = Bry_.new_a7("
") , Img_bgn = Bry_.new_a7("") , Code_bgn_open = Bry_.new_a7("") - , Title_atr = Bry_.new_a7("\" title=\"") , Id_atr = Bry_.new_a7(" id=\"") , Style_atr = Bry_.new_a7(" style=\"") , Atr_xowa_title_bry = Bry_.new_a7(Atr_xowa_title_str) diff --git a/400_xowa/src/gplx/xowa/htmls/Xoh_img_mgr.java b/400_xowa/src/gplx/xowa/htmls/Xoh_img_mgr.java index e2ad47323..de415896f 100644 --- a/400_xowa/src/gplx/xowa/htmls/Xoh_img_mgr.java +++ b/400_xowa/src/gplx/xowa/htmls/Xoh_img_mgr.java @@ -39,5 +39,6 @@ public class Xoh_img_mgr { itm.To_bfr(bfr); } } - public static final byte[] Bry__html_uid = Bry_.new_a7("xoimg_"); + public static final String Str__html_uid = "xoimg_"; + public static final byte[] Bry__html_uid = Bry_.new_a7(Str__html_uid); } diff --git a/400_xowa/src/gplx/xowa/htmls/Xoh_page_wtr_wkr.java b/400_xowa/src/gplx/xowa/htmls/Xoh_page_wtr_wkr.java index 891602d20..4c6f73fbb 100644 --- a/400_xowa/src/gplx/xowa/htmls/Xoh_page_wtr_wkr.java +++ b/400_xowa/src/gplx/xowa/htmls/Xoh_page_wtr_wkr.java @@ -46,13 +46,13 @@ public class Xoh_page_wtr_wkr { Bry_bfr page_bfr = Xoa_app_.Utl__bfr_mkr().Get_m001(); // NOTE: get separate page bfr to output page; do not reuse tmp_bfr b/c it will be used inside Fmt_do if (page_mode == Xopg_page_.Tid_html && wiki.App().Api_root().Html().Page().View_html_generates_hdump()) { Write_body(page_bfr, Xoh_wtr_ctx.Hdump, page); - Write_page_by_tid(page_mode, bfr, mgr.Page_html_fmtr(), Html_utl.Escape_html_as_bry(page_bfr.To_bry_and_clear())); + Write_page_by_tid(page_mode, bfr, mgr.Page_html_fmtr(), Gfh_utl.Escape_html_as_bry(page_bfr.To_bry_and_clear())); } else { Write_body(page_bfr, Xoh_wtr_ctx.Basic, page); Write_page_by_tid(view_mode, bfr, fmtr, page_bfr.To_bry_and_rls()); if (page_mode == Xopg_page_.Tid_html) // if html, write page again, but wrap it in html skin this time - Write_page_by_tid(page_mode, bfr, mgr.Page_html_fmtr(), Html_utl.Escape_html_as_bry(bfr.To_bry_and_clear())); + Write_page_by_tid(page_mode, bfr, mgr.Page_html_fmtr(), Gfh_utl.Escape_html_as_bry(bfr.To_bry_and_clear())); wdata_lang_wtr.Page_(null); } } diff --git a/400_xowa/src/gplx/xowa/htmls/Xoh_page_wtr_wkr_.java b/400_xowa/src/gplx/xowa/htmls/Xoh_page_wtr_wkr_.java index 5f521f72c..efa46fbb7 100644 --- a/400_xowa/src/gplx/xowa/htmls/Xoh_page_wtr_wkr_.java +++ b/400_xowa/src/gplx/xowa/htmls/Xoh_page_wtr_wkr_.java @@ -23,7 +23,7 @@ public class Xoh_page_wtr_wkr_ { public static byte[] Bld_page_content_sub(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Bry_bfr tmp_bfr) { byte[] subpages = app.Html_mgr().Page_mgr().Subpages_bldr().Bld(wiki.Ns_mgr(), 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); + byte[] redirect_msg = Xop_redirect_mgr.Bld_redirect_msg(app, wiki, page.Redirected_ttls()); 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) { @@ -38,7 +38,7 @@ public class Xoh_page_wtr_wkr_ { public static void Bld_head_end(Bry_bfr html_bfr, Xoae_page page) { byte[] head_end = page.Html_data().Custom_head_end(); if (head_end == null) return; - int insert_pos = Bry_find_.Find_fwd(html_bfr.Bfr(), Html_tag_.Head_rhs); + int insert_pos = Bry_find_.Find_fwd(html_bfr.Bfr(), Gfh_tag_.Head_rhs); if (insert_pos == Bry_find_.Not_found) { Gfo_usr_dlg_.Instance.Warn_many("", "", "could not find "); return; @@ -48,7 +48,7 @@ public class Xoh_page_wtr_wkr_ { public static void Bld_html_end(Bry_bfr html_bfr, Xoae_page page) { byte[] html_end = page.Html_data().Custom_html_end(); if (html_end == null) return; - int insert_pos = Bry_find_.Find_bwd(html_bfr.Bfr(), Html_tag_.Html_rhs, html_bfr.Len()); + int insert_pos = Bry_find_.Find_bwd(html_bfr.Bfr(), Gfh_tag_.Html_rhs, html_bfr.Len()); if (insert_pos == Bry_find_.Not_found) { Gfo_usr_dlg_.Instance.Warn_many("", "", "could not find "); return; diff --git a/400_xowa/src/gplx/xowa/htmls/Xohp_ctg_grp_mgr.java b/400_xowa/src/gplx/xowa/htmls/Xohp_ctg_grp_mgr.java index 9b55ca3c2..ac555c236 100644 --- a/400_xowa/src/gplx/xowa/htmls/Xohp_ctg_grp_mgr.java +++ b/400_xowa/src/gplx/xowa/htmls/Xohp_ctg_grp_mgr.java @@ -43,9 +43,9 @@ public class Xohp_ctg_grp_mgr { grp_fmtr.Bld_bfr_many(bfr, categories_lbl, itm_mgr); } } -class Xoh_ctg_itm_fmtr extends gplx.core.brys.Bfr_arg_base { +class Xoh_ctg_itm_fmtr implements gplx.core.brys.Bfr_arg { public void Set(Xoae_page page, Bry_fmtr itm_fmtr) {this.page = page; this.itm_fmtr = itm_fmtr;} private Xoae_page page; Bry_fmtr itm_fmtr; - @Override public void Bfr_arg__add(Bry_bfr bfr) { + public void Bfr_arg__add(Bry_bfr bfr) { int ctgs_len = page.Category_list().length; Bry_bfr tmp_bfr = Xoa_app_.Utl__bfr_mkr().Get_b128(); Bry_bfr tmp_href = Xoa_app_.Utl__bfr_mkr().Get_b128(); diff --git a/400_xowa/src/gplx/xowa/htmls/bridges/dbuis/fmtrs/Dbui_cells_fmtr.java b/400_xowa/src/gplx/xowa/htmls/bridges/dbuis/fmtrs/Dbui_cells_fmtr.java index a748abf52..a4d567a87 100644 --- a/400_xowa/src/gplx/xowa/htmls/bridges/dbuis/fmtrs/Dbui_cells_fmtr.java +++ b/400_xowa/src/gplx/xowa/htmls/bridges/dbuis/fmtrs/Dbui_cells_fmtr.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.htmls.bridges.dbuis.fmtrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.bridges.*; import gplx.xowa.htmls.bridges.dbuis.*; import gplx.core.brys.fmtrs.*; import gplx.xowa.htmls.bridges.dbuis.tbls.*; -public class Dbui_cells_fmtr extends gplx.core.brys.Bfr_arg_base { +public class Dbui_cells_fmtr implements gplx.core.brys.Bfr_arg { private final Dbui_cell_fmtr cell_fmtr = new Dbui_cell_fmtr(); private final Dbui_btn_fmtr btn_fmtr = new Dbui_btn_fmtr(); private Dbui_btn_itm[] btns; @@ -30,7 +30,7 @@ public class Dbui_cells_fmtr extends gplx.core.brys.Bfr_arg_base { this.row_key = row_key; this.row_itm = row_itm; return this; } - @Override public void Bfr_arg__add(Bry_bfr bfr) { + public void Bfr_arg__add(Bry_bfr bfr) { fmtr.Bld_bfr_many(bfr, cell_fmtr.Init(row_key, row_itm), btn_fmtr.Init(row_key, btns)); } private static final Bry_fmtr fmtr = Bry_fmtr.new_(String_.Concat_lines_nl_skip_last @@ -40,12 +40,12 @@ public class Dbui_cells_fmtr extends gplx.core.brys.Bfr_arg_base { , "
" ), "vals", "btns"); } -class Dbui_cell_fmtr extends gplx.core.brys.Bfr_arg_base { +class Dbui_cell_fmtr implements gplx.core.brys.Bfr_arg { private byte[] row_key; private Dbui_row_itm row_itm; private Dbui_val_fmtr val_fmtr; public void Ctor(Dbui_val_fmtr val_fmtr) {this.val_fmtr = val_fmtr;} public Dbui_cell_fmtr Init(byte[] row_key, Dbui_row_itm row_itm) {this.row_key = row_key; this.row_itm = row_itm; return this;} - @Override public void Bfr_arg__add(Bry_bfr bfr) { + public void Bfr_arg__add(Bry_bfr bfr) { Dbui_col_itm[] cols = row_itm.Tbl().Cols(); Dbui_val_itm[] vals = row_itm.Vals(); int len = vals.length; for (int i = 0; i < len; ++i) { @@ -58,12 +58,12 @@ class Dbui_cell_fmtr extends gplx.core.brys.Bfr_arg_base { , "
~{html}
" ), "row_key", "val_idx", "html"); } -class Dbui_btn_fmtr extends gplx.core.brys.Bfr_arg_base { +class Dbui_btn_fmtr implements gplx.core.brys.Bfr_arg { private byte[] row_key; private Dbui_btn_itm[] btns; public Dbui_btn_fmtr Init(byte[] row_key, Dbui_btn_itm[] btns) { this.row_key = row_key; this.btns = btns; return this; } - @Override public void Bfr_arg__add(Bry_bfr bfr) { + public void Bfr_arg__add(Bry_bfr bfr) { int len = btns.length; Io_url img_dir = gplx.xowa.htmls.heads.Xoh_head_itm__dbui.Img_dir(); for (int i = 0; i < len; ++i) { diff --git a/400_xowa/src/gplx/xowa/htmls/bridges/dbuis/fmtrs/Dbui_tbl_fmtr.java b/400_xowa/src/gplx/xowa/htmls/bridges/dbuis/fmtrs/Dbui_tbl_fmtr.java index 7899bfd27..f0f370751 100644 --- a/400_xowa/src/gplx/xowa/htmls/bridges/dbuis/fmtrs/Dbui_tbl_fmtr.java +++ b/400_xowa/src/gplx/xowa/htmls/bridges/dbuis/fmtrs/Dbui_tbl_fmtr.java @@ -33,10 +33,10 @@ public class Dbui_tbl_fmtr { , "
" ), "tbl_key", "width", "origin", "delete_confirm_msg", "head_cells", "data_rows"); } -class Dbui_head_cell_fmtr extends gplx.core.brys.Bfr_arg_base { +class Dbui_head_cell_fmtr implements gplx.core.brys.Bfr_arg { private Dbui_tbl_itm tbl; public Dbui_head_cell_fmtr Init(Dbui_tbl_itm tbl) {this.tbl = tbl; return this;} - @Override public void Bfr_arg__add(Bry_bfr bfr) { + public void Bfr_arg__add(Bry_bfr bfr) { Dbui_col_itm[] cols = tbl.Cols(); int len = cols.length; for (int i = 0; i < len; ++i) { Dbui_col_itm col = cols[i]; @@ -49,13 +49,13 @@ class Dbui_head_cell_fmtr extends gplx.core.brys.Bfr_arg_base { , "
~{display}
" ), "width", "display"); } -class Dbui_row_fmtr extends gplx.core.brys.Bfr_arg_base { +class Dbui_row_fmtr implements gplx.core.brys.Bfr_arg { private final Dbui_cells_fmtr cells_fmtr = new Dbui_cells_fmtr(); private final Dbui_val_fmtr val_fmtr = Dbui_val_fmtr_.new_view(); private final Bry_bfr row_key_bfr = Bry_bfr.new_(255); private Dbui_tbl_itm tbl; private Dbui_row_itm[] rows; public Dbui_row_fmtr Init(Dbui_tbl_itm tbl, Dbui_row_itm[] rows) {this.tbl = tbl; this.rows = rows; return this;} - @Override public void Bfr_arg__add(Bry_bfr bfr) { + public void Bfr_arg__add(Bry_bfr bfr) { byte[] tbl_key = tbl.Key(); int len = rows.length; cells_fmtr.Ctor(val_fmtr, tbl.View_btns()); diff --git a/400_xowa/src/gplx/xowa/htmls/bridges/dbuis/fmtrs/Dbui_val_fmtr.java b/400_xowa/src/gplx/xowa/htmls/bridges/dbuis/fmtrs/Dbui_val_fmtr.java index c6b26afe4..a7780034f 100644 --- a/400_xowa/src/gplx/xowa/htmls/bridges/dbuis/fmtrs/Dbui_val_fmtr.java +++ b/400_xowa/src/gplx/xowa/htmls/bridges/dbuis/fmtrs/Dbui_val_fmtr.java @@ -21,17 +21,17 @@ import gplx.xowa.htmls.bridges.dbuis.tbls.*; public interface Dbui_val_fmtr { Dbui_val_fmtr Init(Dbui_col_itm col, byte[] row_id, Dbui_val_itm val); } -class Dbui_val_fmtr__view extends gplx.core.brys.Bfr_arg_base implements Dbui_val_fmtr { +class Dbui_val_fmtr__view implements gplx.core.brys.Bfr_arg, Dbui_val_fmtr { private Dbui_val_itm val; public Dbui_val_fmtr Init(Dbui_col_itm col, byte[] row_id, Dbui_val_itm val) {this.val = val; return this;} - @Override public void Bfr_arg__add(Bry_bfr bfr) { + public void Bfr_arg__add(Bry_bfr bfr) { bfr.Add(val.Html()); } } -class Dbui_val_fmtr__edit extends gplx.core.brys.Bfr_arg_base implements Dbui_val_fmtr { +class Dbui_val_fmtr__edit implements gplx.core.brys.Bfr_arg, Dbui_val_fmtr { private Dbui_col_itm col; private byte[] row_id; private Dbui_val_itm val; public Dbui_val_fmtr Init(Dbui_col_itm col, byte[] row_id, Dbui_val_itm val) {this.col = col; this.row_id = row_id; this.val = val; return this;} - @Override public void Bfr_arg__add(Bry_bfr bfr) { + public void Bfr_arg__add(Bry_bfr bfr) { switch (col.Type()) { case Dbui_col_itm.Type_id_str: input_fmtr_str.Bld_bfr_many(bfr, col.Key(), col.Width(), val.Data(), row_id); break; case Dbui_col_itm.Type_id_text: textarea_fmtr_str.Bld_bfr_many(bfr, col.Key(), col.Width(), val.Data(), row_id); break; diff --git a/400_xowa/src/gplx/xowa/htmls/core/Xow_hdump_mgr__load.java b/400_xowa/src/gplx/xowa/htmls/core/Xow_hdump_mgr__load.java index 1fc4981f4..30256bec6 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/Xow_hdump_mgr__load.java +++ b/400_xowa/src/gplx/xowa/htmls/core/Xow_hdump_mgr__load.java @@ -23,6 +23,7 @@ import gplx.xowa.wikis.pages.*; import gplx.xowa.wikis.pages.skins.*; public class Xow_hdump_mgr__load { private final Xow_wiki wiki; private final Xoh_hzip_mgr hzip_mgr; private final Io_stream_zip_mgr zip_mgr; private final Xoh_page tmp_hpg; private final Bry_bfr tmp_bfr; private final Xowd_page_itm tmp_dbpg = new Xowd_page_itm(); + private Hash_adp_bry page_overrides; public Xow_hdump_mgr__load(Xow_wiki wiki, Xoh_hzip_mgr hzip_mgr, Io_stream_zip_mgr zip_mgr, Xoh_page tmp_hpg, Bry_bfr tmp_bfr) { this.wiki = wiki; this.hzip_mgr = hzip_mgr; this.zip_mgr = zip_mgr; this.tmp_hpg = tmp_hpg; this.tmp_bfr = tmp_bfr; this.make_mgr = new Xoh_make_mgr(wiki.App().Usr_dlg(), wiki.App().Fsys_mgr(), gplx.langs.htmls.encoders.Gfo_url_encoder_.Fsys_lnx, wiki.Domain_bry()); @@ -36,12 +37,13 @@ public class Xow_hdump_mgr__load { } public boolean Load(Xoh_page hpg, Xoa_ttl ttl) { synchronized (tmp_dbpg) { + if (page_overrides == null) page_overrides = Init_page_overrides(wiki); if (!Load__dbpg(wiki, tmp_dbpg.Clear(), hpg, ttl)) return Load__fail(hpg); // nothing in "page" table Xowd_db_file html_db = wiki.Data__core_mgr().Dbs__get_at(tmp_dbpg.Html_db_id()); hpg.Init(hpg.Wiki(), hpg.Url(), ttl, tmp_dbpg.Id()); - if (!html_db.Tbl__html().Select_by_page(hpg)) return Load__fail(hpg); // nothing in "html_page" table + if (!html_db.Tbl__html().Select_by_page(hpg)) return Load__fail(hpg); // nothing in "html_page" table byte[] src = Parse(hpg, hpg.Body_zip_tid(), hpg.Body_hzip_tid(), hpg.Body()); - hpg.Body_(make_mgr.Parse(src, hpg, hpg.Wiki())); + hpg.Body_(src); return true; } } @@ -49,8 +51,15 @@ public class Xow_hdump_mgr__load { private byte[] Parse(Xoh_page hpg, int zip_tid, int hzip_tid, byte[] src) { if (zip_tid > gplx.core.ios.Io_stream_.Tid_raw) src = zip_mgr.Unzip((byte)zip_tid, src); - if (hzip_tid == Xoh_hzip_dict_.Hzip__v1) + if (hzip_tid == Xoh_hzip_dict_.Hzip__v1) { + byte[] page_override_src = (byte[])page_overrides.Get_by_bry(hpg.Ttl().Page_db()); + if (page_override_src != null) src = page_override_src; + hpg.Section_mgr().Add(0, 2, Bry_.Empty, Bry_.Empty).Content_bgn_(0); // +1 to skip \n src = Decode_as_bry(tmp_bfr.Clear(), hpg, src, Bool_.N); + hpg.Section_mgr().Set_content(hpg.Section_mgr().Len() - 1, src, src.length); + } + else + src = make_mgr.Parse(src, hpg, hpg.Wiki()); return src; } private void Fill_page(Xoae_page wpg, Xoh_page hpg) { @@ -79,4 +88,19 @@ public class Xow_hdump_mgr__load { if (redirect_id == -1) break; } } + private static Hash_adp_bry Init_page_overrides(Xow_wiki wiki) { + Hash_adp_bry rv = Hash_adp_bry.cs(); + Io_url[] page_urls = Io_mgr.Instance.QueryDir_fils(wiki.Fsys_mgr().Root_dir().GenSubDir_nest("data", "page")); + int page_urls_len = page_urls.length; + for (int i = 0; i < page_urls_len; ++i) { + Io_url page_url = page_urls[i]; + byte[] page_raw = Io_mgr.Instance.LoadFilBry(page_url); + int page_raw_len = page_raw.length; + int page_nl = Bry_find_.Find_fwd(page_raw, Byte_ascii.Nl, 0, page_raw_len); if (page_nl == Bry_find_.Not_found) continue; + byte[] page_ttl_bry = Bry_.Mid(page_raw, 0, page_nl); + byte[] page_src_bry = Bry_.Mid(page_raw, page_nl + 1, page_raw_len); + rv.Add_bry_obj(page_ttl_bry, page_src_bry); + } + return rv; + } } diff --git a/400_xowa/src/gplx/xowa/htmls/core/Xow_hdump_mgr__load_tst.java b/400_xowa/src/gplx/xowa/htmls/core/Xow_hdump_mgr__load_tst.java index 90153da64..abf4e2ee7 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/Xow_hdump_mgr__load_tst.java +++ b/400_xowa/src/gplx/xowa/htmls/core/Xow_hdump_mgr__load_tst.java @@ -35,7 +35,7 @@ public class Xow_hdump_mgr__load_tst { // ( "[[File:A.png|thumb|test_caption]]", String_.Concat_lines_nl_skip_last // ( "
" // , "
" -// , " \"\"" +// , " \"\"" // , "
" // , " test_caption" // , "
" @@ -49,7 +49,7 @@ public class Xow_hdump_mgr__load_tst { // ( "[[File:A.oga|thumb|test_caption]]", String_.Concat_lines_nl_skip_last // ( "
" // , "
" -// , "
" +// , "
" // , "
" // , "
" // , " test_caption" @@ -64,10 +64,10 @@ public class Xow_hdump_mgr__load_tst { // ( "[[File:A.ogv|thumb|test_caption]]", String_.Concat_lines_nl_skip_last // ( "
" // , "
" -// , "
" +// , "
" // , " " // , "
" @@ -93,7 +93,7 @@ public class Xow_hdump_mgr__load_tst { // , "
" // , "
" // , "
" -// , " \"\"" +// , " \"\"" // , "
" // , "
" // , "

A1" diff --git a/400_xowa/src/gplx/xowa/htmls/core/bldrs/Xob_link_dump_cmd.java b/400_xowa/src/gplx/xowa/htmls/core/bldrs/Xob_link_dump_cmd.java index 8f447fca0..134061e76 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/bldrs/Xob_link_dump_cmd.java +++ b/400_xowa/src/gplx/xowa/htmls/core/bldrs/Xob_link_dump_cmd.java @@ -50,7 +50,7 @@ public class Xob_link_dump_cmd { tbl.Create_idx_2(); conn.Env_vacuum(); } catch (Exception e) { - Tfds.Write(Err_.Message_gplx_full(e)); + Tfds.Dbg(Err_.Message_gplx_full(e)); } } } diff --git a/400_xowa/src/gplx/xowa/htmls/core/htmls/Xoh_html_wtr.java b/400_xowa/src/gplx/xowa/htmls/core/htmls/Xoh_html_wtr.java index b1c92403b..cb4299f4b 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/htmls/Xoh_html_wtr.java +++ b/400_xowa/src/gplx/xowa/htmls/core/htmls/Xoh_html_wtr.java @@ -20,7 +20,7 @@ import gplx.core.primitives.*; import gplx.core.net.*; import gplx.core.btries.* import gplx.langs.htmls.*; import gplx.xowa.langs.*; import gplx.xowa.langs.kwds.*; import gplx.xowa.wikis.domains.*; import gplx.xowa.parsers.*; import gplx.xowa.parsers.apos.*; import gplx.xowa.parsers.amps.*; import gplx.xowa.parsers.lnkes.*; import gplx.xowa.parsers.lists.*; import gplx.xowa.htmls.core.wkrs.lnkis.htmls.*; import gplx.xowa.parsers.tblws.*; import gplx.xowa.parsers.paras.*; import gplx.xowa.parsers.xndes.*; import gplx.xowa.parsers.lnkis.*; import gplx.xowa.parsers.miscs.*; import gplx.xowa.parsers.vnts.*; import gplx.xowa.parsers.htmls.*; -import gplx.xowa.xtns.*; import gplx.xowa.xtns.dynamicPageList.*; import gplx.xowa.xtns.math.*; import gplx.xowa.xtns.cite.*; import gplx.xowa.htmls.core.hzips.*; import gplx.xowa.parsers.hdrs.*; +import gplx.xowa.xtns.*; import gplx.xowa.xtns.dynamicPageList.*; import gplx.xowa.xtns.math.*; import gplx.xowa.xtns.cites.*; import gplx.xowa.htmls.core.hzips.*; import gplx.xowa.parsers.hdrs.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.hdrs.*; import gplx.xowa.htmls.core.wkrs.lnkes.*; public class Xoh_html_wtr { @@ -114,18 +114,18 @@ public class Xoh_html_wtr { if (literal_apos > 0) bfr.Add_byte_repeat(Byte_ascii.Apos, literal_apos); switch (apos.Apos_cmd()) { - case Xop_apos_tkn_.Cmd_b_bgn: bfr.Add(Html_tag_.B_lhs); break; - case Xop_apos_tkn_.Cmd_b_end: bfr.Add(Html_tag_.B_rhs); break; - case Xop_apos_tkn_.Cmd_i_bgn: bfr.Add(Html_tag_.I_lhs); break; - case Xop_apos_tkn_.Cmd_i_end: bfr.Add(Html_tag_.I_rhs); break; - case Xop_apos_tkn_.Cmd_bi_bgn: bfr.Add(Html_tag_.B_lhs).Add(Html_tag_.I_lhs); break; - case Xop_apos_tkn_.Cmd_ib_end: bfr.Add(Html_tag_.I_rhs).Add(Html_tag_.B_rhs); break; - case Xop_apos_tkn_.Cmd_ib_bgn: bfr.Add(Html_tag_.I_lhs).Add(Html_tag_.B_lhs); break; - case Xop_apos_tkn_.Cmd_bi_end: bfr.Add(Html_tag_.B_rhs).Add(Html_tag_.I_rhs);; break; - case Xop_apos_tkn_.Cmd_bi_end__b_bgn: bfr.Add(Html_tag_.B_rhs).Add(Html_tag_.I_rhs).Add(Html_tag_.B_lhs); break; - case Xop_apos_tkn_.Cmd_ib_end__i_bgn: bfr.Add(Html_tag_.I_rhs).Add(Html_tag_.B_rhs).Add(Html_tag_.I_lhs); break; - case Xop_apos_tkn_.Cmd_b_end__i_bgn: bfr.Add(Html_tag_.B_rhs).Add(Html_tag_.I_lhs); break; - case Xop_apos_tkn_.Cmd_i_end__b_bgn: bfr.Add(Html_tag_.I_rhs).Add(Html_tag_.B_lhs); break; + case Xop_apos_tkn_.Cmd_b_bgn: bfr.Add(Gfh_tag_.B_lhs); break; + case Xop_apos_tkn_.Cmd_b_end: bfr.Add(Gfh_tag_.B_rhs); break; + case Xop_apos_tkn_.Cmd_i_bgn: bfr.Add(Gfh_tag_.I_lhs); break; + case Xop_apos_tkn_.Cmd_i_end: bfr.Add(Gfh_tag_.I_rhs); break; + case Xop_apos_tkn_.Cmd_bi_bgn: bfr.Add(Gfh_tag_.B_lhs).Add(Gfh_tag_.I_lhs); break; + case Xop_apos_tkn_.Cmd_ib_end: bfr.Add(Gfh_tag_.I_rhs).Add(Gfh_tag_.B_rhs); break; + case Xop_apos_tkn_.Cmd_ib_bgn: bfr.Add(Gfh_tag_.I_lhs).Add(Gfh_tag_.B_lhs); break; + case Xop_apos_tkn_.Cmd_bi_end: bfr.Add(Gfh_tag_.B_rhs).Add(Gfh_tag_.I_rhs);; break; + case Xop_apos_tkn_.Cmd_bi_end__b_bgn: bfr.Add(Gfh_tag_.B_rhs).Add(Gfh_tag_.I_rhs).Add(Gfh_tag_.B_lhs); break; + case Xop_apos_tkn_.Cmd_ib_end__i_bgn: bfr.Add(Gfh_tag_.I_rhs).Add(Gfh_tag_.B_rhs).Add(Gfh_tag_.I_lhs); break; + case Xop_apos_tkn_.Cmd_b_end__i_bgn: bfr.Add(Gfh_tag_.B_rhs).Add(Gfh_tag_.I_lhs); break; + case Xop_apos_tkn_.Cmd_i_end__b_bgn: bfr.Add(Gfh_tag_.I_rhs).Add(Gfh_tag_.B_lhs); break; case Xop_apos_tkn_.Cmd_nil: break; default: throw Err_.new_unhandled(apos.Apos_cmd()); } @@ -466,9 +466,9 @@ public class Xoh_html_wtr { break; default: byte[] tag_name = sub_xnde.Tag().Name_bry(); - bfr.Add(Html_entity_.Lt_bry).Add(tag_name); + bfr.Add(Gfh_entity_.Lt_bry).Add(tag_name); if (xnde.Atrs_bgn() > Xop_tblw_wkr.Atrs_ignore_check) Xnde_atrs(sub_xnde.Tag().Id(), hctx, src, sub_xnde.Atrs_bgn(), sub_xnde.Atrs_end(), xnde.Atrs_ary(), bfr); - bfr.Add(Html_entity_.Gt_bry); + bfr.Add(Gfh_entity_.Gt_bry); break; } Xnde_subs_escape(ctx, hctx, bfr, src, sub_xnde, amp_enable, false); diff --git a/400_xowa/src/gplx/xowa/htmls/core/htmls/Xoh_html_wtr_escaper.java b/400_xowa/src/gplx/xowa/htmls/core/htmls/Xoh_html_wtr_escaper.java index 11111ef13..f995e00dd 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/htmls/Xoh_html_wtr_escaper.java +++ b/400_xowa/src/gplx/xowa/htmls/core/htmls/Xoh_html_wtr_escaper.java @@ -40,17 +40,17 @@ public class Xoh_html_wtr_escaper { } } } - bfr.Add(Html_entity_.Lt_bry); + bfr.Add(Gfh_entity_.Lt_bry); break; case Byte_ascii.Gt: - bfr.Add(Html_entity_.Gt_bry); + bfr.Add(Gfh_entity_.Gt_bry); break; case Byte_ascii.Amp: if (interpret_amp) { int text_bgn = i + 1; // i is &; i + 1 is first char after amp Object o = (text_bgn < end) ? amp_trie.Match_bgn(src, text_bgn, end) : null; // check if this is a valid &; note must check that text_bgn < end or else arrayIndex error; occurs when src is just "&"; DATE:2013-12-19 if (o == null) // invalid; EX: "a&b"; "&bad;"; "&#letters;"; - bfr.Add(Html_entity_.Amp_bry); // escape & and continue + bfr.Add(Gfh_entity_.Amp_bry); // escape & and continue else { // is either (1) a name or (2) an ncr (hex/dec) Xop_amp_trie_itm itm = (Xop_amp_trie_itm)o; int match_pos = amp_trie.Match_pos(); @@ -70,17 +70,17 @@ public class Xoh_html_wtr_escaper { i = end_pos - 1; } else // parse failed; escape and continue - bfr.Add(Html_entity_.Amp_bry); + bfr.Add(Gfh_entity_.Amp_bry); break; default: throw Err_.new_unhandled(itm_tid); } } } else - bfr.Add(Html_entity_.Amp_bry); + bfr.Add(Gfh_entity_.Amp_bry); break; case Byte_ascii.Quote: - bfr.Add(Html_entity_.Quote_bry); + bfr.Add(Gfh_entity_.Quote_bry); break; default: bfr.Add_byte(b); @@ -103,7 +103,7 @@ public class Xoh_html_wtr_escaper { if ( tag_is_bgn // end) // not enough chars for "/nowiki>" || src[i + 1] != Byte_ascii.Slash // / - || !Bry_.Eq(src, i + 2, i + 2 + nowiki_name_len, nowiki_name) // nowiki + || !Bry_.Eq(src, i + 2, i + 2 + nowiki_name_len, nowiki_name) // nowiki || src[i + 2 + nowiki_name_len] != Byte_ascii.Gt // > ) return Bry_find_.Not_found; end_lt = i; diff --git a/400_xowa/src/gplx/xowa/htmls/core/htmls/Xoh_html_wtr_tst.java b/400_xowa/src/gplx/xowa/htmls/core/htmls/Xoh_html_wtr_tst.java index 2b3b113af..c1b879199 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/htmls/Xoh_html_wtr_tst.java +++ b/400_xowa/src/gplx/xowa/htmls/core/htmls/Xoh_html_wtr_tst.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.htmls.core.htmls; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import org.junit.*; public class Xoh_html_wtr_tst { - private Xop_fxt fxt = new Xop_fxt(); + private final Xop_fxt fxt = new Xop_fxt(); @After public void term() {fxt.Init_para_n_(); fxt.Reset();} @Test public void Hr_basic() {fxt.Test_parse_page_wiki_str("----" , "


");} @Test public void Hr_extended() {fxt.Test_parse_page_wiki_str("--------" , "
");} diff --git a/400_xowa/src/gplx/xowa/htmls/core/htmls/tidy/Xoh_tidy_mgr.java b/400_xowa/src/gplx/xowa/htmls/core/htmls/tidy/Xoh_tidy_mgr.java index cd74316ef..1e365d149 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/htmls/tidy/Xoh_tidy_mgr.java +++ b/400_xowa/src/gplx/xowa/htmls/core/htmls/tidy/Xoh_tidy_mgr.java @@ -65,9 +65,9 @@ public class Xoh_tidy_mgr implements GfoInvkAble { } public static boolean Tidy_unwrap(Bry_bfr bfr) { byte[] bfr_bry = bfr.Bfr(); - int find = Bry_find_.Find_fwd(bfr_bry, Html_tag_.Body_lhs); if (find == Bry_find_.Not_found) return false; - bfr.Delete_rng_to_bgn(find + Html_tag_.Body_lhs.length); - find = Bry_find_.Find_bwd(bfr_bry, Html_tag_.Body_rhs, bfr.Len()); if (find == Bry_find_.Not_found) return false; + int find = Bry_find_.Find_fwd(bfr_bry, Gfh_tag_.Body_lhs); if (find == Bry_find_.Not_found) return false; + bfr.Delete_rng_to_bgn(find + Gfh_tag_.Body_lhs.length); + find = Bry_find_.Find_bwd(bfr_bry, Gfh_tag_.Body_rhs, bfr.Len()); if (find == Bry_find_.Not_found) return false; bfr.Delete_rng_to_end(find); return true; } diff --git a/400_xowa/src/gplx/xowa/htmls/core/htmls/utls/Xoh_anchor_kv_bldr.java b/400_xowa/src/gplx/xowa/htmls/core/htmls/utls/Xoh_anchor_kv_bldr.java index b2e13ea3d..6f230f4aa 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/htmls/utls/Xoh_anchor_kv_bldr.java +++ b/400_xowa/src/gplx/xowa/htmls/core/htmls/utls/Xoh_anchor_kv_bldr.java @@ -38,7 +38,7 @@ public class Xoh_anchor_kv_bldr { tmp_bfr.Add_byte(has_qarg ? Byte_ascii.Amp : Byte_ascii.Question); tmp_bfr.Add(key); tmp_bfr.Add_byte(Byte_ascii.Eq); - tmp_bfr.Add(Html_utl.Escape_for_atr_val_as_bry(apos_bfr, Byte_ascii.Apos, bry)); + tmp_bfr.Add(Gfh_utl.Escape_for_atr_val_as_bry(apos_bfr, Byte_ascii.Apos, bry)); return this; } public byte[] Bld_to_bry() { diff --git a/400_xowa/src/gplx/xowa/htmls/core/htmls/utls/Xoh_lnki_bldr.java b/400_xowa/src/gplx/xowa/htmls/core/htmls/utls/Xoh_lnki_bldr.java index 76bf00bbc..be7fff0f3 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/htmls/utls/Xoh_lnki_bldr.java +++ b/400_xowa/src/gplx/xowa/htmls/core/htmls/utls/Xoh_lnki_bldr.java @@ -32,7 +32,7 @@ public class Xoh_lnki_bldr { img_pos_is_left = true; return this; } - public Xoh_lnki_bldr Id_(byte[] v) {this.id = Html_utl.Escape_for_atr_val_as_bry(tmp_bfr, Byte_ascii.Apos, v); return this;} + public Xoh_lnki_bldr Id_(byte[] v) {this.id = Gfh_utl.Escape_for_atr_val_as_bry(tmp_bfr, Byte_ascii.Apos, v); return this;} public Xoh_lnki_bldr Href_(Xow_wiki wiki, byte[] bry) {return Href_(wiki.Domain_bry(), wiki.Ttl_parse(bry));} public Xoh_lnki_bldr Href_(byte[] domain_bry, Xoa_ttl ttl) { href_wtr.Build_to_bfr(tmp_bfr, app, Xoh_wtr_ctx.Mode_popup, domain_bry, ttl); @@ -40,7 +40,7 @@ public class Xoh_lnki_bldr { return this; } public Xoh_lnki_bldr Title_(byte[] title) { - this.title = Html_utl.Escape_for_atr_val_as_bry(tmp_bfr, Byte_ascii.Apos, title); + this.title = Gfh_utl.Escape_for_atr_val_as_bry(tmp_bfr, Byte_ascii.Apos, title); return this; } public Xoh_lnki_bldr Img_pos_is_left_(boolean v) {this.img_pos_is_left = v; return this;} @@ -52,7 +52,7 @@ public class Xoh_lnki_bldr { return this; } public Xoh_lnki_bldr Caption_(byte[] text) { - this.caption = Html_utl.Escape_html_as_bry(tmp_bfr, text, Bool_.Y, Bool_.Y, Bool_.Y, Bool_.Y, Bool_.Y); + this.caption = Gfh_utl.Escape_html_as_bry(tmp_bfr, text, Bool_.Y, Bool_.Y, Bool_.Y, Bool_.Y, Bool_.Y); return this; } public byte[] Bld_to_bry() { diff --git a/400_xowa/src/gplx/xowa/htmls/core/htmls/utls/Xoh_lnki_wtr_utl.java b/400_xowa/src/gplx/xowa/htmls/core/htmls/utls/Xoh_lnki_wtr_utl.java index 3f8ed36db..5a83588bf 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/htmls/utls/Xoh_lnki_wtr_utl.java +++ b/400_xowa/src/gplx/xowa/htmls/core/htmls/utls/Xoh_lnki_wtr_utl.java @@ -29,6 +29,6 @@ public class Xoh_lnki_wtr_utl { return tmp_bfr.To_bry_and_clear(); } public byte[] Bld_title(byte[] text) { - return gplx.langs.htmls.Html_utl.Escape_html_as_bry(tmp_bfr, text, Bool_.N, Bool_.N, Bool_.N, Bool_.Y, Bool_.Y); + return gplx.langs.htmls.Gfh_utl.Escape_html_as_bry(tmp_bfr, text, Bool_.N, Bool_.N, Bool_.N, Bool_.Y, Bool_.Y); } } diff --git a/400_xowa/src/gplx/xowa/htmls/core/hzips/Gfo_decimal_parser.java b/400_xowa/src/gplx/xowa/htmls/core/hzips/Gfo_decimal_parser.java new file mode 100644 index 000000000..76921c466 --- /dev/null +++ b/400_xowa/src/gplx/xowa/htmls/core/hzips/Gfo_decimal_parser.java @@ -0,0 +1,81 @@ +/* +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 . +*/ +package gplx.xowa.htmls.core.hzips; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; +import gplx.core.primitives.*; import gplx.core.encoders.*; +public class Gfo_decimal_parser { + public boolean Sign() {return sign;} private boolean sign; + public int Exponent() {return exponent;} private int exponent; + public long Number() {return number;} private long number; + public boolean Parse(byte[] src, int src_bgn, int src_end) { + sign = true; + number = 0; + exponent = 0; + if (src_end - src_bgn < 1) return false; + int pos = src_bgn; + int dot_offset = 0; + byte b = Byte_ascii.Null; + boolean loop = true; + while (loop) { + b = src[pos++]; + switch (b) { + case Byte_ascii.Dash: + if (!sign) return false; // fail if "--" + sign = false; // keep looping; handle "-0.12" + ++dot_offset; + break; + case Byte_ascii.Num_0: + b = src[pos++]; + if (b != Byte_ascii.Dot) return false; // fail if not "0." + ++dot_offset; + loop = false; + break; + default: + loop = false; + break; + } + } + int dot_pos = -1; + boolean num_seen = false; + while (true) { + switch (b) { + case Byte_ascii.Dot: + if (dot_pos != -1) return false; // fail if multiple dots + dot_pos = pos - src_bgn - dot_offset - 1; // pos already advanced forward one + break; + case Byte_ascii.Num_0: + if (num_seen) + number *= 10; + break; + case Byte_ascii.Num_1: case Byte_ascii.Num_2: case Byte_ascii.Num_3: case Byte_ascii.Num_4: + case Byte_ascii.Num_5: case Byte_ascii.Num_6: case Byte_ascii.Num_7: case Byte_ascii.Num_8: case Byte_ascii.Num_9: + if (!num_seen) num_seen = true; // save first "number"; for "0.00001" where num will be 0 and left shift will be 5 + number *= 10; + number += b - Byte_ascii.Num_0; + break; + } + if (pos == src_end) break; + b = src[pos]; + ++pos; + } + switch (dot_pos) { + case -1: exponent = 0; break; + default: exponent = dot_pos + dot_offset - src_end + 1; break; + } + return true; + } +} diff --git a/400_xowa/src/gplx/xowa/htmls/core/hzips/Gfo_decimal_parser_tst.java b/400_xowa/src/gplx/xowa/htmls/core/hzips/Gfo_decimal_parser_tst.java new file mode 100644 index 000000000..beefc1003 --- /dev/null +++ b/400_xowa/src/gplx/xowa/htmls/core/hzips/Gfo_decimal_parser_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 . +*/ +package gplx.xowa.htmls.core.hzips; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; +import org.junit.*; +public class Gfo_decimal_parser_tst { + private final Gfo_decimal_parser_fxt fxt = new Gfo_decimal_parser_fxt(); + @Test public void Positive() { + fxt.Test__parse("123" , Bool_.Y, 0, 123); + fxt.Test__parse("12.3" , Bool_.Y, -1, 123); + fxt.Test__parse("1.23" , Bool_.Y, -2, 123); + fxt.Test__parse(".123" , Bool_.Y, -3, 123); + fxt.Test__parse("0.123" , Bool_.Y, -3, 123); + } + @Test public void Negative() { + fxt.Test__parse("-123" , Bool_.N, 0, 123); + fxt.Test__parse("-12.3" , Bool_.N, -1, 123); + fxt.Test__parse("-1.23" , Bool_.N, -2, 123); + fxt.Test__parse("-.123" , Bool_.N, -3, 123); + fxt.Test__parse("-0.123" , Bool_.N, -3, 123); + } +} +class Gfo_decimal_parser_fxt { + private final Gfo_decimal_parser bicoder = new Gfo_decimal_parser(); + public void Test__parse(String src_str, boolean expd_sign, int expd_exponent, long expd_number) { + byte[] src_bry = Bry_.new_u8(src_str); + bicoder.Parse(src_bry, 0, src_bry.length); + Tfds.Eq_bool(expd_sign, bicoder.Sign()); + Tfds.Eq_int(expd_exponent, bicoder.Exponent()); + Tfds.Eq_long(expd_number, bicoder.Number()); + } +} diff --git a/400_xowa/src/gplx/langs/htmls/Html_atr_.java b/400_xowa/src/gplx/xowa/htmls/core/hzips/Xoh_data_itm.java similarity index 58% rename from 400_xowa/src/gplx/langs/htmls/Html_atr_.java rename to 400_xowa/src/gplx/xowa/htmls/core/hzips/Xoh_data_itm.java index 50ea91503..ba4bb4767 100644 --- a/400_xowa/src/gplx/langs/htmls/Html_atr_.java +++ b/400_xowa/src/gplx/xowa/htmls/core/hzips/Xoh_data_itm.java @@ -15,20 +15,13 @@ 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.langs.htmls; import gplx.*; import gplx.langs.*; -public class Html_atr_ { - public static final byte[] - Bry__id = Bry_.new_a7("id") - , Bry__class = Bry_.new_a7("class") - , Bry__title = Bry_.new_a7("title") - , Bry__style = Bry_.new_a7("style") - // - , Bry__href = Bry_.new_a7("href") - , Bry__rel = Bry_.new_a7("rel") - // - , Bry__alt = Bry_.new_a7("alt") - , Bry__src = Bry_.new_a7("src") - , Bry__width = Bry_.new_a7("width") - , Bry__height = Bry_.new_a7("height") - ; +package gplx.xowa.htmls.core.hzips; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; +import gplx.langs.htmls.*; import gplx.langs.htmls.docs.*; +import gplx.xowa.htmls.core.wkrs.*; import gplx.core.threads.poolables.*; +public interface Xoh_data_itm extends Gfo_poolable_itm { + int Tid(); + int Src_bgn(); + int Src_end(); + void Clear(); + boolean Init_by_parse(Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Gfh_tag_rdr tag_rdr, byte[] src, Gfh_tag cur, Gfh_tag nxt); } diff --git a/400_xowa/src/gplx/xowa/htmls/core/hzips/Xoh_hzip_decimal.java b/400_xowa/src/gplx/xowa/htmls/core/hzips/Xoh_hzip_decimal.java new file mode 100644 index 000000000..19a318bef --- /dev/null +++ b/400_xowa/src/gplx/xowa/htmls/core/hzips/Xoh_hzip_decimal.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 . +*/ +package gplx.xowa.htmls.core.hzips; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; +import gplx.core.primitives.*; import gplx.core.encoders.*; +public class Xoh_hzip_decimal { + private final Gfo_decimal_parser decimal_parser = new Gfo_decimal_parser(); + public boolean Encode(Bry_bfr bfr, byte[] src, int src_bgn, int src_end) { + if (!decimal_parser.Parse(src, src_bgn, src_end)) return false; +// if (positive && dot_pos == -1 && num_val < 128) { +// bfr.Add_byte((byte)(num_val + 128)); +// } + return true; +/* +0.001000 + +1:size_is_1 +1:exp.neg +6:exp.val +5:exp.val + +1:num.neg +7:num.val; 111-127 for extended bits +8:num.val +8:num.val +127 +125 2 +126 3 +127 4 +*/ + } +} diff --git a/400_xowa/src/gplx/xowa/htmls/core/hzips/Xoh_hzip_dict_.java b/400_xowa/src/gplx/xowa/htmls/core/hzips/Xoh_hzip_dict_.java index b3f3e55a1..e1efd442c 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/hzips/Xoh_hzip_dict_.java +++ b/400_xowa/src/gplx/xowa/htmls/core/hzips/Xoh_hzip_dict_.java @@ -18,8 +18,20 @@ along with this program. If not, see . package gplx.xowa.htmls.core.hzips; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.core.primitives.*; import gplx.core.btries.*; public class Xoh_hzip_dict_ { - public static final byte Escape = Byte_.By_int(27); // SERIALIZED: 27=escape byte - public static final byte[] Escape_bry = Bry_.new_ints(27); // SERIALIZED + public static final byte Escape = Byte_.By_int(27); // SERIALIZED: 27=escape byte + public static final byte[] Escape_bry = Bry_.New_by_ints(27); // SERIALIZED + public static final int + Tid__root = 0 + , Tid__escape = 1 + , Tid__xnde = 2 + , Tid__lnke = 3 + , Tid__lnki = 4 + , Tid__hdr = 5 + , Tid__img = 6 + , Tid__thm = 7 + , Tid__gly = 8 + , Tid__img_bare = 9 + ; public static final String Key__escape = "escape" , Key__hdr = "hdr" @@ -29,6 +41,7 @@ public class Xoh_hzip_dict_ { , Key__thm = "thm" , Key__gly = "gly" , Key__xnde = "xnde" + , Key__img_bare = "img_bare" ; public static final int Hzip__none = 0, Hzip__v1 = 1; } diff --git a/400_xowa/src/gplx/xowa/htmls/core/hzips/Xoh_hzip_int.java b/400_xowa/src/gplx/xowa/htmls/core/hzips/Xoh_hzip_int.java index 5dca7d819..52bb00d04 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/hzips/Xoh_hzip_int.java +++ b/400_xowa/src/gplx/xowa/htmls/core/hzips/Xoh_hzip_int.java @@ -126,7 +126,7 @@ public class Xoh_hzip_int { val -= tmp * div; } } - private static int To_int_by_bry(byte[] src, int bgn, int end, byte offset, int radix) { + public static int To_int_by_bry(byte[] src, int bgn, int end, byte offset, int radix) { int rv = 0, factor = 1; for (int i = end - 1; i >= bgn; --i) { rv += ((src[i] & 0xFF) - offset) * factor; // PATCH.JAVA:need to convert to unsigned byte @@ -140,7 +140,7 @@ public class Xoh_hzip_int { , B256__max__expd__3 = 16777216 // 16,777,216 ; private static final int[] B256__pow__ary = new int[] {1, B256__max__expd__1, B256__max__expd__2, B256__max__expd__3, Int_.Max_value}; - private static final byte prefix__b256__2 = (byte)(252 & 0xFF), prefix__b256__3 = (byte)(253 & 0xFF), prefix__b256__4 = (byte)(254 & 0xFF), prefix__b256__5 = (byte)(255 & 0xFF); + public static final byte prefix__b256__2 = (byte)(252 & 0xFF), prefix__b256__3 = (byte)(253 & 0xFF), prefix__b256__4 = (byte)(254 & 0xFF), prefix__b256__5 = (byte)(255 & 0xFF); private static final byte[] prefix_ary__b256 = new byte[] {0, 0, prefix__b256__2, prefix__b256__3, prefix__b256__4, prefix__b256__5} , prefix_ary__b085 = new byte[] {0, 0, 0, Byte_ascii.Curly_bgn, Byte_ascii.Pipe, Byte_ascii.Curly_end, Byte_ascii.Tilde} diff --git a/400_xowa/src/gplx/xowa/htmls/core/hzips/Xoh_hzip_mgr.java b/400_xowa/src/gplx/xowa/htmls/core/hzips/Xoh_hzip_mgr.java index 41619002c..d5a991ba3 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/hzips/Xoh_hzip_mgr.java +++ b/400_xowa/src/gplx/xowa/htmls/core/hzips/Xoh_hzip_mgr.java @@ -17,19 +17,20 @@ along with this program. If not, see . */ package gplx.xowa.htmls.core.hzips; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.core.primitives.*; import gplx.core.brys.*; import gplx.core.btries.*; import gplx.core.threads.poolables.*; -import gplx.langs.htmls.parsers.*; import gplx.xowa.htmls.core.hzips.*; import gplx.xowa.htmls.core.wkrs.*; +import gplx.langs.htmls.docs.*; import gplx.xowa.htmls.core.hzips.*; import gplx.xowa.htmls.core.wkrs.*; import gplx.xowa.wikis.ttls.*; public class Xoh_hzip_mgr implements Xoh_hzip_wkr { private final Xoh_hdoc_wkr hdoc_wkr = new Xoh_hdoc_wkr__hzip(); private final Xoh_hdoc_parser hdoc_parser; private final Bry_rdr rdr = new Bry_rdr().Dflt_dlm_(Xoh_hzip_dict_.Escape); public Xoh_hzip_mgr() {this.hdoc_parser = new Xoh_hdoc_parser(hdoc_wkr);} + public int Tid() {return Xoh_hzip_dict_.Tid__lnke;} public String Key() {return "root";} public byte[] Hook() {return hook;} private byte[] hook; public Xoh_hdoc_ctx Hctx() {return hctx;} private final Xoh_hdoc_ctx hctx = new Xoh_hdoc_ctx(); public void Init_by_app(Xoa_app app) {hctx.Init_by_app(app);} public byte[] Encode_as_bry(Xoh_hzip_bfr bfr, Xow_wiki wiki, Xoh_page hpg, byte[] src) {Encode(bfr, wiki, hpg, src); return bfr.To_bry_and_clear();} - public Gfo_poolable_itm Encode(Xoh_hzip_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, boolean wkr_is_root, byte[] src, Object data_obj) {throw Err_.new_unimplemented();} + public Gfo_poolable_itm Encode1(Xoh_hzip_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, boolean wkr_is_root, byte[] src, Object data_obj) {throw Err_.new_unimplemented();} public void Encode(Xoh_hzip_bfr bfr, Xow_wiki wiki, Xoh_page hpg, byte[] src) { hctx.Init_by_page(wiki, hpg.Url_bry_safe()); hdoc_parser.Parse(bfr, hpg, hctx, src); @@ -38,14 +39,14 @@ public class Xoh_hzip_mgr implements Xoh_hzip_wkr { byte[] page_url = hpg.Url_bry_safe(); int src_len = src.length; hctx.Init_by_page(wiki, page_url); rdr.Init_by_page(page_url, src, src_len); - Decode(bfr, hdoc_wkr, hctx, hpg, Bool_.Y, rdr, src, 0, src_len); + Decode1(bfr, hdoc_wkr, hctx, hpg, rdr, src, 0, src_len, null); } - public int Decode(Bry_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, boolean wkr_is_root, Bry_rdr rdr, byte[] src, int src_bgn, int src_end) { + public void Decode1(Bry_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, Bry_rdr rdr, byte[] src, int src_bgn, int src_end, Xoh_data_itm data_itm) { int pos = src_bgn, txt_bgn = -1; while (true) { if (pos == src_end) break; byte b = src[pos]; - Object o = hctx.Wkr_mkr().Get(b, src, pos, src_end); + Object o = hctx.Pool_mgr__hzip().Get(b, src, pos, src_end); if (o == null) { if (txt_bgn == -1) txt_bgn = pos; ++pos; @@ -53,19 +54,27 @@ public class Xoh_hzip_mgr implements Xoh_hzip_wkr { else { if (txt_bgn != -1) {bfr.Add_mid(src, txt_bgn, pos); txt_bgn = -1;} // handle pending txt Xoh_hzip_wkr wkr = (Xoh_hzip_wkr)o; + int hook_len = wkr.Hook().length; try { - rdr.Init_by_sect(wkr.Key(), pos, pos + 2); - wkr.Decode(bfr, hdoc_wkr, hctx, hpg, Bool_.Y, rdr, src, pos, src_end); + rdr.Init_by_sect(wkr.Key(), pos, pos + hook_len); + Xoh_data_itm data = hctx.Pool_mgr__data().Get_by_tid(wkr.Tid()); + wkr.Decode1(bfr, hdoc_wkr, hctx, hpg, rdr, src, pos, src_end, data); + Xoh_wtr_itm wtr = hctx.Pool_mgr__wtr().Get_by_tid(wkr.Tid()); + if (data != null && wtr != null) { + wtr.Init_by_decode(hpg, hctx, src, data); + wtr.Bfr_arg__add(bfr); + } + if (data != null) data.Pool__rls(); + if (wtr != null) wtr.Pool__rls(); pos = rdr.Pos(); } catch (Exception e) { - gplx.langs.htmls.Html_utl.Log(e, "hzip decode failed", hpg.Url_bry_safe(), src, pos); - pos += 2; // 2: skip escape and hook + gplx.langs.htmls.Gfh_utl.Log(e, "hzip decode failed", hpg.Url_bry_safe(), src, pos); + pos += hook_len; } finally {wkr.Pool__rls();} } } if (txt_bgn != -1) bfr.Add_mid(src, txt_bgn, src_end); - return src_end; } public void Pool__rls () {pool_mgr.Rls_fast(pool_idx);} private Gfo_poolable_mgr pool_mgr; private int pool_idx; public Gfo_poolable_itm Pool__make (Gfo_poolable_mgr mgr, int idx, Object[] args) {Xoh_hzip_mgr rv = new Xoh_hzip_mgr(); rv.pool_mgr = mgr; rv.pool_idx = idx; rv.hook = (byte[])args[0]; return rv;} diff --git a/400_xowa/src/gplx/xowa/htmls/core/hzips/Xoh_hzip_wkr.java b/400_xowa/src/gplx/xowa/htmls/core/hzips/Xoh_hzip_wkr.java index 1b3158ec3..b6e05e879 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/hzips/Xoh_hzip_wkr.java +++ b/400_xowa/src/gplx/xowa/htmls/core/hzips/Xoh_hzip_wkr.java @@ -19,8 +19,9 @@ package gplx.xowa.htmls.core.hzips; import gplx.*; import gplx.xowa.*; import gp import gplx.core.brys.*; import gplx.core.threads.poolables.*; import gplx.xowa.htmls.core.wkrs.*; public interface Xoh_hzip_wkr extends gplx.core.threads.poolables.Gfo_poolable_itm { + int Tid(); String Key(); byte[] Hook(); - Gfo_poolable_itm Encode(Xoh_hzip_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, boolean wkr_is_root, byte[] src, Object data_obj); - int Decode(Bry_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, boolean wkr_is_root, Bry_rdr rdr, byte[] src, int src_bgn, int src_end); + Gfo_poolable_itm Encode1(Xoh_hzip_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, boolean wkr_is_root, byte[] src, Object data_obj); + void Decode1(Bry_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, Bry_rdr rdr, byte[] src, int src_bgn, int src_end, Xoh_data_itm data_itm); } diff --git a/400_xowa/src/gplx/xowa/htmls/core/hzips/Xoh_pool_mgr__data.java b/400_xowa/src/gplx/xowa/htmls/core/hzips/Xoh_pool_mgr__data.java new file mode 100644 index 000000000..d4a33712d --- /dev/null +++ b/400_xowa/src/gplx/xowa/htmls/core/hzips/Xoh_pool_mgr__data.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 . +*/ +package gplx.xowa.htmls.core.hzips; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; +import gplx.core.btries.*; import gplx.core.threads.poolables.*; +import gplx.xowa.htmls.core.wkrs.escapes.*; +import gplx.xowa.htmls.core.wkrs.hdrs.*; import gplx.xowa.htmls.core.wkrs.lnkes.*; import gplx.xowa.htmls.core.wkrs.lnkis.*; import gplx.xowa.htmls.core.wkrs.xndes.*; +import gplx.xowa.htmls.core.wkrs.imgs.*; import gplx.xowa.htmls.core.wkrs.thms.*; import gplx.xowa.htmls.core.wkrs.glys.*; +public class Xoh_pool_mgr__data { + private final Gfo_poolable_mgr pool__hdr, pool__lnke, pool__img, pool__img_bare;//, pool__gly; + public Xoh_pool_mgr__data() { + pool__hdr = New_pool(new Xoh_hdr_data()); + pool__lnke = New_pool(new Xoh_lnke_data()); + pool__img = New_pool(new Xoh_img_data()); + pool__img_bare = New_pool(new Xoh_img_bare_data()); +// pool__gly = New_pool(new Xoh_gly_grp_data()); + } + public Xoh_data_itm Get_by_tid(int tid) { + Gfo_poolable_mgr pool = null; + switch (tid) { + case Xoh_hzip_dict_.Tid__hdr: pool = pool__hdr; break; + case Xoh_hzip_dict_.Tid__lnke: pool = pool__lnke; break; + case Xoh_hzip_dict_.Tid__img: pool = pool__img; break; + case Xoh_hzip_dict_.Tid__img_bare: pool = pool__img_bare; break; +// case Xoh_hzip_dict_.Tid__gly: pool = pool__gly; break; + default: return null; + } + return (Xoh_data_itm)pool.Get_fast(); + } + private static Gfo_poolable_mgr New_pool(Gfo_poolable_itm proto) { + return Gfo_poolable_mgr_.New(1, 32, proto); + } +} diff --git a/400_xowa/src/gplx/xowa/htmls/core/hzips/Xoh_hzip_wkr_mgr.java b/400_xowa/src/gplx/xowa/htmls/core/hzips/Xoh_pool_mgr__hzip.java similarity index 59% rename from 400_xowa/src/gplx/xowa/htmls/core/hzips/Xoh_hzip_wkr_mgr.java rename to 400_xowa/src/gplx/xowa/htmls/core/hzips/Xoh_pool_mgr__hzip.java index c880731fa..b9cfd5bce 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/hzips/Xoh_hzip_wkr_mgr.java +++ b/400_xowa/src/gplx/xowa/htmls/core/hzips/Xoh_pool_mgr__hzip.java @@ -18,41 +18,50 @@ along with this program. If not, see . package gplx.xowa.htmls.core.hzips; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.core.btries.*; import gplx.core.threads.poolables.*; import gplx.xowa.htmls.core.wkrs.escapes.*; -import gplx.xowa.htmls.core.wkrs.hdrs.*; import gplx.xowa.htmls.core.wkrs.lnkes.*; import gplx.xowa.htmls.core.wkrs.lnkis.*; +import gplx.xowa.htmls.core.wkrs.hdrs.*; import gplx.xowa.htmls.core.wkrs.lnkes.*; import gplx.xowa.htmls.core.wkrs.lnkis.*; import gplx.xowa.htmls.core.wkrs.xndes.*; import gplx.xowa.htmls.core.wkrs.imgs.*; import gplx.xowa.htmls.core.wkrs.thms.*; import gplx.xowa.htmls.core.wkrs.glys.*; -public class Xoh_hzip_wkr_mgr { +public class Xoh_pool_mgr__hzip { private final Btrie_slim_mgr trie = Btrie_slim_mgr.cs(); - private Gfo_poolable_mgr mkr__escape, mkr__lnke, mkr__lnki, mkr__hdr, mkr__img, mkr__thm, mkr__gly; + private Gfo_poolable_mgr mkr__escape, mkr__xnde, mkr__lnke, mkr__lnki, mkr__hdr, mkr__img, mkr__thm, mkr__gly, mkr__img_bare; public Xoh_escape_hzip Mw__escape() {return (Xoh_escape_hzip) mkr__escape.Get_fast();} + public Xoh_xnde_hzip Mw__xnde() {return (Xoh_xnde_hzip) mkr__xnde.Get_fast();} public Xoh_hdr_hzip Mw__hdr() {return (Xoh_hdr_hzip) mkr__hdr.Get_fast();} public Xoh_lnke_hzip Mw__lnke() {return (Xoh_lnke_hzip) mkr__lnke.Get_fast();} public Xoh_lnki_hzip Mw__lnki() {return (Xoh_lnki_hzip) mkr__lnki.Get_fast();} public Xoh_img_hzip Mw__img() {return (Xoh_img_hzip) mkr__img.Get_fast();} + public Xoh_img_bare_hzip Mw__img_bare() {return (Xoh_img_bare_hzip) mkr__img_bare.Get_fast();} public Xoh_thm_hzip Mw__thm() {return (Xoh_thm_hzip) mkr__thm.Get_fast();} public Xoh_gly_hzip Mw__gly() {return (Xoh_gly_hzip) mkr__gly.Get_fast();} public void Init() { - this.Reg_all(false, Byte_ascii.Escape); + this.Reg_all(false, Hook__core, Hook__html, Hook__mw); } public Xoh_hzip_wkr Get(byte b, byte[] src, int src_bgn, int src_end) { Object mgr_obj = trie.Match_bgn_w_byte(b, src, src_bgn, src_end); if (mgr_obj == null) return null; Gfo_poolable_mgr mgr = (Gfo_poolable_mgr)mgr_obj; return (Xoh_hzip_wkr)mgr.Get_fast(); } - private void Reg_all(boolean mode_is_b256, int escape__mw) { - mkr__escape = Reg(New_hook_len2(mode_is_b256, escape__mw, 84), new Xoh_escape_hzip()); - mkr__hdr = Reg(New_hook_len2(mode_is_b256, escape__mw, 1), new Xoh_hdr_hzip()); - mkr__lnke = Reg(New_hook_len2(mode_is_b256, escape__mw, 2), new Xoh_lnke_hzip()); - mkr__lnki = Reg(New_hook_len2(mode_is_b256, escape__mw, 3), new Xoh_lnki_hzip()); - mkr__img = Reg(New_hook_len2(mode_is_b256, escape__mw, 4), new Xoh_img_hzip()); - mkr__thm = Reg(New_hook_len2(mode_is_b256, escape__mw, 5), new Xoh_thm_hzip()); - mkr__gly = Reg(New_hook_len2(mode_is_b256, escape__mw, 6), new Xoh_gly_hzip()); + private void Reg_all(boolean mode_is_b256, int hook__core, int hook__html, int hook__mw) { + mkr__escape = Reg(New_hook_len2(mode_is_b256, hook__core, 0) , new Xoh_escape_hzip()); + mkr__xnde = Reg(New_hook_len1(mode_is_b256, hook__html) , new Xoh_xnde_hzip()); + mkr__hdr = Reg(New_hook_len2(mode_is_b256, hook__mw , 1) , new Xoh_hdr_hzip()); + mkr__lnke = Reg(New_hook_len2(mode_is_b256, hook__mw , 2) , new Xoh_lnke_hzip()); + mkr__lnki = Reg(New_hook_len2(mode_is_b256, hook__mw , 3) , new Xoh_lnki_hzip()); + mkr__img = Reg(New_hook_len2(mode_is_b256, hook__mw , 4) , new Xoh_img_hzip()); + mkr__thm = Reg(New_hook_len2(mode_is_b256, hook__mw , 5) , new Xoh_thm_hzip()); + mkr__gly = Reg(New_hook_len2(mode_is_b256, hook__mw , 6) , new Xoh_gly_hzip()); + mkr__img_bare = Reg(New_hook_len2(mode_is_b256, hook__mw , 7) , new Xoh_img_bare_hzip()); } private Gfo_poolable_mgr Reg(byte[] hook, Gfo_poolable_itm proto) { Gfo_poolable_mgr rv = Gfo_poolable_mgr_.New(1, 32, proto, Object_.Ary(hook)); trie.Add_obj(hook, rv); return rv; } - private static byte[] New_hook_len2(boolean mode_is_b256, int b0, int b1) { - return Bry_.new_ints(b0, mode_is_b256 ? b1 : b1 + Byte_ascii.Bang); - } + private static byte[] New_hook_len2(boolean mode_is_b256, int b0, int b1) {return Bry_.New_by_ints(b0, mode_is_b256 ? b1 : b1 + Byte_ascii.Bang);} + private static byte[] New_hook_len1(boolean mode_is_b256, int b0) {return Bry_.New_by_ints(b0);} + public static final byte + Hook__core = 1 + , Hook__html = 2 + , Hook__mw = 27 + ; + public static final byte[] Hooks_ary = new byte[] {Hook__core, Hook__html, Hook__mw}; } diff --git a/400_xowa/src/gplx/xowa/htmls/core/hzips/Xoh_pool_mgr__wtr.java b/400_xowa/src/gplx/xowa/htmls/core/hzips/Xoh_pool_mgr__wtr.java new file mode 100644 index 000000000..b2df183c4 --- /dev/null +++ b/400_xowa/src/gplx/xowa/htmls/core/hzips/Xoh_pool_mgr__wtr.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 . +*/ +package gplx.xowa.htmls.core.hzips; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; +import gplx.core.brys.*; import gplx.core.threads.poolables.*; +import gplx.xowa.htmls.core.wkrs.escapes.*; +import gplx.xowa.htmls.core.wkrs.hdrs.*; import gplx.xowa.htmls.core.wkrs.lnkes.*; import gplx.xowa.htmls.core.wkrs.lnkis.*; import gplx.xowa.htmls.core.wkrs.xndes.*; +import gplx.xowa.htmls.core.wkrs.imgs.*; import gplx.xowa.htmls.core.wkrs.thms.*; import gplx.xowa.htmls.core.wkrs.glys.*; +public class Xoh_pool_mgr__wtr { + private final Gfo_poolable_mgr pool__hdr, pool__lnke, pool__img, pool__img_bare; + public Xoh_pool_mgr__wtr() { + pool__hdr = New_pool(new Xoh_hdr_wtr()); + pool__lnke = New_pool(new Xoh_lnke_wtr()); + pool__img = New_pool(new Xoh_img_wtr()); + pool__img_bare = New_pool(new Xoh_img_bare_wtr()); + } + public Xoh_wtr_itm Get_by_tid(int tid) { + Gfo_poolable_mgr pool = null; + switch (tid) { + case Xoh_hzip_dict_.Tid__hdr: pool = pool__hdr; break; + case Xoh_hzip_dict_.Tid__lnke: pool = pool__lnke; break; + case Xoh_hzip_dict_.Tid__img: pool = pool__img; break; + case Xoh_hzip_dict_.Tid__img_bare: pool = pool__img_bare; break; + default: return null; + } + return (Xoh_wtr_itm)pool.Get_fast(); + } + private static Gfo_poolable_mgr New_pool(Gfo_poolable_itm proto) { + return Gfo_poolable_mgr_.New(1, 32, proto); + } +} diff --git a/400_xowa/src/gplx/xowa/htmls/core/hzips/Xoh_wtr_itm.java b/400_xowa/src/gplx/xowa/htmls/core/hzips/Xoh_wtr_itm.java new file mode 100644 index 000000000..cf6b02848 --- /dev/null +++ b/400_xowa/src/gplx/xowa/htmls/core/hzips/Xoh_wtr_itm.java @@ -0,0 +1,24 @@ +/* +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 . +*/ +package gplx.xowa.htmls.core.hzips; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; +import gplx.core.brys.*; +import gplx.langs.htmls.*; import gplx.langs.htmls.docs.*; +import gplx.xowa.htmls.core.wkrs.*; import gplx.core.threads.poolables.*; +public interface Xoh_wtr_itm extends Bfr_arg, Gfo_poolable_itm { + boolean Init_by_decode(Xoh_page hpg, Xoh_hdoc_ctx hctx, byte[] src, Xoh_data_itm data_itm); +} diff --git a/400_xowa/src/gplx/xowa/htmls/core/makes/Xoh_make_mgr.java b/400_xowa/src/gplx/xowa/htmls/core/makes/Xoh_make_mgr.java index 524390fd8..757b91749 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/makes/Xoh_make_mgr.java +++ b/400_xowa/src/gplx/xowa/htmls/core/makes/Xoh_make_mgr.java @@ -100,33 +100,33 @@ public class Xoh_make_mgr { byte[] a_href = Bry_.Add(Xoh_make_trie_.A_href_bgn, a_title); try { switch (tid) { - case Xoh_make_trie_.Tid__file_info: fmtr.Html_thumb_part_info (bfr, uid, a_href, cfg_file.Img_media_info_btn()); return rv; + case Xoh_make_trie_.Tid__file_info: fmtr.Html_thumb_part_info (bfr, uid, true, a_href, cfg_file.Img_media_info_btn()); return rv; case Xoh_make_trie_.Tid__file_mgnf: fmtr.Html_thumb_part_magnify(bfr, uid, a_href, a_title, cfg_file.Img_thumb_magnify()); return rv; - case Xoh_make_trie_.Tid__file_play: fmtr.Html_thumb_part_play (bfr, uid, img_view_w, Xoh_file_wtr__basic.Play_btn_max_width, a_href, a_title, cfg_file.Img_media_play_btn()); return rv; + case Xoh_make_trie_.Tid__file_play: fmtr.Html_thumb_part_play (bfr, uid, true, img_view_w, Xoh_file_wtr__basic.Play_btn_max_width, a_href, a_title, cfg_file.Img_media_play_btn()); return rv; case Xoh_make_trie_.Tid__gallery_box_max: { Xohd_img_itm__gallery_mgr gly = (Xohd_img_itm__gallery_mgr)hpg.Gallery_itms().Get_by(uid); if (gly != null) { // -1 means no box_max - byte[] style = Gallery_mgr_base.box_style_max_width_fmtr.Bld_bry_many(tmp_bfr, gly.Box_max()); - Html_wtr.Write_atr_bry(bfr, Bool_.N, Byte_ascii.Quote, Html_atr_.Bry__style, style); + byte[] style = Gallery_html_wtr_.Fmtr__ul__style.Bld_bry_many(tmp_bfr, gly.Box_max()); + Gfh_wtr.Write_atr_bry(bfr, Bool_.N, Byte_ascii.Quote, Gfh_atr_.Bry__style, style); } return rv; } case Xoh_make_trie_.Tid__gallery_box_w: { Xohd_img_itm__gallery_itm gly = (Xohd_img_itm__gallery_itm)img; - byte[] style = Gallery_mgr_base.hdump_box_w_fmtr.Bld_bry_many(tmp_bfr, gly.Box_w()); - Html_wtr.Write_atr_bry(bfr, Bool_.N, Byte_ascii.Quote, Html_atr_.Bry__style, style); + byte[] style = Gallery_html_wtr_.hdump_box_w_fmtr.Bld_bry_many(tmp_bfr, gly.Box_w()); + Gfh_wtr.Write_atr_bry(bfr, Bool_.N, Byte_ascii.Quote, Gfh_atr_.Bry__style, style); return rv; } case Xoh_make_trie_.Tid__gallery_img_w: { Xohd_img_itm__gallery_itm gly = (Xohd_img_itm__gallery_itm)img; - byte[] style = Gallery_mgr_base.hdump_box_w_fmtr.Bld_bry_many(tmp_bfr, gly.Img_w()); - Html_wtr.Write_atr_bry(bfr, Bool_.N, Byte_ascii.Quote, Html_atr_.Bry__style, style); + byte[] style = Gallery_html_wtr_.hdump_box_w_fmtr.Bld_bry_many(tmp_bfr, gly.Img_w()); + Gfh_wtr.Write_atr_bry(bfr, Bool_.N, Byte_ascii.Quote, Gfh_atr_.Bry__style, style); return rv; } case Xoh_make_trie_.Tid__gallery_img_pad: { Xohd_img_itm__gallery_itm gly = (Xohd_img_itm__gallery_itm)img; - byte[] style = Gallery_mgr_base.hdump_img_pad_fmtr.Bld_bry_many(tmp_bfr, gly.Img_pad()); - Html_wtr.Write_atr_bry(bfr, Bool_.N, Byte_ascii.Quote, Html_atr_.Bry__style, style); + byte[] style = Gallery_html_wtr_.hdump_img_pad_fmtr.Bld_bry_many(tmp_bfr, gly.Img_pad()); + Gfh_wtr.Write_atr_bry(bfr, Bool_.N, Byte_ascii.Quote, Gfh_atr_.Bry__style, style); return rv; } } diff --git a/400_xowa/src/gplx/xowa/htmls/core/makes/Xoh_make_trie_.java b/400_xowa/src/gplx/xowa/htmls/core/makes/Xoh_make_trie_.java index 568a341a3..86a3a4dda 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/makes/Xoh_make_trie_.java +++ b/400_xowa/src/gplx/xowa/htmls/core/makes/Xoh_make_trie_.java @@ -30,7 +30,7 @@ public class Xoh_make_trie_ { , Bry__file_play = Bry_.new_a7(". */ package gplx.xowa.htmls.core.wkrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.apps.urls.*; -import gplx.xowa.htmls.core.hzips.*; +import gplx.xowa.htmls.core.hzips.*; import gplx.xowa.htmls.core.wkrs.xndes.tags.*; import gplx.xowa.htmls.core.wkrs.xndes.dicts.*; import gplx.xowa.files.*; import gplx.xowa.apps.fsys.*; -import gplx.xowa.wikis.domains.*; import gplx.xowa.wikis.ttls.*; import gplx.xowa.apps.metas.*; +import gplx.xowa.wikis.domains.*; import gplx.xowa.wikis.ttls.*; import gplx.xowa.apps.metas.*; public class Xoh_hdoc_ctx { private byte[] fsys__file; public byte[] Fsys__root() {return fsys__root;} private byte[] fsys__root; @@ -32,10 +32,15 @@ public class Xoh_hdoc_ctx { public boolean Xwiki_mgr__missing(byte[] domain){return app.Xwiki_mgr__missing(domain);} public Xoa_file_mgr File__mgr() {return file__mgr;} private final Xoa_file_mgr file__mgr = new Xoa_file_mgr(); public Xof_url_bldr File__url_bldr() {return file__url_bldr;} private final Xof_url_bldr file__url_bldr = new Xof_url_bldr(); - public Xoh_hzip_wkr_mgr Wkr_mkr() {return wkr_mgr;} private final Xoh_hzip_wkr_mgr wkr_mgr = new Xoh_hzip_wkr_mgr(); public byte[] Page__url() {return page__url;} private byte[] page__url; + public Xoh_pool_mgr__hzip Pool_mgr__hzip() {return pool_mgr__hzip;} private final Xoh_pool_mgr__hzip pool_mgr__hzip = new Xoh_pool_mgr__hzip(); + public Xoh_pool_mgr__data Pool_mgr__data() {return pool_mgr__data;} private final Xoh_pool_mgr__data pool_mgr__data = new Xoh_pool_mgr__data(); + public Xoh_pool_mgr__wtr Pool_mgr__wtr() {return pool_mgr__wtr;} private final Xoh_pool_mgr__wtr pool_mgr__wtr = new Xoh_pool_mgr__wtr(); public Xoh_stat_itm Hzip__stat() {return hzip__stat;} private final Xoh_stat_itm hzip__stat = new Xoh_stat_itm(); - public int Lnki__uid__nxt() {return ++lnki__uid;} private int lnki__uid; // NOTE: should be 0, but for historical reasons, 1st lnki starts at 2; EX: id='xowa_lnki_2' + public Xohz_tag_regy Hzip__xnde__regy() {return hzip__xnde__regy;} private final Xohz_tag_regy hzip__xnde__regy = Xohz_tag_regy_.New_dflt(); + public Xoh_xnde_dict_reg Hzip__xnde__dict() {return hzip__xnde__dict;} private final Xoh_xnde_dict_reg hzip__xnde__dict = new Xoh_xnde_dict_reg(); + public int Uid__lnki_nxt() {return ++uid__lnki;} private int uid__lnki; + public int Uid__gly__nxt() {return ++uid__gly;} private int uid__gly; public boolean Mode_is_diff() {return mode_is_diff;} private boolean mode_is_diff; public void Mode_is_diff_(boolean v) {mode_is_diff = v;} public void Init_by_app(Xoa_app app) { Xoa_fsys_mgr fsys_mgr = app.Fsys_mgr(); @@ -43,7 +48,7 @@ public class Xoh_hdoc_ctx { this.fsys__root = fsys_mgr.Root_dir().To_http_file_bry(); this.fsys__file = fsys_mgr.File_dir().To_http_file_bry(); this.fsys__file__comm = Bry_.Add(fsys__file, Xow_domain_itm_.Bry__commons, Byte_ascii.Slash_bry); - wkr_mgr.Init(); + pool_mgr__hzip.Init(); } public void Init_by_page(Xow_wiki wiki, byte[] page_url) { if (fsys__root == null) Init_by_app(wiki.App()); // LAZY INIT @@ -56,7 +61,8 @@ public class Xoh_hdoc_ctx { } private void Clear() { hzip__stat.Clear(); - this.lnki__uid = 1; // NOTE: should be 0, but for historical reasons, 1st lnki starts at 2; EX: id='xowa_lnki_2' + this.uid__lnki = 1; // NOTE: should be 0, but for historical reasons, 1st lnki starts at 2; EX: id='xowa_lnki_2' + this.uid__gly = -1; } public static final int Invalid = -1; } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/Xoh_hdoc_parser.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/Xoh_hdoc_parser.java index 9027cf439..dc0ed9698 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/Xoh_hdoc_parser.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/Xoh_hdoc_parser.java @@ -16,19 +16,22 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.htmls.core.wkrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; -import gplx.langs.htmls.parsers.*; import gplx.xowa.wikis.ttls.*; +import gplx.langs.htmls.docs.*; import gplx.xowa.wikis.ttls.*; import gplx.xowa.htmls.core.makes.*; import gplx.xowa.htmls.core.wkrs.tags.*; import gplx.xowa.htmls.core.wkrs.txts.*; import gplx.xowa.htmls.core.wkrs.escapes.*; +import gplx.xowa.htmls.core.hzips.*; public class Xoh_hdoc_parser { private final Xoh_hdoc_wkr hdoc_wkr; - private final Html_doc_parser hdoc_parser; + private final Gfh_doc_parser hdoc_parser; private final Xoh_tag_parser tag_parser; public Xoh_hdoc_parser(Xoh_hdoc_wkr hdoc_wkr) { this.hdoc_wkr = hdoc_wkr; this.tag_parser = new Xoh_tag_parser(hdoc_wkr); - this.hdoc_parser = new Html_doc_parser(new Xoh_txt_parser(hdoc_wkr) - , tag_parser - , new Xoh_escape_data(hdoc_wkr) - ); + int wkr_ary_len = Xoh_pool_mgr__hzip.Hooks_ary.length + 1; + Gfh_doc_wkr[] wkr_ary = new Gfh_doc_wkr[wkr_ary_len]; + wkr_ary[0] = tag_parser; + for (int i = 1; i < wkr_ary_len; ++i) + wkr_ary[i] = new Xoh_escape_data(hdoc_wkr, Xoh_pool_mgr__hzip.Hooks_ary[i - 1]); + this.hdoc_parser = new Gfh_doc_parser(new Xoh_txt_parser(hdoc_wkr), wkr_ary); } public void Parse(Xoh_hzip_bfr bfr, Xoh_page hpg, Xoh_hdoc_ctx hctx, byte[] src) { int src_len = src.length; diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/Xoh_hdoc_wkr.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/Xoh_hdoc_wkr.java index d28e494a5..14d191d52 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/Xoh_hdoc_wkr.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/Xoh_hdoc_wkr.java @@ -16,16 +16,16 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.htmls.core.wkrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; -import gplx.langs.htmls.parsers.*; +import gplx.langs.htmls.docs.*; import gplx.xowa.wikis.ttls.*; +import gplx.xowa.htmls.core.hzips.*; public interface Xoh_hdoc_wkr { void On_new_page(Xoh_hzip_bfr bfr, Xoh_page hpg, Xoh_hdoc_ctx hctx, byte[] src, int src_bgn, int src_end); - void On_escape (int rng_bgn, int rng_end); void On_txt (int rng_bgn, int rng_end); - void On_hdr (gplx.xowa.htmls.core.wkrs.hdrs.Xoh_hdr_parser parser); - void On_lnke (gplx.xowa.htmls.core.wkrs.lnkes.Xoh_lnke_parser parser); - void On_lnki (gplx.xowa.htmls.core.wkrs.lnkis.Xoh_lnki_parser parser); - void On_img (gplx.xowa.htmls.core.wkrs.imgs.Xoh_img_parser parser); - void On_thm (gplx.xowa.htmls.core.wkrs.thms.Xoh_thm_parser parser); - void On_gly (gplx.xowa.htmls.core.wkrs.glys.Xoh_gly_grp_parser parser); + void On_escape (gplx.xowa.htmls.core.wkrs.escapes.Xoh_escape_data data); + void On_xnde (gplx.xowa.htmls.core.wkrs.xndes.Xoh_xnde_parser parser); + void On_lnki (gplx.xowa.htmls.core.wkrs.lnkis.Xoh_lnki_data parser); + void On_thm (gplx.xowa.htmls.core.wkrs.thms.Xoh_thm_data parser); + void On_gly (gplx.xowa.htmls.core.wkrs.glys.Xoh_gly_grp_data parser); + boolean Process_parse(Xoh_data_itm data); } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/Xoh_hdoc_wkr__hzip.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/Xoh_hdoc_wkr__hzip.java index 6aa43bae3..b6850d5be 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/Xoh_hdoc_wkr__hzip.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/Xoh_hdoc_wkr__hzip.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 . */ package gplx.xowa.htmls.core.wkrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; -import gplx.langs.htmls.parsers.*; import gplx.xowa.htmls.core.hzips.*; +import gplx.langs.htmls.docs.*; import gplx.xowa.htmls.core.hzips.*; import gplx.xowa.wikis.ttls.*; public class Xoh_hdoc_wkr__hzip implements Xoh_hdoc_wkr { private final Xoh_stat_itm stat_itm = new Xoh_stat_itm(); @@ -27,11 +27,21 @@ public class Xoh_hdoc_wkr__hzip implements Xoh_hdoc_wkr { stat_itm.Clear(); } public void On_txt (int rng_bgn, int rng_end) {bfr.Add_mid(src, rng_bgn, rng_end);} - public void On_escape (int rng_bgn, int rng_end) {hctx.Wkr_mkr().Mw__escape().Encode(bfr, this, hctx, hpg, Bool_.Y, src, null).Pool__rls();} - public void On_hdr (gplx.xowa.htmls.core.wkrs.hdrs.Xoh_hdr_parser parser) {hctx.Wkr_mkr().Mw__hdr().Encode(bfr, this, hctx, hpg, Bool_.Y, src, parser).Pool__rls();} - public void On_lnke (gplx.xowa.htmls.core.wkrs.lnkes.Xoh_lnke_parser parser) {hctx.Wkr_mkr().Mw__lnke().Encode(bfr, this, hctx, hpg, Bool_.Y, src, parser).Pool__rls();} - public void On_lnki (gplx.xowa.htmls.core.wkrs.lnkis.Xoh_lnki_parser parser) {hctx.Wkr_mkr().Mw__lnki().Encode(bfr, this, hctx, hpg, Bool_.Y, src, parser).Pool__rls();} - public void On_img (gplx.xowa.htmls.core.wkrs.imgs.Xoh_img_parser parser) {hctx.Wkr_mkr().Mw__img().Encode(bfr, this, hctx, hpg, Bool_.Y, src, parser).Pool__rls();} - public void On_thm (gplx.xowa.htmls.core.wkrs.thms.Xoh_thm_parser parser) {hctx.Wkr_mkr().Mw__thm().Encode(bfr, this, hctx, hpg, Bool_.Y, src, parser).Pool__rls();} - public void On_gly (gplx.xowa.htmls.core.wkrs.glys.Xoh_gly_grp_parser parser) {hctx.Wkr_mkr().Mw__gly().Encode(bfr, this, hctx, hpg, Bool_.Y, src, parser).Pool__rls();} + public void On_escape (gplx.xowa.htmls.core.wkrs.escapes.Xoh_escape_data data) {hctx.Pool_mgr__hzip().Mw__escape().Encode1(bfr, this, hctx, hpg, Bool_.Y, src, data).Pool__rls();} + public void On_xnde (gplx.xowa.htmls.core.wkrs.xndes.Xoh_xnde_parser data) {hctx.Pool_mgr__hzip().Mw__xnde().Encode1(bfr, this, hctx, hpg, Bool_.Y, src, data).Pool__rls();} + public void On_lnki (gplx.xowa.htmls.core.wkrs.lnkis.Xoh_lnki_data data) {hctx.Pool_mgr__hzip().Mw__lnki().Encode1(bfr, this, hctx, hpg, Bool_.Y, src, data).Pool__rls();} + public void On_thm (gplx.xowa.htmls.core.wkrs.thms.Xoh_thm_data data) {hctx.Pool_mgr__hzip().Mw__thm().Encode1(bfr, this, hctx, hpg, Bool_.Y, src, data).Pool__rls();} + public void On_gly (gplx.xowa.htmls.core.wkrs.glys.Xoh_gly_grp_data data) {hctx.Pool_mgr__hzip().Mw__gly().Encode1(bfr, this, hctx, hpg, Bool_.Y, src, data).Pool__rls();} + public boolean Process_parse(Xoh_data_itm data) { + Xoh_hzip_wkr wkr = null; + switch (data.Tid()) { + case Xoh_hzip_dict_.Tid__hdr: wkr = hctx.Pool_mgr__hzip().Mw__hdr(); break; + case Xoh_hzip_dict_.Tid__lnke: wkr = hctx.Pool_mgr__hzip().Mw__lnke(); break; + case Xoh_hzip_dict_.Tid__img: wkr = hctx.Pool_mgr__hzip().Mw__img(); break; + case Xoh_hzip_dict_.Tid__img_bare: wkr = hctx.Pool_mgr__hzip().Mw__img_bare(); break; + default: throw Err_.new_unhandled(data.Tid()); + } + wkr.Encode1(bfr, this, hctx, hpg, Bool_.Y, src, data).Pool__rls(); + return true; + } } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/Xoh_hdoc_wkr__make.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/Xoh_hdoc_wkr__make.java index c4ca4a983..aebdc520e 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/Xoh_hdoc_wkr__make.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/Xoh_hdoc_wkr__make.java @@ -16,23 +16,31 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.htmls.core.wkrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; -import gplx.langs.htmls.parsers.*; +import gplx.langs.htmls.docs.*; import gplx.xowa.wikis.ttls.*; import gplx.xowa.htmls.core.hzips.*; import gplx.xowa.htmls.core.wkrs.hdrs.*; import gplx.xowa.htmls.core.wkrs.imgs.*; public class Xoh_hdoc_wkr__make implements Xoh_hdoc_wkr { private Xoh_hzip_bfr bfr; private Xoh_page hpg; private Xoh_hdoc_ctx hctx; private byte[] src; - private final Xoh_hdr_make wkr__hdr = new Xoh_hdr_make(); - private final Xoh_img_bldr wkr__img = new Xoh_img_bldr(); + private final Xoh_hdr_wtr wkr__hdr = new Xoh_hdr_wtr(); + private final Xoh_img_wtr wkr__img = new Xoh_img_wtr(); public void On_new_page(Xoh_hzip_bfr bfr, Xoh_page hpg, Xoh_hdoc_ctx hctx, byte[] src, int src_bgn, int src_end) { this.bfr = bfr; this.hpg = hpg; this.hctx = hctx; this.src = src; } - public void On_escape (int rng_bgn, int rng_end) {bfr.Add_mid(src, rng_bgn, rng_end);} public void On_txt (int rng_bgn, int rng_end) {bfr.Add_mid(src, rng_bgn, rng_end);} - public void On_lnke (gplx.xowa.htmls.core.wkrs.lnkes.Xoh_lnke_parser parser) {bfr.Add_mid(src, parser.Src_bgn(), parser.Src_end());} - public void On_lnki (gplx.xowa.htmls.core.wkrs.lnkis.Xoh_lnki_parser parser) {bfr.Add_mid(src, parser.Src_bgn(), parser.Src_end());} - public void On_hdr (gplx.xowa.htmls.core.wkrs.hdrs.Xoh_hdr_parser parser) {wkr__hdr.Make(bfr, hpg, src, parser);} - public void On_img (gplx.xowa.htmls.core.wkrs.imgs.Xoh_img_parser parser) {wkr__img.Make_by_parse(bfr, hpg, hctx, src, parser);} - public void On_thm (gplx.xowa.htmls.core.wkrs.thms.Xoh_thm_parser parser) {bfr.Add_mid(src, parser.Src_bgn(), parser.Src_end());} - public void On_gly (gplx.xowa.htmls.core.wkrs.glys.Xoh_gly_grp_parser parser) {} + public void On_escape (gplx.xowa.htmls.core.wkrs.escapes.Xoh_escape_data data) {bfr.Add(data.Hook());} + public void On_xnde (gplx.xowa.htmls.core.wkrs.xndes.Xoh_xnde_parser data) {bfr.Add_mid(src, data.Src_bgn(), data.Src_end());} + public void On_lnki (gplx.xowa.htmls.core.wkrs.lnkis.Xoh_lnki_data data) {bfr.Add_mid(src, data.Src_bgn(), data.Src_end());} + public void On_thm (gplx.xowa.htmls.core.wkrs.thms.Xoh_thm_data data) {bfr.Add_mid(src, data.Src_bgn(), data.Src_end());} + public void On_gly (gplx.xowa.htmls.core.wkrs.glys.Xoh_gly_grp_data data) {} + public boolean Process_parse(Xoh_data_itm data) { + switch (data.Tid()) { + case Xoh_hzip_dict_.Tid__img: wkr__img.Init_by_parse(bfr, hpg, hctx, src, (gplx.xowa.htmls.core.wkrs.imgs.Xoh_img_data)data); return true; + case Xoh_hzip_dict_.Tid__hdr: wkr__hdr.Init_by_parse(bfr, hpg, hctx, src, (gplx.xowa.htmls.core.wkrs.hdrs.Xoh_hdr_data)data); return true; + case Xoh_hzip_dict_.Tid__lnke: break; + default: throw Err_.new_unhandled(data.Tid()); + } + bfr.Add_mid(src, data.Src_bgn(), data.Src_end()); + return true; + } } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/Xoh_hzip_fxt.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/Xoh_hzip_fxt.java index 7cbd16568..1f8b6fffe 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/Xoh_hzip_fxt.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/Xoh_hzip_fxt.java @@ -44,8 +44,8 @@ public class Xoh_hzip_fxt { } public void Test__bicode(String hzip, String html) {Test__bicode(hzip, html, html);} public void Test__bicode(String hzip, String html_enc, String html_dec) { - html_enc = Html_utl.Replace_apos(html_enc); - html_dec = Html_utl.Replace_apos(html_dec); + html_enc = Gfh_utl.Replace_apos(html_enc); + html_dec = Gfh_utl.Replace_apos(html_dec); Test__bicode_raw(hzip, html_enc, html_dec); } public void Test__bicode_raw(String hzip, String html_enc, String html_dec) { @@ -54,11 +54,11 @@ public class Xoh_hzip_fxt { Test__decode__raw(hzip, html_dec); } public void Test__encode(String hzip, String html) { - hzip = Html_utl.Replace_apos(Xoh_hzip_fxt.Escape(hzip)); html = Html_utl.Replace_apos(html); + hzip = Xoh_hzip_fxt.Escape(hzip); html = Gfh_utl.Replace_apos(html); Test__encode__raw(hzip, html); } public void Test__decode(String hzip, String html) { - hzip = Html_utl.Replace_apos(Xoh_hzip_fxt.Escape(hzip)); html = Html_utl.Replace_apos(html); + hzip = Xoh_hzip_fxt.Escape(hzip); html = Gfh_utl.Replace_apos(html); Test__decode__raw(hzip, html); } public void Test__encode__fail(String expd, String html) { @@ -73,6 +73,7 @@ public class Xoh_hzip_fxt { } private void Test__decode__raw(String hzip, String html) { Gfo_usr_dlg_.Test__show__init(); + hpg.Section_mgr().Clear(); hzip_mgr.Decode(bfr, parser_fxt.Wiki(), hpg, Bry_.new_u8(hzip)); Gfo_usr_dlg_.Test__show__term(); Tfds.Eq_str_lines(html, bfr.To_str_and_clear()); @@ -94,7 +95,7 @@ public class Xoh_hzip_fxt { Gfo_usr_dlg_.Test__show__term(); Io_mgr.Instance.SaveFilBry(dir.GenSubFil(fil).GenNewExt(".hzip.decode.html"), bfr.To_bry_and_clear()); } catch (Exception e) { - Tfds.Write(e); + Tfds.Dbg(e); } } public static String Escape(String v) {return String_.Replace(v, "~", "");} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/Xoh_itm_parser_fxt.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/Xoh_itm_parser_fxt.java index a5d97eefa..a84d38a9c 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/Xoh_itm_parser_fxt.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/Xoh_itm_parser_fxt.java @@ -17,7 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.htmls.core.wkrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.core.brys.*; -import gplx.langs.htmls.*; import gplx.langs.htmls.parsers.*; +import gplx.langs.htmls.*; import gplx.langs.htmls.docs.*; public abstract class Xoh_itm_parser_fxt { private final Xoae_app app; private final Xowe_wiki wiki; diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/bfr_args/Bfr_arg__indent.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/bfr_args/Bfr_arg__hatr_.java similarity index 71% rename from 400_xowa/src/gplx/xowa/htmls/core/wkrs/bfr_args/Bfr_arg__indent.java rename to 400_xowa/src/gplx/xowa/htmls/core/wkrs/bfr_args/Bfr_arg__hatr_.java index b12c7ef09..ac8430125 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/bfr_args/Bfr_arg__indent.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/bfr_args/Bfr_arg__hatr_.java @@ -16,14 +16,6 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.htmls.core.wkrs.bfr_args; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; -public class Bfr_arg__indent extends gplx.core.brys.Bfr_arg_base implements gplx.core.brys.Clear_able { - private int indent = 0; - public void Clear() { - this.indent = 0; - } - public void Set(int v) {this.indent = v;} - @Override public void Bfr_arg__add(Bry_bfr bfr) { - if (indent > 0) - bfr.Add_byte_repeat(Byte_ascii.Space, indent * 2); - } +public class Bfr_arg__hatr_ { + public static byte[] Bld_atr_bgn(byte[] key) {return Bry_.Add(Byte_ascii.Space_bry, key, Byte_ascii.Eq_bry, Byte_ascii.Quote_bry);} // ' key="' } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/bfr_args/Bfr_arg__hatr_arg.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/bfr_args/Bfr_arg__hatr_arg.java new file mode 100644 index 000000000..23b237d59 --- /dev/null +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/bfr_args/Bfr_arg__hatr_arg.java @@ -0,0 +1,40 @@ +/* +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 . +*/ +package gplx.xowa.htmls.core.wkrs.bfr_args; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; +import gplx.core.brys.*; +public class Bfr_arg__hatr_arg implements Bfr_arg_clearable { + private final byte[] atr_bgn; + private Bfr_arg_clearable val_as_arg; + public Bfr_arg__hatr_arg(byte[] key) {this.atr_bgn = Bfr_arg__hatr_.Bld_atr_bgn(key);} + public Bfr_arg__hatr_arg Set_by_arg(Bfr_arg_clearable v) {val_as_arg = v; return this;} + public Bfr_arg__hatr_arg Set_by_arg_empty() {val_as_arg = Bfr_arg__html_atr__empty.Instance; return this;} + public void Bfr_arg__clear() {val_as_arg = null;} + public boolean Bfr_arg__missing() {return val_as_arg == null || val_as_arg.Bfr_arg__missing();} + public void Bfr_arg__add(Bry_bfr bfr) { + if (Bfr_arg__missing()) return; + bfr.Add(atr_bgn); + val_as_arg.Bfr_arg__add(bfr); + bfr.Add_byte_quote(); + } +} +class Bfr_arg__html_atr__empty implements Bfr_arg_clearable { + public void Bfr_arg__clear() {} + public boolean Bfr_arg__missing() {return false;} + public void Bfr_arg__add(Bry_bfr bfr) {} + public static final Bfr_arg__html_atr__empty Instance = new Bfr_arg__html_atr__empty(); Bfr_arg__html_atr__empty() {} +} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/bfr_args/Bfr_arg__hatr_bry.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/bfr_args/Bfr_arg__hatr_bry.java new file mode 100644 index 000000000..3fe07c204 --- /dev/null +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/bfr_args/Bfr_arg__hatr_bry.java @@ -0,0 +1,49 @@ +/* +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 . +*/ +package gplx.xowa.htmls.core.wkrs.bfr_args; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; +import gplx.core.brys.*; import gplx.core.primitives.*; +public class Bfr_arg__hatr_bry implements Bfr_arg_clearable { + private final byte[] atr_bgn; + public Bfr_arg__hatr_bry(byte[] key) {this.atr_bgn = Bfr_arg__hatr_.Bld_atr_bgn(key); this.Bfr_arg__clear();} + private Bfr_arg_clearable arg; + public byte[] Src() {return src;} private byte[] src; + public int Src_bgn() {return src_bgn;} private int src_bgn; + public int Src_end() {return src_end;} private int src_end; + public Bfr_arg__hatr_bry Set_by_bry(byte[] bry) {src = bry; return this;} + public Bfr_arg__hatr_bry Set_by_mid(byte[] bry, int bgn, int end) {src = bry; src_bgn = bgn; src_end = end; return this;} + public Bfr_arg__hatr_bry Set_by_arg(Bfr_arg_clearable v) {arg = v; return this;} + public Bfr_arg__hatr_bry Set_by_mid_or_empty(byte[] bry, int bgn, int end) { + if (end == -1) this.Set_by_bry(Bry_.Empty); + else this.Set_by_mid(bry, bgn, end); + return this; + } + public Bfr_arg__hatr_bry Set_by_mid_or_null(byte[] bry, int bgn, int end) { + if (end != -1) this.Set_by_mid(bry, bgn, end); + return this; + } + public void Bfr_arg__clear() {arg = null; src = null; src_bgn = src_end = -1;} + public boolean Bfr_arg__missing() {return src == null && (arg == null || arg.Bfr_arg__missing());} + public void Bfr_arg__add(Bry_bfr bfr) { + if (Bfr_arg__missing()) return; + bfr.Add(atr_bgn); + if (src == null) arg.Bfr_arg__add(bfr); + else if (src_bgn == -1) bfr.Add(src); + else bfr.Add_mid(src, src_bgn, src_end); + bfr.Add_byte_quote(); + } +} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/bfr_args/Bfr_arg__hatr_cls.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/bfr_args/Bfr_arg__hatr_cls.java new file mode 100644 index 000000000..689c6cd77 --- /dev/null +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/bfr_args/Bfr_arg__hatr_cls.java @@ -0,0 +1,37 @@ +/* +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 . +*/ +package gplx.xowa.htmls.core.wkrs.bfr_args; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; +import gplx.core.brys.*; +public class Bfr_arg__hatr_cls implements Bfr_arg { + private final byte[] atr_bgn; + private byte[][] ary; + public Bfr_arg__hatr_cls() {this.atr_bgn = Bfr_arg__hatr_.Bld_atr_bgn(gplx.langs.htmls.Gfh_atr_.Bry__class);} + public Bfr_arg__hatr_cls Set_by_ary(byte[][] v) {ary = v; return this;} + public void Bfr_arg__clear() {ary = null;} + public boolean Bfr_arg__missing() {return ary == null;} + public void Bfr_arg__add(Bry_bfr bfr) { + if (Bfr_arg__missing()) return; + bfr.Add(atr_bgn); + int len = ary.length; + for (int i = 0; i < len; ++i) { + if (i != 0) bfr.Add_byte_space(); + bfr.Add(ary[i]); + } + bfr.Add_byte_quote(); + } +} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/bfr_args/Bfr_arg__hatr_fmtr.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/bfr_args/Bfr_arg__hatr_fmtr.java new file mode 100644 index 000000000..fd33e14b6 --- /dev/null +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/bfr_args/Bfr_arg__hatr_fmtr.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 . +*/ +package gplx.xowa.htmls.core.wkrs.bfr_args; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; +import gplx.core.brys.*; import gplx.core.brys.fmtrs.*; +public class Bfr_arg__hatr_fmtr implements Bfr_arg { + private final byte[] atr_bgn; + private final Bry_fmtr fmtr = Bry_fmtr.new_(); + private Object[] args; + public Bfr_arg__hatr_fmtr(byte[] key, String fmt, String... keys) { + this.atr_bgn = Bfr_arg__hatr_.Bld_atr_bgn(key); + this.fmtr.Fmt_(fmt).Keys_(keys); + this.Clear(); + } + public void Set_args(Object... args) {this.args = args;} + public void Clear() {args = null;} + public void Bfr_arg__clear() {this.Clear();} + public boolean Bfr_arg__missing() {return args == null;} + public void Bfr_arg__add(Bry_bfr bfr) { + if (Bfr_arg__missing()) return; + bfr.Add(atr_bgn); + fmtr.Bld_bfr_many(bfr, args); + bfr.Add_byte_quote(); + } +} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/bfr_args/Bfr_arg__hatr_id.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/bfr_args/Bfr_arg__hatr_id.java new file mode 100644 index 000000000..0e88bfae1 --- /dev/null +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/bfr_args/Bfr_arg__hatr_id.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 . +*/ +package gplx.xowa.htmls.core.wkrs.bfr_args; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; +import gplx.core.brys.*; +public class Bfr_arg__hatr_id implements Bfr_arg_clearable { + private final byte[] atr_bgn; + private final byte[] bry; private int num; + public Bfr_arg__hatr_id(byte[] bry) {this.bry = bry; this.atr_bgn = Bfr_arg__hatr_.Bld_atr_bgn(gplx.langs.htmls.Gfh_atr_.Bry__id);} + public Bfr_arg__hatr_id Set(int num) {this.num = num; return this;} + public void Bfr_arg__clear() {num = -1;} + public boolean Bfr_arg__missing() {return num == -1;} + public void Bfr_arg__add(Bry_bfr bfr) { + if (Bfr_arg__missing()) return; + bfr.Add(atr_bgn); + bfr.Add(bry); + bfr.Add_int_variable(num); + bfr.Add_byte_quote(); + } + public static Bfr_arg__hatr_id New(String v) {return new Bfr_arg__hatr_id(Bry_.new_u8(v));} + public static Bfr_arg__hatr_id New(byte[] v) {return new Bfr_arg__hatr_id(v);} +} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/bfr_args/Bfr_arg__id.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/bfr_args/Bfr_arg__hatr_int.java similarity index 60% rename from 400_xowa/src/gplx/xowa/htmls/core/wkrs/bfr_args/Bfr_arg__id.java rename to 400_xowa/src/gplx/xowa/htmls/core/wkrs/bfr_args/Bfr_arg__hatr_int.java index 2dc2e8d5a..7b9f97344 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/bfr_args/Bfr_arg__id.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/bfr_args/Bfr_arg__hatr_int.java @@ -16,16 +16,18 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.htmls.core.wkrs.bfr_args; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; -import gplx.langs.htmls.*; import gplx.langs.htmls.parsers.*; -public class Bfr_arg__id extends gplx.core.brys.Bfr_arg_base { - private byte[] prefix; private int id; - public Bfr_arg__id Set(byte[] prefix, int id) { - this.prefix = prefix; - this.id = id; - return this; - } - @Override public void Bfr_arg__add(Bry_bfr bfr) { - bfr.Add(prefix); - bfr.Add_int_variable(id); +import gplx.core.brys.*; +public class Bfr_arg__hatr_int implements Bfr_arg_clearable { + private final byte[] atr_bgn; + private int val; + public Bfr_arg__hatr_int(byte[] key) {this.atr_bgn = Bfr_arg__hatr_.Bld_atr_bgn(key);} + public Bfr_arg__hatr_int Set_by_int(int v) {val = v; return this;} + public void Bfr_arg__clear() {val = Int_.Min_value;} + public boolean Bfr_arg__missing() {return val == Int_.Min_value;} + public void Bfr_arg__add(Bry_bfr bfr) { + if (Bfr_arg__missing()) return; + bfr.Add(atr_bgn); + bfr.Add_int_variable(val); + bfr.Add_byte_quote(); } } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/bfr_args/Bfr_arg__href.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/bfr_args/Bfr_arg__href.java index 3a287d3a7..fb447bd7b 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/bfr_args/Bfr_arg__href.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/bfr_args/Bfr_arg__href.java @@ -15,37 +15,38 @@ 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.htmls.core.wkrs.bfr_args; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; -import gplx.xowa.htmls.hrefs.*; import gplx.xowa.wikis.nss.*; -public class Bfr_arg__href extends gplx.core.brys.Bfr_arg_base implements gplx.core.brys.Clear_able { - private byte[] val; private int val_bgn, val_end; - private int href_type; - public void Clear() { - href_type = Tid__null; - } - public void Set_by_atr(gplx.langs.htmls.parsers.Html_atr atr) {Set_by_mid(atr.Src(), atr.Val_bgn(), atr.Val_end());} - public void Set_by_mid(byte[] v, int bgn, int end) {this.val = v; this.href_type = Tid__mid; this.val_bgn = bgn; this.val_end = end;} - public void Set_by_raw(byte[] v) {this.val = v; this.href_type = Tid__raw;} - public void Set_by_page(byte[] v) {this.val = v; this.href_type = Tid__page;} - public void Set_by_file(byte[] v) {this.val = v; this.href_type = Tid__file;} - @Override public void Bfr_arg__add(Bry_bfr bfr) { - if (val == null) return; - switch (href_type) { - case Tid__raw: - bfr.Add(val); - break; - case Tid__mid: - bfr.Add_mid(val, val_bgn, val_end); - break; - case Tid__page: - bfr.Add(Xoh_href_.Bry__wiki); // '/wiki/' - bfr.Add(val); // 'File:A.png' - break; - case Tid__file: - bfr.Add(Xoh_href_.Bry__wiki).Add(Xow_ns_.Bry__file).Add_byte_colon(); - bfr.Add(val); - break; - } - } - private static final int Tid__null = 0, Tid__raw = 1, Tid__page = 2, Tid__file = 3, Tid__mid = 4; -} +//namespace gplx.xowa.htmls.core.wkrs.bfr_args { +// using gplx.xowa.htmls.hrefs; using gplx.xowa.wikis.nss; +// public class Bfr_arg__href : gplx.core.brys.Bfr_arg_clearable { +// private byte[] val; private int val_bgn, val_end; +// private int href_type; +//// public void Clear() { +//// href_type = Tid__null; +//// } +// public void Set_by_atr(gplx.langs.htmls.docs.Gfh_atr atr) {Set_by_mid(atr.Src(), atr.Val_bgn(), atr.Val_end());} +// public void Set_by_mid(byte[] v, int bgn, int end) {this.val = v; this.href_type = Tid__mid; this.val_bgn = bgn; this.val_end = end;} +// public void Set_by_raw(byte[] v) {this.val = v; this.href_type = Tid__raw;} +// public void Set_by_page(byte[] v) {this.val = v; this.href_type = Tid__page;} +// public void Set_by_file(byte[] v) {this.val = v; this.href_type = Tid__file;} +// public void Bfr_arg__add(Bry_bfr bfr) { +// if (val == null) return; +// switch (href_type) { +// case Tid__raw: +// bfr.Add(val); +// break; +// case Tid__mid: +// bfr.Add_mid(val, val_bgn, val_end); +// break; +// case Tid__page: +// bfr.Add(Xoh_href_.Bry__wiki); // '/wiki/' +// bfr.Add(val); // 'File:A.png' +// break; +// case Tid__file: +// bfr.Add(Xoh_href_.Bry__wiki).Add(Xow_ns_.Bry__file).Add_byte_colon(); +// bfr.Add(val); +// break; +// } +// } +// private static final int Tid__null = 0, Tid__raw = 1, Tid__page = 2, Tid__file = 3, Tid__mid = 4; +// } +//} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/bfr_args/Bfr_arg__html_atr.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/bfr_args/Bfr_arg__html_atr.java deleted file mode 100644 index 862403273..000000000 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/bfr_args/Bfr_arg__html_atr.java +++ /dev/null @@ -1,76 +0,0 @@ -/* -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 . -*/ -package gplx.xowa.htmls.core.wkrs.bfr_args; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; -import gplx.core.brys.*; -public class Bfr_arg__html_atr implements Bfr_arg, Clear_able { - private final byte[] atr_bgn; - private int val_type; - private int val_as_int; - private byte[] val_as_bry; private int val_as_bry_bgn, val_as_bry_end; - private byte[][] val_as_ary; - private Bfr_arg val_as_arg; - public Bfr_arg__html_atr(byte[] key) {this.atr_bgn = Bld_atr_bgn(key);} - public void Clear() { - val_type = Tid__null; - val_as_arg = null; - val_as_int = Int_.Min_value; - val_as_bry = null; - val_as_ary = null; - } - public byte[] Val_as_bry() {return val_as_bry;} - public int Val_as_bry_bgn() {return val_as_bry_bgn;} - public int Val_as_bry_end() {return val_as_bry_end;} - public Bfr_arg__html_atr Set_by_arg(Bfr_arg v) {val_type = Tid__arg; val_as_arg = v; return this;} - public Bfr_arg__html_atr Set_by_int(int v) {val_type = Tid__int; val_as_int = v; return this;} - public Bfr_arg__html_atr Set_by_ary(byte[]... ary) {val_type = Tid__bry__ary; val_as_ary = ary; return this;} - public Bfr_arg__html_atr Set_by_bry(byte[] bry) {val_type = Tid__bry__val; val_as_bry = bry; return this;} - public Bfr_arg__html_atr Set_by_mid(byte[] bry, int bgn, int end) {val_type = Tid__bry__mid; val_as_bry = bry; val_as_bry_bgn = bgn; val_as_bry_end = end; return this;} - public void Bfr_arg__clear() {this.Clear();} - public boolean Bfr_arg__exists() { - switch (val_type) { - case Tid__null: return false; - case Tid__arg: return val_as_arg.Bfr_arg__exists(); - case Tid__int: return val_as_int != Int_.Min_value; - case Tid__bry__ary: return val_as_ary != null; - case Tid__bry__val: return val_as_bry != null; - case Tid__bry__mid: return val_as_bry != null; - default: throw Err_.new_unhandled(val_type); - } - } - public void Bfr_arg__add(Bry_bfr bfr) { - if (!Bfr_arg__exists()) return; - bfr.Add(atr_bgn); - switch (val_type) { - case Tid__arg: val_as_arg.Bfr_arg__add(bfr); break; - case Tid__int: bfr.Add_int_variable(val_as_int); break; - case Tid__bry__val: bfr.Add(val_as_bry); break; - case Tid__bry__mid: bfr.Add_mid(val_as_bry, val_as_bry_bgn, val_as_bry_end); break; - case Tid__bry__ary: - int len = val_as_ary.length; - for (int i = 0; i < len; ++i) { - if (i != 0) bfr.Add_byte_space(); - byte[] v = val_as_ary[i]; - bfr.Add(v); - } - break; - } - bfr.Add_byte_quote(); - } - public static byte[] Bld_atr_bgn(byte[] key) {return Bry_.Add(Byte_ascii.Space_bry, key, Byte_ascii.Eq_bry, Byte_ascii.Quote_bry);} // ' key="' - private static final int Tid__null = 0, Tid__arg = 1, Tid__int = 2, Tid__bry__mid = 3, Tid__bry__val = 4, Tid__bry__ary = 5; -} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/bfr_args/Bfr_arg__wrapper.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/bfr_args/Bfr_arg__wrapper.java index 012ee8347..8fe4ef833 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/bfr_args/Bfr_arg__wrapper.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/bfr_args/Bfr_arg__wrapper.java @@ -24,9 +24,9 @@ public class Bfr_arg__wrapper implements Bfr_arg { } public Bfr_arg__wrapper Set(Bfr_arg v) {inner = v; return this;} public void Bfr_arg__clear() {this.Clear();} - public boolean Bfr_arg__exists() {return inner != Bfr_arg_.Noop;} + public boolean Bfr_arg__missing() {return inner == Bfr_arg_.Noop;} public void Bfr_arg__add(Bry_bfr bfr) { - if (!Bfr_arg__exists()) return; + if (Bfr_arg__missing()) return; inner.Bfr_arg__add(bfr); } } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/escapes/Xoh_escape_data.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/escapes/Xoh_escape_data.java index ad70d123b..cdff11085 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/escapes/Xoh_escape_data.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/escapes/Xoh_escape_data.java @@ -16,15 +16,15 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.htmls.core.wkrs.escapes; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; -import gplx.langs.htmls.*; import gplx.langs.htmls.parsers.*; +import gplx.langs.htmls.*; import gplx.langs.htmls.docs.*; import gplx.xowa.htmls.core.hzips.*; -public class Xoh_escape_data implements Html_doc_wkr { - private final Xoh_hdoc_wkr wkr; - public Xoh_escape_data(Xoh_hdoc_wkr wkr) {this.wkr = wkr;} - public byte[] Hook() {return Xoh_hzip_dict_.Escape_bry;} +public class Xoh_escape_data implements Gfh_doc_wkr { + private final Xoh_hdoc_wkr wkr; + public Xoh_escape_data(Xoh_hdoc_wkr wkr, byte hook_byte) {this.wkr = wkr; this.hook = Bry_.New_by_byte(hook_byte);} + public byte[] Hook() {return hook;} private final byte[] hook; // NOTE: bry with 1 member which is hook to be escaped; EX: "1" or "2" or "27" public int Parse(byte[] src, int src_bgn, int src_end, int pos) { int rv = pos + 1; - wkr.On_escape(pos, rv); + wkr.On_escape(this); return rv; } } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/escapes/Xoh_escape_hzip.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/escapes/Xoh_escape_hzip.java index eba1596fd..87d84de8c 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/escapes/Xoh_escape_hzip.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/escapes/Xoh_escape_hzip.java @@ -20,16 +20,18 @@ import gplx.core.brys.*; import gplx.core.threads.poolables.*; import gplx.xowa.htmls.core.hzips.*; public class Xoh_escape_hzip implements Xoh_hzip_wkr, Gfo_poolable_itm { private byte escape_byte; + public int Tid() {return Xoh_hzip_dict_.Tid__escape;} public byte[] Hook() {return hook;} private byte[] hook; public String Key() {return Xoh_hzip_dict_.Key__escape;} - public Gfo_poolable_itm Encode(Xoh_hzip_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, boolean wkr_is_root, byte[] src, Object data_obj) { - bfr.Add(hook); + public Gfo_poolable_itm Encode1(Xoh_hzip_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, boolean wkr_is_root, byte[] src, Object data_obj) { + Xoh_escape_data data = (Xoh_escape_data)data_obj; + bfr.Add(hook); // EX: 1,0 + bfr.Add(data.Hook()); // EX: 2 hctx.Hzip__stat().Escape_add(escape_byte); return this; } - public int Decode(Bry_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, boolean wkr_is_root, Bry_rdr rdr, byte[] src, int src_bgn, int src_end) { - bfr.Add_byte(Xoh_hzip_dict_.Escape); - return rdr.Pos(); + public void Decode1(Bry_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, Bry_rdr rdr, byte[] src, int src_bgn, int src_end, Xoh_data_itm data_itm) { + bfr.Add_byte(rdr.Read_byte()); } public void Pool__rls () {pool_mgr.Rls_fast(pool_idx);} private Gfo_poolable_mgr pool_mgr; private int pool_idx; public Gfo_poolable_itm Pool__make (Gfo_poolable_mgr mgr, int idx, Object[] args) { diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/escapes/Xoh_escape_hzip_tst.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/escapes/Xoh_escape_hzip_tst.java index d62a7bd49..69b039e80 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/escapes/Xoh_escape_hzip_tst.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/escapes/Xoh_escape_hzip_tst.java @@ -19,7 +19,13 @@ package gplx.xowa.htmls.core.wkrs.escapes; import gplx.*; import gplx.xowa.*; im import org.junit.*; import gplx.xowa.htmls.core.hzips.*; public class Xoh_escape_hzip_tst { private final Xoh_hzip_fxt fxt = new Xoh_hzip_fxt(); - @Test public void Basic() { - fxt.Test__bicode("~u", ""); + @Test public void Escape() { + fxt.Test__bicode("!" , String_.new_a7(Bry_.New_by_byte(Xoh_pool_mgr__hzip.Hook__core))); + } + @Test public void Html() { + fxt.Test__bicode("!" , String_.new_a7(Bry_.New_by_byte(Xoh_pool_mgr__hzip.Hook__html))); + } + @Test public void Mw() { + fxt.Test__bicode("!", ""); } } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Xoh_gly_grp_data.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Xoh_gly_grp_data.java new file mode 100644 index 000000000..eca67bc6b --- /dev/null +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Xoh_gly_grp_data.java @@ -0,0 +1,125 @@ +/* +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 . +*/ +package gplx.xowa.htmls.core.wkrs.glys; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; +import gplx.core.brys.*; +import gplx.langs.htmls.*; import gplx.langs.htmls.docs.*; import gplx.langs.htmls.styles.*; import gplx.langs.htmls.clses.*; +import gplx.xowa.htmls.core.hzips.*; +import gplx.xowa.xtns.gallery.*; +public class Xoh_gly_grp_data implements Gfh_class_parser_wkr, Gfh_style_wkr { // + private final List_adp itms_list = List_adp_.new_(); + public int Src_bgn() {return src_bgn;} private int src_bgn; + public int Src_end() {return src_end;} private int src_end; + public int Gly_tid() {return gly_tid;} private int gly_tid; + public int Gly_w() {return gly_w;} private int gly_w; + public int Xtra_atr_bgn() {return xtra_atr_bgn;} private int xtra_atr_bgn; + public int Xtra_atr_end() {return xtra_atr_end;} private int xtra_atr_end; + public boolean Xtra_atr_exists() {return xtra_atr_end > xtra_atr_bgn;} + public int Xtra_cls_bgn() {return xtra_cls_bgn;} private int xtra_cls_bgn; + public int Xtra_cls_end() {return xtra_cls_end;} private int xtra_cls_end; + public boolean Xtra_cls_exists() {return xtra_cls_end > xtra_cls_bgn;} + public int Xtra_style_bgn() {return xtra_style_bgn;} private int xtra_style_bgn; + public int Xtra_style_end() {return xtra_style_end;} private int xtra_style_end; + public boolean Xtra_style_exists() {return xtra_style_end > xtra_style_bgn;} + public int Itms__len() {return itms_list.Count();} + public Xoh_gly_itm_data Itms__get_at(int i) {return (Xoh_gly_itm_data)itms_list.Get_at(i);} + private void Clear() { + this.gly_tid = Byte_.Max_value_127; + this.gly_w = 0; + this.xtra_atr_bgn = xtra_atr_end = xtra_cls_bgn = xtra_cls_end = xtra_style_bgn = xtra_style_end = -1; + itms_list.Clear(); + } + public boolean Parse1(Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, byte[] src, Gfh_tag_rdr tag_rdr, Gfh_tag ul_head) { + this.Clear(); + this.src_bgn = ul_head.Src_bgn(); + if (!Parse_cls (src, tag_rdr, ul_head)) return false; + if (!Parse_style(src, tag_rdr, ul_head)) return false; + Parse_ul_atrs(src, tag_rdr, ul_head); + Gfh_tag li_head = null; + while (true) { + li_head = tag_rdr.Tag__peek_fwd_head(); + if (li_head.Name_id() != Gfh_tag_.Id__li) break; // no more
  • ; break; + if (!li_head.Atrs__cls_has(Atr__cls__gallerybox)) return false; + tag_rdr.Pos_(li_head.Src_end()); + Xoh_gly_itm_data itm_parser = new Xoh_gly_itm_data(); + if (!itm_parser.Parse1(hdoc_wkr, hctx, src, tag_rdr, li_head)) return false; + tag_rdr.Tag__move_fwd_tail(Gfh_tag_.Id__li); + itms_list.Add(itm_parser); + } + Gfh_tag ul_tail = tag_rdr.Tag__move_fwd_tail(Gfh_tag_.Id__ul); + this.src_end = ul_tail.Src_end(); + hdoc_wkr.On_gly(this); + return true; + } + private boolean Parse_cls(byte[] src, Gfh_tag_rdr tag_rdr, Gfh_tag ul_head) { + Gfh_atr ul_cls = ul_head.Atrs__get_by_or_empty(Gfh_atr_.Bry__class); + Gfh_class_parser_.Parse(src, ul_cls.Val_bgn(), ul_cls.Val_end(), this); + if (gly_tid == Byte_.Max_value_127) { + tag_rdr.Err_wkr().Fail("unable to find gallery tid"); + return false; + } + return true; + } + private boolean Parse_style(byte[] src, Gfh_tag_rdr tag_rdr, Gfh_tag ul_head) { + Gfh_atr ul_style = ul_head.Atrs__get_by_or_empty(Gfh_atr_.Bry__style); + Gfh_style_parser_.Parse(src, ul_style.Val_bgn(), ul_style.Val_end(), this); // parse for width; note width only appears if items_per_row is specified + return true; + } + private void Parse_ul_atrs(byte[] src, Gfh_tag_rdr tag_rdr, Gfh_tag ul_head) { + int atrs_len = ul_head.Atrs__len(); + for (int i = 0; i < atrs_len; ++i) { + Gfh_atr hatr = ul_head.Atrs__get_at(i); + if (Bry_.Eq(hatr.Key(), Gfh_atr_.Bry__class)) {} + else if (Bry_.Eq(hatr.Key(), Gfh_atr_.Bry__style)) {} + else { + if (xtra_atr_bgn == -1) this.xtra_atr_bgn = hatr.Atr_bgn(); + this.xtra_atr_end = hatr.Atr_end(); + } + } + } + public boolean On_cls(byte[] src, int atr_idx, int atr_bgn, int atr_end, int val_bgn, int val_end) { + if (Bry_.Match(src, val_bgn, val_end, Atr__cls__gallery)) {} // ignore "gallery" + else if (Bry_.Match(src, val_bgn, val_bgn + Atr__cls__mw_gallery.length, Atr__cls__mw_gallery)) { // starts with 'mw-gallery-' + int tid_bgn = val_bgn + Atr__cls__mw_gallery.length; + this.gly_tid = Gallery_mgr_base_.Hash.Get_as_byte_or(src, tid_bgn, val_end, Byte_.Max_value_127); + return true; + } + else { + if (this.xtra_cls_bgn == -1) { + this.xtra_cls_bgn = val_bgn; + this.xtra_cls_end = atr_end; + } + } + return true; + } + public boolean On_atr(byte[] src, int atr_idx, int atr_bgn, int atr_end, int key_bgn, int key_end, int val_bgn, int val_end) { + if (Bry_.Match(src, key_bgn, key_end, Style__max_width)) // 'max-width' + gly_w = Bry_.To_int_or__lax(src, val_bgn, val_end, 0); + else if (Bry_.Match(src, key_bgn, key_end, Style___width)) {} // '_width' + else { + if (this.xtra_style_bgn == -1) { + this.xtra_style_bgn = key_bgn; + this.xtra_style_end = atr_end; + } + } + return true; + } + public static final byte[] Atr__cls__gallery = Bry_.new_a7("gallery"); + private static final byte[] Atr__cls__mw_gallery = Bry_.new_a7("mw-gallery-"), Atr__cls__gallerybox = Bry_.new_a7("gallerybox") + , Style__max_width = Bry_.new_a7("max-width"), Style___width = Bry_.new_a7("_width") + ; +} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Xoh_gly_grp_parser.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Xoh_gly_grp_parser.java deleted file mode 100644 index f23a507eb..000000000 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Xoh_gly_grp_parser.java +++ /dev/null @@ -1,49 +0,0 @@ -/* -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 . -*/ -package gplx.xowa.htmls.core.wkrs.glys; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; -import gplx.core.brys.*; -import gplx.langs.htmls.*; import gplx.langs.htmls.parsers.*; import gplx.langs.htmls.parsers.styles.*; import gplx.langs.htmls.parsers.clses.*; -public class Xoh_gly_grp_parser implements Html_atr_class_wkr { - public int Rng_bgn() {return rng_bgn;} private int rng_bgn; - public int Rng_end() {return rng_end;} private int rng_end; -// private Xoh_gly_itm_parser itm_parser = new Xoh_gly_itm_parser(); - public int Parse(Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, byte[] src, Html_tag_rdr tag_rdr, Html_tag ul_tag) { - this.rng_bgn = ul_tag.Src_bgn(); - /* - parse class for traditional - parse style for max_width - */ -// Html_tag cur_tag = null; -// while (true) { -// cur_tag = tag_rdr.Tag__move_fwd_head(); -// if (cur_tag.Name_id() != Html_tag_.Id__li) break; // no more
  • ; break; -// itm_parser.Parse(hdoc_wkr, hctx, src, tag_rdr, cur_tag); -// } -// hdoc_wkr.On_thm(this); - Html_tag cur_tag = tag_rdr.Tag__move_fwd_tail(Html_tag_.Id__ul); - this.rng_end = cur_tag.Src_end(); - return rng_end; - } - public boolean On_cls(byte[] src, int atr_idx, int atr_bgn, int atr_end, int val_bgn, int val_end) { -// if (Bry_.Match(src, val_bgn, val_end, Bry__cls__traditional)) { -// -// } - return false; - } - public static final byte[] Atr__class__gallery = Bry_.new_a7("gallery"); -} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Xoh_gly_grp_wtr.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Xoh_gly_grp_wtr.java new file mode 100644 index 000000000..1cf2f71ed --- /dev/null +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Xoh_gly_grp_wtr.java @@ -0,0 +1,106 @@ +/* +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 . +*/ +package gplx.xowa.htmls.core.wkrs.glys; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; +import gplx.core.brys.*; import gplx.core.brys.fmtrs.*; +import gplx.langs.htmls.*; import gplx.xowa.htmls.core.wkrs.bfr_args.*; +class Xoh_gly_grp_wtr implements Bfr_arg { + private final Bfr_arg_clearable[] arg_ary; + private final Bfr_arg__hatr_id ul_id = Bfr_arg__hatr_id.New("xogly_li_"); + private final Bfr_arg__hatr_gly_style ul_style = new Bfr_arg__hatr_gly_style(Gfh_atr_.Bry__style); + private byte[] ul_cls, xtra_cls, xtra_atr_bry, ul_nl; + private final Xoh_gly_itm_list_wtr itm_list_wtr = new Xoh_gly_itm_list_wtr(); + public Xoh_gly_grp_wtr() { + arg_ary = new Bfr_arg_clearable[] {ul_id}; + } + public void Init(boolean mode_is_diff, int id, byte[] cls, int ul_w, byte[] xtra_cls, byte[] xtra_style_bry, byte[] xtra_atr_bry, Xoh_gly_itm_wtr[] ary) { + this.Clear(); + if (!mode_is_diff) + ul_id.Set(id); + this.ul_cls = cls; + this.xtra_cls = xtra_cls == null ? Bry_.Empty : Bry_.Add(Byte_ascii.Space_bry, xtra_cls); + this.xtra_atr_bry = xtra_atr_bry; + this.ul_nl = ary.length == 0 ? Bry_.Empty : Byte_ascii.Nl_bry; // TIDY:
      should be on same line if 0 items + itm_list_wtr.Init(ary); + ul_style.Set_args(ul_w, xtra_style_bry); + } + public void Clear() { + for (Bfr_arg_clearable arg : arg_ary) + arg.Bfr_arg__clear(); + ul_id.Bfr_arg__clear(); + ul_style.Clear(); + ul_cls = null; + } + public void Bfr_arg__clear() {this.Clear();} + public boolean Bfr_arg__missing() {return false;} + public void Bfr_arg__add(Bry_bfr bfr) { + fmtr.Bld_bfr_many(bfr, ul_id, ul_cls, xtra_cls, ul_style, xtra_atr_bry, itm_list_wtr, ul_nl); + } + private static final Bry_fmtr fmtr = Bry_fmtr.new_(String_.Concat_lines_nl_skip_last + ( "~{itms}~{ul_nl}" + ), "id", "cls", "xtra_cls", "style", "xtra_atr", "itms", "ul_nl"); +} +class Xoh_gly_itm_list_wtr implements Bfr_arg { + private Xoh_gly_itm_wtr[] ary; private int ary_len; + public void Init(Xoh_gly_itm_wtr[] ary) { + this.ary = ary; this.ary_len = ary.length; + for (int i = 0; i < ary_len; ++i) + ary[i].Clear(); + } + public void Bfr_arg__clear() {ary = null;} + public boolean Bfr_arg__missing() {return ary == null;} + public void Bfr_arg__add(Bry_bfr bfr) { + for (int i = 0; i < ary_len; ++i) { + Xoh_gly_itm_wtr itm = ary[i]; + itm.Bfr_arg__add(bfr); + } + } +} +class Bfr_arg__hatr_gly_style implements Bfr_arg { + private final byte[] atr_bgn; + private int width; + private byte[] xtra_cls; + public Bfr_arg__hatr_gly_style(byte[] key) { + this.atr_bgn = Bfr_arg__hatr_.Bld_atr_bgn(key); + this.Clear(); + } + public void Set_args(int w, byte[] xtra_cls) {this.width = w; this.xtra_cls = xtra_cls;} + public void Clear() {width = 0; xtra_cls = null;} + public void Bfr_arg__clear() {this.Clear();} + public boolean Bfr_arg__missing() {return width == 0 && xtra_cls == null;} + public void Bfr_arg__add(Bry_bfr bfr) { + if (Bfr_arg__missing()) return; + bfr.Add(atr_bgn); + if (width > 0) { + bfr.Add(Style__frag_1); + bfr.Add_int_variable(width); + bfr.Add(Style__frag_2); + bfr.Add_int_variable(width); + bfr.Add(Style__frag_3); + } + if (xtra_cls != null) { + if (width > 0) bfr.Add_byte_space(); + bfr.Add(xtra_cls); + } + bfr.Add_byte_quote(); + } + private static final byte[] + Style__frag_1 = Bry_.new_a7("max-width:") + , Style__frag_2 = Bry_.new_a7("px; _width:") + , Style__frag_3 = Bry_.new_a7("px;") + ; +} \ No newline at end of file diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Xoh_gly_html__dump__tst.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Xoh_gly_html__dump__tst.java new file mode 100644 index 000000000..2ef24dd90 --- /dev/null +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Xoh_gly_html__dump__tst.java @@ -0,0 +1,59 @@ +/* +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 . +*/ +package gplx.xowa.htmls.core.wkrs.glys; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; +import org.junit.*; import gplx.xowa.htmls.core.makes.tests.*; +public class Xoh_gly_html__dump__tst { + private final Xoh_make_fxt fxt = new Xoh_make_fxt(); + @Before public void init() {fxt.Clear();} + @Test public void Basic() { + fxt.Test__html(String_.Concat_lines_nl_skip_last + ( "" + , "File:A.jpg|A1" + , "File:B.jpg|B1" + , "" + ), String_.Concat_lines_nl_skip_last + ( "
      ")); + } +} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Xoh_gly_hzip.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Xoh_gly_hzip.java index 6f597ecc9..b75a8d899 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Xoh_gly_hzip.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Xoh_gly_hzip.java @@ -17,21 +17,84 @@ along with this program. If not, see . */ package gplx.xowa.htmls.core.wkrs.glys; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; import gplx.core.primitives.*; import gplx.core.brys.*; import gplx.core.threads.poolables.*; -import gplx.langs.htmls.*; import gplx.langs.htmls.parsers.*; import gplx.xowa.htmls.hrefs.*; import gplx.xowa.htmls.core.hzips.*; +import gplx.langs.htmls.*; import gplx.langs.htmls.docs.*; import gplx.xowa.htmls.hrefs.*; import gplx.xowa.htmls.core.hzips.*; import gplx.xowa.htmls.core.wkrs.bfr_args.*; import gplx.xowa.htmls.core.wkrs.imgs.atrs.*; import gplx.xowa.htmls.core.wkrs.lnkis.*; import gplx.xowa.htmls.core.wkrs.lnkis.anchs.*; import gplx.xowa.wikis.nss.*; import gplx.xowa.wikis.ttls.*; import gplx.xowa.files.*; import gplx.xowa.files.repos.*; +import gplx.xowa.xtns.gallery.*; public class Xoh_gly_hzip implements Xoh_hzip_wkr, Gfo_poolable_itm { + private final Xoh_gly_grp_wtr grp_wtr = new Xoh_gly_grp_wtr(); + public int Tid() {return Xoh_hzip_dict_.Tid__gly;} public String Key() {return Xoh_hzip_dict_.Key__gly;} public byte[] Hook() {return hook;} private byte[] hook; - public Gfo_poolable_itm Encode(Xoh_hzip_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, boolean wkr_is_root, byte[] src, Object data_obj) { - Xoh_gly_grp_parser data = (Xoh_gly_grp_parser)data_obj; - bfr.Add_mid(src, data.Rng_bgn(), data.Rng_end()); + public Gfo_poolable_itm Encode1(Xoh_hzip_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, boolean wkr_is_root, byte[] src, Object data_obj) { + Xoh_gly_grp_data data = (Xoh_gly_grp_data)data_obj; + boolean xtra_atr = flag_bldr.Set_as_bool(Flag__ul__xtra_atr , data.Xtra_atr_exists()); + boolean xtra_cls = flag_bldr.Set_as_bool(Flag__ul__xtra_cls , data.Xtra_cls_exists()); + boolean xtra_style = flag_bldr.Set_as_bool(Flag__ul__xtra_style , data.Xtra_style_exists()); + flag_bldr.Set(Flag__gly_tid, data.Gly_tid()); + int itms_len = data.Itms__len(); + + bfr.Add(hook); + Xoh_hzip_int_.Encode(1, bfr, flag_bldr.Encode()); + Xoh_hzip_int_.Encode(1, bfr, data.Gly_w()); + if (xtra_cls) bfr.Add_hzip_mid(src, data.Xtra_cls_bgn(), data.Xtra_cls_end()); + if (xtra_style) bfr.Add_hzip_mid(src, data.Xtra_style_bgn(), data.Xtra_style_end()); + if (xtra_atr) bfr.Add_hzip_mid(src, data.Xtra_atr_bgn(), data.Xtra_atr_end()); + Xoh_hzip_int_.Encode(1, bfr, itms_len); + for (int i = 0; i < itms_len; ++i) { + Xoh_gly_itm_data itm_parser = data.Itms__get_at(i); + bfr.Add_hzip_int(1, itm_parser.Li_w()); + bfr.Add_hzip_int(1, itm_parser.Div_1_w()); + bfr.Add_hzip_int(1, itm_parser.Div_2_margin()); + bfr.Add_byte((byte)(itm_parser.Capt_tid() + gplx.core.encoders.Base85_.A7_offset)); + bfr.Add_hzip_mid(src, itm_parser.Capt_bgn(), itm_parser.Capt_end()); + Xoh_hzip_wkr hzip_wkr = hctx.Pool_mgr__hzip().Mw__img(); + hzip_wkr.Encode1(bfr, hdoc_wkr, hctx, hpg, false, src, itm_parser.Img_parser()); + hzip_wkr.Pool__rls(); + } return this; } - public int Decode(Bry_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, boolean wkr_is_root, Bry_rdr rdr, byte[] src, int src_bgn, int src_end) { - return src_bgn + 2; + public void Decode1(Bry_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, Bry_rdr rdr, byte[] src, int src_bgn, int src_end, Xoh_data_itm data_itm) { + int flag = rdr.Read_hzip_int(1); flag_bldr.Decode(flag); + boolean xtra_atr = flag_bldr.Get_as_bool(Flag__ul__xtra_atr); + boolean xtra_cls = flag_bldr.Get_as_bool(Flag__ul__xtra_cls); + boolean xtra_style = flag_bldr.Get_as_bool(Flag__ul__xtra_style); + byte cls_tid = flag_bldr.Get_as_byte(Flag__gly_tid); + byte[] cls_bry = Gallery_mgr_base_.Get_bry_by_tid(cls_tid); + int ul_w = rdr.Read_hzip_int(1); + byte[] xtra_cls_bry = xtra_cls ? rdr.Read_bry_to(): null; + byte[] xtra_style_bry = xtra_style ? rdr.Read_bry_to(): null; + byte[] xtra_atr_bry = xtra_atr ? rdr.Read_bry_to(): null; + int li_len = rdr.Read_hzip_int(1); + int uid = hctx.Uid__gly__nxt(); + Xoh_gly_itm_wtr[] itm_ary = new Xoh_gly_itm_wtr[li_len]; + for (int i = 0; i < li_len; ++i) { + Xoh_gly_itm_wtr itm_wtr = new Xoh_gly_itm_wtr(); + itm_ary[i] = itm_wtr; + int li_w = rdr.Read_hzip_int(1); + int div_1_w = rdr.Read_hzip_int(1); + int div_2_margin = rdr.Read_hzip_int(1); + byte capt_tid = (byte)(rdr.Read_byte() - gplx.core.encoders.Base85_.A7_offset); + byte[] capt_bry = rdr.Read_bry_to(); + Xoh_data_itm img_data = hctx.Pool_mgr__data().Get_by_tid(Xoh_hzip_dict_.Tid__img); + Xoh_hzip_wkr img_hzip = hctx.Pool_mgr__hzip().Mw__img(); + img_hzip.Decode1(bfr, hdoc_wkr, hctx, hpg, rdr, src, src_bgn, src_end, img_data); + itm_wtr.Init(true, uid, li_w, div_1_w, div_2_margin, capt_tid, capt_bry); + itm_wtr.Img_wtr().Init_by_decode(hpg, hctx, src, img_data); + img_data.Pool__rls(); + img_hzip.Pool__rls(); + } + grp_wtr.Init(hctx.Mode_is_diff(), uid, cls_bry, ul_w, xtra_cls_bry, xtra_style_bry, xtra_atr_bry, itm_ary); + grp_wtr.Bfr_arg__add(bfr); } public void Pool__rls () {pool_mgr.Rls_fast(pool_idx);} private Gfo_poolable_mgr pool_mgr; private int pool_idx; public Gfo_poolable_itm Pool__make (Gfo_poolable_mgr mgr, int idx, Object[] args) {Xoh_gly_hzip rv = new Xoh_gly_hzip(); rv.pool_mgr = mgr; rv.pool_idx = idx; rv.hook = (byte[])args[0]; return rv;} + private final Int_flag_bldr flag_bldr = new Int_flag_bldr().Pow_ary_bld_(1, 1, 1, 3); + private static final int // SERIALIZED + Flag__ul__xtra_atr = 0 + , Flag__ul__xtra_cls = 1 + , Flag__ul__xtra_style = 2 + , Flag__gly_tid = 3 + ; } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Xoh_gly_hzip_tst.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Xoh_gly_hzip_tst.java index 22384dc85..411386e7a 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Xoh_gly_hzip_tst.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Xoh_gly_hzip_tst.java @@ -18,40 +18,161 @@ along with this program. If not, see . package gplx.xowa.htmls.core.wkrs.glys; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; import org.junit.*; import gplx.xowa.htmls.core.hzips.*; public class Xoh_gly_hzip_tst { - private final Xoh_hzip_fxt fxt = new Xoh_hzip_fxt(); - private String Html__basic = gplx.langs.htmls.Html_utl.Replace_apos(String_.Concat_lines_nl_skip_last - ( "" - )); + private final Xoh_hzip_fxt fxt = new Xoh_hzip_fxt().Init_mode_diff_y_(); @Test public void Basic() { - fxt.Test__bicode(Html__basic, Html__basic); + fxt.Test__bicode("~'!{,L#{\"g{\"b0!A1~!1A.png~9\"D\"D{\"g{\"b0!B1~!1B.png~9\"D\"Dabc", String_.Concat_lines_nl_skip_last + ( "abc")); + } + @Test public void Capt_is_empty() { // PURPOSE: handle empty caption + fxt.Test__bicode("~'!!#{\"g{\"b0#~!1A.png~9\"D\"D{\"g{\"b0#!1A.png9\"D\"D

      abc

      ", String_.Concat_lines_nl_skip_last + ( "

      abc

      ")); + } + @Test public void Capt_is_br() { // PURPOSE: handle captions which have
      , not

      ; PAGE:s.w:Sociology; DATE:2015-12-20 + fxt.Test__bicode("~'!!\"{\"g{\"b0\"A1~!1A.png~9\"D\"D", String_.Concat_lines_nl_skip_last + ( "

      ")); + } + @Test public void No_max_width() { // PURPOSE: if no perrow=# then no "style='max-width:###; _width:###;'" + fxt.Test__bicode("~'!!\"{\"g{\"b0!A1~!1A.png~9\"D\"D", String_.Concat_lines_nl_skip_last + ( "")); + } + @Test public void Extra_cls() { // PURPOSE: handle extra cls; EX: + fxt.Test__bicode("~'1!cls1 cls2~\"{\"g{\"b0!A1~!1A.png~9\"D\"D", String_.Concat_lines_nl_skip_last + ( "")); + } + @Test public void Xtra_style__append() { // PURPOSE: handle appended style; EX: + fxt.Test__bicode("~'){,Lcolor:blue; float:left;~\"{\"g{\"b0!A1~!1A.png~9\"D\"D", String_.Concat_lines_nl_skip_last + ( "")); + } + @Test public void Xtra_style__replace() { // PURPOSE: handle replaced style; EX: + fxt.Test__bicode("~')!color:blue; float:left;~\"{\"g{\"b0!A1~!1A.png~9\"D\"D", String_.Concat_lines_nl_skip_last + ( "")); + } + @Test public void Xtra_atr() { // PURPOSE: handle extra atr; EX: + fxt.Test__bicode("~'A! id=\"abc\"\"{\"g{\"b0!A1~!1A.png~9\"D\"D", String_.Concat_lines_nl_skip_last + ( "")); + } + @Test public void Tidy__br_at_end() { // PURPOSE: handle inconsistent tidy behavior where

      is put on one line ("

      a

      ") unless it ends with
      ("

      a
      \n

      ") + fxt.Test__bicode("~'!!\"{\"g{\"b0!A1
      ~!1A.png~9\"D\"D", String_.Concat_lines_nl_skip_last + ( "")); + } + @Test public void Tidy__empty() { // PURPOSE: no items should place on same line + fxt.Test__bicode("~'!!!", String_.Concat_lines_nl_skip_last + ( "")); // TIDY:
        should be on same line if 0 items } } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Xoh_gly_itm_data.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Xoh_gly_itm_data.java new file mode 100644 index 000000000..00a88cae5 --- /dev/null +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Xoh_gly_itm_data.java @@ -0,0 +1,106 @@ +/* +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 . +*/ +package gplx.xowa.htmls.core.wkrs.glys; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; +import gplx.core.brys.*; import gplx.core.primitives.*; import gplx.core.btries.*; +import gplx.langs.htmls.*; import gplx.langs.htmls.docs.*; import gplx.langs.htmls.styles.*; +import gplx.xowa.htmls.core.wkrs.imgs.*; import gplx.xowa.htmls.core.wkrs.thms.*; +public class Xoh_gly_itm_data { + public int Src_bgn() {return src_bgn;} private int src_bgn; + public int Src_end() {return src_end;} private int src_end; + public Xoh_img_data Img_parser() {return img_parser;} private Xoh_img_data img_parser = new Xoh_img_data(); + public boolean Img_exists() {return img_exists;} private boolean img_exists; + public int Li_w() {return li_w;} private int li_w; + public int Div_1_w() {return div_1_w;} private int div_1_w; + public int Div_2_margin() {return div_2_margin;} private int div_2_margin; + public byte Capt_tid() {return capt_tid;} private byte capt_tid; + public int Capt_bgn() {return capt_bgn;} private int capt_bgn; + public int Capt_end() {return capt_end;} private int capt_end; + private void Clear() { + img_exists = false; + capt_bgn = capt_end = li_w = div_1_w = div_2_margin = -1; + capt_tid = Capt_tid__null; + } + public boolean Parse1(Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, byte[] src, Gfh_tag_rdr tag_rdr, Gfh_tag li_tag) { + this.Clear(); + this.src_bgn = li_tag.Src_bgn(); + this.li_w = li_tag.Atrs__style_get_as_int(Gfh_style_key_.Bry__width); + Gfh_tag div_0_head = tag_rdr.Tag__move_fwd_head(); + if (!div_0_head.Chk_name(Gfh_tag_.Id__div)) return false; //
        + Gfh_tag div_1_head = tag_rdr.Tag__move_fwd_head(); + if (!div_1_head.Chk(Gfh_tag_.Id__div, Xoh_thm_data.Atr__class__thumb)) return false; // chk for
        + this.div_1_w = div_1_head.Atrs__style_get_as_int(Gfh_style_key_.Bry__width); + int div_2_bgn = div_1_head.Src_end(); + Gfh_tag div_1_tail = tag_rdr.Tag__move_fwd_tail(Gfh_tag_.Id__div); //
        for class="thumb" + int div_2_end = div_1_tail.Src_bgn(); + Gfh_tag div_2_head = tag_rdr.Tag__find_fwd_head(div_2_bgn, div_2_end, Gfh_tag_.Id__div); // find
        + if (div_2_head.Src_exists()) { // img_exists + img_exists = true; + this.div_2_margin = div_2_head.Atrs__style_get_as_int(Gfh_style_key_.Bry__margin); + tag_rdr.Pos_(div_2_head.Src_end()); + Gfh_tag anch_tag = tag_rdr.Tag__move_fwd_head(); + if (!anch_tag.Chk(Gfh_tag_.Id__a, Xoh_img_data.Bry__cls__anch__image)) return false; + if (!img_parser.Init_by_parse(hdoc_wkr, hctx, tag_rdr, src, anch_tag, null)) return false; + } + else { + img_exists = false; + } + if (!Parse_gallerytext(src, tag_rdr)) return false; + tag_rdr.Tag__move_fwd_tail(Gfh_tag_.Id__div); + this.src_end = tag_rdr.Pos(); + return true; + } + private boolean Parse_gallerytext(byte[] src, Gfh_tag_rdr tag_rdr) { + Gfh_tag capt_head = tag_rdr.Tag__move_fwd_head(); + if (!capt_head.Chk(Gfh_tag_.Id__div, Atr__cls__gallerytext)) return false; // chk for
        + int capt_head_end = capt_head.Src_end(); + Gfh_tag capt_tail = tag_rdr.Tag__move_fwd_tail(Gfh_tag_.Id__div); + int capt_tail_bgn = capt_tail.Src_bgn(); + int capt_tail_end = capt_tail.Src_end(); + capt_bgn = Bry_find_.Find_fwd_while_not_ws(src, capt_head_end, capt_tail_bgn); // skip any \n, \s + if (capt_tail_bgn - capt_bgn == 0) { + capt_tid = Capt_tid__empty; + capt_end = capt_bgn; + return true; // EX:
        + } + Object capt_tid_obj = Capt_tid__trie.Match_bgn(src, capt_bgn, capt_tail_bgn); + if (capt_tid_obj == null) return false; // something wrong; + this.capt_tid = ((Byte_obj_val)capt_tid_obj).Val(); + boolean capt_head_is_p = false; + switch (capt_tid) { + case Capt_tid__p: capt_bgn += 3; capt_head_is_p = true; break; // EX:

        + case Capt_tid__br: capt_bgn += 4; break; // EX:


        + } + if (capt_head_is_p) + tag_rdr.Pos_(capt_bgn); + capt_bgn = Bry_find_.Find_fwd_while_not_ws(src, capt_bgn, capt_tail_bgn); + capt_end = capt_tail_bgn; + if (capt_head_is_p) { + Gfh_tag para_tail = tag_rdr.Tag__move_fwd_tail(Gfh_tag_.Id__p); + capt_end = para_tail.Src_bgn(); + } + capt_end = Bry_find_.Find_bwd__skip_ws(src, capt_end, -1); + tag_rdr.Pos_(capt_tail_end); + return true; + } + private static final byte[] Atr__cls__gallerytext = Bry_.new_a7("gallerytext"); + public static final byte Capt_tid__p = 0, Capt_tid__br = 1, Capt_tid__empty = 2, Capt_tid__null = 3; + private static final Btrie_slim_mgr Capt_tid__trie = Btrie_slim_mgr.ci_a7() + .Add_bry_byte(Gfh_tag_.P_lhs , Capt_tid__p) + .Add_bry_byte(Gfh_tag_.Br_lhs , Capt_tid__br) + ; +} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Xoh_gly_itm_parser.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Xoh_gly_itm_parser.java deleted file mode 100644 index b1caf8fd2..000000000 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Xoh_gly_itm_parser.java +++ /dev/null @@ -1,56 +0,0 @@ -/* -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 . -*/ -package gplx.xowa.htmls.core.wkrs.glys; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; -import gplx.core.brys.*; -import gplx.langs.htmls.*; import gplx.langs.htmls.parsers.*; import gplx.langs.htmls.parsers.styles.*; -public class Xoh_gly_itm_parser { - public int Rng_bgn() {return rng_bgn;} private int rng_bgn; - public int Rng_end() {return rng_end;} private int rng_end; - // xoimg_parser - public boolean Img_exists() {return img_exists;} private boolean img_exists; - public int Capt_bgn() {return capt_bgn;} private int capt_bgn; - public int Capt_end() {return capt_end;} private int capt_end; - public int Parse(Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, byte[] src, Html_tag_rdr tag_rdr, Html_tag li_tag) { - this.rng_bgn = li_tag.Src_bgn(); - this.rng_end = li_tag.Src_end(); - - tag_rdr.Tag__move_fwd_head().Chk_id(Html_tag_.Id__div); //
        - Html_tag div_1_head = tag_rdr.Tag__move_fwd_head().Chk_id(Html_tag_.Id__div); //
        - int file_text_bgn = div_1_head.Src_end(); - Html_tag div_1_tail = tag_rdr.Tag__move_fwd_tail(Html_tag_.Id__div); - int file_text_end = div_1_tail.Src_bgn(); - Html_tag img_tag = tag_rdr.Tag__find_fwd_head(file_text_bgn, file_text_end, Html_tag_.Id__div); // search
        - if (img_tag.Src_exists()) { // img_exists - img_exists = true; - // div_nxt.Atrs__cls_has(Bry__gallery_text); // assert cls = Bry_gallery_text - } - else { - img_exists = false; - } - tag_rdr.Tag__move_fwd_head().Chk_id(Html_tag_.Id__div); //
        - Html_tag para_head = tag_rdr.Tag__move_fwd_head().Chk_id(Html_tag_.Id__p); - capt_bgn = para_head.Src_end(); - Html_tag para_tail = tag_rdr.Tag__move_fwd_tail(Html_tag_.Id__p); - capt_end = para_tail.Src_bgn(); - tag_rdr.Tag__move_fwd_tail(Html_tag_.Id__div); - tag_rdr.Tag__move_fwd_tail(Html_tag_.Id__div); - this.rng_end = tag_rdr.Pos(); - return rng_end; - } - // private static final byte[] Bry__gallery_text = Bry_.new_a7("gallerytext"); -} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Xoh_gly_itm_wtr.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Xoh_gly_itm_wtr.java new file mode 100644 index 000000000..0ed19bdb6 --- /dev/null +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Xoh_gly_itm_wtr.java @@ -0,0 +1,85 @@ +/* +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 . +*/ +package gplx.xowa.htmls.core.wkrs.glys; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; +import gplx.core.brys.*; import gplx.core.brys.fmtrs.*; +import gplx.langs.htmls.*; import gplx.xowa.htmls.core.wkrs.bfr_args.*; import gplx.xowa.htmls.core.wkrs.imgs.*; +public class Xoh_gly_itm_wtr implements Bfr_arg { + private final Bfr_arg_clearable[] arg_ary; + private final Bfr_arg__hatr_id li_id = Bfr_arg__hatr_id.New("xogly_li_"), img_id = Bfr_arg__hatr_id.New(gplx.xowa.htmls.Xoh_img_mgr.Bry__html_uid) + , div_1_id = Bfr_arg__hatr_id.New("xogly_div1_"), div_2_id = Bfr_arg__hatr_id.New("xogly_div2_"), div_3_id = Bfr_arg__hatr_id.New("xogly_div3_"); + private final Bfr_arg__itm_caption itm_caption_fmtr = new Bfr_arg__itm_caption(); + private int li_w, div_1_w, div_2_margin; + public Xoh_gly_itm_wtr() { + arg_ary = new Bfr_arg_clearable[] {li_id, div_1_id, div_2_id, div_3_id, img_id}; + } + public Xoh_img_wtr Img_wtr() {return img_wtr;} private final Xoh_img_wtr img_wtr = new Xoh_img_wtr(); + public void Init(boolean mode_is_diff, int img_id, int li_w, int div_1_w, int div_2_margin, byte capt_tid, byte[] itm_caption) { + this.Clear(); + this.li_w = li_w; this.div_1_w = div_1_w; this.div_2_margin = div_2_margin; + itm_caption_fmtr.Set(capt_tid, itm_caption); + if (!mode_is_diff) { + li_id.Set(img_id); div_1_id.Set(img_id); div_2_id.Set(img_id); div_3_id.Set(img_id); img_wtr.Img_id_(img_id); + } + img_wtr.Anch_cls_(Xoh_img_data.Bry__cls__anch__image); + } + public Xoh_gly_itm_wtr Clear() { + for (Bfr_arg_clearable arg : arg_ary) + arg.Bfr_arg__clear(); + // img_wtr.Clear(); // TOMBSTONE: do not clear; clear will be called by Xoh_hzip_img.Decode1 + return this; + } + public void Bfr_arg__clear() {this.Clear();} + public boolean Bfr_arg__missing() {return false;} + public void Bfr_arg__add(Bry_bfr bfr) { + fmtr.Bld_bfr_many(bfr, li_id, div_1_id, div_2_id, div_3_id, li_w, div_1_w, div_2_margin, img_wtr, itm_caption_fmtr); + } + public static final Xoh_gly_itm_wtr[] Ary_empty = new Xoh_gly_itm_wtr[0]; + private static final Bry_fmtr fmtr = Bry_fmtr.new_(String_.Concat_lines_nl_skip_last + ( "" + , "" + , "" + , "" + , "~{img_itm}
        " + , "
        " + , "
        ~{itm_caption}
        " + , "
        " + , "
      • " + ), "li_id", "div_1_id", "div_2_id", "div_3_id", "li_w", "div_1_w", "div_2_margin", "img_itm", "itm_caption"); +} +class Bfr_arg__itm_caption implements Bfr_arg { + private byte capt_tid; + private byte[] capt_bry; + public void Set(byte tid, byte[] bry) {this.capt_tid = tid; this.capt_bry = bry;} + public void Bfr_arg__clear() {capt_bry = null;} + public boolean Bfr_arg__missing() {return capt_bry == null;} + public void Bfr_arg__add(Bry_bfr bfr) { + if (Bfr_arg__missing()) return; + switch (capt_tid) { + case Xoh_gly_itm_data.Capt_tid__empty: return; //
        + case Xoh_gly_itm_data.Capt_tid__p: bfr.Add_byte_nl().Add(Gfh_tag_.P_lhs); break; //

        + case Xoh_gly_itm_data.Capt_tid__br: bfr.Add(Gfh_tag_.Br_lhs).Add_byte_nl(); break; //


        + } + bfr.Add(capt_bry); + int itm_caption_len = capt_bry.length; + if (capt_tid == Xoh_gly_itm_data.Capt_tid__p) { + if (itm_caption_len > 3 && Bry_.Match(capt_bry, itm_caption_len - 4, Gfh_tag_.Br_lhs)) bfr.Add_byte_nl(); + bfr.Add(Gfh_tag_.P_rhs); + } + bfr.Add_byte_nl(); + } +} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Xoh_gly_itm_wtr_tst.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Xoh_gly_itm_wtr_tst.java new file mode 100644 index 000000000..51e4ed1a5 --- /dev/null +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Xoh_gly_itm_wtr_tst.java @@ -0,0 +1,54 @@ +/* +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 . +*/ +package gplx.xowa.htmls.core.wkrs.glys; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; +import org.junit.*; import gplx.core.primitives.*; import gplx.xowa.htmls.core.hzips.*; +public class Xoh_gly_itm_wtr_tst { + private final Xoh_gly_itm_wtr_fxt fxt = new Xoh_gly_itm_wtr_fxt(); + @Test public void Basic() { + fxt.Init__gly(0, 155, 150, 5, "caption"); + fxt.Init__img("/wiki/File:A.png", "A.png", "0|120|120|-1|-1|-1"); + fxt.Test__write(String_.Concat_lines_nl_skip_last + ( "" + , "
      • " + , "
        " + , "
        " + , "
        " + , "
        " + , "
        " + , "

        caption

        " + , "
        " + , "
        " + , "
      • " + )); + } +} +class Xoh_gly_itm_wtr_fxt { + private final Xoh_gly_itm_wtr wtr = new Xoh_gly_itm_wtr(); + private final Bry_bfr tmp_bfr = Bry_bfr.new_(); + public void Init__gly(int id, int itm_w, int file_div_w, int file_div_margin, String caption) { + wtr.Init(Bool_.N, id, itm_w, file_div_w, file_div_margin, Xoh_gly_itm_data.Capt_tid__p, Bry_.new_a7(caption)); + } + public void Init__img(String href, String xowa_title, String xoimg) { + wtr.Img_wtr().Init_by_gly(gplx.core.brys.args.Bfr_arg__bry.New(Bry_.new_u8(href)), Bry_.new_u8(xowa_title), gplx.core.brys.args.Bfr_arg__bry.New(Bry_.new_u8(xoimg))); + } + public void Test__write(String expd) { + expd = gplx.langs.htmls.Gfh_utl.Replace_apos(expd); + wtr.Bfr_arg__add(tmp_bfr); + Tfds.Eq_str_lines(expd, tmp_bfr.To_str_and_clear()); + } +} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/hdrs/Xoh_hdr_parser.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/hdrs/Xoh_hdr_data.java similarity index 60% rename from 400_xowa/src/gplx/xowa/htmls/core/wkrs/hdrs/Xoh_hdr_parser.java rename to 400_xowa/src/gplx/xowa/htmls/core/wkrs/hdrs/Xoh_hdr_data.java index d67b283c5..e758c2a90 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/hdrs/Xoh_hdr_parser.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/hdrs/Xoh_hdr_data.java @@ -16,8 +16,11 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.htmls.core.wkrs.hdrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; -import gplx.langs.htmls.*; import gplx.langs.htmls.parsers.*; -public class Xoh_hdr_parser { +import gplx.core.threads.poolables.*; +import gplx.langs.htmls.*; import gplx.langs.htmls.docs.*; +import gplx.xowa.htmls.core.hzips.*; +public class Xoh_hdr_data implements Xoh_data_itm { + public int Tid() {return Xoh_hzip_dict_.Tid__hdr;} public int Src_bgn() {return src_bgn;} private int src_bgn; public int Src_end() {return src_end;} private int src_end; public int Hdr_level() {return hdr_level;} private int hdr_level; @@ -28,28 +31,34 @@ public class Xoh_hdr_parser { public int Capt_end() {return capt_end;} private int capt_end; public int Capt_rhs_bgn() {return capt_rhs_bgn;} private int capt_rhs_bgn; public int Capt_rhs_end() {return capt_rhs_end;} private int capt_rhs_end; - public boolean Capt_rhs_exists() {return capt_rhs_exists;} private boolean capt_rhs_exists; + public boolean Capt_rhs_exists() {return capt_rhs_end > capt_rhs_bgn;} public void Clear() { - this.anch_bgn = anch_end = capt_bgn = capt_end = capt_rhs_bgn = capt_rhs_end -1; - this.anch_is_diff = capt_rhs_exists = false; + this.anch_bgn = anch_end = capt_bgn = capt_end = capt_rhs_bgn = capt_rhs_end = -1; + this.anch_is_diff = false; } - public boolean Parse(Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Html_tag_rdr tag_rdr, byte[] src, Html_tag hdr_head, Html_tag span_head) { + public boolean Init_by_parse(Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Gfh_tag_rdr tag_rdr, byte[] src, Gfh_tag hdr_head, Gfh_tag span_head) { this.Clear(); this.src_bgn = hdr_head.Src_bgn(); this.hdr_level = hdr_head.Name_id(); - Html_atr anch_atr = span_head.Atrs__get_by_or_fail(Html_atr_.Bry__id); + Gfh_atr anch_atr = span_head.Atrs__get_by_or_fail(Gfh_atr_.Bry__id); this.anch_bgn = anch_atr.Val_bgn(); this.anch_end = anch_atr.Val_end(); this.capt_bgn = span_head.Src_end(); - Html_tag hdr_tail = tag_rdr.Tag__move_fwd_tail(hdr_level); // find not since can be nested, but

        cannot - Html_tag span_tail = tag_rdr.Tag__peek_bwd_tail(Html_tag_.Id__span); // get before

        + Gfh_tag hdr_tail = tag_rdr.Tag__move_fwd_tail(hdr_level); // find not
        since can be nested, but

        cannot + Gfh_tag span_tail = tag_rdr.Tag__peek_bwd_tail(Gfh_tag_.Id__span); // get before

        this.capt_end = span_tail.Src_bgn(); if (span_tail.Src_end() != hdr_tail.Src_bgn()) { - capt_rhs_exists = true; capt_rhs_bgn = span_tail.Src_end(); capt_rhs_end = hdr_tail.Src_bgn(); } this.anch_is_diff = !Bry_.Match_w_swap(src, capt_bgn, capt_end, src, anch_bgn, anch_end, Byte_ascii.Space, Byte_ascii.Underline); // anch is different than capt; occurs with html and dupe-anchors; EX: "==A==" -> id='A' this.src_end = tag_rdr.Pos(); - hdoc_wkr.On_hdr(this); return true; } + public void Init_by_decode(int hdr_level, boolean anch_is_diff, int anch_bgn, int anch_end, int capt_bgn, int capt_end, int capt_rhs_bgn, int capt_rhs_end) { + this.hdr_level = hdr_level; + this.anch_is_diff = anch_is_diff; + this.anch_bgn = anch_bgn; this.anch_end = anch_end; this.capt_bgn = capt_bgn; this.capt_end = capt_end; + this.capt_rhs_bgn = capt_rhs_bgn; this.capt_rhs_end = capt_rhs_end; + } public static final byte[] Bry__class__mw_headline = Bry_.new_a7("mw-headline"); + public void Pool__rls () {pool_mgr.Rls_fast(pool_idx);} private Gfo_poolable_mgr pool_mgr; private int pool_idx; + public Gfo_poolable_itm Pool__make (Gfo_poolable_mgr mgr, int idx, Object[] args) {Xoh_hdr_data rv = new Xoh_hdr_data(); rv.pool_mgr = mgr; rv.pool_idx = idx; return rv;} } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/hdrs/Xoh_hdr_html.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/hdrs/Xoh_hdr_html.java index 19f6ed563..7c2e5cf47 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/hdrs/Xoh_hdr_html.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/hdrs/Xoh_hdr_html.java @@ -42,7 +42,7 @@ public class Xoh_hdr_html { if (hdr_len > 0) { // NOTE: need to check hdr_len b/c it could be dangling if (hdr.Hdr_end_manual() > 0) bfr.Add_byte_repeat(Byte_ascii.Eq, hdr.Hdr_end_manual()); // '=' if (cfg.Toc__show()) - bfr.Add(Html_tag_.Span_rhs); // '' + bfr.Add(Gfh_tag_.Span_rhs); // '' bfr.Add(Bry__hdr_rhs_bgn).Add_int(hdr_len, 1, 1); // '\n' } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/hdrs/Xoh_hdr_hzip.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/hdrs/Xoh_hdr_hzip.java index 398a76e0c..141b5b03e 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/hdrs/Xoh_hdr_hzip.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/hdrs/Xoh_hdr_hzip.java @@ -19,10 +19,11 @@ package gplx.xowa.htmls.core.wkrs.hdrs; import gplx.*; import gplx.xowa.*; impor import gplx.core.brys.*; import gplx.core.threads.poolables.*; import gplx.xowa.wikis.ttls.*; import gplx.xowa.htmls.core.hzips.*; public class Xoh_hdr_hzip implements Xoh_hzip_wkr, Gfo_poolable_itm { + public int Tid() {return Xoh_hzip_dict_.Tid__hdr;} public String Key() {return Xoh_hzip_dict_.Key__hdr;} public byte[] Hook() {return hook;} private byte[] hook; - public Gfo_poolable_itm Encode(Xoh_hzip_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, boolean wkr_is_root, byte[] src, Object data_obj) { - Xoh_hdr_parser data = (Xoh_hdr_parser)data_obj; + public Gfo_poolable_itm Encode1(Xoh_hzip_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, boolean wkr_is_root, byte[] src, Object data_obj) { + Xoh_hdr_data data = (Xoh_hdr_data)data_obj; boolean capt_rhs_exists = flag_bldr.Set_as_bool (Flag__capt_rhs_exists , data.Capt_rhs_exists()); boolean anch_is_diff = flag_bldr.Set_as_bool (Flag__anch_is_diff , data.Anch_is_diff()); int hdr_level = flag_bldr.Set_as_int (Flag__hdr_level , data.Hdr_level()); @@ -36,33 +37,20 @@ public class Xoh_hdr_hzip implements Xoh_hzip_wkr, Gfo_poolable_itm { hctx.Hzip__stat().Hdr_add(hdr_level); return this; } - public int Decode(Bry_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, boolean wkr_is_root, Bry_rdr rdr, byte[] src, int src_bgn, int src_end) { - int flag = rdr.Read_int_by_base85(1); flag_bldr.Decode(flag); + public void Decode1(Bry_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, Bry_rdr rdr, byte[] src, int src_bgn, int src_end, Xoh_data_itm data_itm) { + int flag = rdr.Read_hzip_int(1); flag_bldr.Decode(flag); boolean capt_rhs_exists = flag_bldr.Get_as_bool(Flag__capt_rhs_exists); boolean anch_is_diff = flag_bldr.Get_as_bool(Flag__anch_is_diff); byte hdr_level = flag_bldr.Get_as_byte(Flag__hdr_level); int capt_bgn = rdr.Pos(); int capt_end = rdr.Find_fwd_lr(); int anch_bgn = -1, anch_end = -1; - if (anch_is_diff) { - anch_bgn = rdr.Pos(); anch_end = rdr.Find_fwd_lr(); - } - byte[] capt_manual_end = capt_rhs_exists ? rdr.Read_bry_to() : null; - - bfr.Add(Bry__hdr__0).Add_byte_as_a7(hdr_level); - bfr.Add(Bry__hdr__1); - if (anch_is_diff) - bfr.Add_mid (src, anch_bgn, anch_end); - else - bfr.Add_mid_w_swap (src, capt_bgn, capt_end, Byte_ascii.Space, Byte_ascii.Underline); - bfr.Add(Bry__hdr__2); - bfr.Add_mid(src, capt_bgn, capt_end); - bfr.Add(Bry__hdr__3); - if (capt_rhs_exists) - bfr.Add(capt_manual_end); - bfr.Add(Bry__hdr__4).Add_byte_as_a7(hdr_level); - bfr.Add_byte(Byte_ascii.Angle_end); - return rdr.Pos(); + if (anch_is_diff) {anch_bgn = rdr.Pos(); anch_end = rdr.Find_fwd_lr();} + int capt_rhs_bgn = -1, capt_rhs_end = -1; + if (capt_rhs_exists) {capt_rhs_bgn = rdr.Pos(); capt_rhs_end = rdr.Find_fwd_lr();} + + Xoh_hdr_data data = (Xoh_hdr_data)data_itm; + data.Init_by_decode(hdr_level, anch_is_diff, anch_bgn, anch_end, capt_bgn, capt_end, capt_rhs_bgn, capt_rhs_end); } private final Int_flag_bldr flag_bldr = new Int_flag_bldr().Pow_ary_bld_ (1, 1, 3); private static final int // SERIALIZED @@ -70,13 +58,6 @@ public class Xoh_hdr_hzip implements Xoh_hzip_wkr, Gfo_poolable_itm { , Flag__anch_is_diff = 1 , Flag__hdr_level = 2 ; - private static final byte[] - Bry__hdr__0 = Bry_.new_a7("") - , Bry__hdr__3 = Bry_.new_a7("") - , Bry__hdr__4 = Bry_.new_a7(". -*/ -package gplx.xowa.htmls.core.wkrs.hdrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; -import gplx.langs.htmls.*; import gplx.langs.htmls.parsers.*; -import gplx.xowa.htmls.sections.*; -public class Xoh_hdr_make { - public void Make(Bry_bfr bfr, Xoh_page hpg, byte[] src, Xoh_hdr_parser arg) { - // , int rng_bgn, int rng_end, int level, int capt_bgn, int capt_end, byte[] anch - // register section - int rng_bgn = arg.Src_bgn(), rng_end = arg.Src_end(); - int level = arg.Hdr_level(); - Xoh_section_mgr section_mgr = hpg.Section_mgr(); - int section_len = section_mgr.Len(); - if (section_len != 0) // guard against -1 index; should not happen - section_mgr.Set_content(section_len - 1, src, rng_bgn - 2); // -2 to skip "\n\n" - byte[] capt = Bry_.Mid(src, arg.Capt_bgn(), arg.Capt_end()); - byte[] anch = Bry_.Mid(src, arg.Anch_bgn(), arg.Anch_end()); - if (anch == null) anch = Bry_.Replace(capt, Byte_ascii.Space, Byte_ascii.Underline); - hpg.Section_mgr().Add(section_len, level, anch, capt).Content_bgn_(rng_end + 1); // +1 to skip "\n" - bfr.Add_mid(src, rng_bgn, rng_end); - } -} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/hdrs/Xoh_hdr_make_tst.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/hdrs/Xoh_hdr_make_tst.java index ca22557bd..f7629100c 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/hdrs/Xoh_hdr_make_tst.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/hdrs/Xoh_hdr_make_tst.java @@ -23,14 +23,10 @@ public class Xoh_hdr_make_tst { String html = String_.Concat_lines_nl_skip_last ( "z" , "" - , "

        " - , " A 1" - , "

        " + , "

        A 1

        " , "a 1" , "" - , "

        " - , " B" - , "

        " + , "

        B

        " , "b" ); fxt.Test__make(html, fxt.Page_chkr().Body_(html) // make sure body is same diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/hdrs/Xoh_hdr_wtr.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/hdrs/Xoh_hdr_wtr.java new file mode 100644 index 000000000..a455fe8e1 --- /dev/null +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/hdrs/Xoh_hdr_wtr.java @@ -0,0 +1,54 @@ +/* +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 . +*/ +package gplx.xowa.htmls.core.wkrs.hdrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; +import gplx.core.brys.*; import gplx.core.primitives.*; import gplx.core.brys.fmtrs.*; import gplx.core.threads.poolables.*; import gplx.core.brys.args.*; +import gplx.langs.htmls.*; import gplx.xowa.htmls.core.wkrs.bfr_args.*; +import gplx.xowa.htmls.sections.*; import gplx.xowa.htmls.core.hzips.*; +public class Xoh_hdr_wtr implements gplx.core.brys.Bfr_arg, Xoh_wtr_itm { + private int hdr_num; private byte[] hdr_id, hdr_content, hdr_capt_rhs; + private Xoh_page hpg; + public void Init_by_parse(Bry_bfr bfr, Xoh_page hpg, Xoh_hdoc_ctx hctx, byte[] src, Xoh_hdr_data data) { + Init_by_decode(hpg, hctx, src, data); + this.Bfr_arg__add(bfr); + } + public boolean Init_by_decode(Xoh_page hpg, Xoh_hdoc_ctx hctx, byte[] src, Xoh_data_itm data_itm) { + this.hpg = hpg; + Xoh_hdr_data data = (Xoh_hdr_data)data_itm; + this.hdr_num = data.Hdr_level(); + this.hdr_content = Bry_.Mid(src, data.Capt_bgn(), data.Capt_end()); + if (data.Anch_is_diff()) + hdr_id = Bry_.Mid(src, data.Anch_bgn(), data.Anch_end()); + else + hdr_id = Bry_.Replace(hdr_content, Byte_ascii.Space, Byte_ascii.Underline); + hdr_capt_rhs = data.Capt_rhs_exists() ? Bry_.Mid(src, data.Capt_rhs_bgn(), data.Capt_rhs_end()) : Bry_.Empty; + return true; + } + public void Bfr_arg__add(Bry_bfr bfr) { + Xoh_section_mgr section_mgr = hpg.Section_mgr(); + int section_len = section_mgr.Len(); + if (section_len != 0) // guard against -1 index; should not happen + section_mgr.Set_content(section_len - 1, bfr.Bfr(), bfr.Len() - 2); // close previous section; -2 to skip "\n\n" + fmtr.Bld_bfr_many(bfr, hdr_num, hdr_id, hdr_content, hdr_capt_rhs); + section_mgr.Add(section_len, hdr_num, hdr_id, hdr_content).Content_bgn_(bfr.Len() + 1); // +1 to skip "\n" + } + public void Pool__rls () {pool_mgr.Rls_fast(pool_idx);} private Gfo_poolable_mgr pool_mgr; private int pool_idx; + public Gfo_poolable_itm Pool__make (Gfo_poolable_mgr mgr, int idx, Object[] args) {Xoh_hdr_wtr rv = new Xoh_hdr_wtr(); rv.pool_mgr = mgr; rv.pool_idx = idx; return rv;} + private static final Bry_fmtr fmtr = Bry_fmtr.new_ + ( "~{content}~{capt_rhs}" + , "lvl", "id", "content", "capt_rhs"); +} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_bare_data.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_bare_data.java new file mode 100644 index 000000000..8c594cea9 --- /dev/null +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_bare_data.java @@ -0,0 +1,56 @@ +/* +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 . +*/ +package gplx.xowa.htmls.core.wkrs.imgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; +import gplx.core.threads.poolables.*; +import gplx.langs.htmls.*; import gplx.langs.htmls.docs.*; +import gplx.xowa.htmls.core.hzips.*; +public class Xoh_img_bare_data implements Xoh_data_itm { + public int Tid() {return Xoh_hzip_dict_.Tid__img_bare;} + public int Src_bgn() {return src_bgn;} private int src_bgn; + public int Src_end() {return src_end;} private int src_end; + public int Dir_tid() {return dir_tid;} private int dir_tid; + public int Dir_bgn() {return dir_bgn;} private int dir_bgn; + public int Dir_end() {return dir_end;} private int dir_end; + public void Clear() { + this.src_bgn = src_end = dir_tid = dir_bgn = dir_end = -1; + } + public boolean Init_by_parse(Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Gfh_tag_rdr tag_rdr, byte[] src, Gfh_tag img_head, Gfh_tag unused) { + this.src_bgn = img_head.Src_bgn(); this.src_end = img_head.Src_end(); + Gfh_atr img_src_atr = img_head.Atrs__get_by_or_empty(Gfh_atr_.Bry__src); if (img_src_atr.Val_dat_missing()) return false; + byte[] root_dir_bry = hctx.Fsys__root(); + int root_dir_bgn = img_src_atr.Val_bgn(); + int root_dir_end = root_dir_bgn + root_dir_bry.length; + if (Bry_.Match(src, root_dir_bgn, root_dir_end, root_dir_bry)) { + int hiero_dir_end = root_dir_end + Url__hiero.length; + if (Bry_.Match(src, root_dir_end, hiero_dir_end, Url__hiero)) { + dir_tid = Dir_tid__hiero; + dir_bgn = root_dir_bgn; + dir_end = hiero_dir_end; + return true; + } + } + return false; + } + public void Init_by_decode(int src_bgn, int src_end, int dir_tid, int dir_bgn, int dir_end) { + this.src_bgn = src_bgn; this.src_end = src_end; this.dir_tid = dir_tid; this.dir_bgn = dir_bgn; this.dir_end = dir_end; + } + public void Pool__rls () {pool_mgr.Rls_fast(pool_idx);} private Gfo_poolable_mgr pool_mgr; private int pool_idx; + public Gfo_poolable_itm Pool__make (Gfo_poolable_mgr mgr, int idx, Object[] args) {Xoh_img_bare_data rv = new Xoh_img_bare_data(); rv.pool_mgr = mgr; rv.pool_idx = idx; return rv;} + public static final byte[] Url__hiero = Bry_.new_a7("bin/any/xowa/xtns/Wikihiero/img/hiero_"); + public static final int Dir_tid__null = -1, Dir_tid__hiero = 0; +} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_bare_hzip.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_bare_hzip.java new file mode 100644 index 000000000..b6b2340b1 --- /dev/null +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_bare_hzip.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 . +*/ +package gplx.xowa.htmls.core.wkrs.imgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; +import gplx.core.brys.*; import gplx.core.threads.poolables.*; +import gplx.xowa.htmls.core.hzips.*; +public class Xoh_img_bare_hzip implements Xoh_hzip_wkr, Gfo_poolable_itm { + public int Tid() {return Xoh_hzip_dict_.Tid__img_bare;} + public String Key() {return Xoh_hzip_dict_.Key__img_bare;} + public byte[] Hook() {return hook;} private byte[] hook; + public Gfo_poolable_itm Encode1(Xoh_hzip_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, boolean wkr_is_root, byte[] src, Object data_obj) { + Xoh_img_bare_data data = (Xoh_img_bare_data)data_obj; + flag_bldr.Set(Flag__dir_tid , data.Dir_tid()); + + bfr.Add(hook); + Xoh_hzip_int_.Encode(1, bfr, flag_bldr.Encode()); + bfr.Add_hzip_mid(src, data.Src_bgn(), data.Dir_bgn()); + bfr.Add_hzip_mid(src, data.Dir_end(), data.Src_end()); + return this; + } + public void Decode1(Bry_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, Bry_rdr rdr, byte[] src, int src_bgn, int src_end, Xoh_data_itm data_itm) { + Xoh_img_bare_data data = (Xoh_img_bare_data)data_itm; data.Clear(); + + int flag = rdr.Read_hzip_int(1); flag_bldr.Decode(flag); + int dir_tid = flag_bldr.Get_as_int(Flag__dir_tid); + + int tag_0_bgn = rdr.Pos(), tag_0_end = rdr.Find_fwd_lr(); + int tag_1_bgn = rdr.Pos(), tag_1_end = rdr.Find_fwd_lr(); + + data.Init_by_decode(tag_0_bgn, tag_1_end, dir_tid, tag_0_end, tag_1_bgn); + } + public void Pool__rls () {pool_mgr.Rls_fast(pool_idx);} private Gfo_poolable_mgr pool_mgr; private int pool_idx; + public Gfo_poolable_itm Pool__make (Gfo_poolable_mgr mgr, int idx, Object[] args) {Xoh_img_bare_hzip rv = new Xoh_img_bare_hzip(); rv.pool_mgr = mgr; rv.pool_idx = idx; rv.hook = (byte[])args[0]; return rv;} + private final Int_flag_bldr flag_bldr = new Int_flag_bldr().Pow_ary_bld_(2); + private static final int // SERIALIZED + Flag__dir_tid = 0 + ; +} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Xoh_gly_grp_cls_.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_bare_hzip__tst.java similarity index 58% rename from 400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Xoh_gly_grp_cls_.java rename to 400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_bare_hzip__tst.java index 68b35ce96..0991a97b3 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Xoh_gly_grp_cls_.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_bare_hzip__tst.java @@ -15,11 +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.htmls.core.wkrs.glys; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; -public class Xoh_gly_grp_cls_ { - public static final byte[] - Bry__traditional = Bry_.new_a7("traditional") - , Bry__packed = Bry_.new_a7("packed") - ; -// public static final +package gplx.xowa.htmls.core.wkrs.imgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; +import org.junit.*; import gplx.xowa.htmls.core.hzips.*; +public class Xoh_img_bare_hzip__tst { + private final Xoh_hzip_fxt fxt = new Xoh_hzip_fxt().Init_mode_diff_y_(); + @Before public void Clear() {fxt.Clear();} + @Test public void Hiero() { + fxt.Test__bicode + ( "~(!\"t\"~" + , "t" + ); + } } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_bare_wtr.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_bare_wtr.java new file mode 100644 index 000000000..421503ed2 --- /dev/null +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_bare_wtr.java @@ -0,0 +1,41 @@ +/* +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 . +*/ +package gplx.xowa.htmls.core.wkrs.imgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; +import gplx.core.brys.*; import gplx.core.threads.poolables.*; +import gplx.xowa.htmls.core.hzips.*; +public class Xoh_img_bare_wtr implements Bfr_arg, Xoh_wtr_itm { + private byte[] src; + private Xoh_img_bare_data data_itm; + private Xoh_hdoc_ctx hctx; + public void Init_by_parse(Bry_bfr bfr, Xoh_page hpg, Xoh_hdoc_ctx hctx, byte[] src, Xoh_img_bare_data data) { + this.src = src; this.hctx = hctx; + this.data_itm = data; + } + public boolean Init_by_decode(Xoh_page hpg, Xoh_hdoc_ctx hctx, byte[] src, Xoh_data_itm data_itm) { + this.src = src; this.hctx = hctx; + this.data_itm = (Xoh_img_bare_data)data_itm; + return true; + } + public void Bfr_arg__add(Bry_bfr bfr) { + bfr.Add_mid(src, data_itm.Src_bgn(), data_itm.Dir_bgn()); + bfr.Add(hctx.Fsys__root()).Add(Xoh_img_bare_data.Url__hiero); + bfr.Add_mid(src, data_itm.Dir_end(), data_itm.Src_end()); + } + public void Pool__rls () {pool_mgr.Rls_fast(pool_idx);} private Gfo_poolable_mgr pool_mgr; private int pool_idx; + public Gfo_poolable_itm Pool__make (Gfo_poolable_mgr mgr, int idx, Object[] args) {Xoh_img_bare_wtr rv = new Xoh_img_bare_wtr(); rv.pool_mgr = mgr; rv.pool_idx = idx; return rv;} +} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_bldr.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_bldr.java deleted file mode 100644 index b81304ecd..000000000 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_bldr.java +++ /dev/null @@ -1,52 +0,0 @@ -/* -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 . -*/ -package gplx.xowa.htmls.core.wkrs.imgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; -import gplx.core.brys.*; -import gplx.langs.htmls.*; import gplx.langs.htmls.parsers.*; -import gplx.xowa.htmls.core.wkrs.imgs.atrs.*; -import gplx.xowa.files.*; -public class Xoh_img_bldr { - public Xoh_img_wtr Wtr() {return wtr;} private final Xoh_img_wtr wtr = new Xoh_img_wtr(); - public Xof_fsdb_itm Fsdb_itm() {return fsdb_itm;} private Xof_fsdb_itm fsdb_itm; - public void Make_by_parse(Bry_bfr bfr, Xoh_page hpg, Xoh_hdoc_ctx hctx, byte[] src, Xoh_img_parser arg) { - Make( bfr, hpg, hctx, src, arg.Img_src().File_ttl_bry(), arg.Img_xoimg(), arg.Img_xoimg().Val_dat_exists() - , arg.Rel_nofollow_exists(), arg.Anch_href().Atr(), arg.Anch_cls().Atr(), arg.Anch_title() - , arg.Img_w(), arg.Img_h(), arg.Img_src().Atr(), arg.Img_cls().Atr(), arg.Img_alt()); - wtr.Bfr_arg__add(bfr); - } - public void Make(Bry_bfr bfr, Xoh_page hpg, Xoh_hdoc_ctx hctx, byte[] src, byte[] lnki_ttl, Xoh_img_xoimg_parser img_xoimg, boolean img_xoimg_exists - , boolean anch_rel_is_nofollow, Bfr_arg anch_href, Bfr_arg anch_cls, Bfr_arg anch_ttl - , int img_w, int img_h, Bfr_arg img_src, Bfr_arg img_cls, Bfr_arg img_alt) { - wtr.Clear(); - this.fsdb_itm = hpg.Img_mgr().Make_img(); - if (img_xoimg_exists) { - fsdb_itm.Init_at_lnki(Xof_exec_tid.Tid_wiki_page, hpg.Wiki().Domain_itm().Abrv_xo(), lnki_ttl, img_xoimg.Lnki_type(), img_xoimg.Lnki_upright(), img_xoimg.Lnki_w(), img_xoimg.Lnki_h(), img_xoimg.Lnki_time(), img_xoimg.Lnki_page(), Xof_patch_upright_tid_.Tid_all); - hctx.File__mgr().Check_cache(fsdb_itm); - wtr.Img_xoimg_(img_xoimg); - wtr.Img_src_empty_().Img_w_(0).Img_h_(0); - } - else if (img_w != -1) { - wtr.Img_w_(img_w).Img_h_(img_h).Img_src_(img_src); - } - if (anch_rel_is_nofollow) wtr.Anch_rel_nofollow_(); - wtr.Anch_href_(anch_href).Anch_cls_(anch_cls).Anch_title_(anch_ttl).Anch_xowa_title_(lnki_ttl); - if (!hctx.Mode_is_diff()) - wtr.Img_id_(Xoh_img_mgr.Bry__html_uid, fsdb_itm.Html_uid()); - wtr.Img_alt_(img_alt).Img_cls_(img_cls); - } -} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_data.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_data.java new file mode 100644 index 000000000..c2b191755 --- /dev/null +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_data.java @@ -0,0 +1,105 @@ +/* +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 . +*/ +package gplx.xowa.htmls.core.wkrs.imgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; +import gplx.core.primitives.*; import gplx.core.brys.*; import gplx.core.threads.poolables.*; +import gplx.langs.htmls.*; import gplx.langs.htmls.docs.*; import gplx.xowa.htmls.core.wkrs.imgs.atrs.*; import gplx.xowa.htmls.core.wkrs.lnkis.anchs.*; import gplx.xowa.htmls.core.wkrs.lnkis.htmls.*; +import gplx.xowa.htmls.core.hzips.*; import gplx.xowa.wikis.domains.*; import gplx.xowa.files.*; +public class Xoh_img_data implements Xoh_data_itm { + public int Tid() {return Xoh_hzip_dict_.Tid__img;} + public int Src_bgn() {return src_bgn;} private int src_bgn; + public int Src_end() {return src_end;} private int src_end; + public Xoh_anch_href_data Anch_href() {return anch_href;} private Xoh_anch_href_data anch_href = new Xoh_anch_href_data(); + public Xoh_anch_cls_data Anch_cls() {return anch_cls;} private Xoh_anch_cls_data anch_cls = new Xoh_anch_cls_data(); + public boolean Anch_rel_nofollow_exists() {return anch_rel_is_nofollow;} private boolean anch_rel_is_nofollow; + public int Anch_title_bgn() {return anch_title_bgn;} private int anch_title_bgn; + public int Anch_title_end() {return anch_title_end;} private int anch_title_end; + public boolean Anch_title_exists() {return anch_title_end != -1;} + public Bry_obj_ref Anch_page() {return anch_page;} private Bry_obj_ref anch_page = Bry_obj_ref.New_empty(); + public Xoh_img_src_data Img_src() {return img_src;} private final Xoh_img_src_data img_src = new Xoh_img_src_data(); + public Xoh_img_cls_data Img_cls() {return img_cls;} private final Xoh_img_cls_data img_cls = new Xoh_img_cls_data(); + public Xoh_img_xoimg_data Img_xoimg() {return img_xoimg;} private Xoh_img_xoimg_data img_xoimg = new Xoh_img_xoimg_data(); + public int Img_alt_bgn() {return img_alt_bgn;} private int img_alt_bgn; + public int Img_alt_end() {return img_alt_end;} private int img_alt_end; + public boolean Img_alt__diff__anch_title() {return img_alt__diff_anch_title;} private boolean img_alt__diff_anch_title; + public int Img_w() {return img_w;} private int img_w; + public int Img_h() {return img_h;} private int img_h; + public boolean Img_w__diff__file_w() {return img_w != img_src.File_w();} + public boolean Img_is_vid() {return img_is_vid;} private boolean img_is_vid; + public void Clear() { + this.img_alt__diff_anch_title = anch_rel_is_nofollow = false; + this.src_bgn = src_end = anch_title_bgn = anch_title_end = img_w = img_h = img_alt_bgn = img_alt_end = -1; + this.img_is_vid = false; + anch_href.Clear(); anch_cls.Clear(); + img_src.Clear(); img_cls.Clear(); img_xoimg.Clear(); + } + public boolean Init_by_parse(Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Gfh_tag_rdr tag_rdr, byte[] src, Gfh_tag anch_head, Gfh_tag unused) { + if (anch_head.Name_id() == Gfh_tag_.Id__div) { // video / audio + img_is_vid = true; + tag_rdr.Tag__move_fwd_head(); // next
        + anch_head = tag_rdr.Tag__move_fwd_head(); // next
        + } + Bry_err_wkr err_wkr = tag_rdr.Err_wkr(); + this.src_bgn = anch_head.Src_bgn(); // + this.src_end = anch_tail.Src_end(); + if (anch_href.Site_exists()) { + Xow_domain_itm itm = Xow_domain_itm_.parse(Bry_.Mid(src, anch_href.Site_bgn(), anch_href.Site_end())); + anch_rel_is_nofollow = itm.Domain_type_id() == Xow_domain_tid_.Int__other; + } + if (img_is_vid) { + tag_rdr.Tag__move_fwd_tail(Gfh_tag_.Id__div); + anch_head = tag_rdr.Tag__move_fwd_tail(Gfh_tag_.Id__div); + src_end = anch_head.Src_end(); + } + return true; + } + public void Init_by_decode(boolean anch_rel_is_nofollow, int anch_title_bgn, int anch_title_end, boolean img_is_vid, int img_w, int img_h, int img_alt_bgn, int img_alt_end) { + this.anch_rel_is_nofollow = anch_rel_is_nofollow; + this.anch_title_bgn = anch_title_bgn; this.anch_title_end = anch_title_end; + this.img_is_vid = img_is_vid; + this.img_w = img_w; this.img_h = img_h; + this.img_alt_bgn = img_alt_bgn; this.img_alt_end = img_alt_end; + } + public void Pool__rls () {pool_mgr.Rls_fast(pool_idx);} private Gfo_poolable_mgr pool_mgr; private int pool_idx; + public Gfo_poolable_itm Pool__make (Gfo_poolable_mgr mgr, int idx, Object[] args) {Xoh_img_data rv = new Xoh_img_data(); rv.pool_mgr = mgr; rv.pool_idx = idx; return rv;} + public static final byte[] + Bry__cls__anch__image = Bry_.new_a7("image") + , Bry__cls__img__thumbimage = Bry_.new_a7("thumbimage") + , Bry__atr__xowa_title = Bry_.new_a7("xowa_title") + ; +} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_hzip.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_hzip.java index 796e04e51..a3116724b 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_hzip.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_hzip.java @@ -17,42 +17,35 @@ along with this program. If not, see . */ package gplx.xowa.htmls.core.wkrs.imgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; import gplx.core.primitives.*; import gplx.core.brys.*; import gplx.core.threads.poolables.*; -import gplx.langs.htmls.*; import gplx.langs.htmls.parsers.*; import gplx.langs.htmls.encoders.*; +import gplx.langs.htmls.*; import gplx.langs.htmls.docs.*; import gplx.langs.htmls.encoders.*; import gplx.xowa.htmls.hrefs.*; import gplx.xowa.htmls.core.hzips.*; import gplx.xowa.htmls.core.wkrs.bfr_args.*; import gplx.xowa.htmls.core.wkrs.imgs.atrs.*; import gplx.xowa.htmls.core.wkrs.lnkis.*; import gplx.xowa.htmls.core.wkrs.lnkis.anchs.*; import gplx.xowa.wikis.nss.*; import gplx.xowa.wikis.ttls.*; import gplx.xowa.files.*; import gplx.xowa.files.repos.*; public class Xoh_img_hzip implements Xoh_hzip_wkr, Gfo_poolable_itm { + private final Bry_bfr tmp_bfr = Bry_bfr.new_(32); + private final Xoh_img_xoimg_hzip xoimg = new Xoh_img_xoimg_hzip(); + public int Tid() {return Xoh_hzip_dict_.Tid__img;} public String Key() {return Xoh_hzip_dict_.Key__img;} public byte[] Hook() {return hook;} private byte[] hook; - private final Xoh_img_xoimg_parser xoimg_parser = new Xoh_img_xoimg_parser(); - private final Bry_bfr tmp_bfr = Bry_bfr.new_(32); - public Xoh_img_bldr Bldr() {return bldr;} private Xoh_img_bldr bldr = new Xoh_img_bldr(); - public Bfr_arg__href Anch_href_arg() {return anch_href_arg;} private final Bfr_arg__href anch_href_arg = new Bfr_arg__href(); - public Xoh_img_xoimg_hzip Xoimg() {return xoimg;} private final Xoh_img_xoimg_hzip xoimg = new Xoh_img_xoimg_hzip(); - private final Bry_obj_ref - anch_cls_mid = Bry_obj_ref.New_empty() - , anch_title_mid = Bry_obj_ref.New_empty() - , anch_href_mid = Bry_obj_ref.New_empty() - , img_alt_mid = Bry_obj_ref.New_empty() - , img_src_mid = Bry_obj_ref.New_empty() - , img_cls_mid = Bry_obj_ref.New_empty() - ; - public Gfo_poolable_itm Encode(Xoh_hzip_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, boolean wkr_is_root, byte[] src, Object data_obj) { - Xoh_img_parser data = (Xoh_img_parser)data_obj; - Xoh_anch_href_itm anch_href = data.Anch_href(); + public Xoh_img_wtr Wtr() {return wtr;} private Xoh_img_wtr wtr = new Xoh_img_wtr(); + public byte[] Anch_href_bry() {return anch_href_bry;} private byte[] anch_href_bry; + public Gfo_poolable_itm Encode1(Xoh_hzip_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, boolean wkr_is_root, byte[] src, Object data_obj) { + Xoh_img_data data = (Xoh_img_data)data_obj; + Xoh_anch_href_data anch_href = data.Anch_href(); Bry_obj_ref anch_page = data.Anch_page(); byte anch_href_tid = anch_href.Tid(); boolean anch__ns_is_custom = anch_href.Ttl_ns_custom() != null; - boolean anch__ns_id_needs_saving = Xoh_anch_href_itm.Ns_exists(anch_href.Tid()) && anch_href.Ttl_ns_id() != Xow_ns_.Tid__file; - Html_atr anch_title = data.Anch_title(); - Xoh_img_xoimg_parser img_xoimg = data.Img_xoimg(); - Xoh_img_cls_parser img_cls = data.Img_cls(); - Xoh_img_src_parser img_src = data.Img_src(); + boolean anch__ns_id_needs_saving = Xoh_anch_href_data.Ns_exists(anch_href.Tid()) && anch_href.Ttl_ns_id() != Xow_ns_.Tid__file; + boolean anch_title_exists = data.Anch_title_exists(); + Xoh_img_xoimg_data img_xoimg = data.Img_xoimg(); + Xoh_img_cls_data img_cls = data.Img_cls(); + Xoh_img_src_data img_src = data.Img_src(); boolean img__alt_diff_from_anch_title = data.Img_alt__diff__anch_title(); boolean file__src_exists = !img_xoimg.Val_dat_exists(); boolean anch_href_diff_file = !Bry_.Match(anch_page.Val(), anch_page.Val_bgn(), anch_page.Val_end(), anch_href.Ttl_page_db()); + flag_bldr.Set(Flag__img__is_vid , data.Img_is_vid()); flag_bldr.Set(Flag__file__w_diff_from_html , file__src_exists && data.Img_w__diff__file_w()); flag_bldr.Set(Flag__file__time_exists , file__src_exists && img_src.File_time_exists()); flag_bldr.Set(Flag__file__page_exists , file__src_exists && img_src.File_page_exists()); @@ -65,7 +58,7 @@ public class Xoh_img_hzip implements Xoh_hzip_wkr, Gfo_poolable_itm { flag_bldr.Set(Flag__anch__ns_id_needs_saving , anch__ns_id_needs_saving); flag_bldr.Set(Flag__img__alt_diff_from_anch_title , img__alt_diff_from_anch_title); flag_bldr.Set(Flag__anch__href_diff_file , anch_href_diff_file); - flag_bldr.Set(Flag__anch__title_missing , anch_title.Val_dat_missing()); + flag_bldr.Set(Flag__anch__title_missing , !anch_title_exists); flag_bldr.Set(Flag__img__cls_tid , img_cls.Cls_tid()); flag_bldr.Set(Flag__anch__href_tid , anch_href.Tid()); // Tfds.Dbg(flag_bldr.Encode(), Array_.To_str(flag_bldr.Val_ary())); @@ -73,29 +66,28 @@ public class Xoh_img_hzip implements Xoh_hzip_wkr, Gfo_poolable_itm { if (wkr_is_root) bfr.Add(hook); Xoh_hzip_int_.Encode(2, bfr, flag_bldr.Encode()); switch (anch_href_tid) { - case Xoh_anch_href_itm.Tid__inet: - anch_href_mid.Mid_(src, anch_href.Rng_bgn(), anch_href.Rng_end()); + case Xoh_anch_href_data.Tid__inet: + bfr.Add_mid(src, anch_href.Rng_bgn(), anch_href.Rng_end()); break; - case Xoh_anch_href_itm.Tid__site: - anch_href_mid.Val_(tmp_bfr.Add_mid(src, anch_href.Site_bgn(), anch_href.Site_end()).Add_byte(Byte_ascii.Pipe).Add(anch_href.Ttl_page_db()).To_bry_and_clear()); + case Xoh_anch_href_data.Tid__site: + bfr.Add_mid(src, anch_href.Site_bgn(), anch_href.Site_end()).Add_byte(Byte_ascii.Pipe).Add(anch_href.Ttl_page_db()); break; - case Xoh_anch_href_itm.Tid__wiki: - case Xoh_anch_href_itm.Tid__anch: - anch_href_mid.Val_(anch_href.Ttl_page_db()); + case Xoh_anch_href_data.Tid__wiki: + case Xoh_anch_href_data.Tid__anch: + bfr.Add(anch_href.Ttl_page_db()); break; } - bfr.Add_bry_ref_obj(anch_href_mid); bfr.Add_byte(Xoh_hzip_dict_.Escape); if (anch_href_diff_file) { data.Anch_page().Bfr_arg__add(bfr); bfr.Add_byte(Xoh_hzip_dict_.Escape); } switch (anch_href_tid) { - case Xoh_anch_href_itm.Tid__anch: - case Xoh_anch_href_itm.Tid__inet: + case Xoh_anch_href_data.Tid__anch: + case Xoh_anch_href_data.Tid__inet: break; - case Xoh_anch_href_itm.Tid__wiki: - case Xoh_anch_href_itm.Tid__site: + case Xoh_anch_href_data.Tid__wiki: + case Xoh_anch_href_data.Tid__site: if (anch__ns_id_needs_saving) Xoh_lnki_dict_.Ns_encode(bfr, anch_href.Ttl_ns_id()); break; @@ -110,15 +102,15 @@ public class Xoh_img_hzip implements Xoh_hzip_wkr, Gfo_poolable_itm { } else xoimg.Encode(bfr, hctx.Hzip__stat(), src, img_xoimg); - if (anch_title.Val_dat_exists()) bfr.Add_mid(src, anch_title.Val_bgn(), anch_title.Val_end()).Add_byte(Xoh_hzip_dict_.Escape); - if (img__alt_diff_from_anch_title) bfr.Add_mid(src, data.Img_alt().Val_bgn(), data.Img_alt().Val_end()).Add_byte(Xoh_hzip_dict_.Escape); + if (anch_title_exists) bfr.Add_mid(src, data.Anch_title_bgn(), data.Anch_title_end()).Add_byte(Xoh_hzip_dict_.Escape); + if (img__alt_diff_from_anch_title) bfr.Add_mid(src, data.Img_alt_bgn(), data.Img_alt_end()).Add_byte(Xoh_hzip_dict_.Escape); if (img_cls.Other_exists()) bfr.Add_mid(src, img_cls.Other_bgn(), img_cls.Other_end()).Add_byte(Xoh_hzip_dict_.Escape); return this; } - public int Decode(Bry_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, boolean wkr_is_root, Bry_rdr rdr, byte[] src, int src_bgn, int src_end) { - // decode rdr - int flag = rdr.Read_int_by_base85(2); - flag_bldr.Decode(flag); + public void Decode1(Bry_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, Bry_rdr rdr, byte[] src, int src_bgn, int src_end, Xoh_data_itm data_itm) { + Xoh_img_data data = (Xoh_img_data)data_itm; data.Clear(); + + int flag = rdr.Read_hzip_int(2); flag_bldr.Decode(flag); boolean file__is_orig = flag_bldr.Get_as_bool(Flag__file__is_orig); boolean file__repo_is_local = flag_bldr.Get_as_bool(Flag__file__repo_is_local); boolean file__src_exists = flag_bldr.Get_as_bool(Flag__file__src_exists); @@ -129,16 +121,17 @@ public class Xoh_img_hzip implements Xoh_hzip_wkr, Gfo_poolable_itm { boolean img__alt_diff_from_anch_title = flag_bldr.Get_as_bool(Flag__img__alt_diff_from_anch_title); boolean anch_href_diff_file = flag_bldr.Get_as_bool(Flag__anch__href_diff_file); boolean anch__title_missing = flag_bldr.Get_as_bool(Flag__anch__title_missing); + boolean img_is_vid = flag_bldr.Get_as_bool(Flag__img__is_vid); int img_cls = flag_bldr.Get_as_int(Flag__img__cls_tid); int anch__href_tid = flag_bldr.Get_as_int(Flag__anch__href_tid); byte[] page_db = rdr.Read_bry_to(); byte[] site_bry = null; switch (anch__href_tid) { - case Xoh_anch_href_itm.Tid__anch: - case Xoh_anch_href_itm.Tid__inet: - case Xoh_anch_href_itm.Tid__wiki: + case Xoh_anch_href_data.Tid__anch: + case Xoh_anch_href_data.Tid__inet: + case Xoh_anch_href_data.Tid__wiki: break; - case Xoh_anch_href_itm.Tid__site: + case Xoh_anch_href_data.Tid__site: int pipe_pos = Bry_find_.Find_fwd(page_db, Byte_ascii.Pipe); site_bry = Bry_.Mid(page_db, 0, pipe_pos); page_db = Bry_.Mid(page_db, pipe_pos + 1); @@ -155,14 +148,13 @@ public class Xoh_img_hzip implements Xoh_hzip_wkr, Gfo_poolable_itm { ns_custom_end = rdr.Find_fwd_lr(); } int img_w = -1, img_h = -1, file_time = -1, file_page = -1; - xoimg_parser.Clear(); + if (file__src_exists) { - img_w = rdr.Read_int_by_base85(2) - Xoh_hzip_int_.Neg_1_adj; - img_h = rdr.Read_int_by_base85(2) - Xoh_hzip_int_.Neg_1_adj; - } - else { - xoimg.Decode(bfr, hctx, hpg, rdr, src, xoimg_parser); + img_w = rdr.Read_hzip_int(2) - Xoh_hzip_int_.Neg_1_adj; + img_h = rdr.Read_hzip_int(2) - Xoh_hzip_int_.Neg_1_adj; } + else + xoimg.Decode(bfr, hctx, hpg, rdr, src, data.Img_xoimg()); int anch_title_bgn = -1, anch_title_end = -1; if (!anch__title_missing) { anch_title_bgn = rdr.Pos(); @@ -177,23 +169,30 @@ public class Xoh_img_hzip implements Xoh_hzip_wkr, Gfo_poolable_itm { img_alt_bgn = rdr.Pos(); img_alt_end = rdr.Find_fwd_lr(); } - byte[] img_cls_other = Bry_.Empty; - if (img__cls_other_exists) - img_cls_other = Bry_.Mid(src, rdr.Pos(), rdr.Find_fwd_lr()); - int rv = rdr.Move_to(rdr.Pos()); + int img_cls_other_bgn = -1; int img_cls_other_end = -1; + if (img__cls_other_exists) { + img_cls_other_bgn = rdr.Pos(); + img_cls_other_end = rdr.Find_fwd_lr(); + } // transform values boolean anch_rel_is_nofollow = false; - if (anch__href_tid == Xoh_anch_href_itm.Tid__inet) { + if (anch__href_tid == Xoh_anch_href_data.Tid__inet) {// external links should get rel=nofollow Gfo_url_encoder_.Href.Encode(tmp_bfr, page_db); - anch_rel_is_nofollow = true; + if (Bry_.Len_gt_0(page_db)) // NOTE: page_db == "" for Media links; EX:[[File:A.png|link=file:///C:/A.ogg]] -> + anch_rel_is_nofollow = true; } else { - if (anch__href_tid == Xoh_anch_href_itm.Tid__site) + if (anch__href_tid == Xoh_anch_href_data.Tid__site) tmp_bfr.Add(Xoh_href_.Bry__site).Add(site_bry); if (anch__ns_id_needs_saving) { - Xoa_ttl anch_href_ttl = hctx.Wiki__ttl_parser().Ttl_parse(anch_href_ns, page_db); - tmp_bfr.Add(Xoh_href_.Bry__wiki).Add(anch_href_ttl.Full_url()); + byte[] page_ttl_bry = page_db; + if ( anch__href_tid == Xoh_anch_href_data.Tid__wiki // if wiki, parse ttl + || anch_href_ns != Xow_ns_.Tid__main) { // or if site and !main_ns; handles /site/en.wiktionary.org/wiki/Special:Search but not /site/creativecommons.org/wiki/by/2.5; DATE:2015-12-28 + Xoa_ttl anch_href_ttl = hctx.Wiki__ttl_parser().Ttl_parse(anch_href_ns, page_db); + page_ttl_bry = anch_href_ttl.Full_url(); + } + tmp_bfr.Add(Xoh_href_.Bry__wiki).Add(page_ttl_bry); } else { byte[] ns_bry = anch__ns_is_custom ? Bry_.Mid(src, ns_custom_bgn, ns_custom_end) : Xow_ns_.Bry__file; @@ -201,43 +200,39 @@ public class Xoh_img_hzip implements Xoh_hzip_wkr, Gfo_poolable_itm { Gfo_url_encoder_.Href.Encode(tmp_bfr, page_db); } } - anch_href_arg.Set_by_raw(tmp_bfr.To_bry_and_clear()); + this.anch_href_bry = tmp_bfr.To_bry_and_clear(); + // NOTE: src must go underneath ttl Xof_url_bldr url_bldr = hctx.File__url_bldr(); url_bldr.Init_by_root(file__repo_is_local ? hctx.Fsys__file__wiki() : hctx.Fsys__file__comm(), Byte_ascii.Slash, false, false, Md5_depth); url_bldr.Init_by_itm(file__is_orig ? Xof_repo_itm_.Mode_orig : Xof_repo_itm_.Mode_thumb, file_db, Xof_file_wkr_.Md5(file_db), Xof_ext_.new_by_ttl_(file_db), img_w, file_time, file_page); - byte[] img_src = url_bldr.Xto_bry(); - - anch_cls_mid.Val_(Xoh_anch_cls_.To_val(anch__cls_tid)); - if (!anch__title_missing) anch_title_mid.Mid_(src, anch_title_bgn, anch_title_end); else {anch_title_mid.Val_(null);} // if (anch_title_bgn == anch_title_end) anch_title_mid.Val_(null); - img_alt_mid.Mid_(src, img_alt_bgn, img_alt_end); if (img_alt_mid.Val_is_empty()) img_alt_mid.Val_(Bry_.Empty); - img_src_mid.Val_(img_src); - img_cls_mid.Val_(Xoh_img_cls_.To_val_or_null(img_cls, img_cls_other)); - - bldr.Make(bfr, hpg, hctx, src, file_db, xoimg_parser, !file__src_exists, anch_rel_is_nofollow, anch_href_arg, anch_cls_mid, anch_title_mid, img_w, img_h, img_src_mid, img_cls_mid, img_alt_mid); - if (wkr_is_root) bldr.Wtr().Bfr_arg__add(bfr); - - return rv; + + data.Init_by_decode(anch_rel_is_nofollow, anch_title_bgn, anch_title_end, img_is_vid, img_w, img_h, img_alt_bgn, img_alt_end); + data.Anch_href().Init_by_decode(anch_href_bry); + data.Anch_cls().Init_by_decode(anch__cls_tid); + data.Img_cls().Init_by_decode(src, img_cls, img_cls_other_bgn, img_cls_other_end); + data.Img_src().Init_by_decode(file_db, url_bldr.Xto_bry()); } public void Pool__rls () {pool_mgr.Rls_fast(pool_idx);} private Gfo_poolable_mgr pool_mgr; private int pool_idx; public Gfo_poolable_itm Pool__make (Gfo_poolable_mgr mgr, int idx, Object[] args) {Xoh_img_hzip rv = new Xoh_img_hzip(); rv.pool_mgr = mgr; rv.pool_idx = idx; rv.hook = (byte[])args[0]; return rv;} public static int Md5_depth = 2; - private final Int_flag_bldr flag_bldr = new Int_flag_bldr().Pow_ary_bld_( 1, 1, 1, 1 , 1, 1, 1, 1 , 2, 1, 1, 1 , 1, 2, 2); + private final Int_flag_bldr flag_bldr = new Int_flag_bldr().Pow_ary_bld_( 1, 1, 1, 1 , 1 , 1, 1, 1 , 1 , 2, 1, 1 , 1, 1, 2, 2); private static final int // SERIALIZED - Flag__file__w_diff_from_html = 0 - , Flag__file__time_exists = 1 - , Flag__file__page_exists = 2 - , Flag__file__is_orig = 3 - , Flag__file__repo_is_local = 4 - , Flag__file__src_exists = 5 - , Flag__img__cls_other_exists = 6 - , Flag__anch__ns_is_custom = 7 - , Flag__anch__cls_tid = 8 // none, image - , Flag__anch__ns_id_needs_saving = 9 - , Flag__img__alt_diff_from_anch_title = 10 - , Flag__anch__href_diff_file = 11 - , Flag__anch__title_missing = 12 - , Flag__img__cls_tid = 13 // none, thumbimage, thumbborder - , Flag__anch__href_tid = 14 // wiki, site, anch, inet + Flag__img__is_vid = 0 + , Flag__file__w_diff_from_html = 1 + , Flag__file__time_exists = 2 + , Flag__file__page_exists = 3 + , Flag__file__is_orig = 4 + , Flag__file__repo_is_local = 5 + , Flag__file__src_exists = 6 + , Flag__img__cls_other_exists = 7 + , Flag__anch__ns_is_custom = 8 + , Flag__anch__cls_tid = 9 // none, image + , Flag__anch__ns_id_needs_saving = 10 + , Flag__img__alt_diff_from_anch_title = 11 + , Flag__anch__href_diff_file = 12 + , Flag__anch__title_missing = 13 + , Flag__img__cls_tid = 14 // none, thumbimage, thumbborder + , Flag__anch__href_tid = 15 // wiki, site, anch, inet ; } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_hzip__dump__tst.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_hzip__dump__tst.java index 86489781c..ceee0d350 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_hzip__dump__tst.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_hzip__dump__tst.java @@ -18,65 +18,97 @@ along with this program. If not, see . package gplx.xowa.htmls.core.wkrs.imgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; import org.junit.*; import gplx.xowa.htmls.core.hzips.*; public class Xoh_img_hzip__dump__tst { - private final Xoh_hzip_fxt fxt = new Xoh_hzip_fxt(); + private final Xoh_hzip_fxt fxt = new Xoh_hzip_fxt().Init_mode_diff_y_(); @Before public void Clear() {fxt.Clear();} @Test public void Basic() { // [[File:A.png|border|class=other|220px|abc]] fxt.Test__bicode ( "~%!!A.png~)#Sabc~" - , "abc" + , "abc" ); } @Test public void Anch() { // [[File:A.png#b|abc]] fxt.Test__bicode ( "~%\"abc" + , "abc" ); } @Test public void Link__cs() { // [[File:A.png|link=File:a.ogg|abc]] fxt.Test__bicode ( "~%!Aa.ogg~A.png~)#Sabc~" - , "abc" + , "abc" ); } @Test public void Href__encoding() { // [[File:Aéb.png|abc]] fxt.Test__bicode ( "~%!qAéb.png~)#Sabc~" - , "abc" + , "abc" ); } @Test public void Href__encoding__link() { // [[File:Aéb.png|abc|link=Aéb]] fxt.Test__bicode ( "~%#gAéb~Aéb.png~#)#Sabc~" - , "abc" + , "abc" ); } @Test public void Href__apos() { // [[File:A'b.png|border|link=A'b_link|A'b_capt]] - String html = "\"A'b_capt\""; + String html = "\"A'b_capt\""; fxt.Test__bicode_raw("~%#oA'b_link~A'b.png~#)#SA'b_capt~", html, html); } @Test public void Link__wm__n() { // [[File:A.png|link=http://a.org|abc]] fxt.Test__bicode ( "~%!Dhttp://a.org~A.png~)#Sabc~" - , "abc" + , "abc" ); } @Test public void Link__wm__y() { // [[File:A.png|link=http://en.wikitionary.org/wiki/Special:Search/A|abc]] fxt.Test__bicode ( "~%\"men.wiktionary.org|Search/A~A.png~\")#Sabc~" - , "abc" + , "abc" ); } - // lhs='B + @Test public void Link__wm__n_2() { // [[File:A.png|link=creativecommons:by/2.5]] + fxt.Test__bicode + ( "~%#(creativecommons.org|by/2.5/~CC-BY-icon-80x15.png~#)!q" + , "" + ); + } + @Test public void Link__media() { // [[File:A.png|link=file:///C:/A.ogg]] + fxt.Test__bicode + ( "~%!D~A.ogg~)!,B~" + , "B" + ); + } +// @Test public void Link__encoding() { // [[File:A.svg|24px|text-top|link=wikt:𬖾|𬖾]]; PAGE:en.w:Pho +// fxt.Test__bicode +// ( "~%#Xen.wiktionary.org|𬖾~A.png~#)!,abc~B~" +// , "B" +// ); +// } @Test public void Href__image() { // [[Image:A.png|abc]] fxt.Test__bicode ( "~%-%A.png~Image~)#Sabc~" - , "abc" + , "abc" ); } @Test public void Missing() { // PURPOSE: bad dump shouldn't write corrupt data fxt.Test__bicode ( "%|\"\\QA.png!!!!A" - , "A" + , "A" ); } + @Test public void Manual_img_cls() { // PURPOSE: handle manual class; EX: [[File:A.png|class=noviewer]] en.w:ASCII; DATE:2015-12-21 + fxt.Test__bicode + ( "~%95A.png~)#Sabc~cls1~" + , "abc" + ); + } + @Test public void Video() { // [[File:A.ogv]] + fxt.Test__bicode + ( "%|E9eA.ogv~!A.ogv~~", String_.Concat_lines_nl_skip_last + ( "
        " + , "
        " + , "
        Play sound
        " + , "
        " + )); + } } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_hzip__view__tst.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_hzip__view__tst.java index 299ee8f30..d54628789 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_hzip__view__tst.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_hzip__view__tst.java @@ -32,5 +32,5 @@ public class Xoh_img_hzip__view__tst { , "A.png" ); } - // link_site: [[File:A.png|link=//en.wiktionary.org/B]] -> [[File:Wiktionary-logo-en.svg|25x25px|link=//en.wiktionary.org/wiki/Special:Search/Earth|Search Wiktionary]] -> Search Wiktionary + // link_site: [[File:A.png|link=//en.wiktionary.org/B]] -> [[File:Wiktionary-logo-en.svg|25x25px|link=//en.wiktionary.org/wiki/Special:Search/Earth|Search Wiktionary]] -> Search Wiktionary } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_make__dump__tst.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_make__dump__tst.java index 957c303bf..a5266760c 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_make__dump__tst.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_make__dump__tst.java @@ -29,6 +29,15 @@ public class Xoh_img_make__dump__tst { .Imgs__add("en.w", "A.png", Xop_lnki_type.Id_null, 0.5, 220, 110, -1, -1) ); } + @Test public void Utf8() { + String + orig = "abc" + , expd = "abc" + ; + fxt.Test__make(orig, fxt.Page_chkr().Body_(expd) + .Imgs__add("en.w", "A.png", Xop_lnki_type.Id_null, 0.5, 220, 110, -1, -1) + ); + } // @Test public void Html_exists__y__cache() { // String // orig = "abc" diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_parser.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_parser.java deleted file mode 100644 index 16b8e3fa0..000000000 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_parser.java +++ /dev/null @@ -1,85 +0,0 @@ -/* -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 . -*/ -package gplx.xowa.htmls.core.wkrs.imgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; -import gplx.core.primitives.*; import gplx.core.brys.*; -import gplx.langs.htmls.*; import gplx.langs.htmls.parsers.*; import gplx.xowa.htmls.core.wkrs.imgs.atrs.*; import gplx.xowa.htmls.core.wkrs.lnkis.anchs.*; import gplx.xowa.htmls.core.wkrs.lnkis.htmls.*; -import gplx.xowa.wikis.domains.*; -import gplx.xowa.files.*; -public class Xoh_img_parser { - private byte[] src; - public int Src_bgn() {return src_bgn;} private int src_bgn; - public int Src_end() {return src_end;} private int src_end; - public Xoh_anch_href_itm Anch_href() {return anch_href;} private Xoh_anch_href_itm anch_href = new Xoh_anch_href_itm(); - public Xoh_anch_cls_parser Anch_cls() {return anch_cls;} private Xoh_anch_cls_parser anch_cls = new Xoh_anch_cls_parser(); - public Html_atr Anch_title() {return anch_title;} private Html_atr anch_title; - public Bry_obj_ref Anch_page() {return anch_page;} private Bry_obj_ref anch_page = Bry_obj_ref.New_empty(); - public Xoh_img_src_parser Img_src() {return img_src;} private final Xoh_img_src_parser img_src = new Xoh_img_src_parser(); - public Xoh_img_cls_parser Img_cls() {return img_cls;} private final Xoh_img_cls_parser img_cls = new Xoh_img_cls_parser(); - public Xoh_img_xoimg_parser Img_xoimg() {return img_xoimg_parser;} private Xoh_img_xoimg_parser img_xoimg_parser = new Xoh_img_xoimg_parser(); - public Html_atr Img_alt() {return img_alt;} private Html_atr img_alt; - public boolean Img_alt__diff__anch_title() {return !Bry_.Match(src, img_alt.Val_bgn(), img_alt.Val_end(), src, anch_title.Val_bgn(), anch_title.Val_end());} - public int Img_w() {return img_w;} private int img_w; - public int Img_h() {return img_h;} private int img_h; - public boolean Img_w__diff__file_w() {return img_w != img_src.File_w();} - public boolean Rel_nofollow_exists() { - if (anch_href.Site_exists()) { - if (rel_nofollow_exists == Bool_.__byte) { - Xow_domain_itm itm = Xow_domain_itm_.parse(Bry_.Mid(src, anch_href.Site_bgn(), anch_href.Site_end())); - rel_nofollow_exists = itm.Domain_type_id() == Xow_domain_tid_.Int__other ? Bool_.Y_byte : Bool_.N_byte; - } - return rel_nofollow_exists == Bool_.Y_byte; - } - else - return false; - } private byte rel_nofollow_exists; - private void Clear() { - this.rel_nofollow_exists = Bool_.__byte; - this.src_bgn = src_end = img_w = img_h = -1; - this.anch_title = this.img_alt = Html_atr.Noop; - } - public boolean Parse(Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, byte[] src, Html_tag_rdr tag_rdr, Html_tag anch_head) { - this.Clear(); - this.src = src; Bry_err_wkr err_wkr = tag_rdr.Err_wkr(); - this.src_bgn = anch_head.Src_bgn(); // - this.src_end = anch_tail.Src_end(); - return true; - } - public static final byte[] - Bry__cls__anch__image = Bry_.new_a7("image") - , Bry__cls__img__thumbimage = Bry_.new_a7("thumbimage") - , Bry__atr__xowa_title = Bry_.new_a7("xowa_title") - ; -} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_wtr.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_wtr.java index d0bbc4f85..898320d53 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_wtr.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/Xoh_img_wtr.java @@ -16,57 +16,102 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.htmls.core.wkrs.imgs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; -import gplx.core.brys.*; import gplx.core.brys.args.*; import gplx.core.brys.fmtrs.*; -import gplx.langs.htmls.*; import gplx.langs.htmls.parsers.*; -import gplx.xowa.htmls.core.wkrs.bfr_args.*; import gplx.xowa.htmls.core.wkrs.imgs.atrs.*; -public class Xoh_img_wtr extends gplx.core.brys.Bfr_arg_base { - private final Bfr_arg[] arg_ary; - private final Bfr_arg__indent indent = new Bfr_arg__indent(); - private final Bfr_arg__html_atr - anch_href = new Bfr_arg__html_atr(Html_atr_.Bry__href) - , anch_rel = new Bfr_arg__html_atr(Html_atr_.Bry__rel) - , anch_cls = new Bfr_arg__html_atr(Html_atr_.Bry__class) - , anch_title = new Bfr_arg__html_atr(Html_atr_.Bry__title) - , anch_xowa_title = new Bfr_arg__html_atr(Xoh_img_parser.Bry__atr__xowa_title) - , img_id = new Bfr_arg__html_atr(Html_atr_.Bry__id) - , img_xoimg = new Bfr_arg__html_atr(Xoh_img_xoimg_parser.Bry__name) - , img_alt = new Bfr_arg__html_atr(Html_atr_.Bry__alt) - , img_src = new Bfr_arg__html_atr(Html_atr_.Bry__src) - , img_w = new Bfr_arg__html_atr(Html_atr_.Bry__width) - , img_h = new Bfr_arg__html_atr(Html_atr_.Bry__height) - , img_cls = new Bfr_arg__html_atr(Html_atr_.Bry__class) - ; - private final Bfr_arg__id img_id_val = new Bfr_arg__id(); +import gplx.core.brys.*; import gplx.core.primitives.*; import gplx.core.brys.args.*; import gplx.core.brys.fmtrs.*; import gplx.core.threads.poolables.*; +import gplx.langs.htmls.*; import gplx.langs.htmls.docs.*; import gplx.langs.htmls.encoders.*; +import gplx.xowa.htmls.core.hzips.*; import gplx.xowa.htmls.core.wkrs.bfr_args.*; import gplx.xowa.htmls.core.wkrs.imgs.atrs.*; +import gplx.xowa.files.*; +public class Xoh_img_wtr implements Bfr_arg, Xoh_wtr_itm { + private final Bfr_arg_clearable[] arg_ary; + private final Bfr_arg__hatr_arg img_xoimg = new Bfr_arg__hatr_arg(Xoh_img_xoimg_data.Bry__name); + private final Bfr_arg__hatr_id img_id = Bfr_arg__hatr_id.New(Xoh_img_mgr.Bry__html_uid), vid_play_id = Bfr_arg__hatr_id.New("xowa_file_play_"); + private final Bfr_arg__hatr_int img_w = new Bfr_arg__hatr_int(Gfh_atr_.Bry__width), img_h = new Bfr_arg__hatr_int(Gfh_atr_.Bry__height); + private final Bfr_arg__hatr_bry + anch_href = new Bfr_arg__hatr_bry(Gfh_atr_.Bry__href) + , anch_rel = new Bfr_arg__hatr_bry(Gfh_atr_.Bry__rel) + , anch_xowa_title = new Bfr_arg__hatr_bry(Xoh_img_data.Bry__atr__xowa_title) + , anch_cls = new Bfr_arg__hatr_bry(Gfh_atr_.Bry__class) + , anch_title = new Bfr_arg__hatr_bry(Gfh_atr_.Bry__title) + , img_alt = new Bfr_arg__hatr_bry(Gfh_atr_.Bry__alt) + , img_src = new Bfr_arg__hatr_bry(Gfh_atr_.Bry__src) + , img_cls = new Bfr_arg__hatr_bry(Gfh_atr_.Bry__class); + private boolean img_is_vid; + private byte[] xowa_root_dir; public Xoh_img_wtr() { - arg_ary = new Bfr_arg[] - { indent, anch_href, anch_rel, anch_cls, anch_title, anch_xowa_title + arg_ary = new Bfr_arg_clearable[] + { anch_href, anch_rel, anch_cls, anch_title, anch_xowa_title , img_id, img_xoimg, img_src, img_w, img_h, img_cls, img_alt }; } - public Bfr_arg__html_atr Img_alt() {return img_alt;} - public Xoh_img_wtr Indent_(int v) {indent.Set(v); return this;} - public Xoh_img_wtr Anch_href_(Bfr_arg v) {anch_href.Set_by_arg(v); return this;} - public Xoh_img_wtr Anch_rel_nofollow_() {anch_rel.Set_by_bry(gplx.xowa.htmls.core.wkrs.lnkes.Xoh_lnke_dict_.Html__rel__nofollow); return this;} - public Xoh_img_wtr Anch_cls_(Bfr_arg v) {anch_cls.Set_by_arg(v); return this;} - public Xoh_img_wtr Anch_title_(Bfr_arg v) {anch_title.Set_by_arg(v); return this;} - public Xoh_img_wtr Anch_xowa_title_(byte[] v) {anch_xowa_title.Set_by_bry(v); return this;} - public Xoh_img_wtr Img_id_(byte[] prefix, int uid) {img_id.Set_by_arg(img_id_val.Set(prefix, uid)); return this;} - public Xoh_img_wtr Img_w_(int v) {img_w.Set_by_int(v); return this;} - public Xoh_img_wtr Img_h_(int v) {img_h.Set_by_int(v); return this;} - public Xoh_img_wtr Img_xoimg_(Bfr_arg v) {img_xoimg.Set_by_arg(v); return this;} - public Xoh_img_wtr Img_cls_(Bfr_arg v) {img_cls.Set_by_arg(v); return this;} - public Xoh_img_wtr Img_src_(Bfr_arg v) {img_src.Set_by_arg(v); return this;} - public Xoh_img_wtr Img_src_empty_() {img_src.Set_by_bry(Bry_.Empty); return this;} - public Xoh_img_wtr Img_alt_(Bfr_arg v) {img_alt.Set_by_arg(v); return this;} + public Xof_fsdb_itm Fsdb_itm() {return fsdb_itm;} private Xof_fsdb_itm fsdb_itm; + public Xoh_img_wtr Anch_cls_(byte[] v) {anch_cls.Set_by_bry(v); return this;} + public Xoh_img_wtr Img_id_(int uid) {img_id.Set(uid); return this;} public Xoh_img_wtr Clear() { - for (Bfr_arg arg : arg_ary) + for (Bfr_arg_clearable arg : arg_ary) arg.Bfr_arg__clear(); + vid_play_id.Bfr_arg__clear(); + img_is_vid = false; return this; } - @Override public void Bfr_arg__add(Bry_bfr bfr) { - fmtr.Bld_bfr_many(bfr, (Object[])arg_ary); + public void Init_by_parse(Bry_bfr bfr, Xoh_page hpg, Xoh_hdoc_ctx hctx, byte[] src, Xoh_img_data data) { + Init_by_decode(hpg, hctx, src, data); + this.Bfr_arg__add(bfr); } - private static final Bry_fmtr fmtr = Bry_fmtr.new_ - ( "~{indent}" - , "indent", "anch_href", "anch_rel", "anch_cls", "anch_title", "anch_xowa_title", "img_id", "img_xoimg", "img_src", "img_w", "img_h", "img_cls", "img_alt"); + public boolean Init_by_decode(Xoh_page hpg, Xoh_hdoc_ctx hctx, byte[] src, Xoh_data_itm data_itm) { + Xoh_img_data data = (Xoh_img_data)data_itm; + this.Clear(); + this.img_is_vid = data.Img_is_vid(); + this.fsdb_itm = hpg.Img_mgr().Make_img(); + byte[] file_ttl_bry = data.Img_src().File_ttl_bry(); + byte[] lnki_ttl = Xoa_ttl.Replace_spaces(Gfo_url_encoder_.Href_quotes.Decode(file_ttl_bry)); // NOTE: must decode for fsdb.lnki_ttl as well as xowa_title; EX: A%C3%A9b -> A�b + if (data.Img_xoimg().Val_dat_exists()) { + Xoh_img_xoimg_data img_xoimg = data.Img_xoimg(); + fsdb_itm.Init_at_lnki(Xof_exec_tid.Tid_wiki_page, hpg.Wiki().Domain_itm().Abrv_xo(), lnki_ttl, gplx.xowa.parsers.lnkis.Xop_lnki_type.To_flag(img_xoimg.Lnki_type()), img_xoimg.Lnki_upright(), img_xoimg.Lnki_w(), img_xoimg.Lnki_h(), img_xoimg.Lnki_time(), img_xoimg.Lnki_page(), Xof_patch_upright_tid_.Tid_all); + hctx.File__mgr().Check_cache(fsdb_itm); + this.img_xoimg.Set_by_arg(img_xoimg); + img_w.Set_by_int(0); + img_h.Set_by_int(0); + this.img_src.Set_by_bry(Bry_.Empty); + } + else if (data.Img_w() != -1) { + img_w.Set_by_int(data.Img_w()); + img_h.Set_by_int(data.Img_h()); + this.img_src.Set_by_arg(data.Img_src()); + } + + if (data.Anch_rel_nofollow_exists()) anch_rel.Set_by_bry(gplx.xowa.htmls.core.wkrs.lnkes.Xoh_lnke_dict_.Html__rel__nofollow); + if (!hctx.Mode_is_diff()) { + this.Img_id_(fsdb_itm.Html_uid()); + vid_play_id.Set(fsdb_itm.Html_uid()); + } + anch_href.Set_by_mid(data.Anch_href().Rng_src(), data.Anch_href().Rng_bgn(), data.Anch_href().Rng_end()); + anch_cls.Set_by_arg(data.Anch_cls()); + anch_title.Set_by_mid_or_null(src, data.Anch_title_bgn(), data.Anch_title_end()); + anch_xowa_title.Set_by_bry(file_ttl_bry); + xowa_root_dir = hctx.Fsys__root(); + img_alt.Set_by_mid_or_empty(src, data.Img_alt_bgn(), data.Img_alt_end()); + img_cls.Set_by_arg(data.Img_cls()); + return true; + } + public void Init_by_gly(Bfr_arg_clearable href, byte[] xowa_title, Bfr_arg_clearable xoimg) { + anch_href.Set_by_arg(href); + anch_xowa_title.Set_by_bry(xowa_title); + img_xoimg.Set_by_arg(xoimg); + } + public void Bfr_arg__add(Bry_bfr bfr) { + if (img_is_vid) bfr.Add(Vid__bry__bgn); + img_fmtr.Bld_bfr_many(bfr, (Object[])arg_ary); + if (img_is_vid) + vid_fmtr.Bld_bfr_many(bfr, vid_play_id, anch_xowa_title, xowa_root_dir, 218, 220); // TODO: hardcode widths; need to update via js from fsdb + } + public void Pool__rls () {pool_mgr.Rls_fast(pool_idx);} private Gfo_poolable_mgr pool_mgr; private int pool_idx; + public Gfo_poolable_itm Pool__make (Gfo_poolable_mgr mgr, int idx, Object[] args) {Xoh_img_wtr rv = new Xoh_img_wtr(); rv.pool_mgr = mgr; rv.pool_idx = idx; return rv;} + private static final byte[] Vid__bry__bgn = Bry_.new_a7("
        \n
        "); + private static final Bry_fmtr + img_fmtr = Bry_fmtr.new_ + ( "" + , "anch_href", "anch_rel", "anch_cls", "anch_title", "anch_xowa_title", "img_id", "img_xoimg", "img_src", "img_w", "img_h", "img_cls", "img_alt") + , vid_fmtr = Bry_fmtr.new_ + ( "
        \n
        \"Play
        \n
        " + , "vid_play_id", "xowa_title", "xowa_root_dir", "width_neg_2", "width") // NOTE: default to href='file:///'; will be filled in dynamically + ; } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_anch_cls_.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_anch_cls_.java index 438f0504c..740f9fb72 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_anch_cls_.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_anch_cls_.java @@ -30,7 +30,7 @@ public class Xoh_anch_cls_ { Bry__image = Bry_.new_a7(Str__image) ; private static final byte[] - Html__image = Bry_.Add(Html_bldr_.Bry__cls__nth, Bry__image) + Html__image = Bry_.Add(Gfh_bldr_.Bry__cls__nth, Bry__image) ; public static final Btrie_slim_mgr Trie = Btrie_slim_mgr.cs() .Add_bry_byte(Bry__image , Tid__image) diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_anch_cls_parser.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_anch_cls_data.java similarity index 57% rename from 400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_anch_cls_parser.java rename to 400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_anch_cls_data.java index fb3d06e02..b9737b51b 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_anch_cls_parser.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_anch_cls_data.java @@ -17,22 +17,26 @@ along with this program. If not, see . */ package gplx.xowa.htmls.core.wkrs.imgs.atrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; import gplx.xowa.htmls.core.wkrs.imgs.*; import gplx.core.brys.*; -import gplx.langs.htmls.*; import gplx.langs.htmls.parsers.*; -public class Xoh_anch_cls_parser { +import gplx.langs.htmls.*; import gplx.langs.htmls.docs.*; +public class Xoh_anch_cls_data implements Bfr_arg_clearable { private final Bry_rdr rdr = new Bry_rdr(); public byte Tid() {return tid;} private byte tid; - public Html_atr Atr() {return atr;} private Html_atr atr; - public boolean Parse(Bry_err_wkr err_wkr, byte[] src, Html_tag tag) { - this.atr = tag.Atrs__get_by_or_empty(Html_atr_.Bry__class); // EX: class='image' + public void Clear() { + tid = Xoh_anch_cls_.Tid__none; + } + public boolean Parse(Bry_err_wkr err_wkr, byte[] src, Gfh_tag tag) { + Gfh_atr atr = tag.Atrs__get_by_or_empty(Gfh_atr_.Bry__class); // EX: class='image' int src_bgn = atr.Val_bgn(); int src_end = atr.Val_end(); - if (src_bgn == -1) { - tid = Xoh_anch_cls_.Tid__none; - return false; - } - else { - rdr.Init_by_wkr(err_wkr, "anch.cls", src_bgn, src_end); - this.tid = rdr.Chk_or(Xoh_anch_cls_.Trie, Byte_ascii.Max_7_bit); - return tid != Byte_ascii.Max_7_bit; - } + if (src_bgn == -1) return false; + rdr.Init_by_wkr(err_wkr, "anch.cls", src_bgn, src_end); + this.tid = rdr.Chk_or(Xoh_anch_cls_.Trie, Byte_ascii.Max_7_bit); + return tid != Byte_ascii.Max_7_bit; + } + public void Init_by_decode(int tid) {this.tid = (byte)tid;} + public void Bfr_arg__clear() {this.Clear();} + public boolean Bfr_arg__missing() {return false;} + public void Bfr_arg__add(Bry_bfr bfr) { + if (Bfr_arg__missing()) return; + bfr.Add(Xoh_anch_cls_.To_val(tid)); } } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_img_cls_.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_img_cls_.java index af1a987ba..62424a4a5 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_img_cls_.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_img_cls_.java @@ -19,9 +19,10 @@ package gplx.xowa.htmls.core.wkrs.imgs.atrs; import gplx.*; import gplx.xowa.*; import gplx.core.btries.*; public class Xoh_img_cls_ { public static final byte // SERIALIZED - Tid__none = 0 // EX: [[File:A.png]] -> "" - , Tid__thumbimage = 1 // EX: [[File:A.png|thumb]] -> "" - , Tid__thumbborder = 2 // EX: [[File:A.png|border]] -> "" + Tid__none = 0 // EX: [[File:A.png]] -> "" + , Tid__thumbimage = 1 // EX: [[File:A.png|thumb]] -> "" + , Tid__thumbborder = 2 // EX: [[File:A.png|border]] -> "" + , Tid__manual = 3 // EX: [[File:A.png|class=x]] -> "" ; public static final String Str__thumbimage = "thumbimage" @@ -30,7 +31,7 @@ public class Xoh_img_cls_ { public static final byte[] Bry__none = Bry_.Empty ; - private static final byte[] + public static final byte[] Bry__thumbimage = Bry_.new_a7(Str__thumbimage) , Bry__thumbborder = Bry_.new_a7(Str__thumbborder) ; diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_img_cls_data.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_img_cls_data.java new file mode 100644 index 000000000..c0b6c9bb8 --- /dev/null +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_img_cls_data.java @@ -0,0 +1,69 @@ +/* +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 . +*/ +package gplx.xowa.htmls.core.wkrs.imgs.atrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; import gplx.xowa.htmls.core.wkrs.imgs.*; +import gplx.core.brys.*; +import gplx.langs.htmls.*; import gplx.langs.htmls.docs.*; +public class Xoh_img_cls_data implements Bfr_arg_clearable { + private byte[] src; + public byte Cls_tid() {return cls_tid;} private byte cls_tid; + public int Other_bgn() {return other_bgn;} private int other_bgn; + public int Other_end() {return other_end;} private int other_end; + public boolean Other_exists() {return other_end > other_bgn;} + public void Clear() { + cls_tid = Xoh_img_cls_.Tid__none; other_bgn = other_end = -1; + src = null; + } + public void Init_by_decode(byte[] src, int cls_tid, int other_bgn, int other_end) { + this.src = src; + this.cls_tid = (byte)cls_tid; this.other_bgn = other_bgn; this.other_end = other_end; + } + public void Init_by_parse(Bry_err_wkr err_wkr, byte[] src, Gfh_tag tag) { + this.Clear(); + Gfh_atr atr = tag.Atrs__get_by_or_empty(Gfh_atr_.Bry__class); // EX: class='thumbborder' + int src_bgn = atr.Val_bgn(); + if (src_bgn == -1) { // class does not exist; defaults to none and exit; + cls_tid = Xoh_img_cls_.Tid__none; + return; + } + int src_end = atr.Val_end(); + this.cls_tid = Xoh_img_cls_.Trie.Match_byte_or(src, src_bgn, src_end, Xoh_img_cls_.Tid__manual); + int pos = Xoh_img_cls_.Trie.Match_pos(); + if (pos < src_end && src[pos] == Byte_ascii.Space) + ++pos; + if (cls_tid == Xoh_img_cls_.Tid__manual || pos < src_end) { + this.other_bgn = pos; + this.other_end = src_end; + } + } + public void Bfr_arg__clear() {this.Clear();} + public boolean Bfr_arg__missing() {return cls_tid == Xoh_img_cls_.Tid__none && other_end <= other_bgn;} + public void Bfr_arg__add(Bry_bfr bfr) { + if (Bfr_arg__missing()) return; + byte[] cls = null; + switch (cls_tid) { + case Xoh_img_cls_.Tid__thumbimage: cls = Xoh_img_cls_.Bry__thumbimage; break; + case Xoh_img_cls_.Tid__thumbborder: cls = Xoh_img_cls_.Bry__thumbborder; break; + } + if (cls != null) + bfr.Add(cls); + if (other_end > other_bgn) { + if (cls != null) bfr.Add_byte_space(); + bfr.Add_mid(src, other_bgn, other_end); + } + } +} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_img_cls_parser.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_img_cls_parser.java deleted file mode 100644 index 894eb62a3..000000000 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_img_cls_parser.java +++ /dev/null @@ -1,47 +0,0 @@ -/* -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 . -*/ -package gplx.xowa.htmls.core.wkrs.imgs.atrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; import gplx.xowa.htmls.core.wkrs.imgs.*; -import gplx.core.brys.*; -import gplx.langs.htmls.*; import gplx.langs.htmls.parsers.*; -public class Xoh_img_cls_parser { - private final Bry_rdr rdr = new Bry_rdr(); - public byte Cls_tid() {return cls_tid;} private byte cls_tid; - public int Other_bgn() {return other_bgn;} private int other_bgn; - public int Other_end() {return other_end;} private int other_end; - public boolean Other_exists() {return other_end > other_bgn;} - public Html_atr Atr() {return atr;} private Html_atr atr; - public void Parse(Bry_err_wkr err_wkr, byte[] src, Html_tag tag) { - this.atr = tag.Atrs__get_by_or_empty(Html_atr_.Bry__class); // EX: class='thumbborder' - Parse(err_wkr, src, atr.Val_bgn(), atr.Val_end()); - } - private void Parse(Bry_err_wkr err_wkr, byte[] src, int src_bgn, int src_end) { - if (src_bgn == -1) { - this.cls_tid = Xoh_img_cls_.Tid__none; - this.other_bgn = this.other_end = -1; - return; - } - rdr.Init_by_wkr(err_wkr, "img.cls", src_bgn, src_end); - this.cls_tid = rdr.Chk(Xoh_img_cls_.Trie); - if (rdr.Is(Byte_ascii.Space)) { - this.other_bgn = rdr.Pos(); - this.other_end = src_end; - } - else - other_bgn = other_end = -1; - } -} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_img_src_parser.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_img_src_data.java similarity index 69% rename from 400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_img_src_parser.java rename to 400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_img_src_data.java index 45fea1092..058e9fa00 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_img_src_parser.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_img_src_data.java @@ -17,47 +17,45 @@ along with this program. If not, see . */ package gplx.xowa.htmls.core.wkrs.imgs.atrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; import gplx.xowa.htmls.core.wkrs.imgs.*; import gplx.core.brys.*; import gplx.core.btries.*; -import gplx.langs.htmls.*; import gplx.langs.htmls.parsers.*; +import gplx.langs.htmls.*; import gplx.langs.htmls.docs.*; import gplx.xowa.wikis.domains.*; -public class Xoh_img_src_parser implements Xoh_itm_parser { - private final Bry_rdr rdr = new Bry_rdr().Dflt_dlm_(Byte_ascii.Slash); private byte[] src; +public class Xoh_img_src_data implements Bfr_arg_clearable, Xoh_itm_parser { + private final Bry_rdr rdr = new Bry_rdr().Dflt_dlm_(Byte_ascii.Slash); public void Fail_throws_err_(boolean v) {rdr.Fail_throws_err_(v);}// TEST - public int Val_bgn() {return val_bgn;} private int val_bgn; - public int Val_end() {return val_end;} private int val_end; - public boolean Val_exists() {return val_end > val_bgn;} + public byte[] Src_bry() {return src_bry;} private byte[] src_bry; + public int Src_bgn() {return src_bgn;} private int src_bgn; + public int Src_end() {return src_end;} private int src_end; public int Repo_bgn() {return repo_bgn;} private int repo_bgn; public int Repo_end() {return repo_end;} private int repo_end; public boolean Repo_is_commons() {return repo_is_commons;} private boolean repo_is_commons; public int File_ttl_bgn() {return file_ttl_bgn;} private int file_ttl_bgn; public int File_ttl_end() {return file_ttl_end;} private int file_ttl_end; public boolean File_ttl_exists() {return file_ttl_end > file_ttl_bgn;} - public byte[] File_ttl_bry() {if (file_ttl_bry == null) file_ttl_bry = Bry_.Mid(src, file_ttl_bgn, file_ttl_end); return file_ttl_bry;} private byte[] file_ttl_bry; + public byte[] File_ttl_bry() {return file_ttl_bry;} private byte[] file_ttl_bry; public boolean File_is_orig() {return file_is_orig;} private boolean file_is_orig; public int File_w() {return file_w;} private int file_w; public int File_time() {return file_time;} private int file_time; public int File_page() {return file_page;} private int file_page; public boolean File_time_exists() {return file_time != -1;} public boolean File_page_exists() {return file_page != -1;} - public Html_atr Atr() {return atr;} private Html_atr atr; - private void Clear() { - val_bgn = val_end = repo_bgn = repo_end = file_ttl_bgn = file_ttl_end = file_w = file_time = file_page = -1; + public void Clear() { + src_bry = null; + src_bgn = src_end = repo_bgn = repo_end = file_ttl_bgn = file_ttl_end = file_w = file_time = file_page = -1; repo_is_commons = file_is_orig = false; file_ttl_bry = null; - atr = null; } - public boolean Parse(Bry_err_wkr err_wkr, byte[] domain_bry, Html_tag tag) { + public boolean Parse(Bry_err_wkr err_wkr, Xoh_hdoc_ctx hctx, byte[] domain_bry, Gfh_tag tag) { this.Clear(); - this.atr = tag.Atrs__get_by_or_empty(Html_atr_.Bry__src); - return Parse(err_wkr, domain_bry, atr.Val_bgn(), atr.Val_end()); + Gfh_atr atr = tag.Atrs__get_by_or_empty(Gfh_atr_.Bry__src); + return Parse(err_wkr, hctx, domain_bry, atr.Val_bgn(), atr.Val_end()); } - public boolean Parse(Bry_err_wkr err_wkr, byte[] domain_bry, int val_bgn, int val_end) { // EX: src="file:///C:/xowa/file/commons.wikimedia.org/thumb/7/0/1/2/A.png/220px.png" + public boolean Parse(Bry_err_wkr err_wkr, Xoh_hdoc_ctx hctx, byte[] domain_bry, int src_bgn, int src_end) { // EX: src="file:///C:/xowa/file/commons.wikimedia.org/thumb/7/0/1/2/A.png/220px.png" this.Clear(); - this.src = err_wkr.Src(); - this.val_bgn = val_bgn; this.val_end = val_end; - if (val_end == val_bgn) return true; // empty src; just return true; + this.src_bry = err_wkr.Src(); + this.src_bgn = src_bgn; this.src_end = src_end; + if (src_end == src_bgn) return true; // empty src; just return true; file_w = file_time = file_page = -1; - rdr.Init_by_wkr(err_wkr, "img.src.xowa", val_bgn, val_end); - rdr.Fail_throws_err_(Bool_.N); + rdr.Init_by_wkr(err_wkr, "img.src.xowa", src_bgn, src_end).Fail_throws_err_(Bool_.N); repo_bgn = rdr.Find_fwd_rr(Bry__file); // skip past /file/; EX: "file:///J:/xowa/file/commons.wikimedia.org/" if (repo_bgn == -1) return false; rdr.Fail_throws_err_(Bool_.Y); @@ -80,13 +78,21 @@ public class Xoh_img_src_parser implements Xoh_itm_parser { else if (rdr.Is(Byte_ascii.Dash)) file_page = rdr.Read_int_to(Byte_ascii.Dot); // EX: "220px-5.png" } + file_ttl_bry = Bry_.Mid(src_bry, file_ttl_bgn, file_ttl_end); return true; } + public void Init_by_decode(byte[] file_ttl_bry, byte[] src) { + this.file_ttl_bry = file_ttl_bry; + this.src_bry = src; this.src_bgn = 0; this.src_end = src.length; + } + public void Bfr_arg__clear() {this.Clear();} + public boolean Bfr_arg__missing() {return src_bry == null;} + public void Bfr_arg__add(Bry_bfr bfr) {bfr.Add_mid(src_bry, src_bgn, src_end);} private int Skip_md5() { byte[] src = rdr.Src(); int pos = rdr.Pos(); while (true) { - if ( pos < val_end // no more slashes; shouldn't happen; EX: "7/0/" + if ( pos < src_end // no more slashes; shouldn't happen; EX: "7/0/" && src[pos + 1] == Byte_ascii.Slash) { // pos is slash; EX: "7/0/" pos += 2; continue; diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_img_src_parser_tst.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_img_src_data_tst.java similarity index 89% rename from 400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_img_src_parser_tst.java rename to 400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_img_src_data_tst.java index 413268048..31b15d71b 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_img_src_parser_tst.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_img_src_data_tst.java @@ -18,8 +18,8 @@ along with this program. If not, see . package gplx.xowa.htmls.core.wkrs.imgs.atrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; import gplx.xowa.htmls.core.wkrs.imgs.*; import org.junit.*; import gplx.core.brys.*; import gplx.xowa.wikis.domains.*; -public class Xoh_img_src_parser_tst { - private final Xoh_img_src_parser_fxt fxt = new Xoh_img_src_parser_fxt(); +public class Xoh_img_src_data_tst { + private final Xoh_img_src_data_fxt fxt = new Xoh_img_src_data_fxt(); @Test public void Basic() { fxt.Test__parse("file:///C:/xowa/file/en.wikipedia.org/orig/7/0/A.png" , "en.wikipedia.org" , Bool_.Y, "A.png", -1, -1, -1); fxt.Test__parse("file:///C:/xowa/file/commons.wikimedia.org/thumb/7/0/A.png/220px.png" , "commons.wikimedia.org" , Bool_.N, "A.png", 220, -1, -1); @@ -36,7 +36,7 @@ public class Xoh_img_src_parser_tst { // fxt.Test__parse__fail("file:///C:/xowa/file/en.wiktionary.org/orig/7/0/A.png", "repo must be commons or self: repo='en.wiktionary.org' ctx='Main_Page' wkr='img.src.xowa' excerpt='file:///C:/xowa/file/en.wiktionary.org/orig/7/0/A.png'"); // } } -class Xoh_img_src_parser_fxt extends Xoh_itm_parser_fxt { private final Xoh_img_src_parser parser = new Xoh_img_src_parser(); +class Xoh_img_src_data_fxt extends Xoh_itm_parser_fxt { private final Xoh_img_src_data parser = new Xoh_img_src_data(); @Override public Xoh_itm_parser Parser_get() {return parser;} public void Test__parse(String src_str, String expd_repo, boolean expd_file_is_orig, String expd_file, int expd_w, int expd_time, int expd_page) { Exec_parse(src_str); @@ -48,6 +48,7 @@ class Xoh_img_src_parser_fxt extends Xoh_itm_parser_fxt { private final Xoh_img Tfds.Eq_int(expd_page, parser.File_page()); } @Override public void Exec_parse_hook(Bry_err_wkr err_wkr, Xoh_hdoc_ctx hctx, int src_bgn, int src_end) { - parser.Parse(err_wkr, Xow_domain_itm_.Bry__enwiki, src_bgn, src_end); + // Xoh_hdoc_ctx hctx + parser.Parse(err_wkr, new Xoh_hdoc_ctx(), Xow_domain_itm_.Bry__enwiki, src_bgn, src_end); } } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_img_xoimg_parser.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_img_xoimg_data.java similarity index 84% rename from 400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_img_xoimg_parser.java rename to 400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_img_xoimg_data.java index d1023bcc2..2d8666cd4 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_img_xoimg_parser.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_img_xoimg_data.java @@ -17,12 +17,12 @@ along with this program. If not, see . */ package gplx.xowa.htmls.core.wkrs.imgs.atrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; import gplx.xowa.htmls.core.wkrs.imgs.*; import gplx.core.brys.*; -import gplx.langs.htmls.*; import gplx.langs.htmls.parsers.*; -public class Xoh_img_xoimg_parser implements Bfr_arg { +import gplx.langs.htmls.*; import gplx.langs.htmls.docs.*; +public class Xoh_img_xoimg_data implements Bfr_arg_clearable { private final Bry_rdr rdr = new Bry_rdr().Dflt_dlm_(Byte_ascii.Pipe); public int Val_bgn() {return val_bgn;} private int val_bgn; public int Val_end() {return val_end;} private int val_end; - public boolean Val_dat_exists() {return val_end > val_bgn;} + public boolean Val_dat_exists() {return val_dat_exists;} private boolean val_dat_exists; public byte Lnki_type() {return lnki_type;} private byte lnki_type; public int Lnki_w() {return lnki_w;} private int lnki_w; public int Lnki_h() {return lnki_h;} private int lnki_h; @@ -31,6 +31,7 @@ public class Xoh_img_xoimg_parser implements Bfr_arg { public int Lnki_page() {return lnki_page;} private int lnki_page; public void Clear() { val_bgn = val_end = -1; + val_dat_exists = false; } public void Set(byte tid, int w, int h, double upright, double time, int page) { this.lnki_type = tid; @@ -39,9 +40,10 @@ public class Xoh_img_xoimg_parser implements Bfr_arg { this.lnki_upright = upright; this.lnki_time = time; this.lnki_page = page; + this.val_dat_exists = true; } - public void Parse(Bry_err_wkr err_wkr, byte[] src, Html_tag tag) { - Html_atr atr = tag.Atrs__get_by_or_empty(Bry__name); + public void Parse(Bry_err_wkr err_wkr, byte[] src, Gfh_tag tag) { + Gfh_atr atr = tag.Atrs__get_by_or_empty(Bry__name); Parse(err_wkr, src, atr.Val_bgn(), atr.Val_end()); } public void Parse(Bry_err_wkr err_wkr, byte[] src, int src_bgn, int src_end) { @@ -57,10 +59,11 @@ public class Xoh_img_xoimg_parser implements Bfr_arg { this.lnki_upright = rdr.Read_double_to(); this.lnki_time = rdr.Read_double_to(); this.lnki_page = rdr.Read_int_to(); + this.val_dat_exists = true; } } public void Bfr_arg__clear() {} - public boolean Bfr_arg__exists() {return true;} + public boolean Bfr_arg__missing() {return false;} public void Bfr_arg__add(Bry_bfr bfr) { bfr.Add_int_variable(lnki_type).Add_byte_pipe(); bfr.Add_int_variable(lnki_w).Add_byte_pipe(); diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_img_xoimg_hzip.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_img_xoimg_hzip.java index 930d7778f..8f1eeeda7 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_img_xoimg_hzip.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/imgs/atrs/Xoh_img_xoimg_hzip.java @@ -20,7 +20,7 @@ import gplx.core.brys.*; import gplx.xowa.htmls.core.hzips.*; import gplx.xowa.parsers.lnkis.*; import gplx.xowa.files.*; public class Xoh_img_xoimg_hzip { - public void Encode(Bry_bfr bfr, Xoh_stat_itm stat_itm, byte[] src, Xoh_img_xoimg_parser arg) { + public void Encode(Bry_bfr bfr, Xoh_stat_itm stat_itm, byte[] src, Xoh_img_xoimg_data arg) { boolean page_exists = arg.Lnki_page() != Xof_lnki_page.Null; boolean time_exists = arg.Lnki_time() != Xof_lnki_time.Null; boolean upright_exists = arg.Lnki_upright() != Xof_img_size.Upright_null; @@ -39,8 +39,8 @@ public class Xoh_img_xoimg_hzip { if (time_exists) bfr.Add_double(arg.Lnki_time()).Add_byte(Xoh_hzip_dict_.Escape); if (page_exists) Xoh_hzip_int_.Encode(2, bfr, arg.Lnki_page()); } - public void Decode(Bry_bfr bfr, Xoh_hdoc_ctx hctx, Xoh_page hpg, Bry_rdr rdr, byte[] src, Xoh_img_xoimg_parser arg) { - int flag = rdr.Read_int_by_base85(1); + public void Decode(Bry_bfr bfr, Xoh_hdoc_ctx hctx, Xoh_page hpg, Bry_rdr rdr, byte[] src, Xoh_img_xoimg_data arg) { + int flag = rdr.Read_hzip_int(1); flag_bldr.Decode(flag); boolean page_exists = flag_bldr.Get_as_bool(Flag__page_exists); boolean time_exists = flag_bldr.Get_as_bool(Flag__time_exists); @@ -48,11 +48,11 @@ public class Xoh_img_xoimg_hzip { boolean height_exists = flag_bldr.Get_as_bool(Flag__height_exists); boolean width_exists = flag_bldr.Get_as_bool(Flag__width_exists); byte tid = flag_bldr.Get_as_byte(Flag__lnki_type); - int w = width_exists ? rdr.Read_int_by_base85(2) : Xof_img_size.Size__neg1; - int h = height_exists ? rdr.Read_int_by_base85(2) : Xof_img_size.Size__neg1; + int w = width_exists ? rdr.Read_hzip_int(2) : Xof_img_size.Size__neg1; + int h = height_exists ? rdr.Read_hzip_int(2) : Xof_img_size.Size__neg1; double upright = upright_exists ? rdr.Read_double_to(Xoh_hzip_dict_.Escape) : Xof_img_size.Upright_null; double time = time_exists ? rdr.Read_double_to(Xoh_hzip_dict_.Escape) : Xof_lnki_time.Null; - int page = page_exists ? rdr.Read_int_by_base85(2) : Xof_lnki_page.Null; + int page = page_exists ? rdr.Read_hzip_int(2) : Xof_lnki_page.Null; arg.Set(tid, w, h, upright, time, page); } private final Int_flag_bldr flag_bldr = new Int_flag_bldr().Pow_ary_bld_( 1, 1 , 1, 1, 1, 3); diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkes/Xoh_lnke_parser.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkes/Xoh_lnke_data.java similarity index 67% rename from 400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkes/Xoh_lnke_parser.java rename to 400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkes/Xoh_lnke_data.java index f4f91bb94..d7c30fadf 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkes/Xoh_lnke_parser.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkes/Xoh_lnke_data.java @@ -16,33 +16,37 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.htmls.core.wkrs.lnkes; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; -import gplx.core.brys.*; -import gplx.langs.htmls.*; import gplx.langs.htmls.parsers.*; import gplx.xowa.htmls.hrefs.*; -public class Xoh_lnke_parser { - private final Bry_rdr rdr = new Bry_rdr(); +import gplx.core.brys.*; import gplx.core.threads.poolables.*; +import gplx.langs.htmls.*; import gplx.langs.htmls.docs.*; import gplx.xowa.htmls.hrefs.*; +import gplx.xowa.htmls.core.hzips.*; +public class Xoh_lnke_data implements Xoh_data_itm { + public int Tid() {return Xoh_hzip_dict_.Tid__lnke;} public int Src_bgn() {return src_bgn;} private int src_bgn; public int Src_end() {return src_end;} private int src_end; public byte Lnke_tid() {return lnke_tid;} private byte lnke_tid; + public boolean Auto_exists() {return auto_id != -1;} public int Auto_id() {return auto_id;} private int auto_id; public int Href_bgn() {return href_bgn;} private int href_bgn; public int Href_end() {return href_end;} private int href_end; public int Capt_bgn() {return capt_bgn;} private int capt_bgn; public int Capt_end() {return capt_end;} private int capt_end; public boolean Capt_exists() {return capt_exists;} private boolean capt_exists; - private void Clear() { - lnke_tid = Byte_ascii.Max_7_bit; + public void Clear() { capt_exists = false; + lnke_tid = Byte_ascii.Max_7_bit; src_bgn = src_end = href_bgn = href_end = capt_bgn = capt_end = auto_id = -1; } - public boolean Parse(Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Html_tag_rdr tag_rdr, byte[] src, Html_tag anch_head) { - this.Clear(); + public void Init_by_decode(byte lnke_tid, int auto_id, int href_bgn, int href_end, int capt_bgn, int capt_end, boolean capt_exists) { + this.lnke_tid = lnke_tid; this.auto_id = auto_id; this.href_bgn = href_bgn; this.href_end = href_end; + this.capt_bgn = capt_bgn; this.capt_end = capt_end; this.capt_exists = capt_exists; + } + public boolean Init_by_parse(Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Gfh_tag_rdr tag_rdr, byte[] src, Gfh_tag anch_head, Gfh_tag unused) { this.src_bgn = anch_head.Src_bgn(); - rdr.Init_by_sect("lnke", src_bgn, src_bgn); - Html_atr href_atr = anch_head.Atrs__get_by_or_fail(Html_atr_.Bry__href); // get href; "EX: href='http://a.org'" + Gfh_atr href_atr = anch_head.Atrs__get_by_or_fail(Gfh_atr_.Bry__href); // get href; "EX: href='http://a.org'" this.href_bgn = href_atr.Val_bgn(); this.href_end = href_atr.Val_end(); this.lnke_tid = anch_head.Atrs__cls_find_or_fail(Xoh_lnke_dict_.Hash); // get type by class; EX: "class='external free'" this.capt_bgn = anch_head.Src_end(); - Html_tag anch_tail = tag_rdr.Tag__move_fwd_tail(Html_tag_.Id__a); // find '' + Gfh_tag anch_tail = tag_rdr.Tag__move_fwd_tail(Gfh_tag_.Id__a); // find '' this.capt_end = anch_tail.Src_bgn(); switch (lnke_tid) { case Xoh_lnke_dict_.Type__free: @@ -66,7 +70,8 @@ public class Xoh_lnke_parser { break; } this.src_end = anch_tail.Src_end(); - hdoc_wkr.On_lnke(this); return true; } + public void Pool__rls () {pool_mgr.Rls_fast(pool_idx);} private Gfo_poolable_mgr pool_mgr; private int pool_idx; + public Gfo_poolable_itm Pool__make (Gfo_poolable_mgr mgr, int idx, Object[] args) {Xoh_lnke_data rv = new Xoh_lnke_data(); rv.pool_mgr = mgr; rv.pool_idx = idx; return rv;} } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkes/Xoh_lnke_html.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkes/Xoh_lnke_html.java index 8cde1dd57..3ab856043 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkes/Xoh_lnke_html.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkes/Xoh_lnke_html.java @@ -25,7 +25,7 @@ public class Xoh_lnke_html { int href_bgn = lnke.Lnke_href_bgn(), href_end = lnke.Lnke_href_end(); boolean proto_is_xowa = lnke.Proto_tid() == Gfo_protocol_itm.Tid_xowa; byte lnke_type = Calc_type(lnke); if (!hctx.Mode_is_alt()) { // do not write "" if mode is alt - bfr.Add(Xoh_consts.A_bgn); + bfr.Add(Gfh_bldr_.Bry__a_lhs_w_href); if (Write_href(bfr, hctx, ctx, src, lnke, href_bgn, href_end, proto_is_xowa)) bfr.Add(Xoh_lnke_dict_.Html__atr__0).Add(Xoh_lnke_dict_.To_html_class(lnke_type)); bfr.Add(Xoh_lnke_dict_.Html__rhs_end); @@ -34,7 +34,7 @@ public class Xoh_lnke_html { if (!hctx.Mode_is_alt()) { if (proto_is_xowa) // add bfr.Add(Xoh_consts.Img_bgn).Add(html_wtr.Html_mgr().Img_xowa_protocol()).Add(Xoh_consts.__inline_quote); - bfr.Add(Xoh_consts.A_end); + bfr.Add(Gfh_bldr_.Bry__a_rhs); } } public boolean Write_href(Bry_bfr bfr, Xoh_wtr_ctx hctx, Xop_ctx ctx, byte[] src, Xop_lnke_tkn lnke, int href_bgn, int href_end, boolean proto_is_xowa) { diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkes/Xoh_lnke_hzip.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkes/Xoh_lnke_hzip.java index f83267850..80441b7fa 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkes/Xoh_lnke_hzip.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkes/Xoh_lnke_hzip.java @@ -19,13 +19,14 @@ package gplx.xowa.htmls.core.wkrs.lnkes; import gplx.*; import gplx.xowa.*; impo import gplx.core.brys.*; import gplx.core.threads.poolables.*; import gplx.xowa.wikis.ttls.*; import gplx.langs.htmls.*; import gplx.xowa.htmls.core.hzips.*; public class Xoh_lnke_hzip implements Xoh_hzip_wkr, Gfo_poolable_itm { + public int Tid() {return Xoh_hzip_dict_.Tid__lnke;} public String Key() {return Xoh_hzip_dict_.Key__lnke;} public byte[] Hook() {return hook;} private byte[] hook; - public Gfo_poolable_itm Encode(Xoh_hzip_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, boolean wkr_is_root, byte[] src, Object data_obj) { - Xoh_lnke_parser data = (Xoh_lnke_parser)data_obj; - boolean auto_exists = flag_bldr.Set_as_bool(Flag__auto_exists , data.Auto_id() != -1); + public Gfo_poolable_itm Encode1(Xoh_hzip_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, boolean wkr_is_root, byte[] src, Object data_obj) { + Xoh_lnke_data data = (Xoh_lnke_data)data_obj; + boolean auto_exists = flag_bldr.Set_as_bool(Flag__auto_exists , data.Auto_exists()); boolean capt_exists = flag_bldr.Set_as_bool(Flag__capt_exists , data.Capt_exists()); - byte lnke_tid = flag_bldr.Set_as_byte(Flag__lnke_tid , data.Lnke_tid()); + byte lnke_tid = flag_bldr.Set_as_byte(Flag__lnke_tid , data.Lnke_tid()); bfr.Add(hook); bfr.Add_hzip_int(1, flag_bldr.Encode()); // add flag @@ -36,27 +37,19 @@ public class Xoh_lnke_hzip implements Xoh_hzip_wkr, Gfo_poolable_itm { hctx.Hzip__stat().Lnke_add(lnke_tid); return this; } - public int Decode(Bry_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, boolean wkr_is_root, Bry_rdr rdr, byte[] src, int src_bgn, int src_end) { - int flag = rdr.Read_int_by_base85(1); flag_bldr.Decode(flag); + public void Decode1(Bry_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, Bry_rdr rdr, byte[] src, int src_bgn, int src_end, Xoh_data_itm data_itm) { + int flag = rdr.Read_hzip_int(1); flag_bldr.Decode(flag); boolean auto_exists = flag_bldr.Get_as_bool(Flag__auto_exists); boolean capt_exists = flag_bldr.Get_as_bool(Flag__capt_exists); - byte lnke_tid = flag_bldr.Get_as_byte(Flag__lnke_tid); + byte lnke_tid = flag_bldr.Get_as_byte(Flag__lnke_tid); int href_bgn = rdr.Pos(); int href_end = rdr.Find_fwd_lr(); int auto_id = -1, capt_bgn = -1, capt_end = -1; - if (auto_exists) auto_id = rdr.Read_int_by_base85(1); + if (auto_exists) auto_id = rdr.Read_hzip_int(1); if (capt_exists) {capt_bgn = rdr.Pos(); capt_end = rdr.Find_fwd_lr();} - int rv = rdr.Pos(); - bfr.Add(Html_bldr_.Bry__a_lhs_w_href); - bfr.Add_mid(src, href_bgn, href_end); - bfr.Add(Xoh_lnke_dict_.Html__atr__0).Add(Xoh_lnke_dict_.To_html_class(lnke_tid)).Add(Xoh_lnke_dict_.Html__rhs_end); - if (auto_exists) bfr.Add_byte(Byte_ascii.Brack_bgn).Add_int_variable(auto_id).Add_byte(Byte_ascii.Brack_end); - else if (capt_exists) bfr.Add_mid(src, capt_bgn, capt_end); - else bfr.Add_mid(src, href_bgn, href_end); - bfr.Add(Html_bldr_.Bry__a_rhs); - - return rv; + Xoh_lnke_data data = (Xoh_lnke_data)data_itm; + data.Init_by_decode(lnke_tid, auto_id, href_bgn, href_end, capt_bgn, capt_end, capt_exists); } public void Pool__rls () {pool_mgr.Rls_fast(pool_idx);} private Gfo_poolable_mgr pool_mgr; private int pool_idx; public Gfo_poolable_itm Pool__make (Gfo_poolable_mgr mgr, int idx, Object[] args) {Xoh_lnke_hzip rv = new Xoh_lnke_hzip(); rv.pool_mgr = mgr; rv.pool_idx = idx; rv.hook = (byte[])args[0]; return rv;} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkes/Xoh_lnke_wtr.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkes/Xoh_lnke_wtr.java index 3ca6933af..735349772 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkes/Xoh_lnke_wtr.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkes/Xoh_lnke_wtr.java @@ -16,33 +16,35 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.htmls.core.wkrs.lnkes; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; -import gplx.core.brys.*; import gplx.core.primitives.*; import gplx.core.brys.args.*; import gplx.core.brys.fmtrs.*; -import gplx.langs.htmls.*; import gplx.langs.htmls.parsers.*; -import gplx.xowa.htmls.core.wkrs.bfr_args.*; -public class Xoh_lnke_wtr extends gplx.core.brys.Bfr_arg_base { - private final Bfr_arg[] arg_ary; - private final Bfr_arg__html_atr - anch_href = new Bfr_arg__html_atr(Html_atr_.Bry__href) - , anch_rel = new Bfr_arg__html_atr(Html_atr_.Bry__rel) - , anch_cls = new Bfr_arg__html_atr(Html_atr_.Bry__class) - ; - private final Bfr_arg__wrapper anch_capt = new Bfr_arg__wrapper(); - public Xoh_lnke_wtr() { - arg_ary = new Bfr_arg[] {anch_href, anch_rel, anch_cls, anch_capt}; +import gplx.core.brys.*; import gplx.core.primitives.*; import gplx.core.brys.fmtrs.*; import gplx.core.threads.poolables.*; import gplx.core.brys.args.*; +import gplx.langs.htmls.*; import gplx.xowa.htmls.core.wkrs.bfr_args.*; +import gplx.xowa.htmls.core.hzips.*; +public class Xoh_lnke_wtr implements gplx.core.brys.Bfr_arg, Xoh_wtr_itm { + private final Bfr_arg__bry anch_href = Bfr_arg__bry.New_empty(), anch_cls = Bfr_arg__bry.New_empty(), anch_content = Bfr_arg__bry.New_empty(); + public boolean Init_by_decode(Xoh_page hpg, Xoh_hdoc_ctx hctx, byte[] src, Xoh_data_itm data_itm) { + Bfr_arg_.Clear(anch_href, anch_cls,anch_content); + Xoh_lnke_data data = (Xoh_lnke_data)data_itm; + anch_href.Set_by_mid(src, data.Href_bgn(), data.Href_end()); + anch_cls.Set_by_val(Xoh_lnke_dict_.To_html_class(data.Lnke_tid())); + if (data.Auto_exists()) anch_content.Set_by_arg(Xoh_lnke_wtr_arg__autonum.Instance.Set_by_auto_id(data.Auto_id())); + else if (data.Capt_exists()) anch_content.Set_by_mid(src, data.Capt_bgn(), data.Capt_end()); + else anch_content.Set_by_mid(src, data.Href_bgn(), data.Href_end()); + return true; } - public Xoh_lnke_wtr Anch_href_(byte[] src, int bgn, int end) {anch_href.Set_by_mid(src, bgn, end); return this;} - public Xoh_lnke_wtr Anch_rel_y_() {anch_rel.Set_by_bry(Xoh_lnke_dict_.Html__rel__nofollow); return this;} - public Xoh_lnke_wtr Anch_cls_(byte[]... ary) {anch_cls.Set_by_ary(ary); return this;} - public Xoh_lnke_wtr Anch_capt_(Bfr_arg v) {anch_capt.Set(v); return this;} - public Xoh_lnke_wtr Clear() { - for (Bfr_arg arg : arg_ary) - arg.Bfr_arg__clear(); - return this; - } - @Override public void Bfr_arg__add(Bry_bfr bfr) { - fmtr.Bld_bfr_many(bfr, (Object[])arg_ary); + public void Bfr_arg__add(Bry_bfr bfr) { + fmtr.Bld_bfr_many(bfr, anch_href, anch_cls, anch_content); } + public void Pool__rls () {pool_mgr.Rls_fast(pool_idx);} private Gfo_poolable_mgr pool_mgr; private int pool_idx; + public Gfo_poolable_itm Pool__make (Gfo_poolable_mgr mgr, int idx, Object[] args) {Xoh_lnke_wtr rv = new Xoh_lnke_wtr(); rv.pool_mgr = mgr; rv.pool_idx = idx; return rv;} private static final Bry_fmtr fmtr = Bry_fmtr.new_ - ( "~{anch_capt}" - , "anch_href", "anch_rel", "anch_cls", "anch_capt"); + ( "~{content}" + , "href", "cls", "content"); +} +class Xoh_lnke_wtr_arg__autonum implements Bfr_arg { + private int auto_id; + public Bfr_arg Set_by_auto_id(int auto_id) {this.auto_id = auto_id; return this;} + public void Bfr_arg__add(Bry_bfr bfr) { + bfr.Add_byte(Byte_ascii.Brack_bgn).Add_int_variable(auto_id).Add_byte(Byte_ascii.Brack_end); + } + public static final Xoh_lnke_wtr_arg__autonum Instance = new Xoh_lnke_wtr_arg__autonum(); Xoh_lnke_wtr_arg__autonum() {} } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/Xoh_lnki_parser.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/Xoh_lnki_data.java similarity index 72% rename from 400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/Xoh_lnki_parser.java rename to 400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/Xoh_lnki_data.java index 92c19b9eb..3aa3576b3 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/Xoh_lnki_parser.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/Xoh_lnki_data.java @@ -16,10 +16,10 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.htmls.core.wkrs.lnkis; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; -import gplx.core.brys.*; import gplx.langs.htmls.*; import gplx.langs.htmls.parsers.*; import gplx.xowa.htmls.hrefs.*; -import gplx.xowa.htmls.core.wkrs.lnkis.anchs.*; +import gplx.core.brys.*; import gplx.core.btries.*; +import gplx.langs.htmls.*; import gplx.langs.htmls.docs.*; import gplx.xowa.htmls.hrefs.*;import gplx.xowa.htmls.core.wkrs.lnkis.anchs.*; import gplx.xowa.wikis.ttls.*; import gplx.xowa.wikis.nss.*; -public class Xoh_lnki_parser { +public class Xoh_lnki_data { private byte[] src; private int href_ns_id; private byte[] href_ns_name; private int href_ns_name_len; private byte[] capt_src; private int capt_bgn, capt_end; @@ -41,31 +41,36 @@ public class Xoh_lnki_parser { public int Title_tid() {return title_tid;} private int title_tid; public int Title_bgn() {return title_bgn;} private int title_bgn; public int Title_end() {return title_end;} private int title_end; - public Xoh_anch_href_itm Href_itm() {return href_itm;} private final Xoh_anch_href_itm href_itm = new Xoh_anch_href_itm(); + public boolean Tid_is_ctg_main() {return tid_is_ctg_main;} private boolean tid_is_ctg_main; + public boolean Tid_is_ctg_tree() {return tid_is_ctg_tree;} private boolean tid_is_ctg_tree; + public boolean Tid_is_ctg_xnav() {return tid_is_ctg_xnav;} private boolean tid_is_ctg_xnav; + public Xoh_anch_href_data Href_itm() {return href_itm;} private final Xoh_anch_href_data href_itm = new Xoh_anch_href_data(); public Xoh_anch_capt_itm Capt_itm() {return capt_itm;} private final Xoh_anch_capt_itm capt_itm = new Xoh_anch_capt_itm(); private void Init(byte[] src) { this.src = href_src = capt_src = src; - capt_has_ns = title_missing_ns = false; + capt_has_ns = title_missing_ns = tid_is_ctg_main = tid_is_ctg_tree = tid_is_ctg_xnav = false; href_ns_id = Xow_ns_.Tid__main; href_ns_name = null; href_ns_name_len = 0; href_bgn = href_end = capt_bgn = capt_end = title_bgn = title_end = -1; title_tid = Title__href; + href_itm.Clear(); } - public boolean Parse(Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Html_tag_rdr tag_rdr, byte[] src, Html_tag anch_head) { + public boolean Parse1(Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Gfh_tag_rdr tag_rdr, byte[] src, Gfh_tag anch_head) { Init(src); this.src_bgn = anch_head.Src_bgn(); rdr.Init_by_wkr(tag_rdr.Err_wkr(), "lnki", src_bgn, src.length); - Html_atr title_atr = anch_head.Atrs__get_by_or_empty(Html_atr_.Bry__title); + Gfh_atr title_atr = anch_head.Atrs__get_by_or_empty(Gfh_atr_.Bry__title); Parse_href(hctx, anch_head); + Parse_cls(anch_head); Parse_capt(tag_rdr, anch_head); Parse_title(title_atr); hdoc_wkr.On_lnki(this); return true; } - private void Parse_href(Xoh_hdoc_ctx hctx, Html_tag anch_head) { - href_itm.Parse(rdr.Err_wkr(), hctx, anch_head); + private void Parse_href(Xoh_hdoc_ctx hctx, Gfh_tag anch_head) { + href_itm.Parse(rdr.Err_wkr(), hctx, src, anch_head); this.href_bgn = href_itm.Ttl_bgn(); this.href_end = href_itm.Ttl_end(); switch (href_itm.Tid()) { - case Xoh_anch_href_itm.Tid__wiki: case Xoh_anch_href_itm.Tid__site: + case Xoh_anch_href_data.Tid__wiki: case Xoh_anch_href_data.Tid__site: this.href_ns_id = href_itm.Ttl_ns_id(); this.href_src = href_itm.Ttl_full_txt(); this.href_bgn = 0; @@ -78,9 +83,18 @@ public class Xoh_lnki_parser { break; } } - private void Parse_capt(Html_tag_rdr tag_rdr, Html_tag anch_head) { + private void Parse_cls(Gfh_tag anch_head) { + byte[] cls_bry = anch_head.Atrs__get_as_bry(Gfh_atr_.Bry__class); + byte cls_tid = Cls__trie.Match_byte_or(cls_bry, 0, cls_bry.length, Byte_.Max_value_127); + switch (cls_tid) { + case Cls_tid__main: this.tid_is_ctg_main = true; break; + case Cls_tid__tree: this.tid_is_ctg_tree = true; break; + case Cls_tid__xnav: this.tid_is_ctg_xnav = true; break; + } + } + private void Parse_capt(Gfh_tag_rdr tag_rdr, Gfh_tag anch_head) { this.capt_bgn = anch_head.Src_end(); // capt starts after - Html_tag anch_tail = tag_rdr.Tag__move_fwd_tail(Html_tag_.Id__a); // + Gfh_tag anch_tail = tag_rdr.Tag__move_fwd_tail(Gfh_tag_.Id__a); // this.capt_end = anch_tail.Src_bgn(); // get capt between "" and " this.src_end = anch_tail.Src_end(); // skip ns in href / capt @@ -93,7 +107,7 @@ public class Xoh_lnki_parser { } } // get text splits - this.text_tid = href_itm.Tid() == Xoh_anch_href_itm.Tid__anch + this.text_tid = href_itm.Tid() == Xoh_anch_href_data.Tid__anch ? Xoh_anch_capt_itm.Tid__diff : capt_itm.Parse(rdr, capt_has_ns, href_src, href_bgn, href_end, src, capt_bgn, capt_end); int split_pos = capt_itm.Split_pos(); @@ -115,7 +129,7 @@ public class Xoh_lnki_parser { break; } } - private void Parse_title(Html_atr title_atr) { + private void Parse_title(Gfh_atr title_atr) { // Tfds.Dbg(Bry_.Mid(href_src, href_bgn, href_end), Bry_.Mid(src, capt_bgn, capt_end), Bry_.Mid(src, title_bgn, title_end)); title_bgn = title_atr.Val_bgn(); title_end = title_atr.Val_end(); if (href_ns_name != null) { // ns_name exists @@ -144,4 +158,11 @@ public class Xoh_lnki_parser { , Title__diff = 2 , Title__missing = 3 ; + public static final byte[] Cls_bry__main = Bry_.new_a7("internal"), Cls_bry__xnav = Bry_.new_a7("xowa_nav"); + private static final byte Cls_tid__main = 0, Cls_tid__tree = 1, Cls_tid__xnav = 2; + private static final Btrie_slim_mgr Cls__trie = Btrie_slim_mgr.cs() + .Add_bry_byte(Cls_bry__main, Cls_tid__main) + .Add_bry_byte(gplx.xowa.wikis.ctgs.Xoa_ctg_mgr.Html__cls__bry, Cls_tid__tree) + .Add_bry_byte(Cls_bry__xnav, Cls_tid__xnav) + ; } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/Xoh_lnki_dict_.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/Xoh_lnki_dict_.java index 704ec1121..861f76e86 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/Xoh_lnki_dict_.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/Xoh_lnki_dict_.java @@ -24,6 +24,6 @@ public class Xoh_lnki_dict_ { gplx.xowa.htmls.core.hzips.Xoh_hzip_int_.Encode(1, bfr, ns_id + 2); } public static int Ns_decode(Bry_rdr rdr) { - return rdr.Read_int_by_base85(1) - 2; + return rdr.Read_hzip_int(1) - 2; } } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/Xoh_lnki_hzip.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/Xoh_lnki_hzip.java index 4bb4a36b7..17acdd2e5 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/Xoh_lnki_hzip.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/Xoh_lnki_hzip.java @@ -22,16 +22,20 @@ import gplx.langs.htmls.*; import gplx.xowa.htmls.hrefs.*; import gplx.xowa.wiki import gplx.xowa.wikis.nss.*; import gplx.xowa.parsers.lnkis.*; public class Xoh_lnki_hzip implements Xoh_hzip_wkr, Gfo_poolable_itm { private final Bry_bfr tmp_bfr = Bry_bfr.new_(32); + public int Tid() {return Xoh_hzip_dict_.Tid__lnki;} public String Key() {return Xoh_hzip_dict_.Key__lnki;} public byte[] Hook() {return hook;} private byte[] hook; - public Gfo_poolable_itm Encode(Xoh_hzip_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, boolean wkr_is_root, byte[] src, Object data_obj) { - Xoh_lnki_parser data = (Xoh_lnki_parser)data_obj; - Xoh_anch_href_itm href = data.Href_itm(); - int ns_id = href.Ttl_ns_id(); ; + public Gfo_poolable_itm Encode1(Xoh_hzip_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, boolean wkr_is_root, byte[] src, Object data_obj) { + Xoh_lnki_data data = (Xoh_lnki_data)data_obj; + Xoh_anch_href_data href = data.Href_itm(); + int ns_id = href.Ttl_ns_id(); + flag_bldr.Set_as_bool(Flag__tid_is_ctg_main , data.Tid_is_ctg_main()); + flag_bldr.Set_as_bool(Flag__tid_is_ctg_tree , data.Tid_is_ctg_tree()); + flag_bldr.Set_as_bool(Flag__tid_is_ctg_xnav , data.Tid_is_ctg_xnav()); flag_bldr.Set_as_bool(Flag__title_missing_ns , data.Title_missing_ns()); flag_bldr.Set_as_bool(Flag__ttl_is_main_page , href.Ttl_is_main_page()); boolean ns_custom_exists= flag_bldr.Set_as_bool(Flag__ns_custom_exists , href.Ttl_ns_custom() != null); - int title_tid = flag_bldr.Set_as_int(Flag__title_tid , href.Tid() == Xoh_anch_href_itm.Tid__anch ? Xoh_lnki_parser.Title__href : data.Title_tid()); // anchs never have title, so don't bother setting flag; + int title_tid = flag_bldr.Set_as_int(Flag__title_tid , href.Tid() == Xoh_anch_href_data.Tid__anch ? Xoh_lnki_data.Title__href : data.Title_tid()); // anchs never have title, so don't bother setting flag; flag_bldr.Set_as_bool(Flag__capt_has_ns , data.Capt_has_ns()); boolean ns_is_not_main = flag_bldr.Set_as_bool(Flag__ns_is_not_main , ns_id != Xow_ns_.Tid__main); int href_type = flag_bldr.Set_as_int(Flag__href_type , href.Tid()); @@ -43,7 +47,7 @@ public class Xoh_lnki_hzip implements Xoh_hzip_wkr, Gfo_poolable_itm { int flag = flag_bldr.Encode(); bfr.Add(hook); bfr.Add_hzip_int(1, flag); - if (href_type == Xoh_anch_href_itm.Tid__site) bfr.Add_hzip_mid(src, href.Site_bgn(), href.Site_end()); + if (href_type == Xoh_anch_href_data.Tid__site) bfr.Add_hzip_mid(src, href.Site_bgn(), href.Site_end()); if (ns_is_not_main) Xoh_lnki_dict_.Ns_encode(bfr, ns_id); if (ns_custom_exists) bfr.Add_hzip_bry(href.Ttl_ns_custom()); switch (text_type) { @@ -57,13 +61,16 @@ public class Xoh_lnki_hzip implements Xoh_hzip_wkr, Gfo_poolable_itm { bfr.Add_hzip_mid(data.Text_1_src(), data.Text_1_bgn(), data.Text_1_end()); break; } - if (title_tid == Xoh_lnki_parser.Title__diff) bfr.Add_hzip_mid(src, data.Title_bgn(), data.Title_end()); + if (title_tid == Xoh_lnki_data.Title__diff) bfr.Add_hzip_mid(src, data.Title_bgn(), data.Title_end()); hctx.Hzip__stat().Lnki_add(data.Src_end() - data.Src_bgn(), bfr.Len() - bfr_bgn, flag); return this; } - public int Decode(Bry_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, boolean wkr_is_root, Bry_rdr rdr, byte[] src, int src_bgn, int src_end) { - int flag = rdr.Read_int_by_base85(1); flag_bldr.Decode(flag); + public void Decode1(Bry_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, Bry_rdr rdr, byte[] src, int src_bgn, int src_end, Xoh_data_itm data_itm) { + int flag = rdr.Read_hzip_int(1); flag_bldr.Decode(flag); + boolean tid_is_ctg_main = flag_bldr.Get_as_bool(Flag__tid_is_ctg_main); + boolean tid_is_ctg_tree = flag_bldr.Get_as_bool(Flag__tid_is_ctg_tree); + boolean tid_is_ctg_xnav = flag_bldr.Get_as_bool(Flag__tid_is_ctg_xnav); boolean title_missing_ns = flag_bldr.Get_as_bool(Flag__title_missing_ns); boolean ttl_is_main_page = flag_bldr.Get_as_bool(Flag__ttl_is_main_page); boolean ns_custom_exists = flag_bldr.Get_as_bool(Flag__ns_custom_exists); @@ -74,7 +81,7 @@ public class Xoh_lnki_hzip implements Xoh_hzip_wkr, Gfo_poolable_itm { int capt_cs0_tid = flag_bldr.Get_as_int(Flag__capt_cs0_tid); byte text_type = flag_bldr.Get_as_byte(Flag__text_type); - int site_bgn = -1, site_end = -1; if (href_type == Xoh_anch_href_itm.Tid__site) {site_bgn = rdr.Pos(); site_end = rdr.Find_fwd_lr();} + int site_bgn = -1, site_end = -1; if (href_type == Xoh_anch_href_data.Tid__site) {site_bgn = rdr.Pos(); site_end = rdr.Find_fwd_lr();} int ns_id = ns_is_not_main ? Xoh_lnki_dict_.Ns_decode(rdr) : Xow_ns_.Tid__main; byte[] ns_custom_bry = ns_custom_exists ? rdr.Read_bry_to() : null; int text_0_bgn = rdr.Pos(); int text_0_end = rdr.Find_fwd_lr(); @@ -84,19 +91,19 @@ public class Xoh_lnki_hzip implements Xoh_hzip_wkr, Gfo_poolable_itm { text_1_bgn = rdr.Pos(); text_1_end = rdr.Find_fwd_lr(); break; } - byte[] title_bry = title_tid == Xoh_lnki_parser.Title__diff ? rdr.Read_bry_to() : null; + byte[] title_bry = title_tid == Xoh_lnki_data.Title__diff ? rdr.Read_bry_to() : null; byte[] href_bry = text_type == Xoh_anch_capt_itm.Tid__less ? tmp_bfr.Add_mid(src, text_0_bgn, text_0_end).Add_mid(src, text_1_bgn, text_1_end).To_bry_and_clear() : Bry_.Mid(src, text_0_bgn, text_0_end); byte[] ns_bry = null; switch (href_type) { - case Xoh_anch_href_itm.Tid__anch: break; - case Xoh_anch_href_itm.Tid__inet: break; //href_bry = Gfo_url_encoder_.Href_qarg.Encode(href_bry); break; - case Xoh_anch_href_itm.Tid__wiki: - case Xoh_anch_href_itm.Tid__site: + case Xoh_anch_href_data.Tid__anch: break; + case Xoh_anch_href_data.Tid__inet: break; //href_bry = Gfo_url_encoder_.Href_qarg.Encode(href_bry); break; + case Xoh_anch_href_data.Tid__wiki: + case Xoh_anch_href_data.Tid__site: if (ns_custom_exists) { ns_bry = ns_custom_bry; - tmp_bfr.Add(Xoa_ttl.Replace_spaces(ns_bry)).Add_byte_colon(); // NOTE: Replace_space to handle ns_custom_bry like "Image talk" + tmp_bfr.Add(Xoa_ttl.Replace_spaces(ns_bry)).Add_byte_colon(); // NOTE: Replace_spaces to handle ns_custom_bry like "Image talk" } else { if (ns_id == Xow_ns_.Tid__main) { @@ -109,67 +116,88 @@ public class Xoh_lnki_hzip implements Xoh_hzip_wkr, Gfo_poolable_itm { tmp_bfr.Add(ns.Name_db()).Add_byte_colon(); } } - Gfo_url_encoder encoder = href_type == Xoh_anch_href_itm.Tid__wiki ? Gfo_url_encoder_.Href : Gfo_url_encoder_.Href_qarg; - encoder.Encode(tmp_bfr, href_bry); // encode for href; EX: "/wiki/A's" -> "/wiki/A&27s" + Gfo_url_encoder encoder = href_type == Xoh_anch_href_data.Tid__wiki ? Gfo_url_encoder_.Href : Gfo_url_encoder_.Href_qarg; // NOTE: lnki vs lnke will encode entities differently + int href_end = href_bry.length; + if (tid_is_ctg_xnav) // NOTE: for ctg_xnav, only encode title, not its query arguments; "?" x> "%3F" or "=" x> "%3D" or "sortkey=A B" -> "sortkey=A_B"; DATE:2015-12-28 + href_end = Bry_find_.Find_fwd(href_bry, Byte_ascii.Question, 0, href_end); if (href_end == Bry_find_.Not_found) rdr.Err_wkr().Fail("encoded question not found in category xnav link", "href", href_bry); + encoder.Encode(tmp_bfr, href_bry, 0, href_end); // encode for href; EX: "/wiki/A's" -> "/wiki/A&27s" + if (tid_is_ctg_xnav) + tmp_bfr.Add_mid(href_bry, href_end, href_bry.length); href_bry = tmp_bfr.To_bry_and_clear(); break; } byte[] capt_bry = Xoh_lnki_hzip_.Bld_capt(tmp_bfr, href_type, text_type, capt_has_ns, capt_cs0_tid, ns_bry, src, text_0_bgn, text_0_end, src, text_1_bgn, text_1_end); - if (href_type != Xoh_anch_href_itm.Tid__anch) { + if (href_type != Xoh_anch_href_data.Tid__anch) { switch (title_tid) { - case Xoh_lnki_parser.Title__missing: title_bry = null; break; - case Xoh_lnki_parser.Title__diff: break; - case Xoh_lnki_parser.Title__href: title_bry = Gfo_url_encoder_.Href.Decode(href_bry); break; - case Xoh_lnki_parser.Title__capt: title_bry = !capt_has_ns && !title_missing_ns && ns_bry != null ? Bry_.Add(ns_bry, Byte_ascii.Colon_bry, capt_bry) : capt_bry; break; + case Xoh_lnki_data.Title__missing: title_bry = null; break; + case Xoh_lnki_data.Title__diff: break; + case Xoh_lnki_data.Title__href: + title_bry = tid_is_ctg_main + ? Gfo_url_encoder_.Href.Decode(capt_bry) + : Gfo_url_encoder_.Href.Decode(href_bry); + break; + case Xoh_lnki_data.Title__capt: + title_bry = !capt_has_ns && !title_missing_ns && ns_bry != null + ? Bry_.Add(ns_bry, Byte_ascii.Colon_bry, capt_bry) + : capt_bry; + break; } } // gen html - bfr.Add(Html_bldr_.Bry__a_lhs_w_href); + bfr.Add(Gfh_bldr_.Bry__a_lhs_w_href); switch (href_type) { - case Xoh_anch_href_itm.Tid__anch: + case Xoh_anch_href_data.Tid__anch: bfr.Add_byte(Byte_ascii.Hash); // "#" break; - case Xoh_anch_href_itm.Tid__site: + case Xoh_anch_href_data.Tid__site: bfr.Add(Xoh_href_.Bry__site).Add_mid(src, site_bgn, site_end); bfr.Add(Xoh_href_.Bry__wiki); break; - case Xoh_anch_href_itm.Tid__wiki: + case Xoh_anch_href_data.Tid__wiki: bfr.Add(Xoh_href_.Bry__wiki); break; } - bfr.Add(href_bry); + bfr.Add(href_bry); + if (tid_is_ctg_main) + bfr.Add(Gfh_bldr_.Bry__cls__nth).Add(Xoh_lnki_data.Cls_bry__main); + else if (tid_is_ctg_tree) + bfr.Add(Gfh_bldr_.Bry__cls__nth).Add(gplx.xowa.wikis.ctgs.Xoa_ctg_mgr.Html__cls__bry); + else if (tid_is_ctg_xnav) + bfr.Add(Gfh_bldr_.Bry__cls__nth).Add(Xoh_lnki_data.Cls_bry__xnav); if (!hctx.Mode_is_diff()) - bfr.Add(Html_bldr_.Bry__id__nth).Add_str_a7(gplx.xowa.parsers.lnkis.redlinks.Xopg_redlink_lnki_list.Lnki_id_prefix).Add_int_variable(hctx.Lnki__uid__nxt()); - if ( href_type != Xoh_anch_href_itm.Tid__anch) { // anchs never have title; + bfr.Add(Gfh_bldr_.Bry__id__nth).Add_str_a7(gplx.xowa.parsers.lnkis.redlinks.Xopg_redlink_lnki_list.Lnki_id_prefix).Add_int_variable(hctx.Uid__lnki_nxt()); + if ( href_type != Xoh_anch_href_data.Tid__anch) { // anchs never have title; if (title_bry != null) { - bfr.Add(Html_bldr_.Bry__title__nth); - Html_utl.Escape_html_to_bfr(bfr, title_bry, 0, title_bry.length, Bool_.N, Bool_.N, Bool_.N, Bool_.Y, Bool_.N); + bfr.Add(Gfh_bldr_.Bry__title__nth); + Gfh_utl.Escape_html_to_bfr(bfr, title_bry, 0, title_bry.length, Bool_.N, Bool_.N, Bool_.N, Bool_.Y, Bool_.N); } } - bfr.Add(Html_bldr_.Bry__lhs_end_head_w_quote); + bfr.Add(Gfh_bldr_.Bry__lhs_end_head_w_quote); bfr.Add(capt_bry); - bfr.Add(Html_bldr_.Bry__a_rhs); - return rdr.Pos(); + bfr.Add(Gfh_bldr_.Bry__a_rhs); } public void Pool__rls () {pool_mgr.Rls_fast(pool_idx);} private Gfo_poolable_mgr pool_mgr; private int pool_idx; public Gfo_poolable_itm Pool__make (Gfo_poolable_mgr mgr, int idx, Object[] args) {Xoh_lnki_hzip rv = new Xoh_lnki_hzip(); rv.pool_mgr = mgr; rv.pool_idx = idx; rv.hook = (byte[])args[0]; return rv;} - private final Int_flag_bldr flag_bldr = new Int_flag_bldr().Pow_ary_bld_ (1 , 1, 1, 2, 1 , 1, 2, 2, 2); + private final Int_flag_bldr flag_bldr = new Int_flag_bldr().Pow_ary_bld_ (1, 1, 1, 1 , 1, 1, 2, 1 , 1, 2, 2, 2); private static final int // SERIALIZED - Flag__title_missing_ns = 0 // [[c:]] -> "/site/commons.wikimedia.org/wiki/" - , Flag__ttl_is_main_page = 1 // [[c:]] -> "/site/commons.wikimedia.org/wiki/" - , Flag__ns_custom_exists = 2 // [[c:category:a]] -> "/site/commons.wikimedia.org/wiki/category:a" - , Flag__title_tid = 3 // href, capt, diff, empty; [//en.wikipedia.org] where en.w is local - , Flag__capt_has_ns = 4 // "A" vs "Help:A" - , Flag__ns_is_not_main = 5 - , Flag__href_type = 6 // "wiki", "site", "anch", "inet" - , Flag__capt_cs0_tid = 7 // exact, lower, upper - , Flag__text_type = 8 // "same", "diff", "more", "less" + Flag__tid_is_ctg_main = 0 + , Flag__tid_is_ctg_tree = 1 + , Flag__tid_is_ctg_xnav = 2 + , Flag__title_missing_ns = 3 // + , Flag__ttl_is_main_page = 4 // [[c:]] -> "/site/commons.wikimedia.org/wiki/" + , Flag__ns_custom_exists = 5 // [[c:category:a]] -> "/site/commons.wikimedia.org/wiki/category:a" + , Flag__title_tid = 6 // href, capt, diff, empty; [//en.wikipedia.org] where en.w is local + , Flag__capt_has_ns = 7 // "A" vs "Help:A" + , Flag__ns_is_not_main = 8 + , Flag__href_type = 9 // "wiki", "site", "anch", "inet" + , Flag__capt_cs0_tid = 10 // exact, lower, upper + , Flag__text_type = 11 // "same", "diff", "more", "less" ; } class Xoh_lnki_hzip_ { public static byte[] Bld_capt(Bry_bfr tmp_bfr, byte href_type, byte text_type, boolean capt_has_ns, int capt_cs0, byte[] ns_bry, byte[] text_0_src, int text_0_bgn, int text_0_end, byte[] capt_src, int text_1_bgn, int text_1_end) { - if ( href_type == Xoh_anch_href_itm.Tid__anch + if ( href_type == Xoh_anch_href_data.Tid__anch && text_type != Xoh_anch_capt_itm.Tid__diff ) tmp_bfr.Add_byte(Byte_ascii.Hash); if (capt_has_ns && ns_bry != null) diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/Xoh_lnki_hzip__ns__tst.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/Xoh_lnki_hzip__ns__tst.java index f01bcb0c4..5252805db 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/Xoh_lnki_hzip__ns__tst.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/Xoh_lnki_hzip__ns__tst.java @@ -67,4 +67,13 @@ public class Xoh_lnki_hzip__ns__tst { @Test public void Alias__url_encoding() { // EX: [[Image:Aü.png|b]] fxt.Test__bicode("~${-f)Image~Aü.png~b~", "b"); } + @Test public void Ctg__main() { // links at bottom of pages in main ns; DATE:2015-12-28 + fxt.Test__bicode("~$|&*G1A~", "A"); + } + @Test public void Ctg__tree() { // links on Category pages; + fxt.Test__bicode("~$|#q_1A~", "A"); + } + @Test public void Ctg__xnav() { // previous / next 200 links on Category pages + fxt.Test__bicode("~$|\"3/1A B?pageuntil=C, D#mw-pages~previous 200~Category:A_B~", "previous 200"); + } } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/anchs/Xoh_anch_capt_itm_tst.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/anchs/Xoh_anch_capt_itm_tst.java index fca1ba219..2a8e647cf 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/anchs/Xoh_anch_capt_itm_tst.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/anchs/Xoh_anch_capt_itm_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 . */ package gplx.xowa.htmls.core.wkrs.lnkis.anchs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; import gplx.xowa.htmls.core.wkrs.lnkis.*; -import org.junit.*; import gplx.core.brys.*; import gplx.langs.htmls.parsers.*; +import org.junit.*; import gplx.core.brys.*; import gplx.langs.htmls.docs.*; public class Xoh_anch_capt_itm_tst { private final Xoh_anch_capt_itm_fxt fxt = new Xoh_anch_capt_itm_fxt(); @Test public void Basic__same() {fxt.Test__match("Abc" , "Abc", Xoh_anch_capt_itm.Tid__same);} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/anchs/Xoh_anch_href_itm.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/anchs/Xoh_anch_href_data.java similarity index 81% rename from 400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/anchs/Xoh_anch_href_itm.java rename to 400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/anchs/Xoh_anch_href_data.java index 2a1de755f..9586c8925 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/anchs/Xoh_anch_href_itm.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/anchs/Xoh_anch_href_data.java @@ -17,14 +17,14 @@ along with this program. If not, see . */ package gplx.xowa.htmls.core.wkrs.lnkis.anchs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; import gplx.xowa.htmls.core.wkrs.lnkis.*; import gplx.core.brys.*; import gplx.core.btries.*; -import gplx.langs.htmls.*; import gplx.langs.htmls.parsers.*; import gplx.langs.htmls.encoders.*; +import gplx.langs.htmls.*; import gplx.langs.htmls.docs.*; import gplx.langs.htmls.encoders.*; import gplx.xowa.wikis.ttls.*; import gplx.xowa.wikis.nss.*; -public class Xoh_anch_href_itm implements Xoh_itm_parser { +public class Xoh_anch_href_data implements Xoh_itm_parser { private final Bry_rdr rdr = new Bry_rdr().Dflt_dlm_(Byte_ascii.Slash); - // private final Xoa_url tmp_url = Xoa_url.blank(); public void Fail_throws_err_(boolean v) {rdr.Fail_throws_err_(v);}// TEST - public Html_atr Atr() {return atr;} private Html_atr atr; + public Gfh_atr Atr() {return atr;} private Gfh_atr atr; public byte Tid() {return tid;} private byte tid; + public byte[] Rng_src() {return rng_src;} private byte[] rng_src; public int Rng_bgn() {return rng_bgn;} private int rng_bgn; public int Rng_end() {return rng_end;} private int rng_end; public int Site_bgn() {return site_bgn;} private int site_bgn; @@ -37,22 +37,21 @@ public class Xoh_anch_href_itm implements Xoh_itm_parser { public byte[] Ttl_ns_custom() {return ttl_ns_custom;} private byte[] ttl_ns_custom; public int Ttl_bgn() {return ttl_bgn;} private int ttl_bgn; public int Ttl_end() {return ttl_end;} private int ttl_end; - private void Clear() { + public void Clear() { tid = Tid__wiki; rng_bgn = rng_end = site_bgn = site_end = ttl_bgn = ttl_end = -1; ttl_full_txt = ttl_page_db = ttl_ns_custom = null; ttl_ns_id = Xow_ns_.Tid__main; } - public boolean Parse(Bry_err_wkr err_wkr, Xoh_hdoc_ctx hctx, Html_tag tag) { - this.atr = tag.Atrs__get_by_or_empty(Html_atr_.Bry__href); - return Parse(err_wkr, hctx, atr.Val_bgn(), atr.Val_end()); + public boolean Parse(Bry_err_wkr err_wkr, Xoh_hdoc_ctx hctx, byte[] src, Gfh_tag tag) { + this.atr = tag.Atrs__get_by_or_empty(Gfh_atr_.Bry__href); + return Parse(err_wkr, hctx, src, atr.Val_bgn(), atr.Val_end()); } - public boolean Parse(Bry_err_wkr err_wkr, Xoh_hdoc_ctx hctx, int rng_bgn, int rng_end) { - this.Clear(); + public boolean Parse(Bry_err_wkr err_wkr, Xoh_hdoc_ctx hctx, byte[] src, int rng_bgn, int rng_end) { if (rng_bgn == -1) return false; // no href; return; EX: vs + this.rng_src = src; rdr.Init_by_wkr(err_wkr, "href", rng_bgn, rng_end); this.rng_bgn = rng_bgn; this.rng_end = rng_end; - byte[] src = err_wkr.Src(); if (rng_end == rng_bgn) { // handle empty String separately; EX: href="" tid = Tid__inet; ttl_bgn = ttl_end = 0; @@ -85,16 +84,8 @@ public class Xoh_anch_href_itm implements Xoh_itm_parser { return true; } private void Parse_inet(Xoh_hdoc_ctx hctx, byte[] src) { -// hctx.Wiki__url_parser().Parse(tmp_url, src); -// Tfds.Write(tmp_url.Tid()); -// if (tmp_url.Tid() == Xoa_url_.Tid_page) { -// Tfds.Write(tmp_url.Wiki_bry()); -// Tfds.Write(tmp_url.Page_bry()); -// } -// else { tid = Tid__inet; ttl_bgn = rng_bgn; -// } } private void Parse_ttl(Xow_ttl_parser ttl_parser, byte[] src) { boolean ttl_is_empty = ttl_end - ttl_bgn == 0; // NOTE: ttl can be empty; EX: "href='/site/en.wikipedia.org/wiki/'" "href='/wiki/'" @@ -104,13 +95,13 @@ public class Xoh_anch_href_itm implements Xoh_itm_parser { else { ttl_full_txt = Gfo_url_encoder_.Href_wo_anchor.Decode(src, ttl_bgn, ttl_end); switch (tid) { - case Xoh_anch_href_itm.Tid__anch: - case Xoh_anch_href_itm.Tid__inet: + case Xoh_anch_href_data.Tid__anch: + case Xoh_anch_href_data.Tid__inet: ttl_ns_id = Xow_ns_.Tid__main; ttl_page_db = ttl_full_txt; break; - case Xoh_anch_href_itm.Tid__wiki: - case Xoh_anch_href_itm.Tid__site: + case Xoh_anch_href_data.Tid__wiki: + case Xoh_anch_href_data.Tid__site: int ttl_full_len = ttl_full_txt.length; int colon_pos = Bry_find_.Find_fwd(ttl_full_txt, Byte_ascii.Colon, 0, ttl_full_len); ttl_page_db = ttl_full_txt; @@ -133,6 +124,9 @@ public class Xoh_anch_href_itm implements Xoh_itm_parser { } } } + public void Init_by_decode(byte[] anch_href_bry) { + this.rng_src = anch_href_bry; this.rng_bgn = 0; this.rng_end = rng_src.length; + } public static final byte Tid__wiki = 0 // EX: href="/wiki/A" , Tid__site = 1 // EX: href="/site/en.wikipedia.org/wiki/A" diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/anchs/Xoh_anch_href_itm_tst.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/anchs/Xoh_anch_href_data_tst.java similarity index 87% rename from 400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/anchs/Xoh_anch_href_itm_tst.java rename to 400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/anchs/Xoh_anch_href_data_tst.java index e7e430be5..c7f8fca87 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/anchs/Xoh_anch_href_itm_tst.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/anchs/Xoh_anch_href_data_tst.java @@ -17,8 +17,8 @@ along with this program. If not, see . */ package gplx.xowa.htmls.core.wkrs.lnkis.anchs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; import gplx.xowa.htmls.core.wkrs.lnkis.*; import org.junit.*; import gplx.core.brys.*; import gplx.xowa.wikis.ttls.*; -public class Xoh_anch_href_itm_tst { - private final Xoh_anch_href_itm_fxt fxt = new Xoh_anch_href_itm_fxt(); +public class Xoh_anch_href_data_tst { + private final Xoh_anch_href_data_fxt fxt = new Xoh_anch_href_data_fxt(); @Test public void Site() { fxt.Test__parse("/site/A/wiki/B", "A", "B"); } @@ -44,7 +44,7 @@ public class Xoh_anch_href_itm_tst { fxt.Test__parse__fail("/site/A/B/C", "failed check: chk='wiki/' page='Main_Page' sect='href' text=/site/A/B/C"); } } -class Xoh_anch_href_itm_fxt extends Xoh_itm_parser_fxt { private final Xoh_anch_href_itm parser = new Xoh_anch_href_itm(); +class Xoh_anch_href_data_fxt extends Xoh_itm_parser_fxt { private final Xoh_anch_href_data parser = new Xoh_anch_href_data(); @Override public Xoh_itm_parser Parser_get() {return parser;} public void Test__parse(String src_str, String expd_site, String expd_page) { Exec_parse(src_str); @@ -52,6 +52,6 @@ class Xoh_anch_href_itm_fxt extends Xoh_itm_parser_fxt { private final Xoh_anch Tfds.Eq_str(expd_page, String_.new_u8(src, parser.Ttl_bgn(), parser.Ttl_end())); } @Override public void Exec_parse_hook(Bry_err_wkr err_wkr, Xoh_hdoc_ctx hctx, int src_bgn, int src_end) { - parser.Parse(err_wkr, hctx, src_bgn, src_end); + parser.Parse(err_wkr, hctx, err_wkr.Src(), src_bgn, src_end); } } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_arg_img_core__basic.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_arg_img_core__basic.java index cb8b5d090..9f859b2a0 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_arg_img_core__basic.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_arg_img_core__basic.java @@ -17,10 +17,10 @@ along with this program. If not, see . */ package gplx.xowa.htmls.core.wkrs.lnkis.htmls; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; import gplx.xowa.htmls.core.wkrs.lnkis.*; import gplx.core.brys.fmtrs.*; -public class Xoh_arg_img_core__basic extends gplx.core.brys.Bfr_arg_base implements Xoh_arg_img_core { +public class Xoh_arg_img_core__basic implements gplx.core.brys.Bfr_arg, Xoh_arg_img_core { private byte[] src; private int w, h; public Xoh_arg_img_core Init(int uid, byte[] src, int w, int h) {this.src = src; this.w = w; this.h = h; return this;} - @Override public void Bfr_arg__add(Bry_bfr bfr) { + public void Bfr_arg__add(Bry_bfr bfr) { fmtr_img_atrs.Bld_bfr_many(bfr, src, w, h); } private Bry_fmtr fmtr_img_atrs = Bry_fmtr.new_(" src=\"~{img_src}\" width=\"~{img_w}\" height=\"~{img_h}\"", "img_src", "img_w", "img_h"); diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_arg_img_core__hdump.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_arg_img_core__hdump.java index 6902cf5c0..a7c3674dc 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_arg_img_core__hdump.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_arg_img_core__hdump.java @@ -16,13 +16,13 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.htmls.core.wkrs.lnkis.htmls; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; import gplx.xowa.htmls.core.wkrs.lnkis.*; -public class Xoh_arg_img_core__hdump extends gplx.core.brys.Bfr_arg_base implements Xoh_arg_img_core { +public class Xoh_arg_img_core__hdump implements gplx.core.brys.Bfr_arg, Xoh_arg_img_core { private int uid; public Xoh_arg_img_core Init(int uid, byte[] img_src, int img_w, int img_h) { this.uid = uid; return this; } - @Override public void Bfr_arg__add(Bry_bfr bfr) { + public void Bfr_arg__add(Bry_bfr bfr) { bfr.Add_byte_space(); bfr.Add(gplx.xowa.htmls.core.makes.Xoh_make_trie_.Bry__img); bfr.Add_int_variable(uid); diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_file_html_fmtr__base.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_file_html_fmtr__base.java index 0e746ec9d..2027e446d 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_file_html_fmtr__base.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_file_html_fmtr__base.java @@ -24,18 +24,22 @@ import gplx.xowa.parsers.lnkis.*; public class Xoh_file_html_fmtr__base implements Xoh_file_img_wkr { protected final Xoh_arg_img_core arg_img_core; private Bry_bfr scratch_bfr = Bry_bfr.reset_(128); + private final Bfr_arg__hatr_id thm_file_id = Bfr_arg__hatr_id.New("xowa_file_div_"), thm_play_id = Bfr_arg__hatr_id.New("xowa_file_play_"); public Xoh_file_html_fmtr__base() { arg_img_core = New_arg_img_core(); } @gplx.Internal @gplx.Virtual protected Xoh_arg_img_core New_arg_img_core() {return new Xoh_arg_img_core__basic();} - @gplx.Virtual public void Html_full_media(Bry_bfr tmp_bfr, byte[] a_href, byte[] a_title, Bfr_arg html) {fmtr_full_media.Bld_bfr_many(tmp_bfr, a_href, a_title, html);} + @gplx.Virtual public void Html_full_media(Bry_bfr tmp_bfr, boolean mode_is_hdump, byte[] a_href, byte[] a_title, Bfr_arg html) { + if (mode_is_hdump) a_href = Bry_.Empty; + fmtr_full_media.Bld_bfr_many(tmp_bfr, a_href, a_title, html); + } private final Bry_fmtr fmtr_full_media = Bry_fmtr.new_(String_.Concat_lines_nl_skip_last ( "~{html}" , "" ), "a_href", "a_xowa_title", "html" ); @gplx.Virtual public void Html_full_img(Bry_bfr tmp_bfr, Xoh_wtr_ctx hctx, Xoae_page page, byte[] src, Xof_file_itm xfer_itm, int uid - , byte[] a_href, byte a_cls, byte a_rel, byte[] a_title, byte[] a_xowa_title + , byte[] a_href, boolean a_href_is_file, byte a_cls, byte a_rel, byte[] a_title, byte[] a_xowa_title , int img_w, int img_h, byte[] img_src, byte[] img_alt, byte img_cls, byte[] img_cls_other ) { fmtr_full_img.Bld_bfr_many(tmp_bfr, uid @@ -44,22 +48,27 @@ public class Xoh_file_html_fmtr__base implements Xoh_file_img_wkr { } private Bry_fmtr fmtr_full_img = Bry_fmtr.new_ ( "" - + "\"~{img_alt}\"~{img_core}~{img_class}" + + "\"~{img_alt}\"~{img_core}~{img_class}" , "uid", "a_href", "a_class", "a_rel", "a_title", "a_xowa_title", "img_core", "img_alt", "img_class" ); + public byte[] Html_thumb_part_img(Bry_bfr tmp_bfr, Xoh_wtr_ctx hctx, Xoae_page page, byte[] src, Xof_file_itm xfer_itm, int uid, byte[] a_href, byte[] img_src, byte[] img_alt) { + byte[] a_title_atr = Gfh_atr_.Make(tmp_bfr, Gfh_atr_.Bry__title, xfer_itm.Lnki_ttl()); + Html_full_img(tmp_bfr, hctx, page, src, xfer_itm, uid, a_href, Bool_.N, Xoh_lnki_consts.Tid_a_cls_image, Xoh_lnki_consts.Tid_a_rel_none, a_title_atr, Xoh_file_html_fmtr__base.Escape_xowa_title(xfer_itm.Lnki_ttl()) + , xfer_itm.Html_w(), xfer_itm.Html_h(), img_src, img_alt, Xoh_img_cls_.Tid__none, null); + return tmp_bfr.To_bry_and_clear(); + } @gplx.Virtual public void Html_thumb_core(Bry_bfr tmp_bfr, boolean mode_is_hdump, int uid, byte[] div1_halign, int div2_width, byte[] div2_content) { scratch_bfr.Add(Bry_style_bgn); scratch_bfr.Add_int_variable(div2_width); scratch_bfr.Add(Bry_style_end); - thumb_div_id_atr.Bfr_arg__clear(); - if (!mode_is_hdump) - thumb_div_id_atr.Set_by_arg(thum_div_id_val.Set(Bry__id, uid)); - fmtr_thumb_core.Bld_bfr_many(tmp_bfr, thumb_div_id_atr, div1_halign, scratch_bfr.To_bry_and_clear(), div2_content); + thm_file_id.Bfr_arg__clear(); + if (mode_is_hdump) + thm_file_id.Bfr_arg__clear(); + else + thm_file_id.Set(uid); + fmtr_thumb_core.Bld_bfr_many(tmp_bfr, thm_file_id, div1_halign, scratch_bfr.To_bry_and_clear(), div2_content); } private static final byte[] Bry_style_bgn = Bry_.new_a7("style=\"width:"), Bry_style_end = Bry_.new_a7("px;\""); - private final Bfr_arg__html_atr thumb_div_id_atr = new Bfr_arg__html_atr(Html_atr_.Bry__id); - private final Bfr_arg__id thum_div_id_val = new Bfr_arg__id(); - private final byte[] Bry__id = Bry_.new_a7("xowa_file_div_"); protected Bry_fmtr fmtr_thumb_core = Bry_fmtr.new_(String_.Concat_lines_nl_skip_last // REF.MW: Linker.php|makeImageLink2 ( "
        " , " " @@ -69,39 +78,27 @@ public class Xoh_file_html_fmtr__base implements Xoh_file_img_wkr { , "" ), "div_id", "div1_halign", "style", "div2_content" ); - public byte[] Html_thumb_part_img(Bry_bfr tmp_bfr, Xoae_page page, Xof_file_itm xfer_itm, Xop_lnki_tkn lnki, int uid, byte[] a_href, byte[] img_src, byte[] img_alt) { - Html_thumb_part_img(tmp_bfr, page, xfer_itm, uid, a_href, lnki.Ttl().Page_txt(), xfer_itm.Html_w(), xfer_itm.Html_h(), img_src, img_alt); - return tmp_bfr.To_bry_and_clear(); - } - public void Html_thumb_part_img(Bry_bfr tmp_bfr, Xoae_page page, Xof_file_itm xfer_itm, int uid, byte[] a_href, byte[] a_title, int img_w, int img_h, byte[] img_src, byte[] img_alt) { - fmtr_thumb_part_img.Bld_bfr_many(tmp_bfr, uid, a_href, a_title, arg_img_core.Init(uid, img_src, img_w, img_h), img_alt); - } - private Bry_fmtr fmtr_thumb_part_img = Bry_fmtr.new_(String_.Concat_lines_nl_skip_last - ( "" - , "
        \"~{img_alt}\"" - , "
        " - ), "uid", "a_href", "a_title", "img_core", "img_alt"); - public void Html_thumb_part_caption(Bry_bfr tmp_bfr, byte[] magnify_btn, Bfr_arg caption) {fmtr_thumb_part_caption.Bld_bfr_many(tmp_bfr, magnify_btn, caption);} private Bry_fmtr fmtr_thumb_part_caption = Bry_fmtr.new_(String_.Concat_lines_nl_skip_last ( "" - , "
        ~{magnify_btn}" - , " ~{caption}" + , "
        ~{magnify_btn}~{caption}" , "
        " ), "magnify_btn", "caption"); public void Html_thumb_file_image(Bry_bfr tmp_bfr, byte[] thumb_image, byte[] caption, byte[] alt) {fmtr_thumb_file_image.Bld_bfr_many(tmp_bfr, thumb_image, caption, alt);} - private Bry_fmtr fmtr_thumb_file_image = Bry_fmtr.new_(" ~{thumb_image}~{caption}~{alt}", "thumb_image", "caption", "alt"); + private final Bry_fmtr fmtr_thumb_file_image = Bry_fmtr.new_(" ~{thumb_image}~{caption}~{alt}", "thumb_image", "caption", "alt"); public void Html_thumb_file_audio(Bry_bfr tmp_bfr, byte[] caption, byte[] alt, byte[] play_btn, byte[] audio_info) {fmtr_thumb_file_audio.Bld_bfr_many(tmp_bfr, caption, alt, play_btn, audio_info);} private Bry_fmtr fmtr_thumb_file_audio = Bry_fmtr.new_(String_.Concat_lines_nl_skip_last - ( "
        ~{play_btn}~{audio_info}" + ( "
        ~{play_btn}~{audio_info}" , "
        ~{caption}~{alt}" ), "caption", "alt", "play_btn", "audio_info"); public void Html_thumb_file_video(Bry_bfr tmp_bfr, byte[] play_btn, byte[] video_thumb, byte[] caption, byte[] alt) {fmtr_thumb_file_video.Bld_bfr_many(tmp_bfr, caption, alt, play_btn, video_thumb);} - private Bry_fmtr fmtr_thumb_file_video = Bry_fmtr.new_(String_.Concat_lines_nl_skip_last - ( "
        ~{video_thumb}~{play_btn}" + private final Bry_fmtr fmtr_thumb_file_video = Bry_fmtr.new_(String_.Concat_lines_nl_skip_last + ( "
        " + , "
        ~{video_thumb}" + , "
        ~{play_btn}" , "
        ~{caption}~{alt}" ), "caption", "alt", "play_btn", "video_thumb"); @@ -110,25 +107,24 @@ public class Xoh_file_html_fmtr__base implements Xoh_file_img_wkr { (String_.Concat_lines_nl_skip_last ( "" , "
        " - , "
        " - , "~{html}" + , "
        ~{html}" , "
        " ), "html"); @gplx.Virtual public void Html_thumb_part_magnify(Bry_bfr tmp_bfr, int uid, byte[] a_href, byte[] a_title, byte[] img_src) { - fmtr_thumb_part_magnify.Bld_bfr_many(tmp_bfr, a_href, a_title, img_src); + fmtr_thumb_part_magnify.Bld_bfr_many(tmp_bfr, a_href, a_title); } - private Bry_fmtr fmtr_thumb_part_magnify = Bry_fmtr.new_(String_.Concat_lines_nl_skip_last + private final Bry_fmtr fmtr_thumb_part_magnify = Bry_fmtr.new_(String_.Concat_lines_nl_skip_last ( "" - , "
        " - , " " - , " \"\"" - , " " - , "
        " - ), "a_href", "a_title", "img_src"); + , "
        " + ), "a_href", "a_title"); - @gplx.Virtual public void Html_thumb_part_info(Bry_bfr tmp_bfr, int uid, byte[] a_href, byte[] img_src) {fmtr_thumb_part_info.Bld_bfr_many(tmp_bfr, a_href, img_src);} - private Bry_fmtr fmtr_thumb_part_info = Bry_fmtr.new_(String_.Concat_lines_nl_skip_last + @gplx.Virtual public void Html_thumb_part_info(Bry_bfr tmp_bfr, int uid, boolean mode_is_hdump, byte[] a_href, byte[] img_src) { + if (mode_is_hdump) + img_src = Bry_.Empty; + fmtr_thumb_part_info.Bld_bfr_many(tmp_bfr, a_href, img_src); + } + private final Bry_fmtr fmtr_thumb_part_info = Bry_fmtr.new_(String_.Concat_lines_nl_skip_last ( "" , " " ), "a_href", "img_src"); - @gplx.Virtual public void Html_thumb_part_play(Bry_bfr tmp_bfr, int uid, int a_width, int a_max_width, byte[] a_href, byte[] a_xowa_title, byte[] img_src) { - fmtr_thumb_part_play.Bld_bfr_many(tmp_bfr, uid, a_width, a_max_width, a_href, a_xowa_title, img_src); + public void Html_thumb_part_play(Bry_bfr tmp_bfr, int uid, boolean mode_is_hdump, int a_width, int a_max_width, byte[] a_href, byte[] a_xowa_title, byte[] img_src) { + if (mode_is_hdump) { + thm_play_id.Bfr_arg__clear(); + a_href = Bry_.Empty; + img_src = Bry_.Empty; + a_width = 218; a_max_width = 220; // NOTE: hardcode widths; hdump will get actual file with from fsdb + } + else + thm_play_id.Set(uid); + fmtr_thumb_part_play.Bld_bfr_many(tmp_bfr, thm_play_id, a_width, a_max_width, a_href, a_xowa_title, img_src); } - private Bry_fmtr fmtr_thumb_part_play = Bry_fmtr.new_(String_.Concat_lines_nl_skip_last + private final Bry_fmtr fmtr_thumb_part_play = Bry_fmtr.new_(String_.Concat_lines_nl_skip_last ( "" , " " - ), "uid", "a_width", "a_max_width", "a_href", "a_xowa_title", "img_src"); + ), "id", "a_width", "a_max_width", "a_href", "a_xowa_title", "img_src"); public static final Xoh_file_html_fmtr__base Base = new Xoh_file_html_fmtr__base(); public static byte[] Escape_xowa_title(byte[] lnki_ttl) { - return gplx.langs.htmls.encoders.Gfo_url_encoder_.Href_quotes.Encode(lnki_ttl); // must encode xowa_title, particularly quotes; EX: xowa_title="A"b.png"; PAGE:en.w:Earth DATE:2015-11-27 + return Xoa_ttl.Replace_spaces(gplx.langs.htmls.encoders.Gfo_url_encoder_.Href_quotes.Encode(lnki_ttl)); // must encode xowa_title, particularly quotes; EX: xowa_title="A"b.png"; PAGE:en.w:Earth DATE:2015-11-27 } } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_file_html_fmtr__hdump.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_file_html_fmtr__hdump.java index a107a197e..5b9cd305d 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_file_html_fmtr__hdump.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_file_html_fmtr__hdump.java @@ -23,7 +23,10 @@ import gplx.xowa.htmls.core.wkrs.imgs.atrs.*; import gplx.xowa.parsers.lnkis.*; public class Xoh_file_html_fmtr__hdump extends Xoh_file_html_fmtr__base { private final Bry_bfr tmp_bfr = Bry_bfr.reset_(128); - @Override public void Html_full_img(Bry_bfr bfr, gplx.xowa.htmls.core.htmls.Xoh_wtr_ctx hctx, Xoae_page page, byte[] src, Xof_file_itm xfer_itm, int uid, byte[] a_href, byte a_cls, byte a_rel, byte[] a_title, byte[] a_xowa_title, int img_w, int img_h, byte[] img_src, byte[] img_alt, byte img_cls, byte[] img_cls_other) { + @Override public void Html_full_img(Bry_bfr bfr, gplx.xowa.htmls.core.htmls.Xoh_wtr_ctx hctx, Xoae_page page, byte[] src, Xof_file_itm xfer_itm + , int uid, byte[] a_href, boolean a_href_is_file, byte a_cls, byte a_rel, byte[] a_title, byte[] a_xowa_title + , int img_w, int img_h, byte[] img_src, byte[] img_alt, byte img_cls, byte[] img_cls_other) { + if (a_href_is_file) a_href = Bry_.Empty; tmp_bfr.Add_str_a7(" data-xoimg=\""); tmp_bfr.Add_int_digits(1, Xop_lnki_type.To_tid(xfer_itm.Lnki_type())).Add_byte_pipe(); tmp_bfr.Add_int_variable(xfer_itm.Lnki_w()).Add_byte_pipe(); @@ -31,9 +34,6 @@ public class Xoh_file_html_fmtr__hdump extends Xoh_file_html_fmtr__base { tmp_bfr.Add_double(xfer_itm.Lnki_upright()).Add_byte_pipe(); tmp_bfr.Add_double(xfer_itm.Lnki_time()).Add_byte_pipe(); tmp_bfr.Add_int_variable(xfer_itm.Lnki_page()).Add_byte_quote(); -// fmtr__img__full.Bld_bfr_many(bfr -// , a_href, Xoh_lnki_consts.A_cls_to_bry(a_cls), Xoh_lnki_consts.A_rel_to_bry(a_rel), a_title -// , img_alt, tmp_bfr.To_bry_and_clear(), arg_img_core.Init(uid, img_src, img_w, img_h), Xoh_img_cls_.To_html(img_cls, img_cls_other)); fmtr__img__full.Bld_bfr_many(bfr , a_href, Xoh_lnki_consts.A_cls_to_bry(a_cls), Xoh_lnki_consts.A_rel_to_bry(a_rel), a_title, a_xowa_title , img_alt, tmp_bfr.To_bry_and_clear(), arg_img_core.Init(uid, Bry_.Empty, 0, 0), Xoh_img_cls_.To_html(img_cls, img_cls_other)); @@ -44,6 +44,7 @@ public class Xoh_file_html_fmtr__hdump extends Xoh_file_html_fmtr__base { + "" , "a_href", "a_class", "a_rel", "a_title", "a_xowa_title", "img_alt", "img_xoimg", "img_core", "img_class" ); + // public override void Html_full_media(Bry_bfr tmp_bfr, byte[] a_href, byte[] a_title, Bfr_arg html) { // fmtr_full_media.Bld_bfr_many(tmp_bfr, a_href, a_title, html); // } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_file_img_wkr.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_file_img_wkr.java index e63f40f1e..5d35f55c3 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_file_img_wkr.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_file_img_wkr.java @@ -19,7 +19,7 @@ package gplx.xowa.htmls.core.wkrs.lnkis.htmls; import gplx.*; import gplx.xowa.* import gplx.xowa.files.*; import gplx.xowa.htmls.core.htmls.*; public interface Xoh_file_img_wkr { void Html_full_img(Bry_bfr tmp_bfr, Xoh_wtr_ctx hctx, Xoae_page page, byte[] src, Xof_file_itm xfer_itm, int uid - , byte[] a_href, byte a_cls, byte a_rel, byte[] a_title, byte[] a_xowa_title - , int img_w, int img_h, byte[] img_src, byte[] img_alt, byte img_cls, byte[] img_cls_other + , byte[] a_href, boolean a_href_is_file, byte a_cls, byte a_rel, byte[] a_title, byte[] a_xowa_title + , int img_w, int img_h, byte[] img_src, byte[] img_alt, byte img_cls, byte[] img_cls_other ); } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_file_wtr__basic.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_file_wtr__basic.java index 1e0cc11f1..86eb0bc4b 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_file_wtr__basic.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_file_wtr__basic.java @@ -65,7 +65,7 @@ public class Xoh_file_wtr__basic { img_orig_src = img_view_src = Bry_.Empty; // null out src } if (lnki.Ns_id() == Xow_ns_.Tid__media) // NOTE: regardless of ext (ogg vs jpeg) and literal status (Media vs :Media), [[Media]] links are always rendered the same way; REF.MW:Linker.php|makeMediaLinkObj; PAGE:en.w:Beethoven; EX: [[:Media:De-Ludwig_van_Beethoven.ogg|listen]]); [[File:Beethoven 3.jpg|The [[Media:BeethovenWithLyreGuitar( W. J. Mahler - 1804).jpg|complete painting]]...]] - this.Write_file_ns_media(bfr, ctx, src, lnki, img_orig_src); + this.Write_file_ns_media(bfr, ctx, hctx, src, lnki, img_orig_src); else { if ( Xof_ext_.Id_is_video_strict(orig_ext.Id()) // id is .ogv or .webm || ( orig_ext.Id_is_ogg() // id is ogg @@ -87,8 +87,8 @@ public class Xoh_file_wtr__basic { page.Hdump_data().Imgs_add_img(new Xohd_img_itm__img(), xfer_itm, Xohd_img_itm__gallery_itm.Tid_basic); } } - private void Write_file_ns_media(Bry_bfr bfr, Xop_ctx ctx, byte[] src, Xop_lnki_tkn lnki, byte[] img_orig_src) { - html_fmtr.Html_full_media(bfr, img_orig_src, lnki.Ttl().Page_txt(), Arg_caption(ctx, src, Xoh_wtr_ctx.Basic, lnki)); // NOTE: use orig_src not view_src; DATE:2014-01-19 + private void Write_file_ns_media(Bry_bfr bfr, Xop_ctx ctx, Xoh_wtr_ctx hctx, byte[] src, Xop_lnki_tkn lnki, byte[] img_orig_src) { + html_fmtr.Html_full_media(bfr, hctx.Mode_is_hdump(), img_orig_src, lnki.Ttl().Page_txt(), Arg_caption(ctx, src, Xoh_wtr_ctx.Basic, lnki)); // NOTE: use orig_src not view_src; DATE:2014-01-19 } private void Write_file_audio(Bry_bfr bfr, Xop_ctx ctx, Xoh_wtr_ctx hctx, byte[] src, Xop_lnki_tkn lnki, int uid, int div_width, byte[] lnki_halign_bry, byte[] lnki_href, byte[] img_orig_src, byte[] alt) { byte[] content = Arg_content_audio(lnki, ctx, hctx, src, uid, lnki_href, img_orig_src, alt); @@ -120,7 +120,7 @@ public class Xoh_file_wtr__basic { html_fmtr.Html_thumb_core(bfr, hctx.Mode_is_hdump(), uid, lnki_halign_bry, div_width, content); } else { - if ( cfg_alt_defaults_to_caption + if ( cfg_alt_defaults_to_caption && Bry_.Len_eq_0(alt) // NOTE: if no alt, always use caption; DATE:2013-07-22 && !lnki.Alt_exists() // unless blank alt exists; EX: [[File:A.png|a|alt=]] should have alt of "", not "a" ) { @@ -129,34 +129,38 @@ public class Xoh_file_wtr__basic { } boolean div_align_exists = false; switch (lnki.Align_h()) { - case Xop_lnki_align_h_.Left: bfr.Add(Div_float_left) .Add_byte_nl(); div_align_exists = true; break; + case Xop_lnki_align_h_.Left: bfr.Add(Div_float_left) .Add_byte_nl(); div_align_exists = true; break; case Xop_lnki_align_h_.Right: bfr.Add(Div_float_right).Add_byte_nl(); div_align_exists = true; break; - case Xop_lnki_align_h_.None: bfr.Add(Div_float_none) .Add_byte_nl(); div_align_exists = true; break; + case Xop_lnki_align_h_.None: bfr.Add(Div_float_none) .Add_byte_nl(); div_align_exists = true; break; } - Arg_nde_tkn lnki_link_tkn = lnki.Link_tkn(); byte img_cls_tid = lnki.Border() == Bool_.Y_byte ? Xoh_img_cls_.Tid__thumbborder : Xoh_img_cls_.Tid__none; byte[] img_cls_other = lnki.Lnki_cls(); // PAGE:en.s:Page:Notes_on_Osteology_of_Baptanodon._With_a_Description_of_a_New_Species.pdf/3; DATE:2014-09-06 + Arg_nde_tkn lnki_link_tkn = lnki.Link_tkn(); if (lnki_link_tkn == Arg_nde_tkn.Null) // full - lnki_file_wkr.Html_full_img(bfr, hctx, page, src, xfer_itm, uid, lnki_href, Xoh_lnki_consts.Tid_a_cls_image, Xoh_lnki_consts.Tid_a_rel_none, anchor_title, Xoh_file_html_fmtr__base.Escape_xowa_title(lnki_ttl), xfer_itm.Html_w(), xfer_itm.Html_h(), img_view_src, alt, img_cls_tid, img_cls_other); + lnki_file_wkr.Html_full_img(bfr, hctx, page, src, xfer_itm, uid, lnki_href, Bool_.N, Xoh_lnki_consts.Tid_a_cls_image, Xoh_lnki_consts.Tid_a_rel_none, anchor_title, Xoh_file_html_fmtr__base.Escape_xowa_title(lnki_ttl), xfer_itm.Html_w(), xfer_itm.Html_h(), img_view_src, alt, img_cls_tid, img_cls_other); else { // thumb Arg_itm_tkn link_tkn = lnki_link_tkn.Val_tkn(); byte[] link_arg = Xoa_ttl.Replace_spaces(link_tkn.Dat_to_bry(src)); // replace spaces with unders, else "/wiki/File:A b.ogg" instead of "A_b.ogg"; DATE:2015-11-27 + if (Bry_.Has_at_bgn(link_arg, Xop_tkn_.Anchor_byte)) link_arg = Bry_.Add(ctx.Cur_page().Ttl().Page_db(), link_arg); byte[] link_arg_html = tmp_link_parser.Parse(tmp_bfr, tmp_url, wiki, link_arg, lnki_href); + byte[] xowa_title_bry = tmp_link_parser.Html_xowa_ttl(); // NOTE: xowa_title_bry will be link arg; [[File:A.png|link=file:///A.ogg]] -> A.ogg x> A.png + boolean a_href_is_file = true; + if (xowa_title_bry == null) {xowa_title_bry = lnki_ttl; a_href_is_file = false;} link_arg = link_arg_html == null ? lnki_href: link_arg_html; // if parse fails, then assign to lnki_href; EX:link={{{1}}} - link_arg = Gfo_url_encoder_.Href_qarg.Encode(link_arg); // must encode quotes; PAGE:en.w:List_of_cultural_heritage_sites_in_Punjab,_Pakistan; DATE:2014-07-16 + link_arg = Gfo_url_encoder_.Href_qarg.Encode(link_arg); // must encode quotes; PAGE:en.w:List_of_cultural_heritage_sites_in_Punjab,_Pakistan; DATE:2014-07-16 // if (Bry_.Len_gt_0(tmp_link_parser.Html_xowa_ttl())) lnki_ttl = tmp_link_parser.Html_xowa_ttl(); // DELETE: not sure why this is here; breaks test; DATE:2015-11-28 - lnki_file_wkr.Html_full_img(bfr, hctx, page, src, xfer_itm, uid, link_arg, tmp_link_parser.Html_anchor_cls(), tmp_link_parser.Html_anchor_rel(), anchor_title, Xoh_file_html_fmtr__base.Escape_xowa_title(lnki_ttl), xfer_itm.Html_w(), xfer_itm.Html_h(), img_view_src, alt, img_cls_tid, img_cls_other); + lnki_file_wkr.Html_full_img(bfr, hctx, page, src, xfer_itm, uid, link_arg, a_href_is_file, tmp_link_parser.Html_anchor_cls(), tmp_link_parser.Html_anchor_rel(), anchor_title, Xoh_file_html_fmtr__base.Escape_xowa_title(xowa_title_bry), xfer_itm.Html_w(), xfer_itm.Html_h(), img_view_src, alt, img_cls_tid, img_cls_other); } - if (div_align_exists) bfr.Add(Html_tag_.Div_rhs); // close div from above + if (div_align_exists) bfr.Add(Gfh_tag_.Div_rhs); // close div from above } - if (lnki_halign == Xop_lnki_align_h_.Center) bfr.Add(Html_tag_.Div_rhs); + if (lnki_halign == Xop_lnki_align_h_.Center) bfr.Add(Gfh_tag_.Div_rhs); tmp_bfr.Mkr_rls(); } private byte[] Arg_content_thumb(Xoh_file_img_wkr lnki_file_wkr, Xop_ctx ctx, Xoh_wtr_ctx hctx, byte[] src, Xop_lnki_tkn lnki, Xof_file_itm xfer_itm, int uid, byte[] lnki_href, byte[] view_src, byte[] img_orig_src, byte[] lnki_alt_text, byte[] lnki_ttl, byte[] anchor_title) { byte[] lnki_alt_html = wiki.Html_mgr().Imgs_mgr().Alt_in_caption().Val() ? Arg_alt_html(ctx, hctx, src, lnki) : Bry_.Empty; byte img_cls_tid = xfer_itm.File_exists() ? Xoh_img_cls_.Tid__thumbimage : Xoh_img_cls_.Tid__none; Bry_bfr tmp_bfr = bfr_mkr.Get_k004(); - lnki_file_wkr.Html_full_img(tmp_bfr, hctx, page, src, xfer_itm, uid, lnki_href, Xoh_lnki_consts.Tid_a_cls_image, Xoh_lnki_consts.Tid_a_rel_none, anchor_title, Xoh_file_html_fmtr__base.Escape_xowa_title(lnki_ttl), xfer_itm.Html_w(), xfer_itm.Html_h(), view_src, lnki_alt_text, img_cls_tid, Xoh_img_cls_.Bry__none); + lnki_file_wkr.Html_full_img(tmp_bfr, hctx, page, src, xfer_itm, uid, lnki_href, Bool_.N, Xoh_lnki_consts.Tid_a_cls_image, Xoh_lnki_consts.Tid_a_rel_none, anchor_title, Xoh_file_html_fmtr__base.Escape_xowa_title(lnki_ttl), xfer_itm.Html_w(), xfer_itm.Html_h(), view_src, lnki_alt_text, img_cls_tid, Xoh_img_cls_.Bry__none); byte[] thumb = tmp_bfr.To_bry_and_clear(); html_fmtr.Html_thumb_file_image(tmp_bfr, thumb, Arg_caption_div(ctx, hctx, src, lnki, uid, img_orig_src, lnki_href), lnki_alt_html); return tmp_bfr.To_bry_and_rls(); @@ -164,11 +168,11 @@ public class Xoh_file_wtr__basic { private byte[] Arg_content_audio(Xop_lnki_tkn lnki, Xop_ctx ctx, Xoh_wtr_ctx hctx, byte[] src, int uid, byte[] lnki_href, byte[] img_orig_src, byte[] alt) { byte[] info_btn = Bry_.Empty; if (lnki.Media_icon()) { - html_fmtr.Html_thumb_part_info(scratch_bfr, uid, lnki_href, html_mgr.Img_media_info_btn()); + html_fmtr.Html_thumb_part_info(scratch_bfr, uid, hctx.Mode_is_hdump(), lnki_href, html_mgr.Img_media_info_btn()); info_btn = scratch_bfr.To_bry_and_clear(); } int play_btn_width = lnki.W(); if (play_btn_width < 1) play_btn_width = html_mgr.Img_thumb_width(); // if no width set width to default img width - html_fmtr.Html_thumb_file_audio(scratch_bfr, Arg_caption_div(ctx, hctx, src, lnki, uid, img_orig_src, lnki_href), Arg_alt_html(ctx, hctx, src, lnki), Arg_play_btn(uid, play_btn_width, Play_btn_max_width, img_orig_src, lnki.Ttl().Page_txt()), info_btn); + html_fmtr.Html_thumb_file_audio(scratch_bfr, Arg_caption_div(ctx, hctx, src, lnki, uid, img_orig_src, lnki_href), Arg_alt_html(ctx, hctx, src, lnki), Arg_play_btn(hctx.Mode_is_hdump(), uid, play_btn_width, Play_btn_max_width, img_orig_src, Xoh_file_html_fmtr__base.Escape_xowa_title(lnki.Ttl().Page_txt())), info_btn); return scratch_bfr.To_bry_and_clear(); } private byte[] Arg_content_video(Xop_ctx ctx, Xoh_wtr_ctx hctx, byte[] src, Xop_lnki_tkn lnki, Xof_file_itm xfer_itm, int uid, boolean lnki_thumb, byte[] a_href, byte[] view_src, byte[] orig_src, byte[] img_alt) { @@ -179,7 +183,9 @@ public class Xoh_file_wtr__basic { caption_html = Arg_caption_div(ctx, hctx, src, lnki, uid, orig_src, a_href); alt_html = Arg_alt_html(ctx, hctx, src, lnki); } - html_fmtr.Html_thumb_file_video(scratch_bfr, Arg_play_btn(uid, play_btn_width, play_btn_width, orig_src, lnki.Ttl().Page_txt()), html_fmtr.Html_thumb_part_img(scratch_bfr, page, xfer_itm, lnki, uid, a_href, view_src, img_alt), caption_html, alt_html); + html_fmtr.Html_thumb_file_video(scratch_bfr, Arg_play_btn(hctx.Mode_is_hdump(), uid, play_btn_width, play_btn_width, orig_src, Xoh_file_html_fmtr__base.Escape_xowa_title(lnki.Ttl().Page_txt())) + , html_fmtr.Html_thumb_part_img(scratch_bfr, hctx, page, src, xfer_itm, uid, a_href, view_src, img_alt) + , caption_html, alt_html); return scratch_bfr.To_bry_and_clear(); } private byte[] Arg_caption_div(Xop_ctx ctx, Xoh_wtr_ctx hctx, byte[] src, Xop_lnki_tkn lnki, int uid, byte[] img_orig_src, byte[] lnki_href) { @@ -194,24 +200,24 @@ public class Xoh_file_wtr__basic { return scratch_bfr.To_bry_and_clear(); } private byte[] msg_file_enlarge; private Bfr_arg Arg_caption(Xop_ctx ctx, byte[] src, Xoh_wtr_ctx hctx_for_caption, Xop_lnki_tkn lnki) { - return lnki.Caption_exists() ? caption_fmtr.Set(ctx, hctx_for_caption, src, lnki.Caption_val_tkn(), Xoh_lnki_text_fmtr.Null_fmtr) : Bfr_arg_.Noop; + return lnki.Caption_exists() ? caption_fmtr.Set(ctx, hctx_for_caption, src, lnki.Caption_val_tkn(), Xoh_lnki_text_fmtr.Null_fmtr, Bool_.N) : Bfr_arg_.Noop; } public byte[] Arg_alt_text(Xop_ctx ctx, byte[] src, Xop_lnki_tkn lnki) { if (!lnki.Alt_exists()) return Bry_.Empty; - media_alt_fmtr.Set(ctx, Xoh_wtr_ctx.Alt, src, lnki.Alt_tkn().Val_tkn(), Xoh_lnki_text_fmtr.Null_fmtr); + media_alt_fmtr.Set(ctx, Xoh_wtr_ctx.Alt, src, lnki.Alt_tkn().Val_tkn(), Xoh_lnki_text_fmtr.Null_fmtr, Bool_.N); Bry_bfr tmp_bfr = bfr_mkr.Get_k004(); media_alt_fmtr.Bfr_arg__add(tmp_bfr); return tmp_bfr.To_bry_and_rls(); } private byte[] Arg_alt_html(Xop_ctx ctx, Xoh_wtr_ctx hctx, byte[] alt_src, Xop_lnki_tkn lnki) { if (!lnki.Alt_exists()) return Bry_.Empty; - media_alt_fmtr.Set(ctx, hctx, alt_src, lnki.Alt_tkn().Val_tkn(), html_fmtr.Html_thumb_part_alt_fmtr()); + media_alt_fmtr.Set(ctx, hctx, alt_src, lnki.Alt_tkn().Val_tkn(), html_fmtr.Html_thumb_part_alt_fmtr(), Bool_.Y); Bry_bfr tmp_bfr = bfr_mkr.Get_k004(); media_alt_fmtr.Bfr_arg__add(tmp_bfr); return tmp_bfr.To_bry_and_rls(); } - private byte[] Arg_play_btn(int uid, int width, int max_width, byte[] a_href, byte[] a_xowa_title) { - html_fmtr.Html_thumb_part_play(scratch_bfr, uid, width - 2, max_width, a_href, a_xowa_title, html_mgr.Img_media_play_btn()); // NOTE: -2 is fudge factor else play btn will jut out over video thumb; see Earth and ISS video + private byte[] Arg_play_btn(boolean mode_is_hdump, int uid, int width, int max_width, byte[] a_href, byte[] a_xowa_title) { + html_fmtr.Html_thumb_part_play(scratch_bfr, uid, mode_is_hdump, width - 2, max_width, a_href, a_xowa_title, html_mgr.Img_media_play_btn()); // NOTE: -2 is fudge factor else play btn will jut out over video thumb; see Earth and ISS video return scratch_bfr.To_bry_and_clear(); } private static byte[] Arg_anchor_title(Bry_bfr tmp_bfr, byte[] src, Xop_lnki_tkn lnki, byte[] lnki_ttl, Xoh_lnki_title_fmtr anchor_title_wkr) { diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_file_wtr_audio_video_tst.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_file_wtr_audio_video_tst.java index 16fb68538..22bee83b3 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_file_wtr_audio_video_tst.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_file_wtr_audio_video_tst.java @@ -18,125 +18,116 @@ along with this program. If not, see . package gplx.xowa.htmls.core.wkrs.lnkis.htmls; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; import gplx.xowa.htmls.core.wkrs.lnkis.*; import org.junit.*; import gplx.xowa.files.*; public class Xoh_file_wtr_audio_video_tst { - @Before public void init() {fxt.Reset();} private Xop_fxt fxt = new Xop_fxt(); - @Test public void Audio_full() { + @Before public void init() {fxt.Reset();} private final Xop_fxt fxt = new Xop_fxt(); + @Test public void Audio__full() { fxt.Test_parse_page_wiki_str - ( "[[File:A.oga|noicon]]", String_.Concat_lines_nl_skip_last - ( "
        " - , "
        " - , " " - , " \"Play" - , " " - , "
        " - , "
        " - , "
        " - , " " - , "
        " + ( "[[File:A.oga|noicon]]", String_.Concat_lines_nl_skip_last + ( "
        " + , "
        " + , " " + , " \"Play" + , " " + , "
        " + , "
        " + , "
        " + , "
        " )); } - @Test public void Audio_full_ogg() {// PURPOSE: ogg should show src on first load + @Test public void Audio__full_ogg() {// PURPOSE: ogg should show src on first load fxt.Wiki().Html_mgr().Img_suppress_missing_src_(true); // simulate release-mode wherein missing images will not have src fxt.Test_parse_page_all_str - ( "[[File:A.ogg]]", String_.Concat_lines_nl_skip_last - ( " " )); fxt.Wiki().Html_mgr().Img_suppress_missing_src_(false); } - @Test public void Audio_thumb() { + @Test public void Audio__thumb() { fxt.Test_parse_page_wiki_str - ( "[[File:A.oga|thumb|a|alt=b]]", String_.Concat_lines_nl_skip_last - ( "
        " - , "
        " - , "
        " - , "
        " - , " " - , " \"Play" - , " " - , "
        " - , "
        " - , " " - , " " - , " " - , "
        " - , "
        " - , "
        " - , "
        " - , " " - , " \"\"" - , " " - , "
        " - , " a" - , "
        " - , "
        " - , "
        " - , "b" - , "
        " - , "
        " - , "
        " - , "" + ( "[[File:A.oga|thumb|a|alt=b]]", String_.Concat_lines_nl_skip_last + ( "
        " + , "
        " + , "
        " + , "
        " + , " " + , " \"Play" + , " " + , "
        " + , "
        " + , " " + , " " + , " " + , "
        " + , "
        " + , "
        " + , "
        a" + , "
        " + , "
        " + , "
        b" + , "
        " + , "
        " + , "
        " + , "" )); } - @Test public void Audio_full_width() { // ISSUE: width arg ignored for v2; zh.b:小学数学/自然数; DATE:2014-05-03 + @Test public void Audio__full_width() { // ISSUE: width arg ignored for v2; zh.b:小学数学/自然数; DATE:2014-05-03 fxt.Wiki().File_mgr().Version_2_y_(); fxt.App().Usere().Init_by_app(fxt.App()); // TEST: init cache else null reference fxt.Test_html_wiki_frag("[[File:A.oga|30px|a]]", "
        "); fxt.Wiki().File_mgr().Version_1_y_(); } - @Test public void Audio_noicon() { + @Test public void Audio__noicon() { fxt.Test_parse_page_wiki_str - ( "[[File:A.oga|thumb|noicon|a|alt=b]]", String_.Concat_lines_nl_skip_last - ( "
        " - , "
        " - , " " - , " \"Play" - , " " - , "
        " - , "
        " - , "
        " - , " a" - , "
        " - , "
        " - , "
        " - , "b" - , "
        " + ( "[[File:A.oga|thumb|noicon|a|alt=b]]", String_.Concat_lines_nl_skip_last + ( "
        " + , "
        " + , " " + , " \"Play" + , " " + , "
        " + , "
        " + , "
        a" + , "
        " + , "
        " + , "
        b" + , "
        " )); } - @Test public void Video_full() { + @Test public void Video__full() { fxt.Test_parse_page_wiki_str - ( "[[File:A.ogv|400px|a|alt=b]]", String_.Concat_lines_nl_skip_last - ( " " )); } - @Test public void Video_full_ogg() {// PURPOSE: ogg should default to video on first load; otherwise dynamic-update won't be able to put in thumb; DATE:2015-05-21 + @Test public void Video__full_ogg() {// PURPOSE: ogg should default to video on first load; otherwise dynamic-update won't be able to put in thumb; DATE:2015-05-21 Xof_file_fxt file_fxt = Xof_file_fxt.new_all(fxt.Wiki()); file_fxt.Exec_orig_add(Bool_.Y, "A.ogg", Xof_ext_.Id_ogv, 400, 400, ""); fxt.Test_parse_page_wiki_str ( "[[File:A.ogg|400px|a|alt=b]]", String_.Concat_lines_nl_skip_last ( "
        " , "
        " - , "
        " + , " " , "
        " - , " " - , " a" + , "
        a" , "
        " , "
        " - , "
        " - , "b" + , "
        b" , "
        " , "
        " , "
        " )); } - @Test public void Video_thumb() { + @Test public void Video__thumb() { fxt.Test_parse_page_wiki_str - ( "[[File:A.ogv|thumb|400px|a|alt=b]]", String_.Concat_lines_nl_skip_last - ( "
        " - , "
        " // NOTE:220px is default w for "non-found" thumb; DATE:2014-09-24 - , "
        " - , "
        " - + "" - + "\"b\"" + ( "[[File:A.ogv|thumb|400px|a|alt=b]]", String_.Concat_lines_nl_skip_last + ( "
        " + , "
        " // NOTE:220px is default w for "non-found" thumb; DATE:2014-09-24 + , "
        " + , " " - , "
        " - , " " - , " \"Play" - , " " - , "
        " - , "
        " - , "
        " - , "
        " - , " " - , " \"\"" - , " " - , "
        " - , " a" - , "
        " - , "
        " - , "
        " - , "b" - , "
        " - , "
        " - , "
        " - , "" + , "
        " + , "
        " + , " " + , " \"Play" + , " " + , "
        " + , "
        " + , "
        " + , "
        a" + , "
        " + , "
        " + , "
        b" + , "
        " + , "
        " + , "
        " + , "" )); } - @Test public void Video_thumb_webm() { // PURPOSE: webm thumb wasn't being shown; DATE:2014-01-25 + @Test public void Video__thumb_webm() { // PURPOSE: webm thumb wasn't being shown; DATE:2014-01-25 fxt.Test_parse_page_wiki_str - ( "[[File:A.webm|thumb|400px|a|alt=b]]", String_.Concat_lines_nl_skip_last - ( "
        " - , "
        " // NOTE:220px is default w for "non-found" thumb; DATE:2014-09-24 - , "
        " - , "
        " - + "" - + "\"b\"" + ( "[[File:A.webm|thumb|400px|a|alt=b]]", String_.Concat_lines_nl_skip_last + ( "
        " + , "
        " // NOTE:220px is default w for "non-found" thumb; DATE:2014-09-24 + , "
        " + , " " - , "
        " - , " " - , " \"Play" - , " " - , "
        " - , "
        " - , "
        " - , "
        " - , " " - , " \"\"" - , " " - , "
        " - , " a" - , "
        " - , "
        " - , "
        " - , "b" - , "
        " - , "
        " - , "
        " - , "" + , "
        " + , "
        " + , " " + , " \"Play" + , " " + , "
        " + , "
        " + , "
        " + , "
        a" + , "
        " + , "
        " + , "
        b" + , "
        " + , "
        " + , "
        " + , "" )); } } @@ -237,8 +210,8 @@ public class Xoh_file_wtr_audio_video_tst { // fxt.Src_en_wiki_repo().Ext_rules().Get_or_new(Xof_ext_.Bry_ogg).View_max_(0); // fxt .ini_page_api("commons", "A.ogg", "", 0, 0); // fxt .Lnki_orig_("A.ogg") -// .Src( ) -// .Trg( +// .Src( ) +// .Trg( // fxt.reg_("mem/xowa/file/#meta/en.wikipedia.org/4/42.csv", "A.ogg|z||2?0,0|0?0,0") // ) // .tst(); diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_file_wtr_basic_tst.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_file_wtr_basic_tst.java index 4274b9c57..7128a669b 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_file_wtr_basic_tst.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_file_wtr_basic_tst.java @@ -18,154 +18,156 @@ along with this program. If not, see . package gplx.xowa.htmls.core.wkrs.lnkis.htmls; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; import gplx.xowa.htmls.core.wkrs.lnkis.*; import org.junit.*; public class Xoh_file_wtr_basic_tst { - private Xop_fxt fxt = new Xop_fxt(); + private final Xop_fxt fxt = new Xop_fxt(); @Before public void init() {fxt.Reset();} - @Test public void Img_full() { // PURPOSE: full with title was outputting invalid html; DATE:2013-12-31 + @Test public void Img__full() { // PURPOSE: full with title was outputting invalid html; DATE:2013-12-31 fxt.Wtr_cfg().Lnki__title_(true); fxt.Test_parse_page_wiki_str - ( "[[File:A.png]]" - , String_.Concat_lines_nl_skip_last - ( "\"\"" // NOTE: used to output class=\"image\"A.png + ( "[[File:A.png]]" + , String_.Concat_lines_nl_skip_last + ( "\"\"" // NOTE: used to output class=\"image\"A.png )); fxt.Wtr_cfg().Lnki__title_(false); } @Test public void Xowa_title__quotes() { // PURPOSE: xowa_title should encode quotes DATE:2015-11-27 fxt.Test_parse_page_wiki_str - ( "[[File:A%22b.png]]" - , String_.Concat_lines_nl_skip_last - ( "\"\"" + ( "[[File:A%22b.png]]" + , String_.Concat_lines_nl_skip_last + ( "\"\"" )); } - @Test public void Img_embed() { + @Test public void Img__embed() { fxt.Test_parse_page_wiki_str("[[File:A.png|9x8px|alt=abc]]", Xop_fxt.html_img_none("File:A.png", "abc", "file:///mem/wiki/repo/trg/thumb/7/0/A.png/9px.png", "A.png")); } - @Test public void Img_none() { // NOTE: floatnone is WP behavior; MW omits div tag + @Test public void Img__none() { // NOTE: floatnone is WP behavior; MW omits div tag fxt.Test_parse_page_wiki_str - ( "[[File:A.png|none|20x30px|b]]" - , String_.Concat_lines_nl_skip_last - ( "
        " - , "\"b\"
        " + ( "[[File:A.png|none|20x30px|b]]" + , String_.Concat_lines_nl_skip_last + ( "
        " + , "\"b\"
        " )); } - @Test public void Img_thumb_none() { + @Test public void Img__thumb_none() { fxt.Test_parse_page_wiki_str - ( "[[File:A.png|thumb|none|b]]" - , Img_thumb_str("none") + ( "[[File:A.png|thumb|none|b]]" + , Img_thumb_str("none") ); } - @Test public void Img_thumb_ltr() { + @Test public void Img__thumb_ltr() { fxt.Test_parse_page_wiki_str - ( "[[File:A.png|thumb|b]]" - , Img_thumb_str("right") + ( "[[File:A.png|thumb|b]]" + , Img_thumb_str("right") ); } - @Test public void Img_thumb_rtl() { + @Test public void Img__thumb_rtl() { fxt.Wiki().Lang().Dir_ltr_(false); fxt.Test_parse_page_wiki_str - ( "[[File:A.png|thumb|b]]" - , Img_thumb_str("left") + ( "[[File:A.png|thumb|b]]" + , Img_thumb_str("left") ); fxt.Wiki().Lang().Dir_ltr_(true); } private String Img_thumb_str(String align) { return String_.Concat_lines_nl_skip_last - ( "
        " - , "
        " - , " \"\"" - , "
        " - , "
        " - , " " - , " \"\"" - , " " - , "
        " - , " b" - , "
        " - , "
        " - , "
        " - , "" + ( "
        " + , "
        " + , " \"\"" + , "
        " + , "
        b" + , "
        " + , "
        " + , "
        " + , "" ); } - @Test public void Img_frame() { // PURPOSE: lnki with "frame" is same as thumb; DATE:2013-12-23 + @Test public void Img__frame() { // PURPOSE: lnki with "frame" is same as thumb; DATE:2013-12-23 fxt.Test_parse_page_wiki_str - ( "[[File:A.png|frame|220x110px|b]]" - , String_.Concat_lines_nl_skip_last - ( "
        " - , "
        " - , " \"\"" - , "
        " - , "
        " - , " " - , " \"\"" - , " " - , "
        " - , " b" - , "
        " - , "
        " - , "
        " - , "" - )); + ( "[[File:A.png|frame|220x110px|b]]" + , String_.Concat_lines_nl_skip_last + ( "
        " + , "
        " + , " \"\"" + , "
        " + , "
        b" + , "
        " + , "
        " + , "
        " + , "" + )); } - @Test public void Img_frame_and_thumb() { // PURPOSE: lnki with "frame and thumb" was not showing box due to bit-adding; PAGE:en.w:History_of_Western_Civilization DATE:2015-04-16 + @Test public void Img__frame_and_thumb() { // PURPOSE: lnki with "frame and thumb" was not showing box due to bit-adding; PAGE:en.w:History_of_Western_Civilization DATE:2015-04-16 fxt.Test_parse_page_wiki_str - ( "[[File:A.png|frame|thumb|220x110px|b]]" // NOTE: frame AND thumb - , String_.Concat_lines_nl_skip_last - ( "
        " - , "
        " - , " \"\"" - , "
        " - , "
        " - , " " - , " \"\"" - , " " - , "
        " - , " b" - , "
        " - , "
        " - , "
        " - , "" - )); + ( "[[File:A.png|frame|thumb|220x110px|b]]" // NOTE: frame AND thumb + , String_.Concat_lines_nl_skip_last + ( "
        " + , "
        " + , " \"\"" + , "
        " + , "
        b" + , "
        " + , "
        " + , "
        " + , "" + )); + } + @Test public void Img__link() { // PURPOSE.FIX: link=file:/// was creating "href='/wiki/file'" handle IPA links; EX:[[File:Speakerlink-new.svg|11px|link=file:///C:/xowa/file/commons.wikimedia.org/orig/c/7/a/3/En-LudwigVanBeethoven.ogg|Listen]]; PAGE:en.w:Beethoven DATE:2015-12-28 + fxt.Test_parse_page_wiki_str + ( "[[File:A.png|11px|link=file:///C:/A.ogg|b]]", String_.Concat_lines_nl_skip_last + ( "" + + "\"b\"" + + "" + )); + } + @Test public void Thm__alt_is_ws() { // PURPOSE: alt with space should not output
        ; EX:[[File:A.png|thumb|alt= ]]; en.w:Bird; DATE:2015-12-28 + fxt.Test_parse_page_all_str + ( "[[File:A.png|thumb|220x110px|alt= ]]" + , String_.Concat_lines_nl_skip_last + ( "
        " + , "
        " + , " \"" + , "
        " + , "
        " + , "
        " + , "
        " + , "
        " + , "" + )); } @Test public void Cls_border() { fxt.Test_parse_page_wiki_str ( "[[File:A.png|border]]" - , "\"\""); + , "\"\""); } @Test public void Cls_custom() { fxt.Test_parse_page_wiki_str ( "[[File:A.png|class=abc]]" - , "\"\""); + , "\"\""); } @Test public void Cls_border_custom() { fxt.Test_parse_page_wiki_str ( "[[File:A.png|border|class=abc]]" - , "\"\""); + , "\"\""); } @Test public void Lnki_full_svg() { fxt.Test_parse_page_wiki_str - ( "[[File:A.svg|a|alt=b]]", String_.Concat_lines_nl_skip_last - ( "\"b\"" // HACK: tries to get orig_w which is not available + ( "[[File:A.svg|a|alt=b]]", String_.Concat_lines_nl_skip_last + ( "\"b\"" // HACK: tries to get orig_w which is not available )); } @Test public void Lnki_file_alt_link() { // PURPOSE: lnki in caption should not create alt="bcd" fxt.Test_parse_page_wiki_str("[[File:A.png|thumb|alt=b [[c]] d]]", String_.Concat_lines_nl_skip_last - ( "
        " - , "
        " - , " \"b" - , "
        " - , "
        " - , " " - , " \"\"" - , " " - , "
        " - , " " - , "
        " - , "
        " - , "
        " - , "b c d" - , "
        " - , "
        " - , "
        " - , "" + ( "
        " + , "
        " + , " \"b" + , "
        " + , "
        " + , "
        " + , "
        " + , "
        b c d" + , "
        " + , "
        " + , "
        " + , "" )); } @Test public void Pre_in_caption() { // PURPOSE: ignore pre if in caption; PAGE:s.w:Virus; DATE:2015-03-31 @@ -175,14 +177,9 @@ public class Xoh_file_wtr_basic_tst { ), String_.Concat_lines_nl_skip_last ( "
        " , "
        " - , " \"\"" + , " \"\"" , "
        " - , "
        " - , " " - , " \"\"" - , " " - , "
        " - , " a" // no pre + , "
        a" // no pre , " b" , "
        " , "
        " @@ -191,7 +188,7 @@ public class Xoh_file_wtr_basic_tst { )); fxt.Init_para_n_(); } - @Test public void Img_title() { + @Test public void Img__title() { fxt.Wtr_cfg().Lnki__title_(true); Tst_img_title("[[File:A.png|frameless|a b]]", "a b"); Tst_img_title("[[File:A.png|thumb|a b]]", "Enlarge"); // caption should not replace text @@ -202,7 +199,7 @@ public class Xoh_file_wtr_basic_tst { fxt.Test_parse_page_wiki_str("[[A\"B]]", "A\"B"); fxt.Wtr_cfg().Lnki__title_(false); } - @Test public void Img_title__caption_has_lnki() { // PURPOSE: caption with lnki should show in title; PAGE:en.w:Earth; DATE:2014-08-06 + @Test public void Img__title__caption_has_lnki() { // PURPOSE: caption with lnki should show in title; PAGE:en.w:Earth; DATE:2014-08-06 fxt.Wtr_cfg().Lnki__title_(true); Tst_img_title("[[File:A.png|frameless|[[A]]]]" , "A"); // ttl only Tst_img_title("[[File:A.png|frameless|[[A|B]]]]" , "B"); // caption @@ -212,40 +209,40 @@ public class Xoh_file_wtr_basic_tst { @Test public void Lnki_alt_is_text() { // PURPOSE: (a) alt should default to caption; (b) alt should not show html chars (like \"abc\"" + ( "[[File:A.png|a[[b]]c]]" + , "\"abc\"" ); fxt.Wtr_cfg().Lnki__title_(false); } @Test public void Alt_ignore_apos() {// PURPOSE: alt should ignore apos; EX: [[File:A.png|''A'']] should have alt of A; DATE:2013-10-25 fxt.Wtr_cfg().Lnki__title_(true); fxt.Test_parse_page_all_str - ( "[[File:A.png|''b'']]" - , "\"b\"" + ( "[[File:A.png|''b'']]" + , "\"b\"" ); fxt.Wtr_cfg().Lnki__title_(false); } @Test public void Alt_ignore_lnke() {// PURPOSE: alt should ignore lnke fxt.Wtr_cfg().Lnki__title_(true); fxt.Test_parse_page_all_str - ( "[[File:A.png|b[http://c.org d] e]]" - , "\"bd" + ( "[[File:A.png|b[http://c.org d] e]]" + , "\"bd" ); fxt.Wtr_cfg().Lnki__title_(false); } @Test public void Alt_ignore_list() {// PURPOSE: alt should ignore list fxt.Wtr_cfg().Lnki__title_(true); fxt.Test_parse_page_all_str - ( "[[File:A.png|b\n*c]]" - , "\"b*c\"" + ( "[[File:A.png|b\n*c]]" + , "\"b*c\"" ); fxt.Wtr_cfg().Lnki__title_(false); } @Test public void Alt_ignore_tblw() {// PURPOSE: alt should ignore tblw fxt.Wtr_cfg().Lnki__title_(true); fxt.Test_parse_page_all_str - ( "[[File:A.png|\n{|\n|-\n|b\n|}\n]]" - , "\"" + ( "[[File:A.png|\n{|\n|-\n|b\n|}\n]]" + , "\"" ); fxt.Wtr_cfg().Lnki__title_(false); } @@ -253,10 +250,10 @@ public class Xoh_file_wtr_basic_tst { fxt.Wtr_cfg().Lnki__title_(true); fxt.Init_para_y_(); fxt.Test_parse_page_all_str - ( "[[File:A.png|b\nc]]" - , String_.Concat_lines_nl - ( "

        \"b" - , "

        " + ( "[[File:A.png|b\nc]]" + , String_.Concat_lines_nl + ( "

        \"b" + , "

        " )); fxt.Init_para_n_(); fxt.Wtr_cfg().Lnki__title_(false); @@ -264,8 +261,8 @@ public class Xoh_file_wtr_basic_tst { @Test public void Lnki_empty_alt_is_omitted() {// PURPOSE: empty alt should be ignored; DATE:2013-07-30 fxt.Wtr_cfg().Lnki__title_(true); fxt.Test_parse_page_all_str - ( "[[File:A.png|a|alt=]]" - , "\"\"" + ( "[[File:A.png|a|alt=]]" + , "\"\"" ); fxt.Wtr_cfg().Lnki__title_(false); } @@ -284,9 +281,9 @@ public class Xoh_file_wtr_basic_tst { @Test public void Lnki_caption_nested_file() { // PURPOSE: nested lnki in caption breaks alt with html chars; EX:de.w:Wien; DATE:2013-12-16 fxt.Wtr_cfg().Lnki__title_(true); fxt.Test_parse_page_wiki_str("[[File:A.png|none|[[File:B.png|20px|d]] c]]", String_.Concat_lines_nl_skip_last - ( "
        " - , "\"d
        " - , "" + ( "
        " + , "\"d
        " + , "" )); fxt.Wtr_cfg().Lnki__title_(false); } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_file_wtr_media_tst.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_file_wtr_media_tst.java index 93d174c88..62492ef8c 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_file_wtr_media_tst.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_file_wtr_media_tst.java @@ -18,44 +18,39 @@ along with this program. If not, see . package gplx.xowa.htmls.core.wkrs.lnkis.htmls; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; import gplx.xowa.htmls.core.wkrs.lnkis.*; import org.junit.*; public class Xoh_file_wtr_media_tst { - private Xop_fxt fxt = new Xop_fxt(); + private final Xop_fxt fxt = new Xop_fxt(); @Before public void init() {fxt.Reset();} @Test public void Lnki_caption_nested_media() { // PAGE:en.w:Beethoven; fxt.Test_parse_page_wiki_str("[[File:A.png|thumb|b [[Media:A.ogg]] c]]", String_.Concat_lines_nl_skip_last - ( "
        " - , "
        " - , " \"\"" - , "
        " - , "
        " - , " " - , " \"\"" - , " " - , "
        " - , " b " - , " c" - , "
        " - , "
        " - , "
        " - , "" + ( "
        " + , "
        " + , " \"\"" + , "
        " + , "
        b " + , " c" + , "
        " + , "
        " + , "
        " + , "" )); } @Test public void Lnki_media_normal() { fxt.Test_parse_page_wiki_str("[[Media:A.png|b]]", String_.Concat_lines_nl_skip_last - ( "b" - , "" + ( "b" + , "" )); } @Test public void Lnki_media_literal() { fxt.Test_parse_page_wiki_str("[[:Media:A.ogg|b]]", String_.Concat_lines_nl_skip_last - ( "b" - , "" + ( "b" + , "" )); } @Test public void Lnki_media_literal_pdf() { fxt.Wiki().Html_mgr().Img_suppress_missing_src_(true); // simulate missing file; DATE:2014-01-30 fxt.Test_parse_page_wiki_str("[[Media:A.pdf|b]]", String_.Concat_lines_nl_skip_last - ( "b" - , "" + ( "b" + , "" )); Tfds.Eq(0, fxt.Page().File_queue().Count()); // make sure media does not add to queue fxt.Wiki().Html_mgr().Img_suppress_missing_src_(false); diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_lnki_text_fmtr.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_lnki_text_fmtr.java index cb8fc3bae..ac9afd07a 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_lnki_text_fmtr.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_lnki_text_fmtr.java @@ -19,20 +19,23 @@ package gplx.xowa.htmls.core.wkrs.lnkis.htmls; import gplx.*; import gplx.xowa.* import gplx.core.brys.*; import gplx.core.brys.fmtrs.*; import gplx.xowa.parsers.*; import gplx.xowa.htmls.core.htmls.*; -public class Xoh_lnki_text_fmtr extends gplx.core.brys.Bfr_arg_base { // formats alt or caption +public class Xoh_lnki_text_fmtr implements gplx.core.brys.Bfr_arg { // formats alt or caption private final Bry_bfr_mkr bfr_mkr; private final Xoh_html_wtr html_wtr; private Xop_ctx ctx; private Xoh_wtr_ctx hctx; private byte[] src; private Xop_tkn_itm text_tkn; private Bry_fmtr fmtr; + private boolean called_by_alt_as_caption; public Xoh_lnki_text_fmtr(Bry_bfr_mkr bfr_mkr, Xoh_html_wtr html_wtr) {this.bfr_mkr = bfr_mkr; this.html_wtr = html_wtr;} - public Xoh_lnki_text_fmtr Set(Xop_ctx ctx, Xoh_wtr_ctx hctx, byte[] src, Xop_tkn_itm text_tkn, Bry_fmtr fmtr) { - this.ctx = ctx; this.hctx = hctx; this.src = src; this.text_tkn = text_tkn; this.fmtr = fmtr; + public Xoh_lnki_text_fmtr Set(Xop_ctx ctx, Xoh_wtr_ctx hctx, byte[] src, Xop_tkn_itm text_tkn, Bry_fmtr fmtr, boolean called_by_alt_as_caption) { + this.ctx = ctx; this.hctx = hctx; this.src = src; this.text_tkn = text_tkn; this.fmtr = fmtr; this.called_by_alt_as_caption = called_by_alt_as_caption; return this; } - @Override public void Bfr_arg__add(Bry_bfr bfr) { + public void Bfr_arg__add(Bry_bfr bfr) { Bry_bfr tmp_bfr = bfr_mkr.Get_k004(); html_wtr.Write_tkn(tmp_bfr, ctx, hctx, src, null, Xoh_html_wtr.Sub_idx_null, text_tkn); tmp_bfr.Mkr_rls(); - if (tmp_bfr.Len() == 0) return; - byte[] bry = tmp_bfr.To_bry_and_clear(); + byte[] bry = called_by_alt_as_caption + ? tmp_bfr.To_bry_and_clear_and_trim() // NOTE: Trim to handle ws-only alt; EX:[[File:A.png|thumb|alt= ]]; en.w:Bird; DATE:2015-12-28 + : tmp_bfr.To_bry(); + if (bry.length == 0) return; if (fmtr == Null_fmtr) bfr.Add(bry); else diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_lnki_title_fmtr.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_lnki_title_fmtr.java index b9a333e1d..b9d104a13 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_lnki_title_fmtr.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_lnki_title_fmtr.java @@ -18,9 +18,9 @@ along with this program. If not, see . package gplx.xowa.htmls.core.wkrs.lnkis.htmls; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; import gplx.xowa.htmls.core.wkrs.lnkis.*; import gplx.langs.htmls.*; import gplx.xowa.parsers.*; import gplx.xowa.parsers.xndes.*; import gplx.xowa.parsers.lnkis.*; import gplx.xowa.parsers.tmpls.*; -public class Xoh_lnki_title_fmtr extends gplx.core.brys.Bfr_arg_base { +public class Xoh_lnki_title_fmtr implements gplx.core.brys.Bfr_arg { public Xoh_lnki_title_fmtr Set(byte[] src, Xop_tkn_itm tkn) {this.src = src; this.tkn = tkn; return this;} - @Override public void Bfr_arg__add(Bry_bfr bfr) { + public void Bfr_arg__add(Bry_bfr bfr) { Bld_recurse(bfr, tkn); } public void Bld_recurse(Bry_bfr bfr, Xop_tkn_itm tkn) { @@ -49,7 +49,7 @@ public class Xoh_lnki_title_fmtr extends gplx.core.brys.Bfr_arg_base { if (tkn.Tkn_tid() == Xop_tkn_itm_.Tid_xnde) { Xop_xnde_tkn xnde = (Xop_xnde_tkn)tkn; if (xnde.Tag().Id() == Xop_xnde_tag_.Tid_ref) { // if ref, disable tkn - gplx.xowa.xtns.cite.Ref_nde ref_xnde = (gplx.xowa.xtns.cite.Ref_nde)xnde.Xnde_xtn(); + gplx.xowa.xtns.cites.Ref_nde ref_xnde = (gplx.xowa.xtns.cites.Ref_nde)xnde.Xnde_xtn(); ref_xnde.Exists_in_lnki_title_(true); // ref found during html_title_wkr's generation; mark ref; will be ignored by references_html_wtr later; DATE:2014-03-05 } } @@ -68,10 +68,10 @@ public class Xoh_lnki_title_fmtr extends gplx.core.brys.Bfr_arg_base { case Byte_ascii.Nl: case Byte_ascii.Cr: case Byte_ascii.Tab: // NOTE: escape ws so that it renders correctly in tool tips bfr.Add_byte_space(); break; - case Byte_ascii.Quote: bfr.Add(Html_entity_.Quote_bry); break; - case Byte_ascii.Lt: bfr.Add(Html_entity_.Lt_bry); break; - case Byte_ascii.Gt: bfr.Add(Html_entity_.Gt_bry); break; - case Byte_ascii.Amp: bfr.Add(Html_entity_.Amp_bry); break; + case Byte_ascii.Quote: bfr.Add(Gfh_entity_.Quote_bry); break; + case Byte_ascii.Lt: bfr.Add(Gfh_entity_.Lt_bry); break; + case Byte_ascii.Gt: bfr.Add(Gfh_entity_.Gt_bry); break; + case Byte_ascii.Amp: bfr.Add(Gfh_entity_.Amp_bry); break; default: bfr.Add_byte(b); break; } } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_lnki_title_fmtr_tst.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_lnki_title_fmtr_tst.java index e5dc32533..cac67a8ab 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_lnki_title_fmtr_tst.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_lnki_title_fmtr_tst.java @@ -31,7 +31,7 @@ public class Xoh_lnki_title_fmtr_tst { } } class Xoh_lnki_title_fmtr_fxt { - private Xop_fxt fxt = new Xop_fxt(); + private final Xop_fxt fxt = new Xop_fxt(); Bry_bfr bfr = Bry_bfr.new_(); Xoh_lnki_title_fmtr title_wkr = new Xoh_lnki_title_fmtr(); public Xoh_lnki_title_fmtr_fxt Clear() {return this;} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_lnki_wtr.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_lnki_wtr.java index 2b9909f6b..8a41993bb 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_lnki_wtr.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/lnkis/htmls/Xoh_lnki_wtr.java @@ -90,17 +90,17 @@ public class Xoh_lnki_wtr { if (Bry_.Len_eq_0(ttl_bry)) ttl_bry = lnki_ttl.Full_txt_raw(); // NOTE: handles ttls like [[fr:]] and [[:fr;]] which have an empty Page_txt, but a valued Full_txt_raw if (Bry_.Eq(lnki_ttl.Full_txt(), page.Ttl().Full_txt())) { // lnki is same as pagename; bold; SEE: Month widget on day pages will bold current day; PAGE:en.w:January 1 if (lnki_ttl.Anch_bgn() == -1 && Bry_.Eq(lnki_ttl.Wik_txt(), page.Ttl().Wik_txt())) { // only bold if lnki is not pointing to anchor on same page; PAGE:en.w:Comet; [[Comet#Physical characteristics|ion tail]] - bfr.Add(Html_tag_.B_lhs); + bfr.Add(Gfh_tag_.B_lhs); Write_caption(bfr, ctx, hctx, src, lnki, ttl_bry, true, caption_wkr); - bfr.Add(Html_tag_.B_rhs); + bfr.Add(Gfh_tag_.B_rhs); return; } } - if (lnki.Xtn_sites_link()) return; // lnki marked for relatedSites; don't write to page + if (lnki.Xtn_sites_link()) return; // lnki marked for relatedSites; don't write to page if (hctx.Mode_is_alt()) Write_caption(bfr, ctx, hctx, src, lnki, ttl_bry, true, caption_wkr); else { - bfr.Add(Xoh_consts.A_bgn); // ' Roman empire; (c) include ns_name; EX: Help:A -> "title='Help:A'" not "title='A'"; DATE:2015-11-16 + byte[] title_bry = lnki_ttl.Full_txt(); // NOTE: use Full_txt to (a) replace underscores with spaces; (b) get title casing; EX:[[roman_empire]] -> Roman empire; (c) include ns_name; EX: Help:A -> "title='Help:A'" not "title='A'"; DATE:2015-11-16 int title_len = title_bry.length; if (title_len > 0) { - bfr .Add(Xoh_consts.A_bgn_lnki_0); // '" title=\"' - Html_utl.Escape_html_to_bfr(bfr, title_bry, 0, title_len, Bool_.N, Bool_.N, Bool_.N, Bool_.Y, Bool_.N); // escape title; DATE:2014-10-27 + bfr .Add(Gfh_bldr_.Bry__title__nth); // '" title=\"' + Gfh_utl.Escape_html_to_bfr(bfr, title_bry, 0, title_len, Bool_.N, Bool_.N, Bool_.N, Bool_.Y, Bool_.N); // escape title; DATE:2014-10-27 } } if (!hctx.Mode_is_hdump()) { // don't write visited for hdump @@ -131,7 +131,7 @@ public class Xoh_lnki_wtr { ttl_bry = Bry_.Add_w_dlm(anch_spr, ttl_bry, anch_txt); // manually add anchor; else "Help:A#b" becomes "Help:A". note that lnki.Ttl_ary() uses .Full_txt (wiki + page but no anchor) to captialize 1st letter of page otherwise "Help:A#b" shows as "Help:A" (so Help:a -> Help:A); DATE:2013-06-21 } Write_caption(bfr, ctx, hctx, src, lnki, ttl_bry, true, caption_wkr); - bfr.Add(Xoh_consts.A_end); // + bfr.Add(Gfh_bldr_.Bry__a_rhs); // } } private void Write_caption(Bry_bfr bfr, Xop_ctx ctx, Xoh_wtr_ctx hctx, byte[] src, Xop_lnki_tkn lnki, byte[] ttl_bry, boolean tail_enabled, Xop_lnki_caption_wtr caption_wkr) { diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/tags/Xoh_tag_parser.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/tags/Xoh_tag_parser.java index b06950e2b..195dd9192 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/tags/Xoh_tag_parser.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/tags/Xoh_tag_parser.java @@ -17,17 +17,18 @@ along with this program. If not, see . */ package gplx.xowa.htmls.core.wkrs.tags; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; import gplx.core.btries.*; import gplx.core.primitives.*; -import gplx.langs.htmls.*; import gplx.langs.htmls.parsers.*; -import gplx.xowa.htmls.core.wkrs.lnkes.*; import gplx.xowa.htmls.core.wkrs.lnkis.*; import gplx.xowa.htmls.core.wkrs.hdrs.*; import gplx.xowa.htmls.core.wkrs.imgs.*; import gplx.xowa.htmls.core.wkrs.thms.*; import gplx.xowa.htmls.core.wkrs.glys.*; +import gplx.langs.htmls.*; import gplx.langs.htmls.docs.*; +import gplx.xowa.htmls.core.wkrs.lnkes.*; import gplx.xowa.htmls.core.wkrs.lnkis.*; import gplx.xowa.htmls.core.wkrs.hdrs.*; import gplx.xowa.htmls.core.wkrs.xndes.*; +import gplx.xowa.htmls.core.wkrs.imgs.*; import gplx.xowa.htmls.core.wkrs.thms.*; import gplx.xowa.htmls.core.wkrs.glys.*; +import gplx.xowa.htmls.core.hzips.*; import gplx.xowa.wikis.ttls.*; -public class Xoh_tag_parser implements Html_doc_wkr { +public class Xoh_tag_parser implements Gfh_doc_wkr { private final Xoh_hdoc_wkr hdoc_wkr; - private final Html_tag_rdr tag_rdr = new Html_tag_rdr(); + private final Gfh_tag_rdr tag_rdr = new Gfh_tag_rdr(); private Xoh_hdoc_ctx hctx; - private final Xoh_hdr_parser wkr__hdr = new Xoh_hdr_parser(); - private final Xoh_lnki_parser wkr__lnki = new Xoh_lnki_parser(); private final Xoh_lnke_parser wkr__lnke = new Xoh_lnke_parser(); - private final Xoh_img_parser wkr__img = new Xoh_img_parser(); private final Xoh_thm_parser wkr__thm = new Xoh_thm_parser(); - private final Xoh_gly_grp_parser wkr__gly = new Xoh_gly_grp_parser(); + private final Xoh_lnki_data wkr__lnki = new Xoh_lnki_data(); + private final Xoh_thm_data wkr__thm = new Xoh_thm_data(); + private final Xoh_gly_grp_data wkr__gly = new Xoh_gly_grp_data(); public byte[] Hook() {return Byte_ascii.Angle_bgn_bry;} public Xoh_tag_parser(Xoh_hdoc_wkr hdoc_wkr) {this.hdoc_wkr = hdoc_wkr;} public void Init(Xoh_hdoc_ctx hctx, byte[] src, int src_bgn, int src_end) { @@ -37,54 +38,69 @@ public class Xoh_tag_parser implements Html_doc_wkr { public int Parse(byte[] src, int src_bgn, int src_end, int pos) { tag_rdr.Pos_(pos); int nxt_pos = tag_rdr.Pos() + 1; if (nxt_pos == src_end) return src_end; - Html_tag cur = src[tag_rdr.Pos() + 1] == Byte_ascii.Slash ? tag_rdr.Tag__move_fwd_tail(Html_tag_.Id__any) : tag_rdr.Tag__move_fwd_head(); + Gfh_tag cur = src[tag_rdr.Pos() + 1] == Byte_ascii.Slash ? tag_rdr.Tag__move_fwd_tail(Gfh_tag_.Id__any) : tag_rdr.Tag__move_fwd_head(); + int cur_end = cur.Src_end(); if (cur.Tag_is_tail()) - hdoc_wkr.On_txt(pos, cur.Src_end()); + hdoc_wkr.On_txt(pos, cur_end); else { - Html_tag nxt = null; + Gfh_tag nxt = null; int cur_name_id = cur.Name_id(); + int rv = -1; switch (cur_name_id) { - case Html_tag_.Id__h2: case Html_tag_.Id__h3: case Html_tag_.Id__h4: case Html_tag_.Id__h5: case Html_tag_.Id__h6: + case Gfh_tag_.Id__h2: case Gfh_tag_.Id__h3: case Gfh_tag_.Id__h4: case Gfh_tag_.Id__h5: case Gfh_tag_.Id__h6: nxt = tag_rdr.Tag__peek_fwd_head(); - if ( nxt.Name_id() == Html_tag_.Id__span - && nxt.Atrs__match_pair(Html_atr_.Bry__class , Xoh_hdr_parser.Bry__class__mw_headline)) { - if (wkr__hdr.Parse(hdoc_wkr, hctx, tag_rdr, src, cur, nxt)) return wkr__hdr.Src_end(); + if ( nxt.Name_id() == Gfh_tag_.Id__span + && nxt.Atrs__match_pair(Gfh_atr_.Bry__class , Xoh_hdr_data.Bry__class__mw_headline)) { + rv = Parse_by_data(hdoc_wkr, hctx, tag_rdr, src, cur, nxt, Xoh_hzip_dict_.Tid__hdr); } break; - case Html_tag_.Id__a: + case Gfh_tag_.Id__a: nxt = tag_rdr.Tag__peek_fwd_head(); - if (nxt.Name_id() == Html_tag_.Id__img) { - if (wkr__img.Parse(hdoc_wkr, hctx, src, tag_rdr, cur)) { - hdoc_wkr.On_img(wkr__img); - return wkr__img.Src_end(); - } - } - else if (cur.Atrs__match_pair(Html_atr_.Bry__rel , Xoh_lnke_dict_.Html__rel__nofollow)) { - if (wkr__lnke.Parse(hdoc_wkr, hctx, tag_rdr, src, cur)) return wkr__lnke.Src_end(); - } - else if (cur.Atrs__get_by_or_empty(Xoh_img_parser.Bry__atr__xowa_title).Val_dat_exists()) {} - else { - if (wkr__lnki.Parse(hdoc_wkr, hctx, tag_rdr, src, cur)) return wkr__lnki.Src_end(); + if (nxt.Name_id() == Gfh_tag_.Id__img) // lnki.img; EX: [[File:A.png]] + rv = Parse_by_data(hdoc_wkr, hctx, tag_rdr, src, cur, null, Xoh_hzip_dict_.Tid__img); + else if (cur.Atrs__match_pair(Gfh_atr_.Bry__rel, Xoh_lnke_dict_.Html__rel__nofollow)) // lnke; EX: [http://a.org] + rv = Parse_by_data(hdoc_wkr, hctx, tag_rdr, src, cur, null, Xoh_hzip_dict_.Tid__lnke); + else if (cur.Atrs__get_by_or_empty(Xoh_img_data.Bry__atr__xowa_title).Val_dat_exists()) {} // lnki.aud; EX: [[File:A.oga]]; ignore for now + else { // lnki; EX: [[A]] + if (wkr__lnki.Parse1(hdoc_wkr, hctx, tag_rdr, src, cur)) return wkr__lnki.Src_end(); } break; - case Html_tag_.Id__div: - if (cur.Atrs__cls_has(Xoh_thm_parser.Atr__class__thumb)) { - if (wkr__thm.Parse(hdoc_wkr, hctx, src, tag_rdr, cur)) return wkr__thm.Src_end(); - } - else if (cur.Atrs__match_pair(Html_atr_.Bry__id, Xoh_thm_parser.Atr__id__xowa_media_div)) { - tag_rdr.Tag__move_fwd_tail(Html_tag_.Id__div); + case Gfh_tag_.Id__img: + if (cur.Name_id() == Gfh_tag_.Id__img) // img; EX: + rv = Parse_by_data(hdoc_wkr, hctx, tag_rdr, src, cur, null, Xoh_hzip_dict_.Tid__img_bare); + break; + case Gfh_tag_.Id__div: + if (cur.Atrs__cls_has(Xoh_thm_data.Atr__class__thumb)) { + if (wkr__thm.Parse1(hdoc_wkr, hctx, src, tag_rdr, cur)) return wkr__thm.Src_end(); } + else if (cur.Atrs__cls_has(Xoh_thm_data.Atr__id__xowa_media_div)) + rv = Parse_by_data(hdoc_wkr, hctx, tag_rdr, src, cur, null, Xoh_hzip_dict_.Tid__img); break; - case Html_tag_.Id__ul: - if (cur.Atrs__cls_has(Xoh_gly_grp_parser.Atr__class__gallery)) { - int rv = wkr__gly.Parse(hdoc_wkr, hctx, src, tag_rdr, cur); - hdoc_wkr.On_gly(wkr__gly); - if (rv != Xoh_hdoc_ctx.Invalid) return rv; + case Gfh_tag_.Id__ul: + if (cur.Atrs__cls_has(Xoh_gly_grp_data.Atr__cls__gallery)) { +// rv = Parse_by_data(hdoc_wkr, hctx, tag_rdr, src, cur, null, Xoh_hzip_dict_.Tid__gly); + if (wkr__gly.Parse1(hdoc_wkr, hctx, src, tag_rdr, cur)) return wkr__gly.Src_end(); } break; +// case Gfh_tag_.Id__td: +// if (wkr__xnde.Parse(hdoc_wkr, hctx, tag_rdr, src, cur)) return wkr__xnde.Src_end(); +// break; + } + if (rv == -1) { + rv = cur_end; + hdoc_wkr.On_txt(pos, rv); } - hdoc_wkr.On_txt(pos, cur.Src_end()); + return rv; } - return cur.Src_end(); + return cur_end; + } + private int Parse_by_data(Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Gfh_tag_rdr tag_rdr, byte[] src, Gfh_tag cur, Gfh_tag nxt, int tid) { + Xoh_data_itm data = hctx.Pool_mgr__data().Get_by_tid(tid); + data.Clear(); + if (!data.Init_by_parse(hdoc_wkr, hctx, tag_rdr, src, cur, nxt)) return -1; + if (!hdoc_wkr.Process_parse(data)) return -1; + int rv = data.Src_end(); + data.Pool__rls(); + return rv; } } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/Xoh_thm_bldr.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/Xoh_thm_bldr.java deleted file mode 100644 index 78f20b5e8..000000000 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/Xoh_thm_bldr.java +++ /dev/null @@ -1,38 +0,0 @@ -/* -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 . -*/ -package gplx.xowa.htmls.core.wkrs.thms; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; -import gplx.core.primitives.*; import gplx.core.brys.*; -import gplx.langs.htmls.*; import gplx.langs.htmls.parsers.*; -import gplx.xowa.htmls.core.wkrs.imgs.*; import gplx.xowa.htmls.core.wkrs.imgs.atrs.*; -public class Xoh_thm_bldr { - private final Xoh_thm_wtr wtr = new Xoh_thm_wtr(); - private final byte[] div_2_magnify = Bry_.new_a7("bin/any/xowa/file/mediawiki.file/magnify-clip.png"); - public void Make(Bry_bfr bfr, Xoh_page hpg, Xoh_hdoc_ctx hctx, byte[] src, int div_0_align, int div_1_width, boolean div_2_alt_exists, byte[] img_alt, Xoh_img_bldr img_bldr, Bfr_arg div_2_href, Bfr_arg div_2_capt) { - wtr.Clear(); - wtr.Div_0_align_(div_0_align); - if (!hctx.Mode_is_diff()) - wtr.Div_1_id_(img_bldr.Fsdb_itm().Html_uid()); - wtr.Div_1_width_(div_1_width); - wtr.Div_1_img_(img_bldr.Wtr()); - wtr.Div_2_href_(div_2_href); - wtr.Div_2_magnify_(hctx.Fsys__root(), div_2_magnify); - wtr.Div_2_capt_(div_2_capt); - wtr.Div_2_alt_(div_2_alt_exists, img_alt); - wtr.Bfr_arg__add(bfr); - } -} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/Xoh_thm_data.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/Xoh_thm_data.java new file mode 100644 index 000000000..97c77ed7a --- /dev/null +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/Xoh_thm_data.java @@ -0,0 +1,70 @@ +/* +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 . +*/ +package gplx.xowa.htmls.core.wkrs.thms; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; +import gplx.core.brys.*; +import gplx.langs.htmls.*; import gplx.langs.htmls.docs.*; import gplx.langs.htmls.styles.*; +import gplx.xowa.htmls.core.wkrs.thms.divs.*; import gplx.xowa.htmls.core.wkrs.imgs.*; +public class Xoh_thm_data implements Gfh_style_wkr { + public int Src_bgn() {return src_bgn;} private int src_bgn; + public int Src_end() {return src_end;} private int src_end; + public boolean Rng_valid() {return rng_valid;} private boolean rng_valid; + public byte Div_0_align() {return div_0_align;} private byte div_0_align; + public int Div_1_width() {return div_1_width;} private int div_1_width; + public Xoh_img_data Img_data() {return img_data;} private final Xoh_img_data img_data = new Xoh_img_data(); + public Xoh_thm_caption_data Capt_data() {return capt_data;} private final Xoh_thm_caption_data capt_data = new Xoh_thm_caption_data(); + public void Clear() { + rng_valid = false; + capt_data.Clear(); + img_data.Clear(); + } + public boolean Parse1(Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, byte[] src, Gfh_tag_rdr tag_rdr, Gfh_tag div_0_head) { + this.Clear(); + tag_rdr.Err_wkr().Init_by_sect("thm", div_0_head.Src_bgn()); + this.src_bgn = div_0_head.Src_bgn(); + this.div_0_align = div_0_head.Atrs__cls_find_or(gplx.xowa.parsers.lnkis.Xop_lnki_align_h_.Hash, Byte_.Zero); + Gfh_tag div_0_tail = tag_rdr.Tag__peek_fwd_tail(Gfh_tag_.Id__div); //
        + Gfh_tag div_1_head = tag_rdr.Tag__find_fwd_head(div_0_head.Src_end(), div_0_tail.Src_bgn(), Gfh_tag_.Id__div); //
        + if (div_1_head.Name_id() != Gfh_tag_.Id__div) return false; + if (!tag_rdr.Tag__move_fwd_head().Chk_name(Gfh_tag_.Id__div)) return false; // exit if not div; PAGE:en.w:Chess; DATE:2015-12-27 + this.div_1_width = -1; + Gfh_style_parser_.Parse(div_1_head, this); // " style='120px'" + if (div_1_width == -1) return false; // handle invalid styles from en.w:Template:CSS_image_crop; PAGE:en.w:Carlisle_United_F.C.; DATE:2016-01-01 + if (!img_data.Init_by_parse(hdoc_wkr, hctx, tag_rdr, src, tag_rdr.Tag__move_fwd_head(), null)) return false; // + if (!capt_data.Parse1(hdoc_wkr, tag_rdr, src, tag_rdr.Tag__move_fwd_head())) return false; //
        + rng_valid = true; + int div_2_tail_end = tag_rdr.Pos(); + Gfh_tag div_1_tail = tag_rdr.Tag__move_fwd_tail(Gfh_tag_.Id__div); + if (!capt_data.Capt_exists()) capt_data.Chk_capt_moved_by_tidy(src, div_2_tail_end, div_1_tail.Src_bgn()); + tag_rdr.Tag__move_fwd_tail(Gfh_tag_.Id__div); + this.src_end = tag_rdr.Pos(); + hdoc_wkr.On_thm(this); + return true; + } + public boolean On_atr(byte[] src, int atr_idx, int atr_bgn, int atr_end, int key_bgn, int key_end, int val_bgn, int val_end) { + if ( Bry_.Match(src, key_bgn, key_end, Gfh_style_key_.Bry__width) + && val_bgn - key_end == 1) { // handle invalid styles from en.w:Template:CSS_image_crop which have "width: 123px"; PAGE:en.w:Abraham_Lincoln; DATE:2016-01-02 + this.div_1_width = Bry_.To_int_or__lax(src, val_bgn, val_end, -1); + } + return true; + } + public static final byte[] + Atr__class__thumb = Bry_.new_a7("thumb") + , Atr__class__thumbinner = Bry_.new_a7("thumbinner") + , Atr__id__xowa_media_div = Bry_.new_a7("xowa_media_div") + ; +} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/Xoh_thm_html_tst.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/Xoh_thm_html_tst.java index 7b601fdae..612591f24 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/Xoh_thm_html_tst.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/Xoh_thm_html_tst.java @@ -19,19 +19,57 @@ package gplx.xowa.htmls.core.wkrs.thms; import gplx.*; import gplx.xowa.*; impor import org.junit.*; import gplx.xowa.htmls.core.makes.tests.*; public class Xoh_thm_html_tst { private final Xoh_make_fxt fxt = new Xoh_make_fxt(); - @Test public void Thumb__basic() { - // fxt.Expd_itms_xfers(fxt.Make_xfer("A.png", 0, 0, 0, Bool_.Y, Xof_ext_.Id_png)); + @Test public void Image() { fxt.Test__html("[[File:A.png|thumb|test_caption]]", String_.Concat_lines_nl_skip_last ( "
        " , "
        " , " " , "
        " - , "
        " - , " " - , " " + , "
        test_caption" + , "
        " + , "
        " + , "
        " + )); + } + @Test public void Audio__link() { // PURPOSE: handle IPA links; EX:[[File:Speakerlink-new.svg|11px|link=file:///C:/xowa/file/commons.wikimedia.org/orig/c/7/a/3/En-LudwigVanBeethoven.ogg|Listen]]; PAGE:en.w:Beethoven DATE:2015-12-28 + fxt.Test__html("[[File:A.oga|11px|link=file:///C:/A.ogg|b]]", String_.Concat_lines_nl_skip_last + ( "
        " + , "
        " + , "
        " + , "
        " + , " " + , " \"Play" + , " " + , "
        " + , "
        " + , " " + , " " + , " " + , "
        " + , "
        " + , "
        " + , "
        b" + , "
        " + , "
        " + , "
        " + , "" + )); + } + @Test public void Video() { + fxt.Test__html("[[File:A.ogv|thumb|test_caption]]", String_.Concat_lines_nl_skip_last + ( "
        " + , "
        " + , "
        " + , "
        \"\"/" + , "
        " + , "
        " + , " " + , " \"Play" , " " , "
        " - , " test_caption" + , "
        " + , "
        " + , "
        test_caption" , "
        " , "
        " , "
        " diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/Xoh_thm_hzip.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/Xoh_thm_hzip.java index 7629fb4ab..6817865ae 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/Xoh_thm_hzip.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/Xoh_thm_hzip.java @@ -20,55 +20,58 @@ import gplx.core.primitives.*; import gplx.core.brys.*; import gplx.core.threads import gplx.xowa.htmls.core.hzips.*; import gplx.xowa.htmls.core.wkrs.imgs.*; import gplx.xowa.htmls.core.wkrs.thms.divs.*; public class Xoh_thm_hzip implements Xoh_hzip_wkr, Gfo_poolable_itm { private final Xoh_img_hzip img_hzip = new Xoh_img_hzip(); - private final Xoh_thm_bldr bldr = new Xoh_thm_bldr(); + private final Xoh_thm_wtr wtr = new Xoh_thm_wtr(); private final Bry_obj_ref div_2_capt = Bry_obj_ref.New_empty(); + public int Tid() {return Xoh_hzip_dict_.Tid__thm;} public String Key() {return Xoh_hzip_dict_.Key__thm;} public byte[] Hook() {return hook;} private byte[] hook; - public Gfo_poolable_itm Encode(Xoh_hzip_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, boolean wkr_is_root, byte[] src, Object data_obj) { - Xoh_thm_parser data = (Xoh_thm_parser)data_obj; + public Gfo_poolable_itm Encode1(Xoh_hzip_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, boolean wkr_is_root, byte[] src, Object data_obj) { + Xoh_thm_data data = (Xoh_thm_data)data_obj; if (!data.Rng_valid()) { bfr.Add_mid(src, data.Src_bgn(), data.Src_end()); return this; } - Xoh_thm_caption_parser div_2_capt_parser = data.Capt_parser(); - int div_1_width = data.Div_1_width(); ; - boolean div_2_alt_exists = flag_bldr.Set_as_bool(Flag__div_2_alt_exists , data.Capt_parser().Alt_div_exists()); - boolean div_1_width_exists = flag_bldr.Set_as_bool(Flag__div_1_width_exists , div_1_width != 220); - flag_bldr.Set_as_byte(Flag__div_0_align , data.Div_0_align()); - + Xoh_thm_caption_data div_2_capt_parser = data.Capt_data(); + int div_1_width = data.Div_1_width(); + flag_bldr.Set_as_bool(Flag__div_2_capt_moved_by_tidy , data.Capt_data().Capt_moved_by_tidy()); + boolean div_2_alt_exists = flag_bldr.Set_as_bool(Flag__div_2_alt_exists , data.Capt_data().Alt_div_exists()); + boolean div_1_width_exists = flag_bldr.Set_as_bool(Flag__div_1_width_exists , div_1_width != 220); + flag_bldr.Set_as_byte(Flag__div_0_align , data.Div_0_align()); bfr.Add(hook); Xoh_hzip_int_.Encode(1, bfr, flag_bldr.Encode()); if (div_1_width_exists) Xoh_hzip_int_.Encode(2, bfr, div_1_width); if (div_2_capt_parser.Capt_exists()) bfr.Add_mid(src, div_2_capt_parser.Capt_bgn(), div_2_capt_parser.Capt_end()); bfr.Add_byte(Xoh_hzip_dict_.Escape); if (div_2_alt_exists) bfr.Add_mid(src, div_2_capt_parser.Alt_div_bgn(), div_2_capt_parser.Alt_div_end()).Add_byte(Xoh_hzip_dict_.Escape); - img_hzip.Encode(bfr, hdoc_wkr, hctx, hpg, Bool_.N, src, data.Img_parser()); + img_hzip.Encode1(bfr, hdoc_wkr, hctx, hpg, Bool_.N, src, data.Img_data()); return this; } - public int Decode(Bry_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, boolean wkr_is_root, Bry_rdr rdr, byte[] src, int src_bgn, int src_end) { - int flag = rdr.Read_int_by_base85(1); - int rv = rdr.Pos(); - - flag_bldr.Decode(flag); + public void Decode1(Bry_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, Bry_rdr rdr, byte[] src, int src_bgn, int src_end, Xoh_data_itm data_itm) { + int flag = rdr.Read_hzip_int(1); flag_bldr.Decode(flag); + boolean div_2_capt_moved_by_tidy = flag_bldr.Get_as_bool(Flag__div_2_capt_moved_by_tidy); boolean div_2_alt_exists = flag_bldr.Get_as_bool(Flag__div_2_alt_exists); boolean div_1_width_exists = flag_bldr.Get_as_bool(Flag__div_1_width_exists); int div_0_align = flag_bldr.Get_as_int(Flag__div_0_align); int div_1_width = 220; - if (div_1_width_exists) div_1_width = rdr.Read_int_by_base85(2); + if (div_1_width_exists) div_1_width = rdr.Read_hzip_int(2); int capt_bgn = rdr.Pos(); int capt_end = rdr.Find_fwd_lr(); div_2_capt.Mid_(src, capt_bgn, capt_end); byte[] div_2_alt_bry = div_2_alt_exists ? rdr.Read_bry_to() : Bry_.Empty; - img_hzip.Decode(bfr, hdoc_wkr, hctx, hpg, Bool_.N, rdr, src, rdr.Pos(), src_end); - bldr.Make(bfr, hpg, hctx, src, div_0_align, div_1_width, div_2_alt_exists, div_2_alt_bry, img_hzip.Bldr(), img_hzip.Anch_href_arg(), div_2_capt); - return rv; + + Xoh_img_data img_data = (Xoh_img_data)hctx.Pool_mgr__data().Get_by_tid(Xoh_hzip_dict_.Tid__img); + img_hzip.Decode1(bfr, hdoc_wkr, hctx, hpg, rdr, src, rdr.Pos(), src_end, img_data); + img_hzip.Wtr().Init_by_decode(hpg, hctx, src, img_data); + wtr.Write(bfr, hpg, hctx, src, img_data.Img_is_vid(), div_0_align, div_1_width, div_2_alt_exists, div_2_alt_bry, img_hzip.Wtr(), img_hzip.Anch_href_bry(), div_2_capt, div_2_capt_moved_by_tidy); + img_data.Pool__rls(); } public void Pool__rls () {pool_mgr.Rls_fast(pool_idx);} private Gfo_poolable_mgr pool_mgr; private int pool_idx; public Gfo_poolable_itm Pool__make (Gfo_poolable_mgr mgr, int idx, Object[] args) {Xoh_thm_hzip rv = new Xoh_thm_hzip(); rv.pool_mgr = mgr; rv.pool_idx = idx; rv.hook = (byte[])args[0]; return rv;} - private final Int_flag_bldr flag_bldr = new Int_flag_bldr().Pow_ary_bld_(1, 1, 3); + private final Int_flag_bldr flag_bldr = new Int_flag_bldr().Pow_ary_bld_(1, 1, 1, 3); private static final int // SERIALIZED - Flag__div_2_alt_exists = 0 - , Flag__div_1_width_exists = 1 - , Flag__div_0_align = 2 // "", "tnone", "tleft", "tcenter", "tright" + Flag__div_2_capt_moved_by_tidy = 0 + , Flag__div_2_alt_exists = 1 + , Flag__div_1_width_exists = 2 + , Flag__div_0_align = 3 // "", "tnone", "tleft", "tcenter", "tright" ; } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/Xoh_thm_hzip_tst.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/Xoh_thm_hzip_tst.java index 51d9c5359..cb9d864a3 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/Xoh_thm_hzip_tst.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/Xoh_thm_hzip_tst.java @@ -18,14 +18,14 @@ along with this program. If not, see . package gplx.xowa.htmls.core.wkrs.thms; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; import org.junit.*; import gplx.xowa.htmls.core.hzips.*; public class Xoh_thm_hzip_tst { - private final Xoh_hzip_fxt fxt = new Xoh_hzip_fxt(); + private final Xoh_hzip_fxt fxt = new Xoh_hzip_fxt().Init_mode_diff_y_(); @Before public void setup() {fxt.Clear();} @Test public void Image() { fxt.Test__bicode("~&3abc~abc~!uA.png~)#Sabc~", String_.Concat_lines_nl_skip_last ( "
        " - , "
        abc " + , "
        abc " , "
        " - , "
        " + , "
        " , "abc
        " , "
        " , "
        abc
        " @@ -33,50 +33,159 @@ public class Xoh_thm_hzip_tst { , "
        " )); } - @Test public void No_capt() { + @Test public void Video() { + fxt.Test__bicode("~&%test_caption~|E9eA.ogv~%A.ogv~~", String_.Replace(String_.Concat_lines_nl_skip_last + ( "
        " + , "
        " + , "
        " + , "
        " + , "
        Play sound
        " + , "
        " + , "
        " + , "
        " + , "test_caption
        " + , "
        " + , "
        " + ), "'", "\"")); + } + @Test public void Capt_is_missing() { // [[File:A.png|thumb]] fxt.Test__bicode("~&#~!%A.png~)#S~", String_.Concat_lines_nl_skip_last ( "
        " - , "
        " + , "
        " , "
        " - , "
        " + , "
        " , "
        " , "
        " , "
        " )); } - @Test public void Video() { - String html = String_.Replace(String_.Concat_lines_nl_skip_last - ( "
        " - , "
        " - , "
        " - , "
        " - , "" - , "
        " - , "
        " - , "Play sound" - , "
        " - , "
        " + @Test public void Tidy__moved_capt() { + fxt.Test__bicode("~&Cabc~!uA.png~)#Sabc~", String_.Concat_lines_nl_skip_last + ( "
        " + , "
        abc " , "
        " - , "
        " - , "" - , "
        Moscow (Russian Empire) in 1908" - , "
        " + , "
        " + , "
        abc" , "
        " , "
        " - ), "'", "\"") - ; - fxt.Test__bicode(html, html); + )); + } + @Test public void Fake__div_1__next_nde() { // PURPOSE: handle fake-thumbs with pseudo thumbimage class; PAGE:s.w:Mars + fxt.Test__bicode(String_.Replace(String_.Concat_lines_nl_skip_last + ( "
        " + , "
        " + , "
        " + , "
        ~%-eA.jpg~Image~)#?A.jpg~abc~
        " + , "
        abc
        " + , "
        " + , "
        " + , "
        " + ), "'", "\""), String_.Concat_lines_nl_skip_last + ( "
        " + , "
        " + , "
        " + , "
        abc
        " + , "
        abc
        " + , "
        " + , "
        " + , "
        " + )); + } + @Test public void Fake__div_1__style() { // PURPOSE.hdiff: handle fake-thumbs with bad style; PAGE:en.w:Carlisle_United_F.C. + fxt.Test__bicode(String_.Replace(String_.Concat_lines_nl_skip_last + ( "
        " + , "
        " + , "
        " + , "~%-eA.jpg~Image~)#?A.jpg~abc~
        " + , "
        " + , "
        ~${#7)A.jpg~
        " + , "abc" + , "
        " + , "
        " + , "
        " + ), "'", "\""), String_.Concat_lines_nl_skip_last + ( "
        " + , "
        " + , "
        " + , "abc
        " + , "
        " + , "" + , "abc" + , "
        " + , "
        " + , "
        " + )); + } + @Test public void Fake__div_1__width_w_space() { // PURPOSE.hdiff: handle fake-thumbs with style of "width "; PAGE:en.w:Abraham_Lincoln + fxt.Test__bicode(String_.Replace(String_.Concat_lines_nl_skip_last + ( "
        " + , "
        " + , "
        " + , "~%-eA.jpg~Image~)#?A.jpg~abc~
        " + , "
        " + , "
        ~${#7)A.jpg~
        " + , "abc" + , "
        " + , "
        " + , "
        " + ), "'", "\""), String_.Concat_lines_nl_skip_last + ( "
        " + , "
        " + , "
        " + , "abc
        " + , "
        " + , "" + , "abc" + , "
        " + , "
        " + , "
        " + )); + } + @Test public void Fake__div_1__thumbimage() { // PURPOSE.hdiff: handle fake-thumbs with image-map style; PAGE:en.w:UK + fxt.Test__bicode(String_.Replace(String_.Concat_lines_nl_skip_last + ( "
        " + , "
        " + , "
        " + , "
        " + , "
        " + , "
        ~%!!A.svg~)#q~
        " + , "
        " + , "
        abc
        " + , "
        " + , "
        " + , "
        " + , "
        " + , "
        def
        " + , "
        " + , "
        " + ), "'", "\""), String_.Concat_lines_nl_skip_last + ( "
        " + , "
        " + , "
        " + , "
        " + , "
        " + , "
        " + , "
        " + , "
        abc
        " + , "
        " + , "
        " + , "
        " + , "
        " + , "
        def
        " + , "
        " + , "
        " + )); } @Test public void Dump() { - Xowe_wiki en_d = fxt.Init_wiki_alias("wikt", "en.wiktionary.org"); - gplx.xowa.wikis.nss.Xow_ns_mgr ns_mgr = en_d.Ns_mgr(); - ns_mgr.Ns_main().Case_match_(gplx.xowa.wikis.nss.Xow_ns_case_.Tid__all); - - fxt.Wiki().Ns_mgr().Aliases_add(gplx.xowa.wikis.nss.Xow_ns_.Tid__portal, "WP"); - fxt.Wiki().Ns_mgr().Init(); - - fxt.Init_mode_is_b256_(Bool_.N); - fxt.Exec_write_to_fsys(Io_url_.new_dir_("J:\\xowa\\dev_rls\\html\\"), "temp_earth_xo.html"); - fxt.Init_mode_is_b256_(Bool_.N); +// Xowe_wiki en_d = fxt.Init_wiki_alias("wikt", "en.wiktionary.org"); +// gplx.xowa.wikis.nss.Xow_ns_mgr ns_mgr = en_d.Ns_mgr(); +// ns_mgr.Ns_main().Case_match_(gplx.xowa.wikis.nss.Xow_ns_case_.Tid__all); +// +// fxt.Wiki().Ns_mgr().Aliases_add(gplx.xowa.wikis.nss.Xow_ns_.Tid__portal, "WP"); +// fxt.Wiki().Ns_mgr().Init(); +// +// fxt.Init_mode_is_b256_(Bool_.N); +// fxt.Exec_write_to_fsys(Io_url_.new_dir_("J:\\xowa\\dev_rls\\html\\"), "debug.html"); +// fxt.Init_mode_is_b256_(Bool_.N); } } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/Xoh_thm_parser.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/Xoh_thm_parser.java deleted file mode 100644 index 0f30c09c8..000000000 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/Xoh_thm_parser.java +++ /dev/null @@ -1,62 +0,0 @@ -/* -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 . -*/ -package gplx.xowa.htmls.core.wkrs.thms; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; -import gplx.core.brys.*; -import gplx.langs.htmls.*; import gplx.langs.htmls.parsers.*; import gplx.langs.htmls.parsers.styles.*; -import gplx.xowa.htmls.core.wkrs.thms.divs.*; import gplx.xowa.htmls.core.wkrs.imgs.*; -public class Xoh_thm_parser implements Html_atr_style_wkr { - public int Src_bgn() {return src_bgn;} private int src_bgn; - public int Src_end() {return src_end;} private int src_end; - public boolean Rng_valid() {return rng_valid;} private boolean rng_valid; - public byte Div_0_align() {return div_0_align;} private byte div_0_align; - public int Div_1_width() {return div_1_width;} private int div_1_width; - public Xoh_img_parser Img_parser() {return img_parser;} private final Xoh_img_parser img_parser = new Xoh_img_parser(); - public Xoh_thm_caption_parser Capt_parser() {return capt_parser;} private final Xoh_thm_caption_parser capt_parser = new Xoh_thm_caption_parser(); - public boolean Parse(Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, byte[] src, Html_tag_rdr tag_rdr, Html_tag div_0_head) { - tag_rdr.Err_wkr().Init_by_sect("thm", div_0_head.Src_bgn()); - this.src_bgn = div_0_head.Src_bgn(); - this.div_0_align = div_0_head.Atrs__cls_find_or_fail(gplx.xowa.parsers.lnkis.Xop_lnki_align_h_.Hash); - Html_tag div_0_tail = tag_rdr.Tag__peek_fwd_tail(Html_tag_.Id__div); //
        - Html_tag div_1_head = tag_rdr.Tag__find_fwd_head(div_0_head.Src_end(), div_0_tail.Src_bgn(), Html_tag_.Id__div); //
        - if (div_1_head.Name_id() != Html_tag_.Id__div) return false; - // tag_rdr.Pos_(div_1_head.Src_end()); - tag_rdr.Tag__move_fwd_head().Chk_id(Html_tag_.Id__div); - this.div_1_width = -1; - Html_atr_style_parser_.Parse(div_1_head, this); // " style='120px'" - rng_valid = false; - if (img_parser.Parse(hdoc_wkr, hctx, src, tag_rdr, tag_rdr.Tag__move_fwd_head())) { // - if (!capt_parser.Parse(hdoc_wkr, tag_rdr, src, tag_rdr.Tag__move_fwd_head())) return false; //
        - rng_valid = true; - } - tag_rdr.Tag__move_fwd_tail(Html_tag_.Id__div); - tag_rdr.Tag__move_fwd_tail(Html_tag_.Id__div); - this.src_end = tag_rdr.Pos(); - hdoc_wkr.On_thm(this); - return true; - } - public boolean On_atr(byte[] src, int atr_idx, int atr_bgn, int atr_end, int key_bgn, int key_end, int val_bgn, int val_end) { - if (Bry_.Match(src, key_bgn, key_end, Html_atr_style_.Bry__width)) - this.div_1_width = Bry_.To_int_or__lax(src, val_bgn, val_end, -1); - return true; - } - public static final byte[] - Atr__class__thumb = Bry_.new_a7("thumb") - , Atr__class__thumbinner = Bry_.new_a7("thumbinner") - , Atr__id__xowa_media_div = Bry_.new_a7("xowa_media_div") - ; -} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/Xoh_thm_wtr.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/Xoh_thm_wtr.java index 021322ea7..062ec786a 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/Xoh_thm_wtr.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/Xoh_thm_wtr.java @@ -17,59 +17,72 @@ along with this program. If not, see . */ package gplx.xowa.htmls.core.wkrs.thms; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; import gplx.core.primitives.*; import gplx.core.brys.*; import gplx.core.brys.fmtrs.*; import gplx.core.brys.args.*; -import gplx.langs.htmls.*; import gplx.langs.htmls.parsers.*; +import gplx.langs.htmls.*; import gplx.langs.htmls.docs.*; import gplx.xowa.htmls.core.wkrs.bfr_args.*; import gplx.xowa.htmls.core.wkrs.imgs.*; import gplx.xowa.htmls.core.wkrs.imgs.atrs.*; -public class Xoh_thm_wtr extends gplx.core.brys.Bfr_arg_base { - private final Bry_obj_ref div_0_align = Bry_obj_ref.New_empty(); - private final Bfr_arg__id div_1_id_val = new Bfr_arg__id(); - private final Bfr_arg__int div_1_width = new Bfr_arg__int(-1); - private final Bfr_arg__html_atr - div_1_id = new Bfr_arg__html_atr(Html_atr_.Bry__id) - , div_2_href = new Bfr_arg__html_atr(Html_atr_.Bry__href) - ; - private final Bfr_arg__bry_ary div_2_magnify = new Bfr_arg__bry_ary(); - private final Bfr_arg__bry div_2_alt = new Bfr_arg__bry(Bry_.Empty); - private Bfr_arg div_1_img = Bfr_arg_.Noop, div_2_capt = Bfr_arg_.Noop; - public Xoh_thm_wtr Div_0_align_(int v) {div_0_align.Val_(gplx.xowa.parsers.lnkis.Xop_lnki_align_h_.To_bry(v)); return this;} - public Xoh_thm_wtr Div_1_id_(int v) {div_1_id.Set_by_arg(div_1_id_val.Set(Prefix__div_id, v)); return this;} - public Xoh_thm_wtr Div_1_width_(int v) {div_1_width.Set(v); return this;} - public Xoh_thm_wtr Div_1_img_(Xoh_img_wtr v) {div_1_img = v; return this;} - public Xoh_thm_wtr Div_2_href_(Bfr_arg v) {div_2_href.Set_by_arg(v); return this;} - public Xoh_thm_wtr Div_2_magnify_(byte[]... v) {div_2_magnify.Set(v); return this;} - public Xoh_thm_wtr Div_2_capt_(Bfr_arg v) {div_2_capt = v; return this;} +public class Xoh_thm_wtr implements gplx.core.brys.Bfr_arg { + private final Bfr_arg__bry div_0_align = Bfr_arg__bry.New_empty(); + private final Bfr_arg__int div_1_width = new Bfr_arg__int(-1); + private final Bfr_arg__hatr_id div_1_id = Bfr_arg__hatr_id.New("xothm_"); + private final Bfr_arg__hatr_bry div_2_href = new Bfr_arg__hatr_bry(Gfh_atr_.Bry__href); + private final Bfr_arg__bry_ary div_2_magnify = new Bfr_arg__bry_ary(); + private final Bfr_arg__bry div_2_alt = Bfr_arg__bry.New(Bry_.Empty); private final Bry_bfr tmp_bfr = Bry_bfr.new_(255); + private Bfr_arg div_1_img = Bfr_arg_.Noop, div_2_capt_arg = Bfr_arg_.Noop, div_2_capt_moved_by_tidy_arg = Bfr_arg_.Noop; + private byte[] img_is_vid_nl, trailing_space; public Xoh_thm_wtr Div_2_alt_(boolean v, byte[] img_alt_bry) { if (v) { -// img_alt.Bfr_arg__add(tmp_bfr); -// byte[] img_alt_bry = tmp_bfr.To_bry_and_clear(); alt_fmtr.Bld_bfr_many(tmp_bfr, img_alt_bry); - div_2_alt.Set(tmp_bfr.To_bry_and_clear()); + div_2_alt.Set_by_val(tmp_bfr.To_bry_and_clear()); } else - div_2_alt.Set(Bry_.Empty); + div_2_alt.Set_by_val(Bry_.Empty); return this; } public Xoh_thm_wtr Clear() { - Bfr_arg_.Clear(div_0_align, div_1_id, div_1_width, div_2_href, div_2_magnify, div_2_alt); - div_1_img = div_2_capt = Bfr_arg_.Noop; + Bfr_arg_.Clear(div_0_align, div_1_id, div_2_href, div_2_alt); // , div_1_width, div_2_magnify + div_1_img = div_2_capt_arg = div_2_capt_moved_by_tidy_arg = Bfr_arg_.Noop; + img_is_vid_nl = Bry_.Empty; return this; } - @Override public void Bfr_arg__add(Bry_bfr bfr) { - fmtr.Bld_bfr_many(bfr, div_0_align, div_1_id, div_1_width, div_1_img, div_2_href, div_2_magnify, div_2_capt, div_2_alt); + public void Write(Bry_bfr bfr, Xoh_page hpg, Xoh_hdoc_ctx hctx, byte[] src, boolean img_is_vid, int div_0_align, int div_1_w, boolean div_2_alt_exists, byte[] img_alt, Xoh_img_wtr img_wtr + , byte[] div_2_href, Bfr_arg div_2_capt, boolean div_2_capt_moved_by_tidy) { + this.Clear(); + this.img_is_vid_nl = img_is_vid ? Byte_ascii.Nl_bry : Bry_.Empty; + this.trailing_space = img_is_vid ? Bry_.Empty : Byte_ascii.Space_bry; + this.div_0_align.Set_by_val(gplx.xowa.parsers.lnkis.Xop_lnki_align_h_.To_bry(div_0_align)); + if (!hctx.Mode_is_diff()) + this.div_1_id.Set(img_wtr.Fsdb_itm().Html_uid()); + this.div_1_width.Set(div_1_w); + this.div_1_img = img_wtr; + this.div_2_href.Set_by_bry(div_2_href); + div_2_magnify.Set(hctx.Fsys__root(), bry_div_2_magnify); + if (div_2_capt_moved_by_tidy) { + this.div_2_capt_moved_by_tidy_arg = div_2_capt; + this.div_2_capt_arg = Bfr_arg_.Noop; + } + else { + this.div_2_capt_moved_by_tidy_arg = Bfr_arg_.Noop; + this.div_2_capt_arg = div_2_capt; + } + this.Div_2_alt_(div_2_alt_exists, img_alt); + this.Bfr_arg__add(bfr); + } + public void Bfr_arg__add(Bry_bfr bfr) { + fmtr.Bld_bfr_many(bfr, div_0_align, div_1_id, div_1_width, img_is_vid_nl, div_1_img, trailing_space, div_2_href, div_2_magnify, div_2_capt_arg, div_2_capt_moved_by_tidy_arg, div_2_alt); } - public static final byte[] Prefix__div_id = Bry_.new_a7("xothm_"); private static final Bry_fmtr fmtr = Bry_fmtr.new_(String_.Concat_lines_nl_skip_last ( "~{div_2_capt_moved_by_tidy}~{div_2_alt}" , "
        " , "
        " - ), "div_0_align", "div_1_id", "div_1_width", "div_1_img", "div_2_href", "div_2_magnify", "div_2_capt", "div_2_alt"); + ), "div_0_align", "div_1_id", "div_1_width", "img_is_vid_nl", "div_1_img", "trailing_space", "div_2_href", "div_2_magnify", "div_2_capt", "div_2_capt_moved_by_tidy", "div_2_alt"); private static final Bry_fmtr alt_fmtr = Bry_fmtr.new_(String_.Concat_lines_nl_skip_last ( "" , "
        " , "
        ~{alt}
        " ), "alt"); + private static final byte[] bry_div_2_magnify = Bry_.new_a7("bin/any/xowa/file/mediawiki.file/magnify-clip.png"); } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/divs/Xoh_thm_caption_parser.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/divs/Xoh_thm_caption_data.java similarity index 50% rename from 400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/divs/Xoh_thm_caption_parser.java rename to 400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/divs/Xoh_thm_caption_data.java index 2d106b9d7..df8b03556 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/divs/Xoh_thm_caption_parser.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/divs/Xoh_thm_caption_data.java @@ -16,39 +16,53 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.htmls.core.wkrs.thms.divs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; import gplx.xowa.htmls.core.wkrs.thms.*; -import gplx.langs.htmls.*; import gplx.langs.htmls.parsers.*; -public class Xoh_thm_caption_parser { - public int Rng_bgn() {return rng_bgn;} private int rng_bgn; - public int Rng_end() {return rng_end;} private int rng_end; +import gplx.langs.htmls.*; import gplx.langs.htmls.docs.*; +public class Xoh_thm_caption_data { + public int Src_bgn() {return src_bgn;} private int src_bgn; + public int Src_end() {return src_end;} private int src_end; public int Capt_bgn() {return capt_bgn;} private int capt_bgn; public int Capt_end() {return capt_end;} private int capt_end; public boolean Capt_exists() {return capt_end > capt_bgn;} + public boolean Capt_moved_by_tidy() {return capt_moved_by_tidy;} private boolean capt_moved_by_tidy; public int Alt_div_bgn() {return alt_div_bgn;} private int alt_div_bgn; public int Alt_div_end() {return alt_div_end;} private int alt_div_end; public boolean Alt_div_exists() {return alt_div_end > alt_div_bgn;} - public Xoh_thm_magnify_parser Magnify_parser() {return magnify_parser;} private final Xoh_thm_magnify_parser magnify_parser = new Xoh_thm_magnify_parser(); - public boolean Parse(Xoh_hdoc_wkr hdoc_wkr, Html_tag_rdr tag_rdr, byte[] src, Html_tag capt_head) { - this.rng_bgn = capt_head.Src_bgn(); + public Xoh_thm_magnify_data Magnify_parser() {return magnify_parser;} private final Xoh_thm_magnify_data magnify_parser = new Xoh_thm_magnify_data(); + public void Clear() { + this.capt_moved_by_tidy = false; + this.src_bgn = src_end = capt_bgn = capt_end = alt_div_bgn = alt_div_end = -1; + magnify_parser.Clear(); + } + public boolean Parse1(Xoh_hdoc_wkr hdoc_wkr, Gfh_tag_rdr tag_rdr, byte[] src, Gfh_tag capt_head) { + this.src_bgn = capt_head.Src_bgn(); if (!magnify_parser.Parse(hdoc_wkr, tag_rdr, src, capt_head)) return false; this.capt_bgn = magnify_parser.Magnify_tail_div().Src_end(); + if (src[capt_bgn] != Byte_ascii.Nl) tag_rdr.Err_wkr().Fail("expected newline before caption"); ++capt_bgn; // skip \n tag_rdr.Pos_(magnify_parser.Magnify_tail_div().Src_end() + 1); // also move tag_rdr forward one - Html_tag capt_tail = tag_rdr.Tag__move_fwd_tail(Html_tag_.Id__div); + Gfh_tag capt_tail = tag_rdr.Tag__move_fwd_tail(Gfh_tag_.Id__div); this.capt_end = capt_tail.Src_bgn(); - // capt_end = Bry_find_.Find_bwd_non_ws_or_end(src, capt_end - 1, -1) + 1; Alt_div_exists(tag_rdr, src); - this.rng_end = tag_rdr.Pos(); + this.src_end = tag_rdr.Pos(); return true; } - private void Alt_div_exists(Html_tag_rdr tag_rdr, byte[] src) { + public void Chk_capt_moved_by_tidy(byte[] src, int div_1_tail_end, int div_0_tail_bgn) { + int pos = Bry_find_.Find_fwd_while_ws(src, div_1_tail_end, div_0_tail_bgn); + if (pos != div_0_tail_bgn) { + capt_moved_by_tidy = true; + capt_bgn = div_1_tail_end; + capt_end = Bry_find_.Find_bwd__skip_ws(src, div_0_tail_bgn, div_1_tail_end); + } + } + private void Alt_div_exists(Gfh_tag_rdr tag_rdr, byte[] src) { this.alt_div_bgn = alt_div_end = -1; - Html_tag nxt_div_tail = tag_rdr.Tag__peek_fwd_tail(Html_tag_.Id__div); - Html_tag nxt_tag = tag_rdr.Tag__find_fwd_head(tag_rdr.Pos(), nxt_div_tail.Src_bgn(), Html_tag_.Id__hr); - if (nxt_tag.Name_id() != Html_tag_.Id__hr) return; - tag_rdr.Tag__move_fwd_head(); //
        - nxt_tag = tag_rdr.Tag__move_fwd_head().Chk_id(Html_tag_.Id__div); //
        + Gfh_tag nxt_div_tail = tag_rdr.Tag__peek_fwd_tail(Gfh_tag_.Id__div); + Gfh_tag nxt_tag = tag_rdr.Tag__find_fwd_head(tag_rdr.Pos(), nxt_div_tail.Src_bgn(), Gfh_tag_.Id__hr); + if (nxt_tag.Name_id() != Gfh_tag_.Id__hr) return; + tag_rdr.Tag__move_fwd_head(); //
        + nxt_tag = tag_rdr.Tag__move_fwd_head().Chk_name_or_fail(Gfh_tag_.Id__div); //
        alt_div_bgn = Bry_find_.Find_fwd_while_ws(src, nxt_tag.Src_end(), src.length); - nxt_tag = tag_rdr.Tag__move_fwd_tail(Html_tag_.Id__div); //
        + nxt_tag = tag_rdr.Tag__move_fwd_tail(Gfh_tag_.Id__div); //
        alt_div_end = Bry_find_.Find_bwd_non_ws_or_not_found(src, nxt_tag.Src_bgn() - 1, -1) + 1; } } \ No newline at end of file diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/divs/Xoh_thm_magnify_parser.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/divs/Xoh_thm_magnify_data.java similarity index 57% rename from 400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/divs/Xoh_thm_magnify_parser.java rename to 400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/divs/Xoh_thm_magnify_data.java index d6c97fa7b..8dd7dc8bc 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/divs/Xoh_thm_magnify_parser.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/thms/divs/Xoh_thm_magnify_data.java @@ -17,23 +17,28 @@ along with this program. If not, see . */ package gplx.xowa.htmls.core.wkrs.thms.divs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; import gplx.xowa.htmls.core.wkrs.thms.*; import gplx.core.brys.*; -import gplx.langs.htmls.*; import gplx.langs.htmls.parsers.*; -public class Xoh_thm_magnify_parser { - public int Rng_bgn() {return rng_bgn;} private int rng_bgn; - public int Rng_end() {return rng_end;} private int rng_end; +import gplx.langs.htmls.*; import gplx.langs.htmls.docs.*; +public class Xoh_thm_magnify_data { + public int Src_bgn() {return src_bgn;} private int src_bgn; + public int Src_end() {return src_end;} private int src_end; public boolean Exists() {return exists;} private boolean exists; - public Html_tag Magnify_tail_div() {return magnify_tail_div;} private Html_tag magnify_tail_div; - public boolean Parse(Xoh_hdoc_wkr hdoc_wkr, Html_tag_rdr tag_rdr, byte[] src, Html_tag div_caption) { + public Gfh_tag Magnify_tail_div() {return magnify_tail_div;} private Gfh_tag magnify_tail_div; + public void Clear() { + this.exists = false; + this.src_bgn = src_end = -1; + this.magnify_tail_div = null; + } + public boolean Parse(Xoh_hdoc_wkr hdoc_wkr, Gfh_tag_rdr tag_rdr, byte[] src, Gfh_tag div_caption) { // rdr.Init_by_sub(tag_rdr.Rdr(), "thm.magnify", div_caption.Src_bgn(), div_caption.Src_end()); - this.rng_bgn = div_caption.Src_bgn(); this.rng_end = div_caption.Src_end(); - Html_tag div_magnify = tag_rdr.Tag__move_fwd_head(); - if (div_magnify.Name_id() != Html_tag_.Id__div) return false; // NOTE: some thumbs can be artificially constructed and not have magnify div; PAGE:s.w:Asthma; DATE:2015-11-29 + this.src_bgn = div_caption.Src_bgn(); this.src_end = div_caption.Src_end(); + Gfh_tag div_magnify = tag_rdr.Tag__move_fwd_head(); + if (div_magnify.Name_id() != Gfh_tag_.Id__div) return false; // NOTE: some thumbs can be artificially constructed and not have magnify div; PAGE:s.w:Asthma; DATE:2015-11-29 if (!div_magnify.Atrs__cls_has(Cls__magnify)) return false; this.exists = div_magnify.Src_exists(); if (exists) { - magnify_tail_div = tag_rdr.Tag__move_fwd_tail(Html_tag_.Id__div); - this.rng_end = magnify_tail_div.Src_end(); - tag_rdr.Pos_(rng_end); + magnify_tail_div = tag_rdr.Tag__move_fwd_tail(Gfh_tag_.Id__div); + this.src_end = magnify_tail_div.Src_end(); + tag_rdr.Pos_(src_end); } return true; } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/txts/Xoh_txt_parser.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/txts/Xoh_txt_parser.java index 2ac89473c..6771530b7 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/txts/Xoh_txt_parser.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/txts/Xoh_txt_parser.java @@ -16,8 +16,8 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.htmls.core.wkrs.txts; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; -import gplx.langs.htmls.parsers.*; -public class Xoh_txt_parser implements Html_txt_wkr { +import gplx.langs.htmls.docs.*; +public class Xoh_txt_parser implements Gfh_txt_wkr { private final Xoh_hdoc_wkr wkr; public Xoh_txt_parser(Xoh_hdoc_wkr wkr) {this.wkr = wkr;} public void Parse(int rng_bgn, int rng_end) {wkr.On_txt(rng_bgn, rng_end);} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/Xoh_xnde_hzip.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/Xoh_xnde_hzip.java index c78be1b4c..ae111c4dd 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/Xoh_xnde_hzip.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/Xoh_xnde_hzip.java @@ -17,54 +17,24 @@ along with this program. If not, see . */ package gplx.xowa.htmls.core.wkrs.xndes; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; import gplx.core.brys.*; import gplx.core.threads.poolables.*; import gplx.xowa.wikis.ttls.*; -import gplx.langs.htmls.*; import gplx.xowa.htmls.core.hzips.*; +import gplx.langs.htmls.*; import gplx.xowa.htmls.core.hzips.*; import gplx.xowa.htmls.core.wkrs.xndes.tags.*; public class Xoh_xnde_hzip implements Xoh_hzip_wkr, Gfo_poolable_itm { public String Key() {return Xoh_hzip_dict_.Key__xnde;} public byte[] Hook() {return hook;} private byte[] hook; - public Gfo_poolable_itm Encode(Xoh_hzip_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, boolean wkr_is_root, byte[] src, Object data_obj) { -// Xoh_xnde_parser data = (Xoh_xnde_parser)data_obj; - -// int flag = data.Name_id(); -// boolean auto_exists = flag_bldr.Set_as_bool(Flag__auto_exists , data.Auto_id() != -1); -// boolean capt_exists = flag_bldr.Set_as_bool(Flag__capt_exists , data.Capt_exists()); -// byte lnke_tid = flag_bldr.Set_as_byte(Flag__lnke_tid , data.Lnke_tid()); -// -// bfr.Add(hook); -// bfr.Add_hzip_int(1, flag_bldr.Encode()); // add flag -// bfr.Add_hzip_mid(src, data.Href_bgn(), data.Href_end()); // add href -// if (auto_exists) bfr.Add_hzip_int(1, data.Auto_id()); // add autonumber -// if (capt_exists) bfr.Add_hzip_mid(src, data.Capt_bgn(), data.Capt_end()); // add caption - + public int Tid() {return Xoh_hzip_dict_.Tid__xnde;} + public Gfo_poolable_itm Encode1(Xoh_hzip_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, boolean wkr_is_root, byte[] src, Object data_obj) { + Xoh_xnde_parser parser = (Xoh_xnde_parser)data_obj; + Xohz_tag tag = hctx.Hzip__xnde__regy().Get_by_key(parser.Name_bry()); + bfr.Add(hook); + bfr.Add_byte((byte)tag.Uid()); + tag.Encode(hctx, bfr, src, parser); return this; } - public int Decode(Bry_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, boolean wkr_is_root, Bry_rdr rdr, byte[] src, int src_bgn, int src_end) { -// int flag = rdr.Read_int_by_base85(1); flag_bldr.Decode(flag); -// boolean auto_exists = flag_bldr.Get_as_bool(Flag__auto_exists); -// boolean capt_exists = flag_bldr.Get_as_bool(Flag__capt_exists); -// byte lnke_tid = flag_bldr.Get_as_byte(Flag__lnke_tid); -// -// int href_bgn = rdr.Pos(); int href_end = rdr.Find_fwd_lr(); -// int auto_id = -1, capt_bgn = -1, capt_end = -1; -// if (auto_exists) auto_id = rdr.Read_int_by_base85(1); -// if (capt_exists) {capt_bgn = rdr.Pos(); capt_end = rdr.Find_fwd_lr();} -// int rv = rdr.Pos(); -// -// bfr.Add(Html_bldr_.Bry__a_lhs_w_href); -// bfr.Add_mid(src, href_bgn, href_end); -// bfr.Add(Xoh_lnke_dict_.Html__atr__0).Add(Xoh_lnke_dict_.To_html_class(lnke_tid)).Add(Xoh_lnke_dict_.Html__rhs_end); -// if (auto_exists) bfr.Add_byte(Byte_ascii.Brack_bgn).Add_int_variable(auto_id).Add_byte(Byte_ascii.Brack_end); -// else if (capt_exists) bfr.Add_mid(src, capt_bgn, capt_end); -// else bfr.Add_mid(src, href_bgn, href_end); -// bfr.Add(Html_bldr_.Bry__a_rhs); -// return rv; - return src_end; + public void Decode1(Bry_bfr bfr, Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Xoh_page hpg, Bry_rdr rdr, byte[] src, int src_bgn, int src_end, Xoh_data_itm data_itm) { + byte uid = rdr.Read_byte(); + Xohz_tag tag = hctx.Hzip__xnde__regy().Get_by_uid(uid); + tag.Decode(hctx, bfr, rdr, src, src_bgn, src_end); } public void Pool__rls () {pool_mgr.Rls_fast(pool_idx);} private Gfo_poolable_mgr pool_mgr; private int pool_idx; public Gfo_poolable_itm Pool__make (Gfo_poolable_mgr mgr, int idx, Object[] args) {Xoh_xnde_hzip rv = new Xoh_xnde_hzip(); rv.pool_mgr = mgr; rv.pool_idx = idx; rv.hook = (byte[])args[0]; return rv;} -// private final Int_flag_bldr flag_bldr = new Int_flag_bldr().Pow_ary_bld_ (1, 1, 2); -// private static final int // SERIALIZED -// Flag__auto_exists = 0 -// , Flag__capt_exists = 1 -// , Flag__lnke_tid = 2 // "free", "autonumber", "text" -// ; } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/Xoh_xnde_hzip_nde__tst.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/Xoh_xnde_hzip_nde__tst.java new file mode 100644 index 000000000..8696dc96d --- /dev/null +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/Xoh_xnde_hzip_nde__tst.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 . +*/ +package gplx.xowa.htmls.core.wkrs.xndes; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; +import org.junit.*; import gplx.langs.htmls.*; +import gplx.xowa.htmls.core.wkrs.xndes.atrs.*; import gplx.xowa.htmls.core.wkrs.xndes.tags.*; +public class Xoh_xnde_hzip_nde__tst { +// private final Xoh_hzip_fxt fxt = new Xoh_hzip_fxt().Init_mode_is_b256_(Bool_.N); + @Test public void Basic() { +// fxt.Test__bicode(" ?#%", "
        "); + } + @Test public void Style() { +// fxt.Test__bicode(" ?#%", ""); + } +} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/Xoh_xnde_parser.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/Xoh_xnde_parser.java index 274ddbc60..79a5c7fa4 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/Xoh_xnde_parser.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/Xoh_xnde_parser.java @@ -16,26 +16,24 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.htmls.core.wkrs.xndes; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; -import gplx.langs.htmls.parsers.*; +import gplx.langs.htmls.docs.*; import gplx.xowa.htmls.core.hzips.*; +import gplx.langs.htmls.*; public class Xoh_xnde_parser { public int Src_bgn() {return src_bgn;} private int src_bgn; public int Src_end() {return src_end;} private int src_end; + public boolean Tag_is_inline() {return tag_is_inline;} private boolean tag_is_inline; public int Name_id() {return name_id;} private int name_id; - public Html_atr[] Atrs() {return atrs;} private Html_atr[] atrs; - public boolean Parse(Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Html_tag_rdr tag_rdr, byte[] src, Html_tag head) { + public byte[] Name_bry() {return name_bry;} private byte[] name_bry; + public Ordered_hash Atrs() {return atrs_hash;} private Ordered_hash atrs_hash; + public boolean Parse1(Xoh_hdoc_wkr hdoc_wkr, Xoh_hdoc_ctx hctx, Gfh_tag_rdr tag_rdr, byte[] src, Gfh_tag head) { this.src_bgn = head.Src_bgn(); this.name_id = head.Name_id(); - int len = head.Atrs__len(); - this.atrs = new Html_atr[len]; - for (int i = 0; i < len; ++i) - atrs[i] = head.Atrs__get_at(i); + this.name_bry = head.Name_bry(); + this.tag_is_inline = head.Tag_is_inline(); + this.atrs_hash = head.Atrs__hash(); this.src_end = head.Src_end(); - /* - Html_tag tail = tag_rdr.Tag__move_fwd_tail(head.Name_id()); - this.src_end = tail.Src_end(); - // Recurse_content - */ + hdoc_wkr.On_xnde(this); return true; - } + } } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/atrs/Xohz_atr_itm.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/atrs/Xohz_atr_itm.java new file mode 100644 index 000000000..7e0350398 --- /dev/null +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/atrs/Xohz_atr_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 . +*/ +package gplx.xowa.htmls.core.wkrs.xndes.atrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; import gplx.xowa.htmls.core.wkrs.xndes.*; +import gplx.core.brys.*; +import gplx.langs.htmls.docs.*; import gplx.xowa.htmls.core.wkrs.xndes.dicts.*; +public interface Xohz_atr_itm { + int Uid(); // EX: 1 + byte[] Key(); // EX: colspan=2 + void Ini_flag (int flag_idx, List_adp flag_bldr_list); + void Enc_flag (Xoh_hdoc_ctx hctx, byte[] src, Gfh_atr hatr, Int_flag_bldr flag_bldr); + void Enc_data (Xoh_hdoc_ctx hctx, byte[] src, Gfh_atr hatr, Xoh_hzip_bfr bfr); + void Dec_all (Xoh_hdoc_ctx hctx, Bry_rdr rdr, Int_flag_bldr flag_bldr, Bry_bfr bfr); +} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/atrs/Xohz_atr_itm_.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/atrs/Xohz_atr_itm_.java new file mode 100644 index 000000000..134d9de9e --- /dev/null +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/atrs/Xohz_atr_itm_.java @@ -0,0 +1,136 @@ +/* +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 . +*/ +package gplx.xowa.htmls.core.wkrs.xndes.atrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; import gplx.xowa.htmls.core.wkrs.xndes.*; +import gplx.core.brys.*; +import gplx.langs.htmls.docs.*; import gplx.xowa.htmls.core.wkrs.xndes.dicts.*; +class Xohz_atr_itm_ { + public static void Dec__add__quote_bgn(Bry_bfr bfr, byte[] key) { + bfr.Add_byte_space().Add(key).Add_byte_eq().Add_byte_quote(); + } + public static void Dec__add__quote_end(Bry_bfr bfr) { + bfr.Add_byte_quote(); + } +} +class Xohz_atr_itm__str implements Xohz_atr_itm { // EX: id='some_string' + private int flag_idx; + private int val_id_len = 2; + public Xohz_atr_itm__str(int uid, byte[] key) {this.uid = uid; this.key = key;} + public int Uid() {return uid;} private final int uid; + public byte[] Key() {return key;} private final byte[] key; + public void Ini_flag(int flag_idx, List_adp flag_bldr_list) { + this.flag_idx = flag_idx; + flag_bldr_list.Add(1); + } + public void Enc_flag(Xoh_hdoc_ctx hctx, byte[] src, Gfh_atr hatr, Int_flag_bldr flag_bldr) { + flag_bldr.Set_as_bool(flag_idx, hatr.Val_dat_exists()); + } + public void Enc_data (Xoh_hdoc_ctx hctx, byte[] src, Gfh_atr hatr, Xoh_hzip_bfr bfr) { + Xoh_xnde_dict_itm itm = hctx.Hzip__xnde__dict().Get().Get_by_key_or_new(src, hatr.Val_bgn(), hatr.Val_end()); + bfr.Add_hzip_int(val_id_len, itm.Id()); + } + public void Dec_all(Xoh_hdoc_ctx hctx, Bry_rdr rdr, Int_flag_bldr flag_bldr, Bry_bfr bfr) { + boolean exists = flag_bldr.Get_as_bool(flag_idx); + if (!exists) return; + Xohz_atr_itm_.Dec__add__quote_bgn(bfr, key); + int val_id = rdr.Read_hzip_int(val_id_len); + Xoh_xnde_dict_itm itm = hctx.Hzip__xnde__dict().Get().Get_by_id_or_null(val_id); + bfr.Add(itm.Val()); + Xohz_atr_itm_.Dec__add__quote_end(bfr); + } +} +class Xohz_atr_itm__int implements Xohz_atr_itm { // EX: colspan='5'; rowspan='2' + private final int val_len; + private int flag_idx; + public Xohz_atr_itm__int(int uid, byte[] key, int val_len) {this.uid = uid; this.key = key; this.val_len = val_len;} + public int Uid() {return uid;} private final int uid; + public byte[] Key() {return key;} private final byte[] key; + public void Ini_flag(int flag_idx, List_adp flag_bldr_list) { + this.flag_idx = flag_idx; + flag_bldr_list.Add(1); + } + public void Enc_flag(Xoh_hdoc_ctx hctx, byte[] src, Gfh_atr hatr, Int_flag_bldr flag_bldr) { + flag_bldr.Set_as_bool(flag_idx, hatr.Val_dat_exists()); + } + public void Enc_data (Xoh_hdoc_ctx hctx, byte[] src, Gfh_atr hatr, Xoh_hzip_bfr bfr) { + int val = Bry_.To_int_or(src, hatr.Val_bgn(), hatr.Val_end(), Int_.Min_value); + if (val == Int_.Min_value) + bfr.Add_hzip_mid(src, hatr.Val_bgn(), hatr.Val_end()); + else + bfr.Add_hzip_int(val_len, val); + } + public void Dec_all(Xoh_hdoc_ctx hctx, Bry_rdr rdr, Int_flag_bldr flag_bldr, Bry_bfr bfr) { + if (!flag_bldr.Get_as_bool(flag_idx)) return; + Xohz_atr_itm_.Dec__add__quote_bgn(bfr, key); + bfr.Add_int_variable(rdr.Read_hzip_int(val_len)); + Xohz_atr_itm_.Dec__add__quote_end(bfr); + } +} +class Xohz_atr_itm__enm implements Xohz_atr_itm { // EX: scope='col','row' + private int flag_idx; + private final byte[][] val_ary; + private final Hash_adp_bry val_hash = Hash_adp_bry.ci_a7(); + private int val_id_len; + private int tmp_val_id, tmp_src_bgn, tmp_src_end; + public Xohz_atr_itm__enm(int uid, byte[] key, byte[][] val_ary) { + this.uid = uid; + this.key = key; + this.val_ary = val_ary; + int val_ary_len = val_ary.length; + this.val_id_len = Log2(val_ary_len); + for (int i = 0; i < val_ary_len; ++i) + val_hash.Add_bry_int(val_ary[i], i + 1); + } + public byte[] Key() {return key;} private final byte[] key; + public int Uid() {return uid;} private final int uid; + public void Ini_flag(int flag_idx, List_adp flag_bldr_list) { + this.flag_idx = flag_idx; + flag_bldr_list.Add(val_id_len); + } + public void Enc_flag(Xoh_hdoc_ctx hctx, byte[] src, Gfh_atr hatr, Int_flag_bldr flag_bldr) { + this.tmp_val_id = val_hash.Get_as_int_or(src, hatr.Val_bgn(), hatr.Val_end(), 0); + flag_bldr.Set_as_int(flag_idx, tmp_val_id); + if (tmp_val_id == 0) { + this.tmp_src_bgn = hatr.Val_bgn(); + this.tmp_src_end = hatr.Val_end(); + } + } + public void Enc_data (Xoh_hdoc_ctx hctx, byte[] src, Gfh_atr hatr, Xoh_hzip_bfr bfr) { + if (tmp_val_id == 0) + bfr.Add_hzip_mid(src, tmp_src_bgn, tmp_src_end); + } + public void Dec_all(Xoh_hdoc_ctx hctx, Bry_rdr rdr, Int_flag_bldr flag_bldr, Bry_bfr bfr) { + Xohz_atr_itm_.Dec__add__quote_bgn(bfr, key); + int enm_val = flag_bldr.Get_as_int(flag_idx); + if (enm_val == 0) + bfr.Add(rdr.Read_bry_to(Byte_ascii.Escape)); + else + bfr.Add(val_ary[enm_val - 1]); + Xohz_atr_itm_.Dec__add__quote_end(bfr); + } + private static int Log2(int v) { + if (v < 2) return 1; + else if (v < 4) return 2; + else if (v < 8) return 3; + else if (v < 16) return 4; + else if (v < 32) return 5; + else if (v < 64) return 6; + else if (v < 128) return 7; + else if (v < 256) return 8; + throw Err_.new_("hzip", "unknown log2", "val", v); + } +} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/atrs/Xohz_atr_itm__style.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/atrs/Xohz_atr_itm__style.java new file mode 100644 index 000000000..f34e75b51 --- /dev/null +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/atrs/Xohz_atr_itm__style.java @@ -0,0 +1,68 @@ +/* +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 . +*/ +package gplx.xowa.htmls.core.wkrs.xndes.atrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; import gplx.xowa.htmls.core.wkrs.xndes.*; +import gplx.core.brys.*; +import gplx.langs.htmls.*; import gplx.langs.htmls.docs.*; import gplx.langs.htmls.styles.*; +class Xohz_atr_itm__style implements Xohz_atr_itm { // EX: style='width:20em;' + private int flag_idx; + private Ordered_hash zatr_hash = Ordered_hash_.New_bry(); + public Xohz_atr_itm__style(int uid, byte[] key, Ordered_hash zatr_hash) {this.uid = uid; this.key = key; this.zatr_hash = zatr_hash;} + public int Uid() {return uid;} private final int uid; + public byte[] Key() {return key;} private final byte[] key; + public void Ini_flag(int flag_idx, List_adp flag_bldr_list) { + this.flag_idx = flag_idx; + flag_bldr_list.Add(1); + } + public void Enc_flag(Xoh_hdoc_ctx hctx, byte[] src, Gfh_atr hatr, Int_flag_bldr flag_bldr) { + flag_bldr.Set_as_bool(flag_idx, hatr.Val_dat_exists()); + } + public void Enc_data (Xoh_hdoc_ctx hctx, byte[] src, Gfh_atr hatr, Xoh_hzip_bfr bfr) { + Gfh_style_itm[] itms = Gfh_style_wkr__ary.Instance.Parse(src, hatr.Val_bgn(), hatr.Val_end()); + int len = itms.length; + bfr.Add_hzip_int(1, len); + for (int i = 0; i < len; ++i) { + Gfh_style_itm hitm = itms[i]; + Xohz_atr_itm zitm = (Xohz_atr_itm)zatr_hash.Get_by(hitm.Key()); + if (zitm == null) { + // get dict key + // write dict key + } + else + bfr.Add_hzip_int(1, zitm.Uid()); + bfr.Add_hzip_bry(hitm.Val()); + } + } + public void Dec_all(Xoh_hdoc_ctx hctx, Bry_rdr rdr, Int_flag_bldr flag_bldr, Bry_bfr bfr) { + boolean exists = flag_bldr.Get_as_bool(flag_idx); + if (!exists) return; + Xohz_atr_itm_.Dec__add__quote_bgn(bfr, key); + int len = rdr.Read_hzip_int(1); + for (int i = 0; i < len; ++i) { + int key_uid = rdr.Read_hzip_int(1); + Xohz_atr_itm zatr = (Xohz_atr_itm)zatr_hash.Get_by(key_uid); + bfr.Add(zatr.Key()); + int val_bgn = rdr.Pos(); + int val_end = rdr.Find_fwd_lr(); + bfr.Add_mid(rdr.Src(), val_bgn, val_end); + } +// int val_id = rdr.Read_hzip_int(val_id_len); +// Xoh_xnde_dict_itm itm = hctx.Hzip__xnde__dict().Get().Get_by_id_or_null(val_id); +// bfr.Add(itm.Val()); + Xohz_atr_itm_.Dec__add__quote_end(bfr); + } +} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/atrs/Xohz_atr_regy.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/atrs/Xohz_atr_regy.java new file mode 100644 index 000000000..15f80d2bf --- /dev/null +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/atrs/Xohz_atr_regy.java @@ -0,0 +1,63 @@ +/* +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 . +*/ +package gplx.xowa.htmls.core.wkrs.xndes.atrs; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; import gplx.xowa.htmls.core.wkrs.xndes.*; +public class Xohz_atr_regy { + private final Hash_adp_bry itm_regy = Hash_adp_bry.cs(); + private final Hash_adp_bry grp_regy = Hash_adp_bry.cs(); + private final List_adp tmp_list = List_adp_.new_(); + public Xohz_atr_regy Grps__add(byte[] grp_key, byte[]... sub_keys) { + int sub_keys_len = sub_keys.length; + for (int i = 0; i < sub_keys_len; ++i) { + byte[] sub_key = sub_keys[i]; + Grps__add__recur(sub_key); + } + Xohz_atr_grp grp = new Xohz_atr_grp((byte[][])tmp_list.To_ary_and_clear(byte[].class)); + grp_regy.Add(grp_key, grp); + return this; + } + private void Grps__add__recur(byte[] sub_key) { + Object sub_obj = itm_regy.Get_by(sub_key); + if (sub_obj == null) { + sub_obj = grp_regy.Get_by(sub_key); + if (sub_obj == null) throw Err_.new_("hzip", "sub_key is not known itm or grp", "sub_key", sub_key); + Xohz_atr_grp sub_grp = (Xohz_atr_grp)sub_obj; + byte[][] subs = sub_grp.Subs(); int subs_len = subs.length; + for (int i = 0; i < subs_len; ++i) + Grps__add__recur(subs[i]); + } + else + tmp_list.Add(((Xohz_atr_itm)sub_obj).Key()); + } + public Xohz_atr_regy Itms__add_enm(int uid, byte[] key, byte[][] val_ary) {itm_regy.Add(key, new Xohz_atr_itm__enm(uid, key, val_ary)); return this;} + public Xohz_atr_regy Itms__add_int(int uid, byte[] key) {return Itms__add_int(uid, key, 1);} + public Xohz_atr_regy Itms__add_int(int uid, byte[] key, int val_len) {itm_regy.Add(key, new Xohz_atr_itm__int(uid, key, val_len)); return this;} + public Xohz_atr_regy Itms__add_str(int uid, byte[] key) {itm_regy.Add(key, new Xohz_atr_itm__str(uid, key)); return this;} + public Xohz_atr_itm[] Resolve(byte[] key) { + Grps__add__recur(key); + byte[][] itm_keys = (byte[][])tmp_list.To_ary_and_clear(byte[].class); + int itm_keys_len = itm_keys.length; + Xohz_atr_itm[] rv = new Xohz_atr_itm[itm_keys_len]; + for (int i = 0; i < itm_keys_len; ++i) + rv[i] = (Xohz_atr_itm)itm_regy.Get_by(itm_keys[i]); + return rv; + } +} +class Xohz_atr_grp { + public Xohz_atr_grp(byte[][] subs) {this.subs = subs;} + public byte[][] Subs() {return subs;} private final byte[][] subs; +} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/dicts/Xoh_xnde_dict__tst.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/dicts/Xoh_xnde_dict__tst.java new file mode 100644 index 000000000..f73d50861 --- /dev/null +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/dicts/Xoh_xnde_dict__tst.java @@ -0,0 +1,78 @@ +/* +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 . +*/ +package gplx.xowa.htmls.core.wkrs.xndes.dicts; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; import gplx.xowa.htmls.core.wkrs.xndes.*; +import org.junit.*; import gplx.core.brys.*; +public class Xoh_xnde_dict__tst { + private final Xoh_xnde_dict__fxt fxt = new Xoh_xnde_dict__fxt(); + @Test public void Basic() { + fxt.Exec__add("a"); + fxt.Test__get_by_key_or_new("a", 0); + fxt.Test__get_by_key_or_new("b", 1); + byte[] dump = fxt.Dump_bldr().Add(0, "a").Add(1, "b").To_bry(); + fxt.Test__save(dump); + fxt.Exec__clear(); +// fxt.Test__load(dump, fxt.Make__itm(0, "a"), fxt.Make__itm(1, "b")); + } +} +class Xoh_xnde_dict__fxt { + private final Xoh_xnde_dict_grp grp = new Xoh_xnde_dict_grp(1); + private final Xoh_hzip_bfr bfr = new Xoh_hzip_bfr(32, Bool_.Y, Byte_ascii.Escape); + private final Bry_rdr rdr = new Bry_rdr(); + public Xoh_xnde_dict__fxt() { + this.dump_bldr = new Xoh_xnde_dict__dump_bldr(bfr); + } + public Xoh_xnde_dict__dump_bldr Dump_bldr() {return dump_bldr;} private final Xoh_xnde_dict__dump_bldr dump_bldr; + public void Exec__add(String val) {grp.Add(Bry_.new_u8(val));} + public void Exec__clear() {grp.Clear();} + public void Test__get_by_key_or_new(String val, int expd_id) { + byte[] val_bry = Bry_.new_u8(val); + Xoh_xnde_dict_itm actl_itm = grp.Get_by_key_or_new(val_bry, 0, val_bry.length); + Tfds.Eq_int(expd_id, actl_itm.Id()); + Tfds.Eq_bry(val_bry, actl_itm.Val()); + } + public void Test__save(byte[] expd) { + grp.Save(bfr); + Tfds.Eq_bry(expd, bfr.To_bry_and_clear()); + } + public void Test__load(byte[] dump, Xoh_xnde_dict_itm... itms) { + rdr.Init_by_page(Bry_.Empty, dump, dump.length); + grp.Load(rdr); + int itms_len = itms.length; + for (int i = 0; i < itms_len; ++i) { + Xoh_xnde_dict_itm expd_itm = itms[i]; + Xoh_xnde_dict_itm actl_itm = grp.Get_by_id_or_null(expd_itm.Id()); + Tfds.Eq_int(expd_itm.Id(), actl_itm.Id()); + Tfds.Eq_bry(expd_itm.Val(), actl_itm.Val()); + } + } + public Xoh_xnde_dict_itm Make__itm(int id, String val) {return new Xoh_xnde_dict_itm(id, Bry_.new_u8(val));} +} +class Xoh_xnde_dict__dump_bldr { + private final Xoh_hzip_bfr bfr; + public Xoh_xnde_dict__dump_bldr(Xoh_hzip_bfr bfr) {this.bfr = bfr;} + public Xoh_xnde_dict__dump_bldr Add(int id, String val) { + bfr.Add_hzip_int(1, (byte)id); + bfr.Add_str_u8(val); + bfr.Add_byte_nl(); + return this; + } + public byte[] To_bry() { + bfr.Add(Xoh_xnde_dict_grp.Bry__stop); + return bfr.To_bry_and_clear(); + } +} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/dicts/Xoh_xnde_dict_grp.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/dicts/Xoh_xnde_dict_grp.java new file mode 100644 index 000000000..ba933972c --- /dev/null +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/dicts/Xoh_xnde_dict_grp.java @@ -0,0 +1,72 @@ +/* +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 . +*/ +package gplx.xowa.htmls.core.wkrs.xndes.dicts; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; import gplx.xowa.htmls.core.wkrs.xndes.*; +import gplx.core.brys.*; +public class Xoh_xnde_dict_grp { + private final int id_len; + private int id_next = -1; + private final Hash_adp_bry hash = Hash_adp_bry.cs(); + private final List_adp list = List_adp_.new_(); + public Xoh_xnde_dict_grp(int id_len) {this.id_len = id_len;} + public void Clear() { + id_next = -1; + hash.Clear(); + list.Clear(); + } + public void Add(byte[] val) {Make(val);} + public Xoh_xnde_dict_itm Get_by_id_or_null(int id) {return (Xoh_xnde_dict_itm)list.Get_at(id);} + public Xoh_xnde_dict_itm Get_by_key_or_new(byte[] src, int src_bgn, int src_end) { + Xoh_xnde_dict_itm itm = (Xoh_xnde_dict_itm)hash.Get_by_mid(src, src_bgn, src_end); + if (itm == null) { + byte[] val = Bry_.Mid(src, src_bgn, src_end); + itm = Make(val); + } + else + itm.Count_add_1(); + return itm; + } + public void Save(Xoh_hzip_bfr bfr) { + // sort by val + // write dict_id? + int len = list.Count(); + for (int i = 0; i < len; ++i) { + Xoh_xnde_dict_itm itm = (Xoh_xnde_dict_itm)list.Get_at(i); + itm.Save(bfr, id_len); + } + bfr.Add(Bry__stop); + } + public void Load(Bry_rdr rdr) { + while (true) { + if (rdr.Is(Bry__stop)) break; + int id = rdr.Read_hzip_int(id_len); + byte[] val = rdr.Read_bry_to(Byte_ascii.Nl); + Xoh_xnde_dict_itm itm = new Xoh_xnde_dict_itm(id, val); + hash.Add(val, itm); + list.Add(itm); + } + // sort by id + } + private Xoh_xnde_dict_itm Make(byte[] val) {return Make(++id_next, val);} + private Xoh_xnde_dict_itm Make(int id, byte[] val) { + Xoh_xnde_dict_itm rv = new Xoh_xnde_dict_itm(id, val); + hash.Add(val, rv); + list.Add(rv); + return rv; + } + public static final byte[] Bry__stop = Bry_.New_by_ints(255, 0); +} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/dicts/Xoh_xnde_dict_itm.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/dicts/Xoh_xnde_dict_itm.java new file mode 100644 index 000000000..b577cb8c8 --- /dev/null +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/dicts/Xoh_xnde_dict_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 . +*/ +package gplx.xowa.htmls.core.wkrs.xndes.dicts; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; import gplx.xowa.htmls.core.wkrs.xndes.*; +public class Xoh_xnde_dict_itm { + public Xoh_xnde_dict_itm(int id, byte[] val) {this.id = id; this.val = val; count = 1;} + public int Id() {return id;} private final int id; + public byte[] Val() {return val;} private final byte[] val; + public int Count() {return count;} private int count; + public void Count_add_1() {++count;} + public void Save(Xoh_hzip_bfr bfr, int id_len) { + bfr.Add_hzip_int(id_len, id); + bfr.Add(val).Add_byte_nl(); + } +} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/dicts/Xoh_xnde_dict_reg.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/dicts/Xoh_xnde_dict_reg.java new file mode 100644 index 000000000..124d2413c --- /dev/null +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/dicts/Xoh_xnde_dict_reg.java @@ -0,0 +1,23 @@ +/* +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 . +*/ +package gplx.xowa.htmls.core.wkrs.xndes.dicts; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; import gplx.xowa.htmls.core.wkrs.xndes.*; +import gplx.core.brys.*; +public class Xoh_xnde_dict_reg { + public Xoh_xnde_dict_grp Get() {return null;} +// public void Reg +} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/styles/Hz_atr_itm.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/styles/Hz_atr_itm.java index 306501a1f..4fa0dcdbb 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/styles/Hz_atr_itm.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/styles/Hz_atr_itm.java @@ -15,9 +15,9 @@ 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 . */ -//namespace gplx.xowa.htmls.core.wkrs.xndes.styles { -// using gplx.langs.htmls.parsers; -// using gplx.xowa.htmls.core.hzips; +package gplx.xowa.htmls.core.wkrs.xndes.styles; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; import gplx.xowa.htmls.core.wkrs.xndes.*; +import gplx.langs.htmls.docs.*; +import gplx.xowa.htmls.core.hzips.*; // class Hz_regy_load { // public void Load(byte[] src, int bgn, int end) { // int pos = bgn; @@ -70,7 +70,7 @@ along with this program. If not, see . // public Hz_tag_itm Tags__get_or_new(int name_id) { // return null; // } -// public Hz_atr_itm Atrs__get_or_new(byte[] key) { +// public Xohz_style_itm Atrs__get_or_new(byte[] key) { // return null; // } // public void Tags__add(byte[] key) { @@ -105,36 +105,36 @@ along with this program. If not, see . // */ // } // private void Save_tag(Bry_bfr bfr, Hz_tag_itm ztag) { -// Hz_atr_itm[] atrs = ztag.Atrs(); +// Xohz_style_itm[] atrs = ztag.Atrs(); // int len = atrs.length; // Xoh_hzip_int_.Encode(1, bfr, ztag.Id()); // for (int i = 0; i < len; ++i) { -// Hz_atr_itm atr = atrs[i]; +// Xohz_style_itm atr = atrs[i]; // Save_atr(bfr, atr, Byte_ascii.Escape); // } // bfr.Add_byte_nl(); // } -// private void Save_atr(Bry_bfr bfr, Hz_atr_itm atr, byte dlm) { +// private void Save_atr(Bry_bfr bfr, Xohz_style_itm atr, byte dlm) { // // Xoh_hzip_int_.Encode(1, bfr, atr.Id()); -// Hz_val_itm[] vals = atr.Itms(); +// Xohz_style_val[] vals = atr.Itms(); // int len = vals.length; // for (int i = 0; i < len; ++i) { -// Hz_val_itm val = vals[i]; +// Xohz_style_val val = vals[i]; // bfr.Add(atr.Text()).Add_byte(dlm); // } // } // } // class Hz_tag_hzip { // private static final byte[] Hook_tag = Bry_.new_a7("~z"); -// public void Encode(Bry_bfr bfr, Hz_regy regy, Html_tag htag) { +// public void Encode(Bry_bfr bfr, Hz_regy regy, Gfh_tag htag) { // Hz_tag_itm ztag = regy.Tags__get_or_new(htag.Name_id()); // // bfr.Add(Hook_tag); // Xoh_hzip_int_.Encode(1, bfr, ztag.Id()); // int len = htag.Atrs__len(); // for (int i = 0; i < len; ++i) { -// Html_atr hatr = htag.Atrs__get_at(i); -// Hz_atr_itm zatr = regy.Atrs__get_or_new(hatr.Key()); +// Gfh_atr hatr = htag.Atrs__get_at(i); +// Xohz_style_itm zatr = regy.Atrs__get_or_new(hatr.Key()); // Xoh_hzip_int_.Encode(1, bfr, zatr.Id()); // byte[] hval = hatr.Val(); // if (zatr.Indexable()) @@ -146,44 +146,43 @@ along with this program. If not, see . // } // class Hz_tag_itm { // private List_adp atr_list; -// public Hz_tag_itm(int id, byte[] text, boolean scope_is_doc, boolean indexable) { -// this.id = id; this.text = text; this.scope_is_doc = scope_is_doc; this.indexable = indexable; +// public Hz_tag_itm(int uid, byte[] text, boolean scope_is_doc, boolean indexable) { +// this.uid = uid; this.text = text; this.scope_is_doc = scope_is_doc; this.indexable = indexable; // } -// public int Id() {return id;} private int id; +// public int Id() {return uid;} private int uid; // public byte[] Text() {return text;} private byte[] text; -// public boolean Scope_is_doc() {return scope_is_doc;} private boolean scope_is_doc; -// public boolean Indexable() {return indexable;} private boolean indexable; -// public Hz_atr_itm[] Atrs() {if (atr_ary_is_dirty) atr_ary = (Hz_atr_itm[])atr_list.To_ary(typeof(Hz_atr_itm)); return atr_ary;} private Hz_atr_itm[] atr_ary; private boolean atr_ary_is_dirty = false; -// private void Add(byte[] text) { -// if (atr_list == null) atr_list = List_adp_.new_(); -// atr_list.Add(new Hz_atr_itm(atr_list.Count(), text, Bool_.Y, Bool_.Y)); -// } +// public boolean Scope_is_doc() {return scope_is_doc;} private boolean scope_is_doc; +// public boolean Indexable() {return indexable;} private boolean indexable; +// public Xohz_style_itm[] Atrs() {if (atr_ary_is_dirty) atr_ary = (Xohz_style_itm[])atr_list.To_ary(typeof(Xohz_style_itm)); return atr_ary;} private Xohz_style_itm[] atr_ary; private boolean atr_ary_is_dirty = false; +// private void Add(byte[] text) { +// if (atr_list == null) atr_list = List_adp_.new_(); +// atr_list.Add(new Xohz_style_itm(atr_list.Count(), text, Bool_.Y, Bool_.Y)); +// } +// } +// class Xohz_style_itm { +// private List_adp list; +// public Xohz_style_itm(int uid, byte[] key, boolean scope_is_doc, boolean indexable) { +// this.uid = uid; this.key = key; this.scope_is_doc = scope_is_doc; this.indexable = indexable; +// } +// public int Uid() {return uid;} private int uid; +// public byte[] Text() {return key;} private byte[] key; +// public boolean Scope_is_doc() {return scope_is_doc;} private boolean scope_is_doc; +// public boolean Indexable() {return indexable;} private boolean indexable; +// public Xohz_style_val[] Itms() {if (ary_is_dirty) ary = (Xohz_style_val[])list.To_ary(typeof(Xohz_style_val)); return ary;} private Xohz_style_val[] ary; private boolean ary_is_dirty = false; +// private void Itms__add(byte[] key) { +// if (list == null) list = List_adp_.new_(); +// ary_is_dirty = true; +// list.Add(new Xohz_style_val(list.Count(), key, Bool_.Y)); +// } +// public void Write(Bry_bfr bfr, byte[] key) { +// Xoh_hzip_int_.Encode(1, bfr, 1); +// } +// } +// class Xohz_style_val { +// public Xohz_style_val(int uid, byte[] txt, boolean scope_is_doc) { +// this.uid = uid; this.txt = txt; this.scope_is_doc = scope_is_doc; +// } +// public int Uid() {return uid;} private final int uid; +// public byte[] Txt() {return txt;} private final byte[] txt; +// public boolean Scope_is_doc() {return scope_is_doc;} private boolean scope_is_doc; // } -// class Hz_atr_itm { -// private List_adp list; -// public Hz_atr_itm(int id, byte[] text, boolean scope_is_doc, boolean indexable) { -// this.id = id; this.text = text; this.scope_is_doc = scope_is_doc; this.indexable = indexable; -// } -// public int Id() {return id;} private int id; -// public byte[] Text() {return text;} private byte[] text; -// public boolean Scope_is_doc() {return scope_is_doc;} private boolean scope_is_doc; -// public boolean Indexable() {return indexable;} private boolean indexable; -// public Hz_val_itm[] Itms() {if (ary_is_dirty) ary = (Hz_val_itm[])list.To_ary(typeof(Hz_val_itm)); return ary;} private Hz_val_itm[] ary; private boolean ary_is_dirty = false; -// private void Itms__add(byte[] text) { -// if (list == null) list = List_adp_.new_(); -// ary_is_dirty = true; -// list.Add(new Hz_val_itm(list.Count(), text, Bool_.Y)); -// } -// public void Write(Bry_bfr bfr, byte[] text) { -// Xoh_hzip_int_.Encode(1, bfr, 1); -// } -// } -// class Hz_val_itm { -// public Hz_val_itm(int id, byte[] text, boolean scope_is_doc) { -// this.id = id; this.text = text; this.scope_is_doc = scope_is_doc; -// } -// public int Id() {return id;} private int id; -// public byte[] Text() {return text;} private byte[] text; -// public boolean Scope_is_doc() {return scope_is_doc;} private boolean scope_is_doc; -// } -//} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/styles/Xoh_style_regy.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/styles/Xoh_style_regy.java index dadb5695e..764b3d8ce 100644 --- a/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/styles/Xoh_style_regy.java +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/styles/Xoh_style_regy.java @@ -17,12 +17,37 @@ along with this program. If not, see . */ package gplx.xowa.htmls.core.wkrs.xndes.styles; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; import gplx.xowa.htmls.core.wkrs.xndes.*; import gplx.langs.htmls.*; -public class Xoh_style_regy { -// public void Init() { -// // initial, inherit -// Add(Tid__style) .List("inline", "block", "flex", "inline-block", "inline-flex", "inline-table", "list-item", "run-in", "table", "table-caption", "table-column-group", "table-header-group", "table-footer-group", "table-row-group", "table-cell", "table-column", "table-row"); -// Add(Tid__text_align) .List("left", "right", "center", "justify"); -// Add(Tid__float) .List("none", "left", "right"); -// Add(Tid__clear) .List("none", "left", "right", "both"); -// } +class Xohz_style_regy { + public Xohz_style_regy Itms__add_enm(int uid, byte[] key, byte[]... val_ary) { + return this; + } +} +class Xohz_style_regy_ { + public static Xohz_style_regy New_dflt() { + Xohz_style_regy rv = new Xohz_style_regy(); + // initial, inherit, unset + rv + .Itms__add_enm(Uid__display , Bry__display , Bry_.Ary("inline", "block", "flex", "inline-block", "inline-flex", "inline-table", "list-item", "run-in", "table", "table-caption", "table-column-group", "table-header-group", "table-footer-group", "table-row-group", "table-cell", "table-column", "table-row")) + .Itms__add_enm(Uid__text_align , Bry__text_align , Bry_.Ary("left", "right", "center", "justify")) + .Itms__add_enm(Uid__float , Bry__float , Bry_.Ary("none", "left", "right")) + .Itms__add_enm(Uid__clear , Bry__clear , Bry_.Ary("none", "left", "right", "both")) + //background-color + //padding:0.1em 0;line-height:1.2em; + //font-size + //.Itms__add_len(Uid__width , Bry__width) // 1em, 1ex, 1ch, 1rem, 1vh, 1vw, 1vmin, 1vmax, 1px, 1mm, 1cm, 1in, 1pt, 1pc, 1mozmm, 1% + ; + return rv; + } + public static final int + Uid__display = 1 + , Uid__text_align = 2 + , Uid__float = 3 + , Uid__clear = 4 + ; + public static byte[] + Bry__display = Bry_.new_a7("display") + , Bry__text_align = Bry_.new_a7("text-align") + , Bry__float = Bry_.new_a7("float") + , Bry__clear = Bry_.new_a7("clear") + ; } diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/tags/Xohz_tag.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/tags/Xohz_tag.java new file mode 100644 index 000000000..7b7824d98 --- /dev/null +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/tags/Xohz_tag.java @@ -0,0 +1,84 @@ +/* +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 . +*/ +package gplx.xowa.htmls.core.wkrs.xndes.tags; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; import gplx.xowa.htmls.core.wkrs.xndes.*; +import gplx.core.brys.*; +import gplx.langs.htmls.*; import gplx.langs.htmls.docs.*; +import gplx.xowa.htmls.core.wkrs.xndes.atrs.*; +public class Xohz_tag { + private final byte[] key; private final int uid; + private final Xohz_atr_itm[] zatr_ary; private final int zatr_ary_len; private final Ordered_hash zatr_hash = Ordered_hash_.New_bry(); + private final Int_flag_bldr flag_bldr = new Int_flag_bldr(); private final int flag_len; private int flag__tag_is_inline, flag__unknown_atrs_exist; + private static final List_adp tmp_pow_ary_list = List_adp_.new_(); + public Xohz_tag(int uid, byte[] key, int flag_len, Xohz_atr_itm... zatr_ary) { + this.uid = uid; this.key = key; + this.flag_len = flag_len; + this.zatr_ary = zatr_ary; this.zatr_ary_len = zatr_ary.length; + Init_flag_bldr(); + } + public int Uid() {return uid;} + private void Init_flag_bldr() { + for (int i = 0; i < zatr_ary_len; ++i) { + Xohz_atr_itm zatr = zatr_ary[i]; + zatr.Ini_flag(tmp_pow_ary_list.Count(), tmp_pow_ary_list); + zatr_hash.Add(zatr.Key(), zatr); + } + tmp_pow_ary_list.Add(1); // 0=no unknown ; 1=unknown atrs + tmp_pow_ary_list.Add(1); // 0=head ; 1=inline + int tmp_pow_ary_len = tmp_pow_ary_list.Count(); + flag__tag_is_inline = tmp_pow_ary_len - 2; + flag__unknown_atrs_exist = tmp_pow_ary_len - 1; + flag_bldr.Pow_ary_bld_((int[])tmp_pow_ary_list.To_ary_and_clear(int.class)); + } + public boolean Encode(Xoh_hdoc_ctx hctx, Xoh_hzip_bfr bfr, byte[] src, Xoh_xnde_parser parser) { + Ordered_hash hatrs = parser.Atrs(); + int hatrs_len = hatrs.Count(); + int unknown_atrs = 0; + for (int i = 0; i < hatrs_len; ++i) { + Gfh_atr hatr = (Gfh_atr)hatrs.Get_at(i); + Xohz_atr_itm zatr = (Xohz_atr_itm)zatr_hash.Get_by(hatr.Key()); + if (zatr == null) ++unknown_atrs; + else zatr.Enc_flag(hctx, src, hatr, flag_bldr); + } + flag_bldr.Set(flag__tag_is_inline , parser.Tag_is_inline()); + flag_bldr.Set(flag__unknown_atrs_exist , unknown_atrs); + bfr.Add_hzip_int(flag_len, flag_bldr.Encode()); + if (unknown_atrs > 0) bfr.Add_hzip_int(1, unknown_atrs); + for (int i = 0; i < zatr_ary_len; ++i) { + Gfh_atr hatr = (Gfh_atr)hatrs.Get_at(i); + Xohz_atr_itm zatr = (Xohz_atr_itm)zatr_hash.Get_by(hatr.Key()); + if (zatr != null) zatr.Enc_data(hctx, src, hatr, bfr); // zatr should be String +// else zatr.Enc_data(hctx, src, hatr, bfr); + } + return true; + } + public boolean Decode(Xoh_hdoc_ctx hctx, Bry_bfr bfr, Bry_rdr rdr, byte[] src, int src_bgn, int src_end) { + int flag = rdr.Read_hzip_int(flag_len); flag_bldr.Decode(flag); + bfr.Add_byte(Byte_ascii.Angle_bgn).Add(key); + boolean tag_is_inline = flag_bldr.Get_as_bool(flag__tag_is_inline); + boolean unknown_atrs_exist = flag_bldr.Get_as_bool(flag__unknown_atrs_exist); + int unknown_atrs = unknown_atrs_exist ? rdr.Read_int_to() : 0; + for (int i = 0; i < zatr_ary_len; ++i) { + Xohz_atr_itm meta_atr = zatr_ary[i]; + meta_atr.Dec_all(hctx, rdr, flag_bldr, bfr); + } + for (int i = 0; i < unknown_atrs; ++i) { + } + bfr.Add(tag_is_inline ? Gfh_bldr_.Bry__lhs_end_inline : Gfh_bldr_.Bry__lhs_end_head); + return true; + } +} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/tags/Xohz_tag_regy.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/tags/Xohz_tag_regy.java new file mode 100644 index 000000000..912120d2b --- /dev/null +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/tags/Xohz_tag_regy.java @@ -0,0 +1,33 @@ +/* +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 . +*/ +package gplx.xowa.htmls.core.wkrs.xndes.tags; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; import gplx.xowa.htmls.core.wkrs.xndes.*; +import gplx.core.primitives.*; +import gplx.langs.htmls.*; import gplx.xowa.htmls.core.wkrs.xndes.atrs.*; +public class Xohz_tag_regy { + private final Ordered_hash keys = Ordered_hash_.New_bry(); + private final Hash_adp uids = Hash_adp_.new_(); private final Byte_obj_ref uids_ref = Byte_obj_ref.zero_(); + public Xohz_atr_regy Atr_regy() {return atr_regy;} private final Xohz_atr_regy atr_regy = new Xohz_atr_regy(); + public Xohz_tag Get_by_key(byte[] key) {return (Xohz_tag)keys.Get_by(key);} + public Xohz_tag Get_by_uid(byte uid) {return (Xohz_tag)uids.Get_by(uids_ref.Val_(uid));} + public Xohz_tag_regy Add(int uid, byte[] key, int flag_len, byte[] atr_key) { + Xohz_tag tag = new Xohz_tag(uid, key, flag_len, atr_regy.Resolve(atr_key)); + keys.Add(key, tag); + uids.Add(Byte_obj_ref.new_((byte)uid), tag); + return this; + } +} diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/tags/Xohz_tag_regy_.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/tags/Xohz_tag_regy_.java new file mode 100644 index 000000000..c7bf75574 --- /dev/null +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/xndes/tags/Xohz_tag_regy_.java @@ -0,0 +1,54 @@ +/* +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 . +*/ +package gplx.xowa.htmls.core.wkrs.xndes.tags; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.xowa.htmls.core.*; import gplx.xowa.htmls.core.wkrs.*; import gplx.xowa.htmls.core.wkrs.xndes.*; +import gplx.langs.htmls.*; +import gplx.xowa.htmls.core.wkrs.xndes.atrs.*; +public class Xohz_tag_regy_ { + public static Xohz_tag_regy New_dflt() { + Xohz_tag_regy tags = new Xohz_tag_regy(); + Xohz_atr_regy atrs = tags.Atr_regy(); + // table; cellspacing + atrs + .Itms__add_int(Atr__cellpadding , Gfh_atr_.Bry__cellpadding) // 1 or 1% + .Itms__add_int(Atr__cellspacing , Gfh_atr_.Bry__cellspacing) // 1 or 1% + .Itms__add_int(Atr__colspan , Gfh_atr_.Bry__colspan) + .Itms__add_int(Atr__rowspan , Gfh_atr_.Bry__rowspan) + .Itms__add_enm(Atr__scope , Gfh_atr_.Bry__scope, Bry_.Ary("row", "col", "rowgroup", "colgroup")) + .Itms__add_enm(Atr__align , Gfh_atr_.Bry__align, Bry_.Ary("left", "center", "right")) + .Itms__add_str(Atr__bgcolor , Gfh_atr_.Bry__bgcolor) + ; + byte[] grp__tbl_cell = Bry_.new_a7("tbl.cell"); + atrs.Grps__add(grp__tbl_cell, Gfh_atr_.Bry__scope, Gfh_atr_.Bry__colspan, Gfh_atr_.Bry__rowspan); + tags.Add(Tag__th , Gfh_tag_.Bry__th, 1, grp__tbl_cell); + tags.Add(Tag__td , Gfh_tag_.Bry__td, 1, grp__tbl_cell); + return tags; + } + public static final int + Atr__cellpadding = 21 + , Atr__cellspacing = 22 + , Atr__colspan = 30 + , Atr__rowspan = 31 + , Atr__scope = 32 + , Atr__align = 33 + , Atr__bgcolor = 34 + ; + public static final int + Tag__th = 10 + , Tag__td = 11 + ; +} diff --git a/400_xowa/src/gplx/xowa/htmls/doms/Xoh_dom_.java b/400_xowa/src/gplx/xowa/htmls/doms/Xoh_dom_.java index b1e34bbb9..1ed6e7f11 100644 --- a/400_xowa/src/gplx/xowa/htmls/doms/Xoh_dom_.java +++ b/400_xowa/src/gplx/xowa/htmls/doms/Xoh_dom_.java @@ -65,7 +65,7 @@ public class Xoh_dom_ { return true; } public static String Title_by_href(byte[] href, byte[] html_src) { - byte[] xowa_title = Xoh_dom_.Query_val_by_where(dom_find, html_src, Html_tag_.Bry__a, Html_atr_.Bry__href, href, gplx.xowa.htmls.Xoh_consts.Atr_xowa_title_bry, 0); + byte[] xowa_title = Xoh_dom_.Query_val_by_where(dom_find, html_src, Gfh_tag_.Bry__a, Gfh_atr_.Bry__href, href, gplx.xowa.htmls.Xoh_consts.Atr_xowa_title_bry, 0); return String_.new_u8(xowa_title); } private static final Xoh_find dom_find = new Xoh_find(); } diff --git a/400_xowa/src/gplx/xowa/htmls/heads/Xoh_head_mgr.java b/400_xowa/src/gplx/xowa/htmls/heads/Xoh_head_mgr.java index 10ccfba94..84c732447 100644 --- a/400_xowa/src/gplx/xowa/htmls/heads/Xoh_head_mgr.java +++ b/400_xowa/src/gplx/xowa/htmls/heads/Xoh_head_mgr.java @@ -17,7 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.htmls.heads; import gplx.*; import gplx.xowa.*; import gplx.xowa.htmls.*; import gplx.core.bits.*; -public class Xoh_head_mgr extends gplx.core.brys.Bfr_arg_base { +public class Xoh_head_mgr implements gplx.core.brys.Bfr_arg { private Xoae_app app; private Xowe_wiki wiki; private Xoae_page page; private Xoh_head_itm__base[] itms; private int itms_len; private Xoh_head_wtr wtr = new Xoh_head_wtr(); @@ -73,7 +73,7 @@ public class Xoh_head_mgr extends gplx.core.brys.Bfr_arg_base { for (int i = 0; i < itms_len; ++i) itms[i].Clear(); } - @Override public void Bfr_arg__add(Bry_bfr bfr) {Write(bfr, app, wiki, page);} + public void Bfr_arg__add(Bry_bfr bfr) {Write(bfr, app, wiki, page);} public void Write(Bry_bfr bfr, Xoae_app app, Xowe_wiki wiki, Xoae_page page) { Set_wkrs(); wtr.Init(bfr); diff --git a/400_xowa/src/gplx/xowa/htmls/heads/Xoh_head_mgr_tst.java b/400_xowa/src/gplx/xowa/htmls/heads/Xoh_head_mgr_tst.java index ed0ab18af..e25771152 100644 --- a/400_xowa/src/gplx/xowa/htmls/heads/Xoh_head_mgr_tst.java +++ b/400_xowa/src/gplx/xowa/htmls/heads/Xoh_head_mgr_tst.java @@ -120,7 +120,7 @@ public class Xoh_head_mgr_tst { } } class Xoh_head_mgr_fxt { - private Xop_fxt fxt = new Xop_fxt(); + private final Xop_fxt fxt = new Xop_fxt(); private Xoh_head_mgr mgr; private Bry_bfr bfr = Bry_bfr.reset_(255); public Xowe_wiki Wiki() {return wiki;} private Xowe_wiki wiki; diff --git a/400_xowa/src/gplx/xowa/htmls/heads/Xoh_head_wtr.java b/400_xowa/src/gplx/xowa/htmls/heads/Xoh_head_wtr.java index c25840d00..72cab95d6 100644 --- a/400_xowa/src/gplx/xowa/htmls/heads/Xoh_head_wtr.java +++ b/400_xowa/src/gplx/xowa/htmls/heads/Xoh_head_wtr.java @@ -37,7 +37,7 @@ public class Xoh_head_wtr { public void Write_css_style_bgn() { reset_bgn = bfr.Len(); Write_nl_and_indent(); - bfr.Add(Html_tag_.Style_lhs_w_type); + bfr.Add(Gfh_tag_.Style_lhs_w_type); Indent_add(); reset_end = bfr.Len(); } @@ -45,7 +45,7 @@ public class Xoh_head_wtr { Indent_del(); if (Reset()) return; Write_nl_and_indent(); - bfr.Add(Html_tag_.Style_rhs); + bfr.Add(Gfh_tag_.Style_rhs); } public void Write_css_style_ary(byte[][] ary) { int len = ary.length; @@ -74,7 +74,7 @@ public class Xoh_head_wtr { public void Write_js_script_bgn() { reset_bgn = bfr.Len(); Write_nl_and_indent(); - bfr.Add(Html_tag_.Script_lhs_w_type); + bfr.Add(Gfh_tag_.Script_lhs_w_type); Indent_add(); reset_end = bfr.Len(); } @@ -82,7 +82,7 @@ public class Xoh_head_wtr { Indent_del(); if (Reset()) return; Write_nl_and_indent(); - bfr.Add(Html_tag_.Script_rhs); + bfr.Add(Gfh_tag_.Script_rhs); } public void Write_js_head_global_bgn() { reset_bgn = bfr.Len(); diff --git a/400_xowa/src/gplx/xowa/htmls/js/Xoh_js_cleaner.java b/400_xowa/src/gplx/xowa/htmls/js/Xoh_js_cleaner.java index 5738477e5..53e672091 100644 --- a/400_xowa/src/gplx/xowa/htmls/js/Xoh_js_cleaner.java +++ b/400_xowa/src/gplx/xowa/htmls/js/Xoh_js_cleaner.java @@ -49,7 +49,7 @@ public class Xoh_js_cleaner { int frag_len = frag.length; if (frag[0] == Byte_ascii.Lt) { // jscript node; EX: