diff --git a/100_core/src/gplx/Bry_bfr.java b/100_core/src/gplx/Bry_bfr.java index 253a1c93a..9d139afee 100644 --- a/100_core/src/gplx/Bry_bfr.java +++ b/100_core/src/gplx/Bry_bfr.java @@ -542,6 +542,11 @@ public class Bry_bfr { if (reset > 0) Reset_if_gt(reset); return rv; } + public byte[] To_bry_and_clear_and_rls() { + byte[] rv = To_bry_and_clear(); + this.Mkr_rls(); + return rv; + } public String To_str() {return String_.new_u8(To_bry());} public String To_str_by_pos(int bgn, int end) {return String_.new_u8(To_bry(), bgn, end);} public String To_str_and_clear() {return String_.new_u8(To_bry_and_clear());} diff --git a/100_core/src/gplx/Gfo_log_.java b/100_core/src/gplx/Gfo_log_.java index 2107c06fa..6a9f654a1 100644 --- a/100_core/src/gplx/Gfo_log_.java +++ b/100_core/src/gplx/Gfo_log_.java @@ -30,6 +30,7 @@ public class Gfo_log_ { } public static Gfo_log New_file(Io_url dir) { Io_url url = dir.GenSubFil(DateAdp_.Now().XtoStr_fmt(File__fmt) + File__ext); + Gfo_log__file.Delete_old_files(dir, Gfo_log_.Instance); return new Gfo_log__file(url, new Gfo_log_itm_wtr__csv()); } } diff --git a/100_core/src/gplx/Int_.java b/100_core/src/gplx/Int_.java index c32a554c4..dd7887337 100644 --- a/100_core/src/gplx/Int_.java +++ b/100_core/src/gplx/Int_.java @@ -42,6 +42,16 @@ public class Int_ implements Gfo_invk { for (int i = 0; i < src_len; ++i) trg[i] = src[i]; } + public static String Ary_concat(String spr, int... ary) { + Bry_bfr bfr = Bry_bfr_.New(); + int len = ary.length; + for (int i = 0; i < len; ++i) { + if (i != 0) bfr.Add_str_u8(spr); + int itm = ary[i]; + bfr.Add_int_variable(itm); + } + return bfr.To_str_and_clear(); + } public static int[] AryRng(int bgn, int end) { int len = end - bgn + 1; int[] rv = new int[len]; diff --git a/100_core/src/gplx/core/btries/Btrie_rv.java b/100_core/src/gplx/core/btries/Btrie_rv.java new file mode 100644 index 000000000..7aafde32f --- /dev/null +++ b/100_core/src/gplx/core/btries/Btrie_rv.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.core.btries; import gplx.*; import gplx.core.*; +import gplx.core.threads.poolables.*; +public class Btrie_rv implements Gfo_poolable_itm { + public Object Obj() {return obj;} private Object obj; + public int Pos() {return pos;} private int pos; + public Btrie_rv Init(int pos, Object obj) { + this.obj = obj; + this.pos = pos; + return this; + } + + 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) {Btrie_rv rv = new Btrie_rv(); rv.pool_mgr = mgr; rv.pool_idx = idx; return rv;} +} diff --git a/100_core/src/gplx/core/btries/Btrie_slim_itm.java b/100_core/src/gplx/core/btries/Btrie_slim_itm.java index 3cfa21922..69409d628 100644 --- a/100_core/src/gplx/core/btries/Btrie_slim_itm.java +++ b/100_core/src/gplx/core/btries/Btrie_slim_itm.java @@ -95,7 +95,7 @@ public class Btrie_slim_itm { } if (found) --ary_len; } - public static final Btrie_slim_itm[] Ary_empty = new Btrie_slim_itm[0]; int ary_len = 0, ary_max = 0; + public static final Btrie_slim_itm[] Ary_empty = new Btrie_slim_itm[0]; int ary_len = 0, ary_max = 0; } class ByteHashItm_sorter {// quicksort Btrie_slim_itm[] ary; int ary_len; @@ -126,5 +126,5 @@ class ByteHashItm_sorter {// quicksort if (lo < j) Sort_recurse(lo, j); if (i < hi) Sort_recurse(i, hi); } - public static final ByteHashItm_sorter Instance = new ByteHashItm_sorter(); ByteHashItm_sorter() {} + public static final ByteHashItm_sorter Instance = new ByteHashItm_sorter(); ByteHashItm_sorter() {} } 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 7f5183972..d7bb1c9ac 100644 --- a/100_core/src/gplx/core/btries/Btrie_slim_mgr.java +++ b/100_core/src/gplx/core/btries/Btrie_slim_mgr.java @@ -16,11 +16,35 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.core.btries; import gplx.*; import gplx.core.*; -import gplx.core.primitives.*; +import gplx.core.primitives.*; import gplx.core.threads.poolables.*; public class Btrie_slim_mgr implements Btrie_mgr { + private static Gfo_poolable_mgr pool_rv = Gfo_poolable_mgr.New_rlsable(new Btrie_rv(), Object_.Ary_empty, 0, 1024); Btrie_slim_mgr(boolean case_match) {root = new Btrie_slim_itm(Byte_.Zero, null, !case_match);} private Btrie_slim_itm root; public int Count() {return count;} private int count; public int Match_pos() {return match_pos;} private int match_pos; + + public Btrie_rv Match_at(byte[] src, int bgn, int end) {return bgn < end ? Match_at_w_b0(src[bgn], src, bgn, end) : null;} // handle out of bounds gracefully; EX: Match_bgn("abc", 3, 3) should return null not fail + public Btrie_rv Match_at_w_b0(byte b, byte[] src, int bgn_pos, int src_end) { + Object rv_obj = null; + int rv_pos = bgn_pos; + int cur_pos = bgn_pos; + Btrie_slim_itm cur = root; + while (true) { + Btrie_slim_itm nxt = cur.Ary_find(b); + if (nxt == null) + return ((Btrie_rv)pool_rv.Get_safe()).Init(cur_pos, rv_obj); // nxt does not hav b; return rv_obj; + ++cur_pos; + if (nxt.Ary_is_empty()) { + return ((Btrie_rv)pool_rv.Get_safe()).Init(cur_pos, nxt.Val()); // nxt is leaf; return nxt.Val() (which should be non-null) + } + Object nxt_val = nxt.Val(); + if (nxt_val != null) {rv_pos = cur_pos; rv_obj = nxt_val;} // nxt is node; cache rv_obj (in case of false match) + if (cur_pos == src_end) + return ((Btrie_rv)pool_rv.Get_safe()).Init(rv_pos, rv_obj); // increment cur_pos and exit if src_end + b = src[cur_pos]; + cur = nxt; + } + } public Object Match_exact(byte[] src) {return src == null ? null : Match_exact(src, 0, src.length);} public Object Match_exact(byte[] src, int bgn_pos, int end_pos) { if (bgn_pos == end_pos) return null; // NOTE:handle empty String; DATE:2016-04-21 diff --git a/100_core/src/gplx/core/ios/IoEngine_system.java b/100_core/src/gplx/core/ios/IoEngine_system.java index e734dcdf1..84b2aa612 100644 --- a/100_core/src/gplx/core/ios/IoEngine_system.java +++ b/100_core/src/gplx/core/ios/IoEngine_system.java @@ -98,7 +98,7 @@ public class IoEngine_system extends IoEngine_base { } return Load_from_stream_as_str(stream, url_str); } - @SuppressWarnings("resource") public static String Load_from_stream_as_str(InputStream stream, String url_str) { + public static String Load_from_stream_as_str(InputStream stream, String url_str) { InputStreamReader reader = null; try {reader = new InputStreamReader(stream, IoEngineArgs.Instance.LoadFilStr_Encoding);} catch (UnsupportedEncodingException e) { @@ -131,7 +131,7 @@ 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) { + 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; @@ -239,7 +239,6 @@ public class IoEngine_system extends IoEngine_base { if (!ExistsFil_api(url)) SaveFilText_api(IoEngine_xrg_saveFilStr.new_(url, "")); return IoStream_base.new_(url, args.Mode()); } - @SuppressWarnings("resource") @Override public void CopyFil(IoEngine_xrg_xferFil args) { // TODO:JAVA6 hidden property ignored; 1.6 does not allow OS-independent way of setting isHidden (wnt only possible through jni) boolean overwrite = args.Overwrite(); diff --git a/100_core/src/gplx/core/ios/streams/Io_stream_wtr_.java b/100_core/src/gplx/core/ios/streams/Io_stream_wtr_.java index 63aab4300..cfda588b3 100644 --- a/100_core/src/gplx/core/ios/streams/Io_stream_wtr_.java +++ b/100_core/src/gplx/core/ios/streams/Io_stream_wtr_.java @@ -77,7 +77,7 @@ abstract class Io_stream_wtr_base implements Io_stream_wtr { public Io_url Url() {return url;} public Io_stream_wtr Url_(Io_url v) {url = v; trg_bfr = null; return this;} Io_url url; public void Trg_bfr_(Bry_bfr v) {trg_bfr = v;} Bry_bfr trg_bfr; java.io.ByteArrayOutputStream mem_stream; public byte[] To_ary_and_clear() {return trg_bfr.To_bry_and_clear();} - @SuppressWarnings("resource") public Io_stream_wtr Open() { + public Io_stream_wtr Open() { java.io.OutputStream bry_stream = null; if (trg_bfr == null) { if (!Io_mgr.Instance.ExistsFil(url)) Io_mgr.Instance.SaveFilStr(url, ""); @@ -130,7 +130,7 @@ class Io_stream_wtr_zip implements Io_stream_wtr { @Override public byte Tid() {return Io_stream_.Tid_zip;} public Io_url Url() {return url;} public Io_stream_wtr Url_(Io_url v) {url = v; trg_bfr = null; return this;} private Io_url url = Io_url_.Empty; public void Trg_bfr_(Bry_bfr v) {trg_bfr = v;} private Bry_bfr trg_bfr; private java.io.ByteArrayOutputStream mem_stream; - @SuppressWarnings("resource") // rely on zip_stream to close bry_stream + // rely on zip_stream to close bry_stream public Io_stream_wtr Open() { java.io.OutputStream bry_stream; if (trg_bfr == null) { diff --git a/100_core/src/gplx/core/ios/zips/Io_zip_compress_cmd__jre.java b/100_core/src/gplx/core/ios/zips/Io_zip_compress_cmd__jre.java index a3ded866b..72a05d6be 100644 --- a/100_core/src/gplx/core/ios/zips/Io_zip_compress_cmd__jre.java +++ b/100_core/src/gplx/core/ios/zips/Io_zip_compress_cmd__jre.java @@ -41,13 +41,22 @@ public class Io_zip_compress_cmd__jre { while (true) { // loop over bytes int read_in_raw = -1; try {read_in_raw = src_stream.read(buffer);} - catch (Exception e) {throw Err_.new_exc(e, "io", "src read failed", "url", src_url.Raw());} + catch (Exception e) { + try {src_stream.close();} + catch (IOException e1) {} + throw Err_.new_exc(e, "io", "src read failed", "url", src_url.Raw()); + } if (read_in_raw < 1) break; try {trg_stream.write(buffer, 0, read_in_raw);} - catch (Exception e) {throw Err_.new_exc(e, "io", "trg write failed", "url", trg_url.Raw());} + catch (Exception e) { + try {src_stream.close();} + catch (IOException e1) {} + throw Err_.new_exc(e, "io", "trg write failed", "url", trg_url.Raw()); + } } try { trg_stream.closeEntry(); + trg_stream.close(); src_stream.close(); } catch (Exception e) {throw Err_.new_exc(e, "io", "trg close entry failed", "url", src_url.Raw());} diff --git a/100_core/src/gplx/core/logs/Gfo_log__file.java b/100_core/src/gplx/core/logs/Gfo_log__file.java index 6aaf57e88..8720d89fd 100644 --- a/100_core/src/gplx/core/logs/Gfo_log__file.java +++ b/100_core/src/gplx/core/logs/Gfo_log__file.java @@ -48,4 +48,16 @@ public class Gfo_log__file extends Gfo_log__base { Io_mgr.Instance.AppendFilByt(url, bry); itms.Clear(); } + public static void Delete_old_files(Io_url dir, Gfo_log log) { + Io_url[] fils = Io_mgr.Instance.QueryDir_fils(dir); + int fils_len = fils.length; + if (fils_len < 9) return; // exit if less than 8 files + int cutoff = fils_len - 8; + Array_.Sort(fils); // sort by path + for (int i = 0; i < cutoff; ++i) { + Io_url fil = fils[i]; + log.Info("deleting old log file", "file", fil.Raw()); + Io_mgr.Instance.DeleteFil(fil); + } + } } diff --git a/400_xowa/src/gplx/xowa/parsers/apos/Xop_apos_log.java b/100_core/src/gplx/core/memorys/Gfo_memory_itm.java similarity index 58% rename from 400_xowa/src/gplx/xowa/parsers/apos/Xop_apos_log.java rename to 100_core/src/gplx/core/memorys/Gfo_memory_itm.java index 3eba0ebb7..6d0b83df5 100644 --- a/400_xowa/src/gplx/xowa/parsers/apos/Xop_apos_log.java +++ b/100_core/src/gplx/core/memorys/Gfo_memory_itm.java @@ -15,13 +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.xowa.parsers.apos; import gplx.*; import gplx.xowa.*; import gplx.xowa.parsers.*; -import gplx.core.log_msgs.*; -public class Xop_apos_log { - private static final Gfo_msg_grp owner = Gfo_msg_grp_.new_(Xoa_app_.Nde, "apos"); - public static final Gfo_msg_itm - Bold_converted_to_ital = Gfo_msg_itm_.new_note_(owner, "Bold_converted_to_ital") - , Dangling_apos = Gfo_msg_itm_.new_note_(owner, "Dangling_apos") - , Multiple_apos = Gfo_msg_itm_.new_note_(owner, "Multiple_apos") - ; +package gplx.core.memorys; import gplx.*; import gplx.core.*; +public interface Gfo_memory_itm { + void Rls_mem(); } diff --git a/100_core/src/gplx/core/memorys/Gfo_memory_mgr.java b/100_core/src/gplx/core/memorys/Gfo_memory_mgr.java new file mode 100644 index 000000000..cd6ddda22 --- /dev/null +++ b/100_core/src/gplx/core/memorys/Gfo_memory_mgr.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.core.memorys; import gplx.*; import gplx.core.*; +public class Gfo_memory_mgr { + private final List_adp list = List_adp_.New(); + public void Reg_safe(Gfo_memory_itm itm) {synchronized (list) {Reg_fast(itm);}} + public void Reg_fast(Gfo_memory_itm itm) {list.Add(itm);} + public void Rls_safe() {synchronized (list) {Rls_fast();}} + public void Rls_fast() { + int len = list.Len(); + for (int i = 0; i < len; ++i) { + Gfo_memory_itm itm = (Gfo_memory_itm)list.Get_at(i); + itm.Rls_mem(); + } + list.Clear(); + } + public static final Gfo_memory_mgr Instance = new Gfo_memory_mgr(); Gfo_memory_mgr() {} +} diff --git a/100_core/src/gplx/core/progs/Gfo_prog_ui_.java b/100_core/src/gplx/core/progs/Gfo_prog_ui_.java index 196d4a54d..91836d81c 100644 --- a/100_core/src/gplx/core/progs/Gfo_prog_ui_.java +++ b/100_core/src/gplx/core/progs/Gfo_prog_ui_.java @@ -24,7 +24,7 @@ public class Gfo_prog_ui_ { , Status__done = 4 , Status__fail = 8 , Status__suspended = 16 - , Status__runnable = Status__init | Status__suspended + , Status__runnable = Status__init | Status__suspended | Status__fail ; } class Gfo_prog_ui__noop implements Gfo_prog_ui { diff --git a/100_core/src/gplx/core/tests/Gftest.java b/100_core/src/gplx/core/tests/Gftest.java index d4eee1235..130b85ae8 100644 --- a/100_core/src/gplx/core/tests/Gftest.java +++ b/100_core/src/gplx/core/tests/Gftest.java @@ -19,8 +19,9 @@ package gplx.core.tests; import gplx.*; import gplx.core.*; import gplx.core.brys.*; public class Gftest { private static final Bry_bfr bfr = Bry_bfr_.New(); - public static void Eq__ary(long[] expd, long[] actl, String msg_fmt, Object... msg_args) {Eq__array(Type_adp_.Tid__long, expd, actl, msg_fmt, msg_args);} - public static void Eq__ary__lines(String expd, String actl, String msg_fmt, Object... msg_args) {Eq__array(Type_adp_.Tid__bry, Bry_split_.Split_lines(Bry_.new_u8(expd)), Bry_split_.Split_lines(Bry_.new_u8(actl)), msg_fmt, msg_args);} + public static void Eq__ary(int[] expd, int[] actl, String msg_fmt, Object... msg_args) {Eq__array(Type_adp_.Tid__int, expd, actl, msg_fmt, msg_args);} + public static void Eq__ary(long[] expd, long[] actl, String msg_fmt, Object... msg_args) {Eq__array(Type_adp_.Tid__long, expd, actl, msg_fmt, msg_args);} + public static void Eq__ary__lines(String expd, String actl, String msg_fmt, Object... msg_args) {Eq__array(Type_adp_.Tid__bry, Bry_split_.Split_lines(Bry_.new_u8(expd)), Bry_split_.Split_lines(Bry_.new_u8(actl)), msg_fmt, msg_args);} public static void Eq__ary(String[] expd, String[] actl) {Eq__array(Type_adp_.Tid__bry, Bry_.Ary(expd), Bry_.Ary(actl), "no_msg");} public static void Eq__ary(String[] expd, String[] actl, String msg_fmt, Object... msg_args) {Eq__array(Type_adp_.Tid__bry, Bry_.Ary(expd), Bry_.Ary(actl), msg_fmt, msg_args);} public static void Eq__ary(String[] expd, byte[][] actl, String msg_fmt, Object... msg_args) {Eq__array(Type_adp_.Tid__bry, Bry_.Ary(expd), actl, msg_fmt, msg_args);} @@ -37,6 +38,20 @@ public class Gftest { throw Err_.new_wo_type(bfr.To_str_and_clear()); } } + public static void Eq__null(boolean expd, Object actl) {Eq__null(expd, actl, null);} + public static void Eq__null(boolean expd, Object actl, String msg_fmt, Object... msg_args) { + if ( expd && actl == null + || !expd && actl != null + ) return; + Write_fail_head(bfr, msg_fmt, msg_args); + String expd_str = expd ? "null" : "not null"; + String actl_str = actl == null ? "null" : "not null"; + bfr.Add_str_a7("expd: ").Add_str_a7(expd_str).Add_byte_nl(); + bfr.Add_str_a7("actl: ").Add_str_a7(actl_str).Add_byte_nl(); + bfr.Add(Bry__line_end); + throw Err_.new_wo_type(bfr.To_str_and_clear()); + } + public static void Eq__str(String expd, byte[] actl, String msg_fmt, Object... msg_args) {Eq__str(expd, String_.new_u8(actl), msg_fmt, msg_args);} public static void Eq__str(String expd, byte[] actl) {Eq__str(expd, String_.new_u8(actl), null);} public static void Eq__str(String expd, String actl) {Eq__str(expd, actl, null);} public static void Eq__str(String expd, String actl, String msg_fmt, Object... msg_args) { @@ -65,6 +80,24 @@ public class Gftest { bfr.Add(Bry__line_end); throw Err_.new_wo_type(bfr.To_str_and_clear()); } + public static void Eq__byte(byte expd, byte actl) {Eq__byte(expd, actl, null);} + public static void Eq__byte(byte expd, byte actl, String msg_fmt, Object... msg_args) { + if (expd == actl) return; + Write_fail_head(bfr, msg_fmt, msg_args); + bfr.Add_str_a7("expd: ").Add_byte_as_a7(expd).Add_byte_nl(); + bfr.Add_str_a7("actl: ").Add_byte_as_a7(actl).Add_byte_nl(); + bfr.Add(Bry__line_end); + throw Err_.new_wo_type(bfr.To_str_and_clear()); + } + public static void Eq__int(int expd, int actl) {Eq__int(expd, actl, null);} + public static void Eq__int(int expd, int actl, String msg_fmt, Object... msg_args) { + if (expd == actl) return; + Write_fail_head(bfr, msg_fmt, msg_args); + bfr.Add_str_a7("expd: ").Add_int_variable(expd).Add_byte_nl(); + bfr.Add_str_a7("actl: ").Add_int_variable(actl).Add_byte_nl(); + bfr.Add(Bry__line_end); + throw Err_.new_wo_type(bfr.To_str_and_clear()); + } public static void Eq__bool_y(boolean actl) {Eq__bool(Bool_.Y, actl, null);} public static void Eq__bool(boolean expd, boolean actl) {Eq__bool(expd, actl, null);} public static void Eq__bool(boolean expd, boolean actl, String msg_fmt, Object... msg_args) { @@ -112,6 +145,7 @@ public class Gftest { switch (type_id) { case Type_adp_.Tid__bry: bfr.Add((byte[])Array_.Get_at(ary, idx)); break; case Type_adp_.Tid__long: bfr.Add_long_variable(Long_.cast(Array_.Get_at(ary, idx))); break; + case Type_adp_.Tid__int: bfr.Add_int_variable(Int_.cast(Array_.Get_at(ary, idx))); break; default: throw Err_.new_unhandled_default(type_id); } } @@ -134,6 +168,7 @@ public class Gftest { switch (tid) { case Type_adp_.Tid__bry: eq = Bry_.Eq((byte[])expd_obj, (byte[])actl_obj); break; case Type_adp_.Tid__long: eq = Long_.cast(expd_obj) == Long_.cast(actl_obj); break; + case Type_adp_.Tid__int: eq = Int_.cast(expd_obj) == Int_.cast(actl_obj); break; } } if (!eq) { diff --git a/400_xowa/src/gplx/core/threads/poolables/Gfo_poolable_itm.java b/100_core/src/gplx/core/threads/poolables/Gfo_poolable_itm.java similarity index 100% rename from 400_xowa/src/gplx/core/threads/poolables/Gfo_poolable_itm.java rename to 100_core/src/gplx/core/threads/poolables/Gfo_poolable_itm.java diff --git a/400_xowa/src/gplx/core/threads/poolables/Gfo_poolable_mgr.java b/100_core/src/gplx/core/threads/poolables/Gfo_poolable_mgr.java similarity index 84% rename from 400_xowa/src/gplx/core/threads/poolables/Gfo_poolable_mgr.java rename to 100_core/src/gplx/core/threads/poolables/Gfo_poolable_mgr.java index 669fa8a3f..dd908a809 100644 --- a/400_xowa/src/gplx/core/threads/poolables/Gfo_poolable_mgr.java +++ b/100_core/src/gplx/core/threads/poolables/Gfo_poolable_mgr.java @@ -16,15 +16,17 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.core.threads.poolables; import gplx.*; import gplx.core.*; import gplx.core.threads.*; -public class Gfo_poolable_mgr { - private final Object thread_lock = new Object(); - private final Gfo_poolable_itm prototype; private final Object[] make_args; +import gplx.core.memorys.*; +public class Gfo_poolable_mgr implements Gfo_memory_itm { + private final Object thread_lock = new Object(); + private final Gfo_poolable_itm prototype; private final Object[] make_args; private Gfo_poolable_itm[] pool; private int pool_nxt, pool_len; public Gfo_poolable_mgr(Gfo_poolable_itm prototype, Object[] make_args, int init_pool_len, int pool_max) {// NOTE: random IndexOutOfBounds errors in Get around free_ary[--free_len] with free_len being -1; put member variable initialization within thread_lock to try to avoid; DATE:2014-09-21 this.prototype = prototype; this.make_args = make_args; this.pool_len = init_pool_len; this.Clear_fast(); } + public void Rls_mem() {Clear_safe();} public void Clear_safe() {synchronized (thread_lock) {Clear_fast();}} public void Clear_fast() { this.pool = new Gfo_poolable_itm[pool_len]; @@ -87,4 +89,10 @@ public class Gfo_poolable_mgr { @gplx.Internal protected int Free_len() {return free_len;} @gplx.Internal protected int Pool_len() {return pool_len;} @gplx.Internal protected int Pool_nxt() {return pool_nxt;} + + public static Gfo_poolable_mgr New_rlsable(Gfo_poolable_itm prototype, Object[] make_args, int init_pool_len, int pool_max) { + Gfo_poolable_mgr rv = new Gfo_poolable_mgr(prototype, make_args, init_pool_len, pool_max); + Gfo_memory_mgr.Instance.Reg_safe(rv); + return rv; + } } diff --git a/400_xowa/src/gplx/core/threads/poolables/Gfo_poolable_mgr_.java b/100_core/src/gplx/core/threads/poolables/Gfo_poolable_mgr_.java similarity index 100% rename from 400_xowa/src/gplx/core/threads/poolables/Gfo_poolable_mgr_.java rename to 100_core/src/gplx/core/threads/poolables/Gfo_poolable_mgr_.java diff --git a/400_xowa/src/gplx/core/threads/poolables/Gfo_poolable_mgr_tst.java b/100_core/src/gplx/core/threads/poolables/Gfo_poolable_mgr_tst.java similarity index 88% rename from 400_xowa/src/gplx/core/threads/poolables/Gfo_poolable_mgr_tst.java rename to 100_core/src/gplx/core/threads/poolables/Gfo_poolable_mgr_tst.java index 7e2a32c43..4c63b5be8 100644 --- a/400_xowa/src/gplx/core/threads/poolables/Gfo_poolable_mgr_tst.java +++ b/100_core/src/gplx/core/threads/poolables/Gfo_poolable_mgr_tst.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.core.threads.poolables; import gplx.*; import gplx.core.*; import gplx.core.threads.*; import org.junit.*; public class Gfo_poolable_mgr_tst { - private final Gfo_poolable_mgr_tstr tstr = new Gfo_poolable_mgr_tstr(); + private final Gfo_poolable_mgr_tstr tstr = new Gfo_poolable_mgr_tstr(); @Before public void init() {tstr.Clear();} @Test public void Get__one() { tstr.Test__get(0); @@ -61,7 +61,7 @@ public class Gfo_poolable_mgr_tst { } } class Gfo_poolable_mgr_tstr { - private final Gfo_poolable_mgr mgr = new Gfo_poolable_mgr(new Sample_poolable_itm(null, -1, Object_.Ary_empty), Object_.Ary("make"), 2, 8); + private final Gfo_poolable_mgr mgr = new Gfo_poolable_mgr(new Sample_poolable_itm(null, -1, Object_.Ary_empty), Object_.Ary("make"), 2, 8); public void Clear() {mgr.Clear_fast();} public void Test__get(int expd_idx) { Sample_poolable_itm actl_itm = (Sample_poolable_itm)mgr.Get_fast(); @@ -76,8 +76,8 @@ class Gfo_poolable_mgr_tstr { class Sample_poolable_itm implements Gfo_poolable_itm { private Gfo_poolable_mgr pool_mgr; public Sample_poolable_itm(Gfo_poolable_mgr pool_mgr, int pool_idx, Object[] make_args) {this.pool_mgr = pool_mgr; this.pool_idx = pool_idx; this.pool__make_args = make_args;} - public int Pool__idx() {return pool_idx;} private final int pool_idx; - public Object[] Pool__make_args() {return pool__make_args;} private final Object[] pool__make_args; + public int Pool__idx() {return pool_idx;} private final int pool_idx; + public Object[] Pool__make_args() {return pool__make_args;} private final Object[] pool__make_args; public void Pool__rls() {pool_mgr.Rls_safe(pool_idx);} public Gfo_poolable_itm Pool__make (Gfo_poolable_mgr mgr, int idx, Object[] args) {return new Sample_poolable_itm(pool_mgr, idx, args);} } diff --git a/150_gfui/src/gplx/gfui/controls/standards/Gfui_html.java b/150_gfui/src/gplx/gfui/controls/standards/Gfui_html.java index 01d088493..0926568e8 100644 --- a/150_gfui/src/gplx/gfui/controls/standards/Gfui_html.java +++ b/150_gfui/src/gplx/gfui/controls/standards/Gfui_html.java @@ -59,7 +59,14 @@ public class Gfui_html extends GfuiElemBase { rv.Add(Int_.To_str(i), args[i]); // NOTE: args[i] can be either String or String[] return rv; } + public static final String Atr_href = "href", Atr_title = "title", Atr_value = "value", Atr_innerHTML = "innerHTML", Atr_src = "src"; public static final String Elem_id_body = "body"; - public static final String Evt_location_changed = "location_changed", Evt_location_changing = "location_changing", Evt_link_hover = "link_hover", Evt_win_resized = "win_resized"; + public static final String + Evt_location_changed = "location_changed" + , Evt_location_changing = "location_changing" + , Evt_link_hover = "link_hover" + , Evt_win_resized = "win_resized" + , Evt_zoom_changed = "zoom_changed" + ; } diff --git a/150_gfui/src/gplx/gfui/kits/core/Swt_kit.java b/150_gfui/src/gplx/gfui/kits/core/Swt_kit.java index 8dd4ab9a8..b7923e1e0 100644 --- a/150_gfui/src/gplx/gfui/kits/core/Swt_kit.java +++ b/150_gfui/src/gplx/gfui/kits/core/Swt_kit.java @@ -179,6 +179,7 @@ public class Swt_kit implements Gfui_kit { swt_html.Under_control().addMenuDetectListener(new Swt_lnr__menu_detect(this, gfui_html)); gfui_html.Owner_(owner); swt_html.Delete_elems_(owner, gfui_html); + swt_html.Evt_mgr_(gfui_html.Evt_mgr()); return gfui_html; } public Gfui_tab_mgr New_tab_mgr(String key, GfuiElem owner, Keyval... args) { diff --git a/150_gfui/src/gplx/gfui/kits/swts/Swt_html.java b/150_gfui/src/gplx/gfui/kits/swts/Swt_html.java index 6a513c231..afc66057a 100644 --- a/150_gfui/src/gplx/gfui/kits/swts/Swt_html.java +++ b/150_gfui/src/gplx/gfui/kits/swts/Swt_html.java @@ -26,6 +26,7 @@ import gplx.gfui.controls.gxws.GxwElem; import gplx.gfui.controls.gxws.Gxw_html; import gplx.gfui.controls.gxws.Gxw_html_load_tid_; import gplx.gfui.controls.standards.Gfui_html; +import gplx.gfui.controls.standards.Gfui_tab_mgr; import gplx.gfui.ipts.*; import gplx.gfui.kits.core.Swt_kit; @@ -45,7 +46,7 @@ import org.eclipse.swt.events.*; import org.eclipse.swt.graphics.*; import org.eclipse.swt.widgets.*; -public class Swt_html implements Gxw_html, Swt_control, FocusListener { +public class Swt_html implements Gxw_html, Swt_control, FocusListener, Gfo_evt_mgr_owner { private Swt_html_lnr_location lnr_location; private Swt_html_lnr_status lnr_status; public Swt_html(Swt_kit kit, Swt_control owner_control, Keyval_hash ctorArgs) { this.kit = kit; @@ -62,10 +63,12 @@ public class Swt_html implements Gxw_html, Swt_control, FocusListener { browser.addStatusTextListener(lnr_status); browser.addFocusListener(this); browser.addTitleListener(new Swt_html_lnr_title(this)); + browser.addMouseWheelListener(new Swt_html_lnr_wheel(this)); // browser.addOpenWindowListener(new Swt_open_window_listener(this)); // handle target='blank' // browser.addTraverseListener(new Swt_html_lnr_Traverse(this)); } public Swt_kit Kit() {return kit;} private Swt_kit kit; + public Gfo_evt_mgr Evt_mgr() {return ev_mgr;} private Gfo_evt_mgr ev_mgr; public void Evt_mgr_(Gfo_evt_mgr v) {ev_mgr = v;} @Override public Control Under_control() {return browser;} private Browser browser; @Override public Composite Under_composite() {return null;} @Override public Control Under_menu_control() {return browser;} @@ -267,6 +270,17 @@ class Swt_html_lnr_mouse implements MouseListener { return IptEvtDataMouse.new_(btn, IptMouseWheel_.None, ev.x, ev.y); } } +class Swt_html_lnr_wheel implements MouseWheelListener { + private final Swt_html html_box; + public Swt_html_lnr_wheel(Swt_html html_box) { + this.html_box = html_box; + } + @Override public void mouseScrolled(MouseEvent evt) { + if (evt.stateMask == SWT.CTRL) { // ctrl held; + Gfo_evt_mgr_.Pub_obj(html_box, Gfui_html.Evt_zoom_changed, "clicks_is_positive", evt.count > 0); + } + } +} //class Swt_open_window_listener implements OpenWindowListener { // private final Swt_html html_box; // public Swt_open_window_listener(Swt_html html_box) {this.html_box = html_box;} diff --git a/400_xowa/.classpath b/400_xowa/.classpath index b360580d7..b00af46bd 100644 --- a/400_xowa/.classpath +++ b/400_xowa/.classpath @@ -1,12 +1,12 @@ - - + + diff --git a/400_xowa/src/gplx/core/net/downloads/Http_download_wkr__jre.java b/400_xowa/src/gplx/core/net/downloads/Http_download_wkr__jre.java index a38c7fd40..71d778cd8 100644 --- a/400_xowa/src/gplx/core/net/downloads/Http_download_wkr__jre.java +++ b/400_xowa/src/gplx/core/net/downloads/Http_download_wkr__jre.java @@ -38,7 +38,11 @@ public class Http_download_wkr__jre extends Http_download_wkr__base { InputStream src_stream = null; URL src_url_itm = null; try {src_url_itm = new URL(src_url);} - catch (MalformedURLException e) {throw Err_.new_("download_file", "bad url", "src", src_url, "err" + e.toString());} + catch (MalformedURLException e) { + try {trg_stream.close();} + catch (IOException e1) {} + throw Err_.new_("download_file", "bad url", "src", src_url, "err" + e.toString()); + } HttpURLConnection src_conn = null; try { // open connection @@ -50,12 +54,18 @@ public class Http_download_wkr__jre extends Http_download_wkr__base { // check response code int response_code = src_conn.getResponseCode(); if (prog_resumed) { - if (response_code != HttpURLConnection.HTTP_PARTIAL) + if (response_code != HttpURLConnection.HTTP_PARTIAL) { + try {trg_stream.close();} + catch (IOException e1) {} throw Err_.new_("download_file", "server returned non-partial response code", "src", src_url, "code", src_conn.getResponseCode(), "msg", src_conn.getResponseMessage()); + } } else { - if (response_code != HttpURLConnection.HTTP_OK) + if (response_code != HttpURLConnection.HTTP_OK) { + try {trg_stream.close();} + catch (IOException e1) {} throw Err_.new_("download_file", "server returned non-OK response code", "src", src_url, "code", src_conn.getResponseCode(), "msg", src_conn.getResponseMessage()); + } } src_stream = src_conn.getInputStream(); } catch (Exception e) { diff --git a/400_xowa/src/gplx/langs/htmls/Gfh_tag_.java b/400_xowa/src/gplx/langs/htmls/Gfh_tag_.java index 46a7d567a..71e8016ae 100644 --- a/400_xowa/src/gplx/langs/htmls/Gfh_tag_.java +++ b/400_xowa/src/gplx/langs/htmls/Gfh_tag_.java @@ -52,6 +52,8 @@ public class Gfh_tag_ { // NOTE: not serialized; used by tag_rdr , Id__i = 28 , Id__b = 29 , Id__sup = 30 + , Id__sub = 31 + , Id__bdi = 32 ; public static final byte[] Bry__a = Bry_.new_a7("a") @@ -94,6 +96,8 @@ public class Gfh_tag_ { // NOTE: not serialized; used by tag_rdr .Add_str_int("i" , Id__i) .Add_str_int("b" , Id__b) .Add_str_int("sup" , Id__sup) + .Add_str_int("sub" , Id__sub) + .Add_str_int("bdi" , Id__bdi) ; public static String To_str(int tid) { switch (tid) { @@ -131,6 +135,8 @@ public class Gfh_tag_ { // NOTE: not serialized; used by tag_rdr case Id__i: return "i"; case Id__b: return "b"; case Id__sup: return "sup"; + case Id__sub: return "sub"; + case Id__bdi: return "bdi"; default: throw Err_.new_unhandled(tid); } } @@ -145,17 +151,16 @@ public class Gfh_tag_ { // NOTE: not serialized; used by tag_rdr , Pre_lhs = Bry_.new_a7("
")			, Pre_rhs					= Bry_.new_a7("
") , Div_lhs = Bry_.new_a7("
") , Div_rhs = Bry_.new_a7("
") , Html_rhs = Bry_.new_a7("") - , Head_lhs_bgn = Bry_.new_a7("") + , Head_lhs_bgn = Bry_.new_a7("") , Style_lhs_w_type = Bry_.new_a7("") - , Script_lhs = Bry_.new_a7("") , Script_lhs_w_type = Bry_.new_a7("") - , Span_lhs = Bry_.new_a7("") - , Strong_lhs = Bry_.new_a7("") - , Strong_rhs = Bry_.new_a7("") + , Span_lhs = Bry_.new_a7("") + , Strong_lhs = Bry_.new_a7("") , Strong_rhs = Bry_.new_a7("") + , Ul_lhs = Bry_.new_a7("
    ") , Ul_rhs = Bry_.new_a7("
") + , Li_lhs = Bry_.new_a7("
  • ") , Li_rhs = Bry_.new_a7("
  • ") + , Li_lhs_bgn = Bry_.new_a7(" 0) this.Run_next(); } // task_regy.work @@ -132,8 +133,8 @@ public class Xobc_task_regy__work extends Xobc_task_regy__base { task.Task_status_(Gfo_prog_ui_.Status__suspended); task_mgr.Send_json("xo.bldr.work.stop_cur__recv", Gfobj_nde.New().Add_int("task_id", task.Task_id())); } - public void On_fail(Xobc_cmd_itm task, String msg) { + public void On_fail(Xobc_cmd_itm task, boolean resume, String msg) { Xod_power_mgr_.Instance.Wake_lock__rls("task_mgr"); - task_mgr.Send_json("xo.bldr.work.prog__fail__recv", Gfobj_nde.New().Add_int("task_id", task.Task_id()).Add_str("err", msg)); + task_mgr.Send_json("xo.bldr.work.prog__fail__recv", Gfobj_nde.New().Add_int("task_id", task.Task_id()).Add_str("err", msg).Add_bool("resume", resume)); } } diff --git a/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/Srch_search_mgr.java b/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/Srch_search_mgr.java index 9ad9f3f80..68da7faac 100644 --- a/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/Srch_search_mgr.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/Srch_search_mgr.java @@ -79,6 +79,7 @@ public class Srch_search_mgr { } } private void Clear() { + Gfo_usr_dlg_.Instance.Log_many("", "", "search.clear"); search_count = 0; cache__page.Clear(); cache__word_counts.Clear(); diff --git a/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/wkrs/Srch_link_wkr.java b/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/wkrs/Srch_link_wkr.java index 5886f57f7..5326a1f75 100644 --- a/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/wkrs/Srch_link_wkr.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/wkrs/Srch_link_wkr.java @@ -32,6 +32,7 @@ public class Srch_link_wkr extends Percentile_select_base { private Srch_crt_itm sql_root; public void Search(Srch_rslt_list rslts_list, Srch_rslt_cbk rslt_cbk, Srch_search_ctx ctx) { // init + Gfo_usr_dlg_.Instance.Log_many("", "", "search.search by link_tbl; search=~{0}", ctx.Qry.Phrase.Orig); super.cxl = ctx.Cxl; super.rng = ctx.Score_rng; super.rng_log = new Percentile_rng_log(ctx.Addon.Db_mgr().Cfg().Link_score_max()); @@ -54,15 +55,15 @@ public class Srch_link_wkr extends Percentile_select_base { sql_root = Srch_link_wkr_.Find_sql_root(ctx); attach_mgr.Conn_others_(new Db_attach_itm("page_db", ctx.Db__core.Conn()), new Db_attach_itm("word_db", ctx.Tbl__word.conn)); super.Select(); - } + } finally { try { - // gplx.core.consoles.Console_adp__sys.Instance.Write_str_w_nl("detaching: " + String_.new_u8(ctx.Qry.Phrase.Lcase_wild) + " " + Int_.To_str(ctx.Score_rng.Score_bgn()) + " " + Int_.To_str(ctx.Score_rng.Score_end()) + " " + attach_mgr.List__to_str()); + Gfo_usr_dlg_.Instance.Log_many("", "", "search.detaching; phrase=~{0} score_bgn=~{1} score_end=~{2}", ctx.Qry.Phrase.Orig, ctx.Score_rng.Score_bgn(), ctx.Score_rng.Score_end()); attach_mgr.Detach(); stmt = Db_stmt_.Rls(stmt); } catch (Exception e) { - gplx.core.consoles.Console_adp__sys.Instance.Write_str_w_nl("detaching err: " + String_.new_u8(ctx.Qry.Phrase.Orig) + " " + Int_.To_str(ctx.Score_rng.Score_bgn()) + Err_.Message_lang(e)); + Gfo_usr_dlg_.Instance.Log_many("", "", "search.detaching fail; phrase=~{0} score_bgn=~{1} err=~{2}", ctx.Qry.Phrase.Orig, ctx.Score_rng.Score_bgn(), Err_.Message_gplx_log(e)); } } } @@ -115,7 +116,7 @@ public class Srch_link_wkr extends Percentile_select_base { rslt_cbk.On_rslts_found(ctx.Qry, rslts_list, rslts_bgn, rslts_end); rslts_list.Rslts_are_first = false; rslts_bgn = rslts_end; - // gplx.core.consoles.Console_adp__sys.Instance.Write_str(rng_log.To_str_and_clear()); + // Gfo_usr_dlg_.Instance.Log_many("", "", "search.search rslts; rslts=~{0}", rng_log.To_str_and_clear()); } @Override protected boolean Row__read(Db_rdr rdr) { if (!rdr.Move_next()) return false; diff --git a/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/wkrs/Srch_link_wkr_sql.java b/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/wkrs/Srch_link_wkr_sql.java index 48004f09e..75b5c292a 100644 --- a/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/wkrs/Srch_link_wkr_sql.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/wkrs/Srch_link_wkr_sql.java @@ -39,11 +39,11 @@ public class Srch_link_wkr_sql { public String Write(Srch_search_ctx ctx, Db_attach_mgr attach_mgr) { String sql = stmt_mgr.Bfr().To_str_and_clear(); try { - // gplx.core.consoles.Console_adp__sys.Instance.Write_str_w_nl("attaching: " + String_.new_u8(ctx.Qry.Phrase.Lcase_wild) + " " + Int_.To_str(ctx.Score_rng.Score_bgn()) + " " + Int_.To_str(ctx.Score_rng.Score_end()) + " " + attach_mgr.List__to_str()); + Gfo_usr_dlg_.Instance.Log_many("", "", "search.resolving; phrase=~{0} score_bgn=~{1} score_end=~{2}", ctx.Qry.Phrase.Orig, ctx.Score_rng.Score_bgn(), ctx.Score_rng.Score_end()); sql = attach_mgr.Resolve_sql(sql); } catch (Exception e) { - gplx.core.consoles.Console_adp__sys.Instance.Write_str_w_nl("attaching err: " + String_.new_u8(ctx.Qry.Phrase.Orig) + " " + Int_.To_str(ctx.Score_rng.Score_bgn()) + " " + Int_.To_str(ctx.Score_rng.Score_end()) + Err_.Message_lang(e)); + Gfo_usr_dlg_.Instance.Log_many("", "", "search.resolving err; phrase=~{0} score_bgn=~{1} score_end=~{2} err=~{3}", ctx.Qry.Phrase.Orig, ctx.Score_rng.Score_bgn(), ctx.Score_rng.Score_end(), Err_.Message_gplx_log(e)); } return sql; } @@ -53,7 +53,6 @@ public class Srch_link_wkr_sql { return cur_link_conn.Stmt_sql(sql); } public void Fill(Db_stmt stmt) { - // gplx.core.consoles.Console_adp__sys.Instance.Write_str_w_nl(String_.new_u8(ctx.Qry.Phrase.Orig) + " " + Int_.To_str(ctx.Score_rng.Score_bgn()) + " " + Int_.To_str(ctx.Score_rng.Score_end())); stmt_mgr.Fill_stmt_and_clear(stmt); } private void Bld_where(Srch_search_ctx ctx, Srch_crt_itm node) { diff --git a/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/wkrs/Srch_page_tbl_wkr.java b/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/wkrs/Srch_page_tbl_wkr.java index 93093d1a3..435144055 100644 --- a/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/wkrs/Srch_page_tbl_wkr.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/wkrs/Srch_page_tbl_wkr.java @@ -25,6 +25,7 @@ public class Srch_page_tbl_wkr { public void Search(Srch_search_ctx ctx, Srch_rslt_cbk cbk) { byte[] search_raw = To_bry_or_null(tmp_bfr, ctx.Scanner_syms.Wild(), ctx.Crt_mgr); // build up search String but handle escapes "\+" -> "+" if (search_raw == null) return; // search-term has not or symbols; EX: "earth -history"; "(earth & history)" + Gfo_usr_dlg_.Instance.Log_many("", "", "search.search by page_tbl; search=~{0}", search_raw); Xoa_ttl ttl = ctx.Wiki.Ttl_parse(search_raw); if (ttl == null) return; Xowd_page_tbl page_tbl = ctx.Tbl__page; if (ctx.Cxl.Canceled()) return; diff --git a/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/wkrs/Srch_word_count_wkr.java b/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/wkrs/Srch_word_count_wkr.java index fbb24e5fa..f97e46725 100644 --- a/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/wkrs/Srch_word_count_wkr.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/searchs/searchers/wkrs/Srch_word_count_wkr.java @@ -63,7 +63,7 @@ class Srch_word_count_wkr extends Percentile_select_base { return rows_read > 0 || score_too_low; } @Override protected void Rdr__done(boolean rslts_are_enough, boolean rslts_are_done) { - // if (rslts_are_enough) gplx.core.consoles.Console_adp__sys.Instance.Write_str(rng_log.To_str_and_clear()); + if (rslts_are_enough) Gfo_usr_dlg_.Instance.Log_many("", "", "search.word_count; rng=~{0}", rng_log.To_str_and_clear()); } private static Bry_fmt Fmt__main = Bry_fmt.Auto(String_.Concat_lines_nl_skip_last diff --git a/400_xowa/src/gplx/xowa/addons/wikis/searchs/specials/Srch_special_cmd.java b/400_xowa/src/gplx/xowa/addons/wikis/searchs/specials/Srch_special_cmd.java index 65899bb3e..429a21ded 100644 --- a/400_xowa/src/gplx/xowa/addons/wikis/searchs/specials/Srch_special_cmd.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/searchs/specials/Srch_special_cmd.java @@ -17,7 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.addons.wikis.searchs.specials; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.searchs.*; import gplx.core.threads.*; -import gplx.xowa.files.gui.*; import gplx.xowa.guis.views.*; +import gplx.xowa.guis.cbks.js.*; import gplx.xowa.guis.views.*; import gplx.xowa.addons.wikis.searchs.specials.htmls.*; import gplx.xowa.addons.wikis.searchs.searchers.*; import gplx.xowa.addons.wikis.searchs.searchers.rslts.*; public class Srch_special_cmd implements Gfo_invk, Srch_rslt_cbk, Xog_tab_close_lnr { private final Srch_special_searcher mgr; private final Srch_search_qry qry; diff --git a/400_xowa/src/gplx/xowa/addons/wikis/searchs/specials/htmls/Srch_html_row_wkr.java b/400_xowa/src/gplx/xowa/addons/wikis/searchs/specials/htmls/Srch_html_row_wkr.java index e5d0968ab..ffd5e5299 100644 --- a/400_xowa/src/gplx/xowa/addons/wikis/searchs/specials/htmls/Srch_html_row_wkr.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/searchs/specials/htmls/Srch_html_row_wkr.java @@ -16,7 +16,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.xowa.addons.wikis.searchs.specials.htmls; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.searchs.*; import gplx.xowa.addons.wikis.searchs.specials.*; -import gplx.langs.htmls.*; import gplx.xowa.files.gui.*; +import gplx.langs.htmls.*; import gplx.xowa.guis.cbks.js.*; import gplx.xowa.addons.wikis.searchs.searchers.*; import gplx.xowa.addons.wikis.searchs.searchers.rslts.*; public class Srch_html_row_wkr { private final Srch_html_row_bldr html_row_bldr; private final Xog_js_wkr js_wkr; diff --git a/400_xowa/src/gplx/xowa/addons/wikis/searchs/specials/htmls/Srch_rslt_cbk_tst.java b/400_xowa/src/gplx/xowa/addons/wikis/searchs/specials/htmls/Srch_rslt_cbk_tst.java index 2830c6979..56f4b69d4 100644 --- a/400_xowa/src/gplx/xowa/addons/wikis/searchs/specials/htmls/Srch_rslt_cbk_tst.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/searchs/specials/htmls/Srch_rslt_cbk_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.addons.wikis.searchs.specials.htmls; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.searchs.*; import gplx.xowa.addons.wikis.searchs.specials.*; -import org.junit.*; import gplx.xowa.htmls.core.htmls.utls.*; import gplx.xowa.files.gui.*; import gplx.xowa.addons.wikis.searchs.searchers.rslts.*; +import org.junit.*; import gplx.xowa.htmls.core.htmls.utls.*; import gplx.xowa.guis.cbks.js.*; import gplx.xowa.addons.wikis.searchs.searchers.rslts.*; public class Srch_rslt_cbk_tst { @Before public void init() {fxt.Clear();} private Srch_rslt_cbk_fxt fxt = new Srch_rslt_cbk_fxt(); @Test public void Basic() { diff --git a/400_xowa/src/gplx/xowa/apps/apis/xowa/gui/Xoapi_font.java b/400_xowa/src/gplx/xowa/apps/apis/xowa/gui/Xoapi_font.java index a28df971a..e513aeac0 100644 --- a/400_xowa/src/gplx/xowa/apps/apis/xowa/gui/Xoapi_font.java +++ b/400_xowa/src/gplx/xowa/apps/apis/xowa/gui/Xoapi_font.java @@ -25,7 +25,7 @@ public class Xoapi_font implements Gfo_invk { public void Increase() {Adj(1);} public void Decrease() {Adj(-1);} public void Reset() {Set(false, Xoh_page_mgr.Font_size_default, Xocfg_win.Font_size_default);} - private void Adj(int adj) { + public void Adj(int adj) { float html_font_size = app.Html_mgr().Page_mgr().Font_size() + adj; float gui_font_size = app.Gui_mgr().Win_cfg().Font().Size() + adj; // (html_font_size * .75f) - 4; // .75f b/c 16px = 12 pt; -4 b/c gui font is currently 4 pt smaller if (html_font_size < 1 || gui_font_size < 1) return; diff --git a/400_xowa/src/gplx/xowa/bldrs/setups/maints/Wmf_dump_list_parser_tst.java b/400_xowa/src/gplx/xowa/bldrs/setups/maints/Wmf_dump_list_parser_tst.java index 38e355a06..b34e99e77 100644 --- a/400_xowa/src/gplx/xowa/bldrs/setups/maints/Wmf_dump_list_parser_tst.java +++ b/400_xowa/src/gplx/xowa/bldrs/setups/maints/Wmf_dump_list_parser_tst.java @@ -41,7 +41,7 @@ public class Wmf_dump_list_parser_tst { , fxt.itm("zh-classicalwiki", "20131128", Wmf_dump_itm.Status_tid_complete, "Dump complete", "2013-11-28 06:08:56") ); } -// @Test public void Update() { // MAINT:QUARTERLY:2016-03-17; must run C:\xowa\ and update dump status +// @Test public void Update() { // MAINT:QUARTERLY:2016-07-03; must run C:\xowa\ and update dump status // Hash_adp_bry excluded_domains = Hash_adp_bry.cs().Add_many_str // ( "advisory.wikipedia.org", "beta.wikiversity.org", "donate.wikipedia.org", "login.wikipedia.org" // , "nostalgia.wikipedia.org", "outreach.wikipedia.org", "quality.wikipedia.org", "sources.wikipedia.org" diff --git a/400_xowa/src/gplx/xowa/drds/Xod_app.java b/400_xowa/src/gplx/xowa/drds/Xod_app.java index 534684d6f..0834c1b9f 100644 --- a/400_xowa/src/gplx/xowa/drds/Xod_app.java +++ b/400_xowa/src/gplx/xowa/drds/Xod_app.java @@ -18,7 +18,7 @@ along with this program. If not, see . 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.wikis.domains.*; import gplx.xowa.wikis.nss.*; import gplx.xowa.files.gui.*; +import gplx.xowa.wikis.domains.*; import gplx.xowa.wikis.nss.*; import gplx.xowa.guis.cbks.js.*; import gplx.xowa.addons.wikis.searchs.searchers.rslts.*; import gplx.langs.htmls.encoders.*; import gplx.xowa.htmls.hrefs.*; import gplx.xowa.addons.wikis.searchs.*; import gplx.xowa.addons.wikis.searchs.searchers.*; diff --git a/400_xowa/src/gplx/xowa/drds/files/Xod_file_mgr.java b/400_xowa/src/gplx/xowa/drds/files/Xod_file_mgr.java index 12d575ad5..1e8c5f2f3 100644 --- a/400_xowa/src/gplx/xowa/drds/files/Xod_file_mgr.java +++ b/400_xowa/src/gplx/xowa/drds/files/Xod_file_mgr.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.drds.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.drds.*; import gplx.core.threads.*; import gplx.xowa.drds.pages.*; -import gplx.xowa.files.*; import gplx.xowa.files.gui.*; +import gplx.xowa.files.*; import gplx.xowa.guis.cbks.js.*; import gplx.xowa.htmls.*; public class Xod_file_mgr { private final Gfo_thread_pool thread_pool = new Gfo_thread_pool(); diff --git a/400_xowa/src/gplx/xowa/files/Xof_file_itm.java b/400_xowa/src/gplx/xowa/files/Xof_file_itm.java index b3a3362b6..773634dac 100644 --- a/400_xowa/src/gplx/xowa/files/Xof_file_itm.java +++ b/400_xowa/src/gplx/xowa/files/Xof_file_itm.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.files; import gplx.*; import gplx.xowa.*; -import gplx.xowa.files.gui.*; import gplx.xowa.files.repos.*; +import gplx.xowa.guis.cbks.js.*; import gplx.xowa.files.repos.*; public interface Xof_file_itm { int Lnki_exec_tid(); byte[] Lnki_wiki_abrv(); 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 cc1478be1..ec8bdebbd 100644 --- a/400_xowa/src/gplx/xowa/files/Xof_file_wkr.java +++ b/400_xowa/src/gplx/xowa/files/Xof_file_wkr.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.files; import gplx.*; import gplx.xowa.*; import gplx.core.threads.*; import gplx.core.ios.*; import gplx.core.ios.streams.*; import gplx.fsdb.*; import gplx.fsdb.meta.*; import gplx.fsdb.data.*; import gplx.xowa.files.fsdb.*; -import gplx.xowa.files.repos.*; import gplx.xowa.files.origs.*; import gplx.xowa.files.bins.*; import gplx.xowa.files.caches.*; import gplx.xowa.files.gui.*; +import gplx.xowa.files.repos.*; import gplx.xowa.files.origs.*; import gplx.xowa.files.bins.*; import gplx.xowa.files.caches.*; import gplx.xowa.guis.cbks.js.*; import gplx.xowa.htmls.core.makes.imgs.*; public class Xof_file_wkr implements Gfo_thread_wkr { private final Xof_orig_mgr orig_mgr; private final Xof_bin_mgr bin_mgr; private final Fsm_mnt_mgr mnt_mgr; private final Xou_cache_mgr cache_mgr; diff --git a/400_xowa/src/gplx/xowa/files/Xof_fsdb_itm.java b/400_xowa/src/gplx/xowa/files/Xof_fsdb_itm.java index 512bedab6..3b958c50d 100644 --- a/400_xowa/src/gplx/xowa/files/Xof_fsdb_itm.java +++ b/400_xowa/src/gplx/xowa/files/Xof_fsdb_itm.java @@ -17,7 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.files; import gplx.*; import gplx.xowa.*; import gplx.core.ios.*; -import gplx.xowa.files.gui.*; import gplx.xowa.files.repos.*; +import gplx.xowa.guis.cbks.js.*; import gplx.xowa.files.repos.*; import gplx.xowa.parsers.lnkis.*; public class Xof_fsdb_itm implements Xof_file_itm { private int lnki_upright_patch; diff --git a/400_xowa/src/gplx/xowa/files/Xof_img_size.java b/400_xowa/src/gplx/xowa/files/Xof_img_size.java index d7366b4ae..4868285d0 100644 --- a/400_xowa/src/gplx/xowa/files/Xof_img_size.java +++ b/400_xowa/src/gplx/xowa/files/Xof_img_size.java @@ -90,13 +90,6 @@ public class Xof_img_size { } } } -// private static boolean Calc_limit_size(int exec_tid, int lnki_type, int lnki_ext) { -// if (lnki_type != Xop_lnki_type.Id_thumb) return false; // only limit to size for thumb; EX:[[File:A.png|thumb|999x999px]] does not get limited but [[File:A.png|999x999px]] does -// if (lnki_ext == Xof_ext_.Id_svg) // if svg... -// return exec_tid == Xof_exec_tid.Tid_wiki_file; // ... only limit to size if [[File]] page -// else // not svg and thumb; always limit to size -// return true; -// } public static int Calc_w(int file_w, int file_h, int lnki_h) { // REF.MW:media/MediaHandler.php|fitBoxWidth double ideal_w = (double)file_w * (double)lnki_h / (double)file_h; double ideal_w_ceil = Math_.Ceil(ideal_w); @@ -142,7 +135,7 @@ public class Xof_img_size { } public static final int Null = -1; public static final int Thumb_width_img = 220, Thumb_width_ogv = 220; - public static final double Upright_null = -1, Upright_default_marker = 0; // REF:MW: if ( isset( $fp['upright'] ) && $fp['upright'] == 0 ) + public static final double Upright_null = -1, Upright_default_marker = 0; // REF:MW: if ( isset( $fp['upright'] ) && $fp['upright'] == 0 ) public static final int Size__neg1 = -1, Size_null = 0; // Size_null = 0, b/c either imageMagick / inkscape fails when -1 is passed public static final int Size__same_as_orig = -1; private static final int Svg_max_width = 2048; diff --git a/400_xowa/src/gplx/xowa/files/Xof_xfer_itm.java b/400_xowa/src/gplx/xowa/files/Xof_xfer_itm.java index e69f010d1..210c4f559 100644 --- a/400_xowa/src/gplx/xowa/files/Xof_xfer_itm.java +++ b/400_xowa/src/gplx/xowa/files/Xof_xfer_itm.java @@ -17,7 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.files; import gplx.*; import gplx.xowa.*; import gplx.core.primitives.*; -import gplx.xowa.files.gui.*; import gplx.xowa.files.repos.*; +import gplx.xowa.guis.cbks.js.*; import gplx.xowa.files.repos.*; import gplx.xowa.wikis.tdbs.metas.*; import gplx.xowa.parsers.utils.*; public class Xof_xfer_itm implements Xof_file_itm { diff --git a/400_xowa/src/gplx/xowa/files/Xog_redlink_thread.java b/400_xowa/src/gplx/xowa/files/Xog_redlink_thread.java index afbdeffcb..d2f776c3e 100644 --- a/400_xowa/src/gplx/xowa/files/Xog_redlink_thread.java +++ b/400_xowa/src/gplx/xowa/files/Xog_redlink_thread.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.files; import gplx.*; import gplx.xowa.*; -import gplx.core.threads.*; import gplx.xowa.files.gui.*; +import gplx.core.threads.*; import gplx.xowa.guis.cbks.js.*; public class Xog_redlink_thread implements Gfo_thread_wkr { private final int[] redlink_ary; private final Xog_js_wkr js_wkr; public Xog_redlink_thread(int[] redlink_ary, Xog_js_wkr js_wkr) {this.redlink_ary = redlink_ary; this.js_wkr = js_wkr;} diff --git a/400_xowa/src/gplx/xowa/files/caches/Xou_file_itm_finder.java b/400_xowa/src/gplx/xowa/files/caches/Xou_file_itm_finder.java index d133b0244..cacbe0edf 100644 --- a/400_xowa/src/gplx/xowa/files/caches/Xou_file_itm_finder.java +++ b/400_xowa/src/gplx/xowa/files/caches/Xou_file_itm_finder.java @@ -17,9 +17,9 @@ along with this program. If not, see . */ package gplx.xowa.files.caches; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.core.ios.*; -import gplx.xowa.files.origs.*; import gplx.xowa.files.repos.*; import gplx.xowa.files.fsdb.*; import gplx.xowa.files.bins.*; import gplx.xowa.files.gui.*; +import gplx.xowa.files.origs.*; import gplx.xowa.files.repos.*; import gplx.xowa.files.fsdb.*; import gplx.xowa.files.bins.*; import gplx.xowa.guis.cbks.js.*; public class Xou_file_itm_finder { - private final Xou_cache_mgr cache_mgr; private final Xof_img_size img_size = new Xof_img_size(); private final Xof_url_bldr url_bldr = Xof_url_bldr.new_v2(); + private final Xou_cache_mgr cache_mgr; private final Xof_img_size img_size = new Xof_img_size(); private final Xof_url_bldr url_bldr = Xof_url_bldr.new_v2(); public Xou_file_itm_finder(Xou_cache_mgr cache_mgr) {this.cache_mgr = cache_mgr;} public boolean Find(Xowe_wiki wiki, int exec_tid, Xof_file_itm xfer, byte[] page_url) { byte[] lnki_ttl = xfer.Lnki_ttl(); diff --git a/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr.java b/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr.java index df532b1e8..ad2dc9abe 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr.java @@ -17,7 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.files.fsdb; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.fsdb.*; import gplx.fsdb.data.*; import gplx.fsdb.meta.*; -import gplx.xowa.files.bins.*; import gplx.xowa.files.origs.*; import gplx.xowa.files.caches.*; import gplx.xowa.files.gui.*; +import gplx.xowa.files.bins.*; import gplx.xowa.files.origs.*; import gplx.xowa.files.caches.*; import gplx.xowa.guis.cbks.js.*; public interface Xof_fsdb_mgr { Xof_bin_mgr Bin_mgr(); Fsm_mnt_mgr Mnt_mgr(); diff --git a/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr__sql.java b/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr__sql.java index 219d99b4e..18a6a73b4 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr__sql.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/Xof_fsdb_mgr__sql.java @@ -20,7 +20,7 @@ import gplx.core.primitives.*; import gplx.core.ios.*; import gplx.dbs.*; import gplx.xowa.wikis.data.*; import gplx.fsdb.*; import gplx.fsdb.meta.*; -import gplx.xowa.files.*; import gplx.xowa.files.repos.*; import gplx.xowa.files.imgs.*; import gplx.xowa.files.origs.*; import gplx.xowa.files.bins.*; import gplx.xowa.files.caches.*; import gplx.xowa.files.gui.*; +import gplx.xowa.files.*; import gplx.xowa.files.repos.*; import gplx.xowa.files.imgs.*; import gplx.xowa.files.origs.*; import gplx.xowa.files.bins.*; import gplx.xowa.files.caches.*; import gplx.xowa.guis.cbks.js.*; public class Xof_fsdb_mgr__sql implements Xof_fsdb_mgr, Gfo_invk { private boolean init = false; private boolean fsdb_enabled = false; private Xow_repo_mgr repo_mgr; private Xof_url_bldr url_bldr; private final Xof_img_size img_size = new Xof_img_size(); diff --git a/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_fsdb_mgr.java b/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_fsdb_mgr.java index a9a3f329d..491b8cfa2 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_fsdb_mgr.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/fs_roots/Fs_root_fsdb_mgr.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.files.fsdb.fs_roots; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*; import gplx.core.ios.*; import gplx.core.brys.fmtrs.*; import gplx.core.envs.*; import gplx.fsdb.*; import gplx.fsdb.data.*; import gplx.fsdb.meta.*; -import gplx.xowa.files.gui.*; import gplx.xowa.files.origs.*; import gplx.xowa.files.bins.*; import gplx.xowa.files.caches.*; +import gplx.xowa.guis.cbks.js.*; import gplx.xowa.files.origs.*; import gplx.xowa.files.bins.*; import gplx.xowa.files.caches.*; public class Fs_root_fsdb_mgr implements Xof_fsdb_mgr, Gfo_invk { // read images from file-system dir private Xowe_wiki wiki; private Fs_root_wkr_fsdb fsdb_wkr; public Fs_root_fsdb_mgr(Xowe_wiki wiki) {this.Init_by_wiki(wiki); fsdb_wkr = new Fs_root_wkr_fsdb(wiki);} diff --git a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_fxt.java b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_fxt.java index ed1389048..4428f2ae5 100644 --- a/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_fxt.java +++ b/400_xowa/src/gplx/xowa/files/fsdb/tsts/Xof_file_fxt.java @@ -17,7 +17,7 @@ along with this program. If not, see . */ package gplx.xowa.files.fsdb.tsts; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*; import gplx.core.envs.*; -import gplx.fsdb.*; import gplx.fsdb.meta.*; import gplx.dbs.*; import gplx.xowa.files.origs.*; import gplx.xowa.files.bins.*; import gplx.xowa.files.cnvs.*; import gplx.xowa.files.exts.*; import gplx.xowa.files.gui.*; +import gplx.fsdb.*; import gplx.fsdb.meta.*; import gplx.dbs.*; import gplx.xowa.files.origs.*; import gplx.xowa.files.bins.*; import gplx.xowa.files.cnvs.*; import gplx.xowa.files.exts.*; import gplx.xowa.guis.cbks.js.*; import gplx.fsdb.data.*; import gplx.xowa.wikis.domains.*; import gplx.xowa.files.repos.*; import gplx.xowa.wikis.data.*; import gplx.xowa.wikis.nss.*; diff --git a/400_xowa/src/gplx/xowa/files/xfers/Xof_xfer_queue.java b/400_xowa/src/gplx/xowa/files/xfers/Xof_xfer_queue.java index 984cd1775..bd8df757b 100644 --- a/400_xowa/src/gplx/xowa/files/xfers/Xof_xfer_queue.java +++ b/400_xowa/src/gplx/xowa/files/xfers/Xof_xfer_queue.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.files.xfers; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; import gplx.core.primitives.*; import gplx.core.envs.*; import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*; import gplx.xowa.files.bins.*; import gplx.xowa.files.origs.*; -import gplx.xowa.files.gui.*; +import gplx.xowa.guis.cbks.js.*; import gplx.xowa.wikis.tdbs.metas.*; public class Xof_xfer_queue { private final List_adp xfer_list = List_adp_.New(); private final Ordered_hash dirty_meta_mgrs = Ordered_hash_.New_bry(); diff --git a/400_xowa/src/gplx/xowa/guis/bnds/Xog_bnd_mgr.java b/400_xowa/src/gplx/xowa/guis/bnds/Xog_bnd_mgr.java index d652dcaf9..15dd35fdd 100644 --- a/400_xowa/src/gplx/xowa/guis/bnds/Xog_bnd_mgr.java +++ b/400_xowa/src/gplx/xowa/guis/bnds/Xog_bnd_mgr.java @@ -121,7 +121,7 @@ public class Xog_bnd_mgr { Init_itm(Xog_cmd_itm_.Key_gui_page_view_reload , Xog_bnd_box_.Tid_browser , "key.f5"); Init_itm(Xog_cmd_itm_.Key_gui_page_view_refresh , Xog_bnd_box_.Tid_browser , "mod.s+key.f5"); Init_itm(Xog_cmd_itm_.Key_gui_page_view_save_as , Xog_bnd_box_.Tid_browser , ""); - Init_itm(Xog_cmd_itm_.Key_gui_page_view_print , Xog_bnd_box_.Tid_browser , ""); + Init_itm(Xog_cmd_itm_.Key_gui_page_view_print , Xog_bnd_box_.Tid_browser , "mod.c+key.p"); Init_itm(Xog_cmd_itm_.Key_gui_page_selection_select_all , Xog_bnd_box_.Tid_browser , ""); Init_itm(Xog_cmd_itm_.Key_gui_page_selection_copy , Xog_bnd_box_.Tid_browser , ""); Init_itm(Xog_cmd_itm_.Key_gui_page_selection_save_file_as , Xog_bnd_box_.Tid_browser , ""); diff --git a/400_xowa/src/gplx/xowa/files/gui/Js_img_mgr.java b/400_xowa/src/gplx/xowa/guis/cbks/js/Js_img_mgr.java similarity index 76% rename from 400_xowa/src/gplx/xowa/files/gui/Js_img_mgr.java rename to 400_xowa/src/gplx/xowa/guis/cbks/js/Js_img_mgr.java index 47833db23..6d0d504bb 100644 --- a/400_xowa/src/gplx/xowa/files/gui/Js_img_mgr.java +++ b/400_xowa/src/gplx/xowa/guis/cbks/js/Js_img_mgr.java @@ -15,22 +15,24 @@ GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ -package gplx.xowa.files.gui; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; +package gplx.xowa.guis.cbks.js; import gplx.*; import gplx.xowa.*; import gplx.xowa.guis.*; import gplx.xowa.guis.cbks.*; import gplx.xowa.xtns.gallery.*; -import gplx.xowa.files.fsdb.*; import gplx.xowa.guis.views.*; -import gplx.xowa.parsers.lnkis.*; +import gplx.xowa.files.*; import gplx.xowa.files.fsdb.*; +import gplx.xowa.guis.views.*; import gplx.xowa.parsers.lnkis.*; public class Js_img_mgr { - public static void Update_img(Xoa_page page, Xog_js_wkr js_wkr, Xof_file_itm itm) { - Js_img_mgr.Update_img(page, js_wkr, itm.Html_img_wkr(), itm.Html_uid(), itm.Lnki_type(), itm.Html_elem_tid(), itm.Html_w(), itm.Html_h(), itm.Html_view_url(), itm.Orig_w(), itm.Orig_h(), itm.Html_orig_url(), itm.Orig_ttl(), itm.Html_gallery_mgr_h()); - } public static void Update_link_missing(Xog_js_wkr html_itm, String html_id) { html_itm.Html_redlink(html_id); } - private static void Update_img(Xoa_page page, Xog_js_wkr js_wkr, Js_img_wkr img_wkr, int uid, byte lnki_type, byte elem_tid, int html_w, int html_h, Io_url html_view_url, int orig_w, int orig_h, Io_url html_orig_url, byte[] lnki_ttl, int gallery_mgr_h) { + public static void Update_img(Xoa_page page, Xog_js_wkr js_wkr, Xof_file_itm itm) { + Js_img_mgr.Update_img(page, js_wkr, itm.Html_img_wkr(), itm.Html_uid(), itm.Lnki_type(), itm.Html_elem_tid(), itm.Html_w(), itm.Html_h(), itm.Html_view_url() + , itm.Orig_w(), itm.Orig_h(), itm.Orig_ext(), itm.Html_orig_url(), itm.Orig_ttl(), itm.Html_gallery_mgr_h()); + } + private static void Update_img(Xoa_page page, Xog_js_wkr js_wkr, Js_img_wkr img_wkr, int uid, byte lnki_type, byte elem_tid, int html_w, int html_h, Io_url html_view_url + , int orig_w, int orig_h, Xof_ext orig_ext, Io_url html_orig_url, byte[] lnki_ttl, int gallery_mgr_h) { if (!page.Wiki().App().Mode().Tid_supports_js()) return; // do not update html widget unless app is gui; null ref on http server; DATE:2014-09-17 switch (elem_tid) { case Xof_html_elem.Tid_gallery_v2: - img_wkr.Js_wkr__update_hdoc(page, js_wkr, uid, html_w, html_h, html_view_url, orig_w, orig_h, html_orig_url, lnki_ttl); + img_wkr.Js_wkr__update_hdoc(page, js_wkr, uid, html_w, html_h, html_view_url, orig_w, orig_h, orig_ext, html_orig_url, lnki_ttl); return; } String html_id = To_doc_uid(uid); @@ -41,10 +43,10 @@ public class Js_img_mgr { } switch (elem_tid) { case Xof_html_elem.Tid_gallery: - js_wkr.Html_atr_set("xowa_gallery_div3_" + uid, "style", "margin:" + Gallery_html_wtr_utl.Calc_vpad(gallery_mgr_h, html_h) + "px auto;"); + js_wkr.Html_atr_set("xowa_gallery_div3_" + uid, "style", "margin:" + Gallery_mgr_wtr_.Calc_vpad(gallery_mgr_h, html_h) + "px auto;"); break; case Xof_html_elem.Tid_imap: - img_wkr.Js_wkr__update_hdoc(page, js_wkr, uid, html_w, html_h, html_view_url, orig_w, orig_h, html_orig_url, lnki_ttl); + img_wkr.Js_wkr__update_hdoc(page, js_wkr, uid, html_w, html_h, html_view_url, orig_w, orig_h, orig_ext, html_orig_url, lnki_ttl); break; case Xof_html_elem.Tid_vid: String html_id_vid = "xowa_file_play_" + uid; diff --git a/400_xowa/src/gplx/xowa/files/gui/Js_img_wkr.java b/400_xowa/src/gplx/xowa/guis/cbks/js/Js_img_wkr.java similarity index 75% rename from 400_xowa/src/gplx/xowa/files/gui/Js_img_wkr.java rename to 400_xowa/src/gplx/xowa/guis/cbks/js/Js_img_wkr.java index 389897471..698204b77 100644 --- a/400_xowa/src/gplx/xowa/files/gui/Js_img_wkr.java +++ b/400_xowa/src/gplx/xowa/guis/cbks/js/Js_img_wkr.java @@ -15,8 +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 . */ -package gplx.xowa.files.gui; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; -import gplx.xowa.guis.views.*; +package gplx.xowa.guis.cbks.js; import gplx.*; import gplx.xowa.*; import gplx.xowa.guis.*; import gplx.xowa.guis.cbks.*; +import gplx.xowa.files.*; public interface Js_img_wkr { - void Js_wkr__update_hdoc(Xoa_page page, Xog_js_wkr js_wkr, int html_uid, int html_w, int html_h, Io_url html_view_url, int orig_w, int orig_h, Io_url html_orig_url, byte[] lnki_ttl); + void Js_wkr__update_hdoc(Xoa_page page, Xog_js_wkr js_wkr, int html_uid, int html_w, int html_h, Io_url html_view_url + , int orig_w, int orig_h, Xof_ext orig_ext, Io_url html_orig_url, byte[] lnki_ttl); } diff --git a/400_xowa/src/gplx/xowa/files/gui/Xog_js_wkr.java b/400_xowa/src/gplx/xowa/guis/cbks/js/Xog_js_wkr.java similarity index 89% rename from 400_xowa/src/gplx/xowa/files/gui/Xog_js_wkr.java rename to 400_xowa/src/gplx/xowa/guis/cbks/js/Xog_js_wkr.java index 524cdbf7b..50e7f751c 100644 --- a/400_xowa/src/gplx/xowa/files/gui/Xog_js_wkr.java +++ b/400_xowa/src/gplx/xowa/guis/cbks/js/Xog_js_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.xowa.files.gui; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; +package gplx.xowa.guis.cbks.js; import gplx.*; import gplx.xowa.*; import gplx.xowa.guis.*; import gplx.xowa.guis.cbks.*; public interface Xog_js_wkr { void Html_img_update (String uid, String src, int w, int h); void Html_redlink (String html_uid); diff --git a/400_xowa/src/gplx/xowa/files/gui/Xog_js_wkr_.java b/400_xowa/src/gplx/xowa/guis/cbks/js/Xog_js_wkr_.java similarity index 90% rename from 400_xowa/src/gplx/xowa/files/gui/Xog_js_wkr_.java rename to 400_xowa/src/gplx/xowa/guis/cbks/js/Xog_js_wkr_.java index 5d95ee5d8..c36878187 100644 --- a/400_xowa/src/gplx/xowa/files/gui/Xog_js_wkr_.java +++ b/400_xowa/src/gplx/xowa/guis/cbks/js/Xog_js_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.xowa.files.gui; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; +package gplx.xowa.guis.cbks.js; import gplx.*; import gplx.xowa.*; import gplx.xowa.guis.*; import gplx.xowa.guis.cbks.*; public class Xog_js_wkr_ { public static final Xog_js_wkr Noop = new Xog_js_wkr__noop(); } diff --git a/400_xowa/src/gplx/xowa/files/gui/Xog_js_wkr__log.java b/400_xowa/src/gplx/xowa/guis/cbks/js/Xog_js_wkr__log.java similarity index 94% rename from 400_xowa/src/gplx/xowa/files/gui/Xog_js_wkr__log.java rename to 400_xowa/src/gplx/xowa/guis/cbks/js/Xog_js_wkr__log.java index 300d8e7c3..cba4a27bd 100644 --- a/400_xowa/src/gplx/xowa/files/gui/Xog_js_wkr__log.java +++ b/400_xowa/src/gplx/xowa/guis/cbks/js/Xog_js_wkr__log.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.xowa.files.gui; import gplx.*; import gplx.xowa.*; import gplx.xowa.files.*; +package gplx.xowa.guis.cbks.js; import gplx.*; import gplx.xowa.*; import gplx.xowa.guis.*; import gplx.xowa.guis.cbks.*; public class Xog_js_wkr__log implements Xog_js_wkr { private final List_adp log_list = List_adp_.New(); public void Html_img_update (String uid, String src, int w, int h) {log_list.Add(Object_.Ary(Proc_img_update, uid, src, w, h));} diff --git a/400_xowa/src/gplx/xowa/guis/urls/Xog_url_wkr.java b/400_xowa/src/gplx/xowa/guis/urls/Xog_url_wkr.java index 0a5fae2db..46f874547 100644 --- a/400_xowa/src/gplx/xowa/guis/urls/Xog_url_wkr.java +++ b/400_xowa/src/gplx/xowa/guis/urls/Xog_url_wkr.java @@ -75,7 +75,7 @@ public class Xog_url_wkr { Xof_fsdb_itm fsdb = Xof_orig_file_downloader.Make_fsdb(wiki, lnki_ttl, img_size, url_bldr); if (!Io_mgr.Instance.ExistsFil(href_url)) { // if (!Xof_orig_file_downloader.Get_to_url(fsdb, href_url, wiki, lnki_ttl, url_bldr)) - if (!Xof_file_wkr.Show_img(fsdb, Xoa_app_.Usr_dlg(), wiki.File__bin_mgr(), wiki.File__mnt_mgr(), wiki.App().User().User_db_mgr().Cache_mgr(), wiki.File__repo_mgr(), gplx.xowa.files.gui.Xog_js_wkr_.Noop, img_size, url_bldr, page)) + if (!Xof_file_wkr.Show_img(fsdb, Xoa_app_.Usr_dlg(), wiki.File__bin_mgr(), wiki.File__mnt_mgr(), wiki.App().User().User_db_mgr().Cache_mgr(), wiki.File__repo_mgr(), gplx.xowa.guis.cbks.js.Xog_js_wkr_.Noop, img_size, url_bldr, page)) return Rslt_handled; } gplx.core.ios.IoItmFil fil = Io_mgr.Instance.QueryFil(href_url); diff --git a/400_xowa/src/gplx/xowa/guis/views/Xog_async_wkr.java b/400_xowa/src/gplx/xowa/guis/views/Xog_async_wkr.java index 0b90325f0..16af1b985 100644 --- a/400_xowa/src/gplx/xowa/guis/views/Xog_async_wkr.java +++ b/400_xowa/src/gplx/xowa/guis/views/Xog_async_wkr.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.guis.views; import gplx.*; import gplx.xowa.*; import gplx.xowa.guis.*; import gplx.core.threads.*; import gplx.xowa.wikis.pages.lnkis.*; -import gplx.xowa.files.gui.*; +import gplx.xowa.guis.cbks.js.*; public class Xog_async_wkr { public static void Async(Xog_tab_itm tab) {Xog_async_wkr.Async(tab.Page(), tab.Html_itm());} public static void Async(Xoae_page page, Xog_html_itm js_wkr) { diff --git a/400_xowa/src/gplx/xowa/guis/views/Xog_html_itm.java b/400_xowa/src/gplx/xowa/guis/views/Xog_html_itm.java index 7581d5a6a..f2755e144 100644 --- a/400_xowa/src/gplx/xowa/guis/views/Xog_html_itm.java +++ b/400_xowa/src/gplx/xowa/guis/views/Xog_html_itm.java @@ -18,7 +18,7 @@ along with this program. If not, see . package gplx.xowa.guis.views; import gplx.*; import gplx.xowa.*; import gplx.xowa.guis.*; import gplx.core.primitives.*; import gplx.core.btries.*; import gplx.gfui.*; import gplx.gfui.kits.core.*; import gplx.gfui.controls.elems.*; import gplx.gfui.controls.standards.*; -import gplx.xowa.guis.menus.*; import gplx.xowa.guis.menus.dom.*; import gplx.xowa.files.gui.*; +import gplx.xowa.guis.menus.*; import gplx.xowa.guis.menus.dom.*; import gplx.xowa.guis.cbks.js.*; import gplx.langs.htmls.*; import gplx.xowa.htmls.hrefs.*; import gplx.xowa.htmls.js.*; import gplx.xowa.htmls.heads.*; import gplx.xowa.wikis.pages.*; public class Xog_html_itm implements Xog_js_wkr, Gfo_invk, Gfo_evt_itm { private Xoae_app app; private final Object thread_lock = new Object(); @@ -33,12 +33,12 @@ public class Xog_html_itm implements Xog_js_wkr, Gfo_invk, Gfo_evt_itm { cmd_async = kit.New_cmd_async(this); ev_mgr = new Gfo_evt_mgr(this); } - public Gfo_evt_mgr Evt_mgr() {return ev_mgr;} private Gfo_evt_mgr ev_mgr; + public Gfo_evt_mgr Evt_mgr() {return ev_mgr;} private Gfo_evt_mgr ev_mgr; public Xog_tab_itm Owner_tab() {return owner_tab;} private Xog_tab_itm owner_tab; public Gfui_html Html_box() {return html_box;} private Gfui_html html_box; public Xoh_js_cbk Js_cbk() {return js_cbk;} private Xoh_js_cbk js_cbk; - public Gfo_invk Cmd_sync() {return cmd_sync;} private Gfo_invk cmd_sync; - public Gfo_invk Cmd_async() {return cmd_async;} private Gfo_invk cmd_async; + public Gfo_invk Cmd_sync() {return cmd_sync;} private Gfo_invk cmd_sync; + public Gfo_invk Cmd_async() {return cmd_async;} private Gfo_invk cmd_async; public void Switch_mem(Xog_html_itm comp) { Xog_tab_itm temp_owner_tab = owner_tab; // NOTE: reparent owner_tab, since owner_tab will be switching its html_itm this.owner_tab = comp.owner_tab; @@ -47,6 +47,7 @@ public class Xog_html_itm implements Xog_js_wkr, Gfo_invk, Gfo_evt_itm { public void Html_box_(Gfui_html html_box) { this.html_box = html_box; html_box.Html_js_cbks_add("xowa_exec", js_cbk); + Gfo_evt_mgr_.Sub_same(html_box, Gfui_html.Evt_zoom_changed, this); } public String Html_selected_get_src_or_empty() {return html_box.Html_js_eval_proc_as_str(Xog_js_procs.Selection__get_src_or_empty);} public String Html_selected_get_href_or_text() {return Html_extract_text(html_box.Html_js_eval_proc_as_str(Xog_js_procs.Selection__get_href_or_text));} @@ -188,6 +189,9 @@ public class Xog_html_itm implements Xog_js_wkr, Gfo_invk, Gfo_evt_itm { popup_mnu = popup_mnu_mgr.Html_link(); kit.Set_mnu_popup(html_box, popup_mnu.Under_mnu()); } + private void When_zoom_changed(boolean clicks_is_positive) { + app.Api_root().Gui().Font().Adj(clicks_is_positive ? 1 : -1); + } public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { if (ctx.Match(k, Invk_html_img_update)) html_box.Html_js_eval_proc_as_bool (Xog_js_procs.Doc__elem_img_update , m.ReadStr("elem_id"), m.ReadStr("elem_src"), m.ReadInt("elem_width"), m.ReadInt("elem_height")); else if (ctx.Match(k, Invk_html_elem_atr_set)) html_box.Html_js_eval_proc_as_str (Xog_js_procs.Doc__atr_set , m.ReadStr("elem_id"), m.ReadStr("atr_key"), m.ReadStr("atr_val")); @@ -201,6 +205,7 @@ public class Xog_html_itm implements Xog_js_wkr, Gfo_invk, Gfo_evt_itm { else if (ctx.Match(k, Invk_scroll_page_by_id)) Scroll_page_by_id(m.ReadStr("v")); else if (ctx.Match(k, Invk_html_elem_focus)) html_box.Html_js_eval_proc_as_str(Xog_js_procs.Doc__elem_focus, m.ReadStr("v")); else if (ctx.Match(k, GfuiElemKeys.Evt_menu_detected)) When_menu_detected(); + else if (ctx.Match(k, Gfui_html.Evt_zoom_changed)) When_zoom_changed(m.ReadBool("clicks_is_positive")); else return Gfo_invk_.Rv_unhandled; return this; } diff --git a/400_xowa/src/gplx/xowa/guis/views/Xog_layout.java b/400_xowa/src/gplx/xowa/guis/views/Xog_layout.java index b6104bacf..b754ca9d7 100644 --- a/400_xowa/src/gplx/xowa/guis/views/Xog_layout.java +++ b/400_xowa/src/gplx/xowa/guis/views/Xog_layout.java @@ -79,6 +79,7 @@ public class Xog_layout implements Gfo_invk { find_bwd_btn.Adj_text(win.Find_bwd_btn()); prog_box.Adj_text(win.Prog_box()); note_box.Adj_text(win.Info_box()); + win.Tab_mgr().Tab_mgr().TextMgr().Font_(win.Url_box().TextMgr().Font()); Visible_(false, win.Find_box(), win.Find_bwd_btn(), win.Find_fwd_btn(), win.Find_close_btn()); } private Xog_win_itm win; public int Box_height_calc(Gfui_kit kit, GfuiElem url_box) { diff --git a/400_xowa/src/gplx/xowa/guis/views/Xog_layout_box.java b/400_xowa/src/gplx/xowa/guis/views/Xog_layout_box.java index 1c45fae27..3bbf833c6 100644 --- a/400_xowa/src/gplx/xowa/guis/views/Xog_layout_box.java +++ b/400_xowa/src/gplx/xowa/guis/views/Xog_layout_box.java @@ -32,6 +32,7 @@ public class Xog_layout_box implements Gfo_invk { public float Font_size() {return font_size;} public Xog_layout_box Font_size_(float v) {font_size = v; return this;} float font_size = Float_.NaN; public FontStyleAdp Font_style() {return font_style;} public Xog_layout_box Font_style_(FontStyleAdp v) {font_style = v; return this;} FontStyleAdp font_style; public byte Mode() {return mode;} public Xog_layout_box Mode_(byte v) {mode = v; return this;} private byte mode = Mode_rel; + public FontAdp To_font() {return Font_make(font_name, font_size, font_style);} public void Adj_size(Rect_ref rect) { if (w_abs > -1) rect.W_(w_abs); if (w_rel != Int_.Min_value) rect.W_(w_rel + rect.W()); if (h_abs > -1) rect.H_(h_abs); if (h_rel != Int_.Min_value) rect.H_(h_rel + rect.H()); @@ -74,7 +75,7 @@ public class Xog_layout_box implements Gfo_invk { , Invk_size_abs_ = "size_abs_", Invk_pos_abs_ = "pos_abs_", Invk_rect_abs_ = "rect_abs_", Invk_size_rel_ = "size_rel_", Invk_pos_rel_ = "pos_rel_", Invk_rect_rel_ = "rect_rel_" , Invk_text_ = "text_" , Invk_font_name_ = "font_name_", Invk_font_size_ = "font_size_", Invk_font_style_ = "font_style_", Invk_mode_ = "mode_", Invk_owner = "owner"; - FontAdp Font_make(String font_name, float font_size, FontStyleAdp font_style) { + private static FontAdp Font_make(String font_name, float font_size, FontStyleAdp font_style) { String new_font_name = font_name == null ? "Arial" : font_name; float new_font_size = Float_.IsNaN(font_size) ? 8 : font_size; FontStyleAdp new_font_style = font_style == null ? FontStyleAdp_.Plain : font_style; diff --git a/400_xowa/src/gplx/xowa/guis/views/Xog_tab_itm.java b/400_xowa/src/gplx/xowa/guis/views/Xog_tab_itm.java index f38716e65..52320deff 100644 --- a/400_xowa/src/gplx/xowa/guis/views/Xog_tab_itm.java +++ b/400_xowa/src/gplx/xowa/guis/views/Xog_tab_itm.java @@ -197,7 +197,7 @@ public class Xog_tab_itm implements Gfo_invk { this.tab_is_loading = false; } } - public void Exec_async_hdump(Xoa_app app, Xow_wiki wiki, gplx.xowa.files.gui.Xog_js_wkr js_wkr, gplx.core.threads.Gfo_thread_pool thread_pool, Xoa_page page, List_adp imgs, int[] redlink_ary) { + public void Exec_async_hdump(Xoa_app app, Xow_wiki wiki, gplx.xowa.guis.cbks.js.Xog_js_wkr js_wkr, gplx.core.threads.Gfo_thread_pool thread_pool, Xoa_page page, List_adp imgs, int[] redlink_ary) { if (imgs.Count() > 0) { Xof_file_wkr file_thread = new Xof_file_wkr ( wiki.File__orig_mgr(), wiki.File__bin_mgr(), wiki.File__mnt_mgr() 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 8ddad6f70..b929ef8ab 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 @@ -72,7 +72,7 @@ public class Xoh_html_wtr { break; case Xop_tkn_itm_.Tid_ignore: break; case Xop_tkn_itm_.Tid_html_ncr: Html_ncr(ctx, hctx, bfr, src, (Xop_amp_tkn_num)tkn); break; - case Xop_tkn_itm_.Tid_html_ref: Html_ref(ctx, hctx, bfr, src, (Xop_amp_tkn_txt)tkn); break; + case Xop_tkn_itm_.Tid_html_ref: Html_ref(ctx, hctx, bfr, src, (Xop_amp_tkn_ent)tkn); break; case Xop_tkn_itm_.Tid_hr: Hr(ctx, hctx, bfr, src, (Xop_hr_tkn)tkn); break; case Xop_tkn_itm_.Tid_apos: Apos(ctx, hctx, bfr, src, (Xop_apos_tkn)tkn); break; case Xop_tkn_itm_.Tid_lnki: lnki_wtr.Write_lnki(bfr, hctx, src, (Xop_lnki_tkn)tkn); break; @@ -101,7 +101,7 @@ public class Xoh_html_wtr { public void Html_ncr(Xop_ctx ctx, Xoh_wtr_ctx hctx, Bry_bfr bfr, byte[] src, Xop_amp_tkn_num tkn) { bfr.Add_byte(Byte_ascii.Amp).Add_byte(Byte_ascii.Hash).Add_int_variable(tkn.Val()).Add_byte(Byte_ascii.Semic); // NOTE: do not literalize, else browser may not display multi-char bytes properly; EX:   gets added as   not as {192,160}; DATE:2013-12-09 } - public void Html_ref(Xop_ctx ctx, Xoh_wtr_ctx hctx, Bry_bfr bfr, byte[] src, Xop_amp_tkn_txt tkn) { + public void Html_ref(Xop_ctx ctx, Xoh_wtr_ctx hctx, Bry_bfr bfr, byte[] src, Xop_amp_tkn_ent tkn) { if (tkn.Itm_is_custom()) // used by ; EX:< -> &xowa_lt; DATE:2014-11-07 tkn.Print_literal(bfr); else 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 904cd12dc..a807cdfc0 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 @@ -62,14 +62,15 @@ public class Xoh_html_wtr_escaper { i = match_pos - 1; break; case Xop_amp_trie_itm.Tid_num_dec: - case Xop_amp_trie_itm.Tid_num_hex: // ncr: dec/hex - boolean pass = amp_mgr.Parse_as_int(itm_tid == Xop_amp_trie_itm.Tid_num_hex, src, end, i, match_pos); - int end_pos = amp_mgr.Rslt_pos(); - if (pass) { // parse worked; embed entire ncr + case Xop_amp_trie_itm.Tid_num_hex: // ncr: dec/hex; escape if invalid + Xop_amp_mgr_rslt rslt = new Xop_amp_mgr_rslt(); + boolean pass = amp_mgr.Parse_ncr(rslt, itm_tid == Xop_amp_trie_itm.Tid_num_hex, src, end, i, match_pos); + if (pass) { // parse worked; embed entire ncr; EX: "{" + int end_pos = rslt.Pos(); bfr.Add_mid(src, i, end_pos); i = end_pos - 1; } - else // parse failed; escape and continue + else // parse failed; escape and continue; EX: "&#a!b;" bfr.Add(Gfh_entity_.Amp_bry); break; default: throw Err_.new_unhandled(itm_tid); 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 638cd59d4..0fb595b44 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 @@ -106,26 +106,26 @@ public class Xoh_make_mgr { 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_html_wtr_.Fmtr__ul__style.Bld_bry_many(tmp_bfr, gly.Box_max()); + byte[] style = Gallery_mgr_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_html_wtr_.hdump_box_w_fmtr.Bld_bry_many(tmp_bfr, gly.Box_w()); + byte[] style = Gallery_mgr_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_html_wtr_.hdump_box_w_fmtr.Bld_bry_many(tmp_bfr, gly.Img_w()); + byte[] style = Gallery_mgr_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_html_wtr_.hdump_img_pad_fmtr.Bld_bry_many(tmp_bfr, gly.Img_pad()); + byte[] style = Gallery_mgr_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 86a3a4dda..243d9b29b 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 @@ -23,7 +23,7 @@ public class Xoh_make_trie_ { , Tid__hiero_dir = 7, Tid__gallery_box_max = 8, Tid__gallery_box_w = 9, Tid__gallery_img_w = 10, Tid__gallery_img_pad = 11 , Tid__toc = 12, Tid__hdr = 13 ; - public static final byte[] + public static final byte[] Bry__dir = Bry_.new_a7("~{xowa_dir}") , Bry__img = Bry_.new_a7("xowa_img=\"") , Bry__img_style = Bry_.new_a7("xowa_img_style=\"") @@ -37,7 +37,7 @@ public class Xoh_make_trie_ { // , Bry__gallery_img_pad = Bry_.new_a7("xowa_gly_img_pad='") , Bry__toc = Bry_.new_a7("~{xowa_toc}") ; - public static final byte[] + public static final byte[] A_href_bgn = Bry_.new_a7("/wiki/File:") , Bry_img_style_bgn = Bry_.new_a7("style='width:") , Bry_img_style_end = Bry_.new_a7("px;'") 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 index 1cfcebfb7..acb860778 100644 --- 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 @@ -22,6 +22,7 @@ public class Bfr_arg__hatr_id implements Bfr_arg_clearable { private final byte[] bry; private int num; public Bfr_arg__hatr_id(byte[] atr_key, byte[] bry) {this.bry = bry; this.atr_bgn = Bfr_arg__hatr_.Bld_atr_bgn(atr_key);} public Bfr_arg__hatr_id Set(int num) {this.num = num; return this;} + public byte[] Get_id_val() {return Bry_.Add(bry, Int_.To_bry(num));} public void Bfr_arg__clear() {num = -1;} public boolean Bfr_arg__missing() {return num == -1;} public void Bfr_arg__add(Bry_bfr bfr) { diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Bfr_arg__elem__capt.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Bfr_arg__elem__capt.java new file mode 100644 index 000000000..745752fee --- /dev/null +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Bfr_arg__elem__capt.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.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.langs.htmls.*; +class Bfr_arg__elem__capt implements gplx.core.brys.Bfr_arg_clearable { + private byte[] capt; + public Bfr_arg__elem__capt() { + this.Clear(); + } + public void Capt_(byte[] v) {this.capt = v;} + public void Clear() {capt = null;} + public void Bfr_arg__clear() {this.Clear();} + public boolean Bfr_arg__missing() {return capt == null;} + public void Bfr_arg__add(Bry_bfr bfr) { // EX: '\n
  • Z
  • ' + if (Bfr_arg__missing()) return; + bfr.Add_byte_nl(); + bfr.Add(Gfh_tag_.Li_lhs_bgn); // '' + bfr.Add(capt); + bfr.Add(Gfh_tag_.Li_rhs); // '' + } +} \ No newline at end of file diff --git a/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Bfr_arg__hatr__style.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Bfr_arg__hatr__style.java new file mode 100644 index 000000000..6cca60c9f --- /dev/null +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Bfr_arg__hatr__style.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.glys; 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.bfr_args.*; +class Bfr_arg__hatr__style implements gplx.core.brys.Bfr_arg { + private final byte[] atr_bgn; + private int max_w, w; + private byte[] xtra_cls; + public Bfr_arg__hatr__style(byte[] key) { + this.atr_bgn = Bfr_arg__hatr_.Bld_atr_bgn(key); + this.Clear(); + } + public void Set_args(int max_w, int w, byte[] xtra_cls) {this.max_w = max_w; this.w = w; this.xtra_cls = xtra_cls;} + public void Clear() {max_w = 0; w = 0; xtra_cls = null;} + public void Bfr_arg__clear() {this.Clear();} + public boolean Bfr_arg__missing() {return max_w == 0 && xtra_cls == null;} + public void Bfr_arg__add(Bry_bfr bfr) { + if (Bfr_arg__missing()) return; + bfr.Add(atr_bgn); + if (max_w > 0) { + bfr.Add(Style__frag_1); + bfr.Add_int_variable(max_w); + bfr.Add(Style__frag_3); + } + if (w > 0) { + bfr.Add_byte_space(); + bfr.Add(Style__frag_2); + bfr.Add_int_variable(w); + bfr.Add(Style__frag_3); + } + if (xtra_cls != null) { + 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("_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/Bfr_arg__hatr__xogly.java b/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Bfr_arg__hatr__xogly.java new file mode 100644 index 000000000..61ffe19c9 --- /dev/null +++ b/400_xowa/src/gplx/xowa/htmls/core/wkrs/glys/Bfr_arg__hatr__xogly.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.glys; 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.bfr_args.*; +class Bfr_arg__hatr__xogly implements gplx.core.brys.Bfr_arg_clearable { + private final byte[] atr_bgn; + private int xnde_w, xnde_h, xnde_per_row; + public Bfr_arg__hatr__xogly() { + this.atr_bgn = Bfr_arg__hatr_.Bld_atr_bgn(gplx.xowa.xtns.gallery.Gallery_mgr_wtr.Bry__data_xogly); + this.Clear(); + } + public void Set_args(int xnde_w, int xnde_h, int xnde_per_row) { + this.xnde_w = xnde_w; this.xnde_h = xnde_h; this.xnde_per_row = xnde_per_row; + } + public void Clear() {xnde_w = xnde_h = xnde_per_row = -1;} + public void Bfr_arg__clear() {this.Clear();} + public boolean Bfr_arg__missing() {return false;} // NOTE: do not check if "xnde_w == -1 && xnde_h == -1 && xnde_per_row == -1" else will fail hzip diff; DATE:2016-07-02 + public void Bfr_arg__add(Bry_bfr bfr) { + if (Bfr_arg__missing()) return; + bfr.Add(atr_bgn); + bfr.Add_int_variable(xnde_w).Add_byte_pipe(); + bfr.Add_int_variable(xnde_h).Add_byte_pipe(); + bfr.Add_int_variable(xnde_per_row); + bfr.Add_byte_quote(); + } +} \ No newline at end of file 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 index c7435e6e5..43326484a 100644 --- 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 @@ -22,31 +22,38 @@ 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 { // FUTURE:add gallerycaption 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 Ul_style_max_w() {return ul_style_max_w;} private int ul_style_max_w; - public int Ul_style_w() {return ul_style_w;} private int ul_style_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 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 Xnde_w() {return xnde_w;} private int xnde_w; + public int Xnde_h() {return xnde_h;} private int xnde_h; + public int Xnde_per_row() {return xnde_per_row;} private int xnde_per_row; + public int Ul_style_max_w() {return ul_style_max_w;} private int ul_style_max_w; + public int Ul_style_w() {return ul_style_w;} private int ul_style_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 Capt_bgn() {return capt_bgn;} private int capt_bgn; + public int Capt_end() {return capt_end;} private int capt_end; + 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.ul_style_max_w = ul_style_w = 0; this.xtra_atr_bgn = xtra_atr_end = xtra_cls_bgn = xtra_cls_end = xtra_style_bgn = xtra_style_end = -1; + this.xnde_per_row = xnde_w = xnde_h = capt_bgn = capt_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_xogly(src, tag_rdr, ul_head)) return false; 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); @@ -55,10 +62,16 @@ public class Xoh_gly_grp_data implements Gfh_class_parser_wkr, Gfh_style_wkr { / li_head = tag_rdr.Tag__peek_fwd_head(); if (li_head.Name_id() != Gfh_tag_.Id__li) break; // no more
  • ; break; // FUTURE: galleries with gallerycaption will cause gallery to write raw; instate code below, but would need to then serialize "gallerycaption"; PAGE:en.d:A DATE:2016-06-24 - // if (li_head.Atrs__cls_has(Atr__cls__gallerycaption)) {// skip
  • A
  • - // li_head = tag_rdr.Tag__move_fwd_head(); - // li_head = tag_rdr.Tag__peek_fwd_head(); - // } + if (li_head.Atrs__cls_has(Atr__cls__gallerycaption)) {// skip
  • A
  • + // extract caption between
  • + li_head = tag_rdr.Tag__move_fwd_head(); + this.capt_bgn = li_head.Src_end(); + Gfh_tag li_tail = tag_rdr.Tag__move_fwd_tail(li_head.Name_id()); + this.capt_end = li_tail.Src_bgn(); + + // move tag_rdr to next
  • + li_head = tag_rdr.Tag__peek_fwd_head(); + } 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(); @@ -71,6 +84,25 @@ public class Xoh_gly_grp_data implements Gfh_class_parser_wkr, Gfh_style_wkr { / hdoc_wkr.On_gly(this); return true; } + private boolean Parse_xogly(byte[] src, Gfh_tag_rdr tag_rdr, Gfh_tag ul_head) { + Gfh_atr atr = ul_head.Atrs__get_by_or_empty(Gallery_mgr_wtr.Bry__data_xogly); + byte[] val = atr.Val(); int val_len = val.length; + if (val_len == 0) return true; // ignore missing "data-xogly" + int pos = 0; + for (int i = 0; i < 3; ++i) { + int bgn = pos; + int end = Bry_find_.Find_fwd(val, Byte_ascii.Pipe, bgn + 1, val_len); + if (end == Bry_find_.Not_found) end = val_len; + int num = Bry_.To_int_or(val, bgn, end, -1); + pos = end + 1; + switch (i) { + case 0: xnde_w = num; break; + case 1: xnde_h = num; break; + case 2: xnde_per_row = num; break; + } + } + 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); @@ -89,9 +121,7 @@ public class Xoh_gly_grp_data implements Gfh_class_parser_wkr, Gfh_style_wkr { / 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 (atrs_ignored.Get_by_bry(hatr.Key()) == null) { if (xtra_atr_bgn == -1) this.xtra_atr_bgn = hatr.Atr_bgn(); this.xtra_atr_end = hatr.Atr_end(); } @@ -104,7 +134,7 @@ public class Xoh_gly_grp_data implements Gfh_class_parser_wkr, Gfh_style_wkr { / else if (Bry_.Match(src, val_bgn, val_bgn + Atr__cls__mw_gallery.length, Atr__cls__mw_gallery) // starts with 'mw-gallery-' && val_pos == 8) { // occurs after "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); + this.gly_tid = Gallery_mgr_base_.To_tid_or(src, tid_bgn, val_end, Byte_.Max_value_127); return true; } else { @@ -135,8 +165,16 @@ public class Xoh_gly_grp_data implements Gfh_class_parser_wkr, Gfh_style_wkr { / 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") - // , Atr__cls__gallerycaption = Bry_.new_a7("gallerycaption") + 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") ; + public static final byte[] Atr__cls__gallerycaption = Bry_.new_a7("gallerycaption"); + private static final Hash_adp_bry atrs_ignored = Make_atrs_ignored(); + private static Hash_adp_bry Make_atrs_ignored() { + Hash_adp_bry rv = Hash_adp_bry.ci_a7(); + rv.Add_as_key_and_val(Gfh_atr_.Bry__class); + rv.Add_as_key_and_val(Gfh_atr_.Bry__style); + rv.Add_as_key_and_val(Gallery_mgr_wtr.Bry__data_xogly); + return rv; + } } 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 index 46f952348..28a994bca 100644 --- 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 @@ -20,21 +20,26 @@ 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_id("xogly_li_"); - private final Bfr_arg__hatr_gly_style ul_style = new Bfr_arg__hatr_gly_style(Gfh_atr_.Bry__style); + private final Bfr_arg__hatr_id ul_id = Bfr_arg__hatr_id.New_id("xogly_ul_"); + private final Bfr_arg__hatr__style ul_style = new Bfr_arg__hatr__style(Gfh_atr_.Bry__style); + private final Bfr_arg__hatr__xogly ul_xogly = new Bfr_arg__hatr__xogly(); + private final Bfr_arg__elem__capt li_capt = new Bfr_arg__elem__capt(); 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}; + arg_ary = new Bfr_arg_clearable[] {ul_id, ul_xogly, li_capt}; } - public void Init(boolean mode_is_diff, int id, byte[] cls, int ul_style_max_w, int ul_style_w, byte[] xtra_cls, byte[] xtra_style_bry, byte[] xtra_atr_bry, Xoh_gly_itm_wtr[] ary) { + public void Init(boolean mode_is_diff, int id, int xnde_w, int xnde_h, int xnde_per_row, byte[] cls, int ul_style_max_w, int ul_style_w + , byte[] xtra_cls, byte[] xtra_style_bry, byte[] xtra_atr_bry, byte[] capt, Xoh_gly_itm_wtr[] ary) { this.Clear(); if (!mode_is_diff) ul_id.Set(id); + ul_xogly.Set_args(xnde_w, xnde_h, xnde_per_row); 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 + li_capt.Capt_(capt); itm_list_wtr.Init(ary); ul_style.Set_args(ul_style_max_w, ul_style_w, xtra_style_bry); } @@ -48,11 +53,11 @@ class Xoh_gly_grp_wtr implements Bfr_arg { 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); + fmtr.Bld_bfr_many(bfr, ul_id, ul_xogly, ul_cls, xtra_cls, ul_style, xtra_atr_bry, li_capt, 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"); + ( "~{capt}~{itms}~{ul_nl}" + ), "id", "xogly", "cls", "xtra_cls", "style", "xtra_atr", "capt", "itms", "ul_nl"); } class Xoh_gly_itm_list_wtr implements Bfr_arg { private Xoh_gly_itm_wtr[] ary; private int ary_len; @@ -72,40 +77,3 @@ class Xoh_gly_itm_list_wtr implements Bfr_arg { } } } -class Bfr_arg__hatr_gly_style implements Bfr_arg { - private final byte[] atr_bgn; - private int max_w, w; - 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 max_w, int w, byte[] xtra_cls) {this.max_w = max_w; this.w = w; this.xtra_cls = xtra_cls;} - public void Clear() {max_w = 0; w = 0; xtra_cls = null;} - public void Bfr_arg__clear() {this.Clear();} - public boolean Bfr_arg__missing() {return max_w == 0 && xtra_cls == null;} - public void Bfr_arg__add(Bry_bfr bfr) { - if (Bfr_arg__missing()) return; - bfr.Add(atr_bgn); - if (max_w > 0) { - bfr.Add(Style__frag_1); - bfr.Add_int_variable(max_w); - bfr.Add(Style__frag_3); - } - if (w > 0) { - bfr.Add_byte_space(); - bfr.Add(Style__frag_2); - bfr.Add_int_variable(w); - bfr.Add(Style__frag_3); - } - if (xtra_cls != null) { - 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("_width:") - , Style__frag_3 = Bry_.new_a7("px;") - ; -} 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 index 11cbd7a47..945752413 100644 --- 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 @@ -17,9 +17,8 @@ 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();} +public class Xoh_gly_html__dump__tst { + @Before public void init() {fxt.Clear();} private final Xoh_make_fxt fxt = new Xoh_make_fxt(); @Test public void Basic() { fxt.Test__html(String_.Concat_lines_nl_skip_last ( "" @@ -27,7 +26,7 @@ public class Xoh_gly_html__dump__tst { , "File:B.png|B1" , "" ), String_.Concat_lines_nl_skip_last - ( "