diff --git a/100_core/src/gplx/core/brys/Bry_bfr_mkr.java b/100_core/src/gplx/core/brys/Bry_bfr_mkr.java index da5fe6d23..0239140a6 100644 --- a/100_core/src/gplx/core/brys/Bry_bfr_mkr.java +++ b/100_core/src/gplx/core/brys/Bry_bfr_mkr.java @@ -16,13 +16,11 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package gplx.core.brys; import gplx.*; import gplx.core.*; -public class Bry_bfr_mkr { - private final Bry_bfr_mkr_mgr mkr_b128 = new Bry_bfr_mkr_mgr(Tid_b128, 128); - public Bry_bfr Get_b128() {return mkr_b128.Get();} - public Bry_bfr Get_b512() {return mkr_b512.Get();} private final Bry_bfr_mkr_mgr mkr_b512 = new Bry_bfr_mkr_mgr(Tid_b512, 512); - public Bry_bfr Get_k004() {return mkr_k004.Get();} private final Bry_bfr_mkr_mgr mkr_k004 = new Bry_bfr_mkr_mgr(Tid_k004, 4 * Io_mgr.Len_kb); - public Bry_bfr Get_m001() {return mkr_m001.Get();} private final Bry_bfr_mkr_mgr mkr_m001 = new Bry_bfr_mkr_mgr(Tid_m001, 1 * Io_mgr.Len_mb); - public void Rls(Bry_bfr v) {v.Mkr_rls();} +public class Bry_bfr_mkr { + public Bry_bfr Get_b128() {return mkr_b128.Get();} private final Bry_bfr_mkr_mgr mkr_b128 = new Bry_bfr_mkr_mgr(Tid_b128, 128); + public Bry_bfr Get_b512() {return mkr_b512.Get();} private final Bry_bfr_mkr_mgr mkr_b512 = new Bry_bfr_mkr_mgr(Tid_b512, 512); + public Bry_bfr Get_k004() {return mkr_k004.Get();} private final Bry_bfr_mkr_mgr mkr_k004 = new Bry_bfr_mkr_mgr(Tid_k004, 4 * Io_mgr.Len_kb); + public Bry_bfr Get_m001() {return mkr_m001.Get();} private final Bry_bfr_mkr_mgr mkr_m001 = new Bry_bfr_mkr_mgr(Tid_m001, 1 * Io_mgr.Len_mb); public void Clear() { for (byte i = Tid_b128; i <= Tid_m001; i++) mkr(i).Clear(); diff --git a/100_core/src/gplx/core/brys/Bry_bfr_mkr_mgr.java b/100_core/src/gplx/core/brys/Bry_bfr_mkr_mgr.java index 49a09977d..556b3b25c 100644 --- a/100_core/src/gplx/core/brys/Bry_bfr_mkr_mgr.java +++ b/100_core/src/gplx/core/brys/Bry_bfr_mkr_mgr.java @@ -18,15 +18,15 @@ along with this program. If not, see . package gplx.core.brys; import gplx.*; import gplx.core.*; public class Bry_bfr_mkr_mgr { private final Object thread_lock = new Object(); + private final byte mgr_id; private final int reset; private Bry_bfr[] used = Bry_bfr_.Ary_empty; private int used_len = 0, used_max = 0; - private int[] free; private int free_len; private int reset; + private int[] free; private int free_len; public Bry_bfr_mkr_mgr(byte mgr_id, int reset) {// NOTE: random IndexOutOfBounds errors in Get around free[--free_len] with free_len being -1; put member variable initialization within thread_lock to try to avoid; DATE:2014-09-21 this.mgr_id = mgr_id; this.reset = reset; this.free = Int_.Ary_empty; this.free_len = 0; } - public byte Mgr_id() {return mgr_id;} private byte mgr_id; public Bry_bfr Get() { synchronized (thread_lock) { Bry_bfr rv = null; int rv_idx = -1; @@ -62,7 +62,7 @@ public class Bry_bfr_mkr_mgr { for (int i = 0; i < used_max; i++) { Bry_bfr itm = used[i]; if (itm != null) { - if (!itm.Mkr_idx_is_null()) throw Err_.new_wo_type("failed to clear bfr", "idx", Int_.To_str(i)); + if (!itm.Mkr_idx_is_null()) throw Err_.new_wo_type("failed to clear bfr", "mgr_id", mgr_id, "idx", Int_.To_str(i)); itm.Clear(); } used[i] = null; diff --git a/100_core/src/gplx/core/brys/Bry_rdr.java b/100_core/src/gplx/core/brys/Bry_rdr.java index 72a768d64..1a9a7b23c 100644 --- a/100_core/src/gplx/core/brys/Bry_rdr.java +++ b/100_core/src/gplx/core/brys/Bry_rdr.java @@ -19,6 +19,7 @@ package gplx.core.brys; import gplx.*; import gplx.core.*; import gplx.core.errs.*; import gplx.core.btries.*; public class Bry_rdr { private final gplx.core.primitives.Int_obj_ref pos_ref = gplx.core.primitives.Int_obj_ref.New_neg1(); + private final Btrie_rv trv = new Btrie_rv(); public byte[] Src() {return src;} protected byte[] src; public int Src_end() {return src_end;} protected int src_end; public int Pos() {return pos;} protected int pos; @@ -150,8 +151,8 @@ public class Bry_rdr { byte rv = Chk_or(trie, Byte_.Max_value_127); if (rv == Byte_.Max_value_127) err_wkr.Fail("failed trie check", "mid", String_.new_u8(Bry_.Mid_by_len_safe(src, pos, 16))); } - public Object Chk_trie_as_obj(Btrie_slim_mgr trie) { - Object rv = trie.Match_bgn(src, pos, src_end); if (rv == null) err_wkr.Fail("failed trie check", "mid", String_.new_u8(Bry_.Mid_by_len_safe(src, pos, 16))); + public Object Chk_trie_as_obj(Btrie_rv trv, Btrie_slim_mgr trie) { + Object rv = trie.Match_at(trv, src, pos, src_end); if (rv == null) err_wkr.Fail("failed trie check", "mid", String_.new_u8(Bry_.Mid_by_len_safe(src, pos, 16))); return rv; } public byte Chk_or(Btrie_slim_mgr trie, byte or) {return Chk_or(trie, pos, src_end, or);} @@ -161,9 +162,9 @@ public class Bry_rdr { return rv; } public byte Chk_or(Btrie_slim_mgr trie, int itm_bgn, int itm_end, byte or) { - Object rv_obj = trie.Match_bgn(src, itm_bgn, itm_end); + Object rv_obj = trie.Match_at(trv, src, itm_bgn, itm_end); if (rv_obj == null) return or; - pos = trie.Match_pos(); + pos = trv.Pos(); return ((gplx.core.primitives.Byte_obj_val)rv_obj).Val(); } @gplx.Virtual public Bry_rdr Skip_ws() { diff --git a/100_core/src/gplx/core/btries/Btrie_bwd_mgr.java b/100_core/src/gplx/core/btries/Btrie_bwd_mgr.java index 8fa6f491f..2abe2d271 100644 --- a/100_core/src/gplx/core/btries/Btrie_bwd_mgr.java +++ b/100_core/src/gplx/core/btries/Btrie_bwd_mgr.java @@ -23,6 +23,37 @@ public class Btrie_bwd_mgr { Object rv = Match(src[bgn_pos], src, bgn_pos, end_pos); return rv == null ? null : match_pos - bgn_pos == end_pos - bgn_pos ? rv : null; } + + public Object Match_at(Btrie_rv rv, byte[] src, int bgn_pos, int end_pos) {return Match_at_w_b0(rv, src[bgn_pos], src, bgn_pos, end_pos);} + public Object Match_at_w_b0(Btrie_rv rv, byte b, byte[] src, int bgn_pos, int end_pos) { + // NOTE: bgn, end follows same semantics as fwd where bgn >= & end < except reversed: bgn <= & end >; EX: "abcde" should pass 5, -1 + 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) { // nxt does not have b; return rv_obj; + rv.Init(rv_pos, rv_obj); + return rv_obj; + } + --cur_pos; + if (nxt.Ary_is_empty()) { // nxt is leaf; return nxt.Val() (which should be non-null) + rv_obj = nxt.Val(); + rv.Init(cur_pos, rv_obj); + return rv_obj; + } + 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 == end_pos) { // increment cur_pos and exit if end_pos + rv.Init(rv_pos, rv_obj); + return rv_obj; + } + b = src[cur_pos]; + cur = nxt; + } + } + public Object Match_bgn(byte[] src, int bgn_pos, int end_pos) {return Match(src[bgn_pos], src, bgn_pos, end_pos);} public Object Match(byte b, byte[] src, int bgn_pos, int end_pos) { // NOTE: bgn, end follows same semantics as fwd where bgn >= & end < except reversed: bgn <= & end >; EX: "abcde" should pass 5, -1 diff --git a/100_core/src/gplx/core/btries/Btrie_fast_mgr.java b/100_core/src/gplx/core/btries/Btrie_fast_mgr.java index 649916bea..9dd0da5da 100644 --- a/100_core/src/gplx/core/btries/Btrie_fast_mgr.java +++ b/100_core/src/gplx/core/btries/Btrie_fast_mgr.java @@ -22,12 +22,7 @@ public class Btrie_fast_mgr { public boolean CaseAny() {return root.CaseAny();} public Btrie_fast_mgr CaseAny_(boolean v) {root.CaseAny_(v); return this;} public int Match_pos() {return match_pos;} private int match_pos; -// Btrie_rv Match_at_w_b0_and_rls(byte[] src, int bgn, int end) {return Match_at_w_b0_and_rls(src[bgn], src, bgn, end);} -// Btrie_rv Match_at_w_b0_and_rls(byte b, byte[] src, int bgn_pos, int src_end) { -// Btrie_rv rv = ((Btrie_rv)Btrie_rv.Pool__mgr.Get_safe()); -// Match_at_w_b0(rv, b, src, bgn_pos, src_end); -// return rv; -// } + public Object Match_at(Btrie_rv rv, byte[] src, int bgn_pos, int end_pos) {return Match_at_w_b0(rv, src[bgn_pos], src, bgn_pos, end_pos);} public Object Match_at_w_b0(Btrie_rv rv, byte b, byte[] src, int bgn_pos, int src_end) { Object rv_obj = null; int rv_pos = bgn_pos; diff --git a/100_core/src/gplx/core/btries/Btrie_mgr.java b/100_core/src/gplx/core/btries/Btrie_mgr.java index 2fe6c6bf0..f05d435ed 100644 --- a/100_core/src/gplx/core/btries/Btrie_mgr.java +++ b/100_core/src/gplx/core/btries/Btrie_mgr.java @@ -18,6 +18,7 @@ along with this program. If not, see . package gplx.core.btries; import gplx.*; import gplx.core.*; public interface Btrie_mgr { int Match_pos(); + Object Match_at(Btrie_rv rv, byte[] src, int bgn_pos, int end_pos); Object Match_bgn(byte[] src, int bgn_pos, int end_pos); Btrie_mgr Add_obj(String key, Object val); Btrie_mgr Add_obj(byte[] key, Object val); 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 86e9ed450..a6be5ecc0 100644 --- a/100_core/src/gplx/core/btries/Btrie_slim_mgr.java +++ b/100_core/src/gplx/core/btries/Btrie_slim_mgr.java @@ -31,7 +31,7 @@ public class Btrie_slim_mgr implements Btrie_mgr { while (true) { Btrie_slim_itm nxt = cur.Ary_find(b); if (nxt == null) { - rv.Init(cur_pos, rv_obj); // nxt does not hav b; return rv_obj; + rv.Init(rv_pos, rv_obj); // nxt does not have b; return rv_obj; return rv_obj; } ++cur_pos; @@ -79,6 +79,14 @@ public class Btrie_slim_mgr implements Btrie_mgr { Object rv_obj = Match_bgn(src, bgn, end); return rv_obj == null ? or : ((Byte_obj_val)rv_obj).Val(); } + public byte Match_byte_or(Btrie_rv trv, byte b, byte[] src, int bgn, int end, byte or) { + Object rv_obj = Match_at_w_b0(trv, b, src, bgn, end); + return rv_obj == null ? or : ((Byte_obj_val)rv_obj).Val(); + } + public byte Match_byte_or(Btrie_rv trv, byte[] src, int bgn, int end, byte or) { + Object rv_obj = Match_at(trv, src, bgn, end); + return rv_obj == null ? or : ((Byte_obj_val)rv_obj).Val(); + } public Btrie_slim_mgr Add_bry_tid(byte[] bry, byte tid) {return (Btrie_slim_mgr)Add_obj(bry, Byte_obj_val.new_(tid));} public Btrie_slim_mgr Add_bry_int(byte[] key, int val) {return (Btrie_slim_mgr)Add_obj(key, Int_obj_val.new_(val));} public Btrie_slim_mgr Add_str_byte(String key, byte val) {return (Btrie_slim_mgr)Add_obj(Bry_.new_u8(key), Byte_obj_val.new_(val));} diff --git a/100_core/src/gplx/core/btries/Btrie_u8_mgr.java b/100_core/src/gplx/core/btries/Btrie_u8_mgr.java index 3934876fd..7a7d6243c 100644 --- a/100_core/src/gplx/core/btries/Btrie_u8_mgr.java +++ b/100_core/src/gplx/core/btries/Btrie_u8_mgr.java @@ -24,6 +24,37 @@ public class Btrie_u8_mgr implements Btrie_mgr { this.root = new Btrie_u8_itm(Bry_.Empty, null); } public int Count() {return count;} private int count; + public Object Match_at(Btrie_rv rv, byte[] src, int bgn_pos, int end_pos) {return Match_at_w_b0(rv, src[bgn_pos], src, bgn_pos, end_pos);} + public Object Match_at_w_b0(Btrie_rv rv, byte b, byte[] src, int bgn_pos, int end_pos) { + Object rv_obj = null; + int rv_pos = bgn_pos; + int cur_pos = bgn_pos; + Btrie_u8_itm cur = root; + while (true) { + int c_len = Utf8_.Len_of_char_by_1st_byte(b); + int c_end = cur_pos + c_len; + Btrie_u8_itm nxt = cur.Nxts_find(src, cur_pos, c_end, true); + if (nxt == null) { + rv.Init(rv_pos, rv_obj); // nxts does not have key; return rv_obj; + return rv_obj; + } + cur_pos = c_end; + if (nxt.Nxts_is_empty()) { // nxt is leaf; return nxt.Val() (which should be non-null) + rv_obj = nxt.Val(); + rv.Init(cur_pos, rv_obj); + return rv_obj; + } + 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 == end_pos) { // increment cur_pos and exit if end + rv.Init(rv_pos, rv_obj); + return rv_obj; + } + b = src[cur_pos]; + cur = nxt; + } + } + public int Match_pos() {return match_pos;} private int match_pos; public Object Match_bgn(byte[] src, int bgn_pos, int end_pos) {return Match_bgn_w_byte(src[bgn_pos], src, bgn_pos, end_pos);} public Object Match_bgn_w_byte(byte b, byte[] src, int bgn_pos, int end_pos) { diff --git a/100_core/src/gplx/core/threads/utils/Gfo_blocking_queue.java b/100_core/src/gplx/core/threads/utils/Gfo_blocking_queue.java new file mode 100644 index 000000000..08d33be03 --- /dev/null +++ b/100_core/src/gplx/core/threads/utils/Gfo_blocking_queue.java @@ -0,0 +1,35 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.core.threads.utils; import gplx.*; import gplx.core.*; import gplx.core.threads.*; +import java.util.concurrent.ArrayBlockingQueue; +public class Gfo_blocking_queue { + private final ArrayBlockingQueue queue; + public Gfo_blocking_queue(int capacity) { + this.capacity = capacity; + this.queue = new ArrayBlockingQueue(capacity); + } + public int Capacity() {return capacity;} private final int capacity; + public void Put(Object o) { + try {queue.put(o);} + catch (InterruptedException e) {throw Err_.new_exc(e, "threads", "put interrupted");} + } + public Object Take() { + try {return queue.take();} + catch (InterruptedException e) {throw Err_.new_exc(e, "threads", "take interrupted");} + } +} diff --git a/100_core/src/gplx/core/threads/utils/Gfo_countdown_latch.java b/100_core/src/gplx/core/threads/utils/Gfo_countdown_latch.java new file mode 100644 index 000000000..1845fa8ee --- /dev/null +++ b/100_core/src/gplx/core/threads/utils/Gfo_countdown_latch.java @@ -0,0 +1,32 @@ +/* +XOWA: the XOWA Offline Wiki Application +Copyright (C) 2012 gnosygnu@gmail.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +*/ +package gplx.core.threads.utils; import gplx.*; import gplx.core.*; import gplx.core.threads.*; +import java.util.concurrent.CountDownLatch; +public class Gfo_countdown_latch { + private final CountDownLatch latch; + public Gfo_countdown_latch(int count) { + latch = new CountDownLatch(count); + } + public void Countdown() { + latch.countDown(); + } + public void Await() { + try {latch.await();} + catch (InterruptedException e) {throw Err_.new_exc(e, "threads", "await interrupted");} + } +} diff --git a/140_dbs/src/gplx/dbs/Db_conn.java b/140_dbs/src/gplx/dbs/Db_conn.java index 08effb008..5714b79c6 100644 --- a/140_dbs/src/gplx/dbs/Db_conn.java +++ b/140_dbs/src/gplx/dbs/Db_conn.java @@ -39,6 +39,7 @@ public class Db_conn { public void Env_vacuum() {Exec_sql_plog_ntx("vacuuming: url=" + this.Conn_info().Db_api(), "VACUUM;");} public void Meta_tbl_create(Dbmeta_tbl_itm meta) {engine.Meta_tbl_create(meta); engine.Meta_idx_create(Gfo_usr_dlg_.Noop, meta.Idxs().To_ary());} public void Meta_tbl_delete(String tbl) {engine.Meta_tbl_delete(tbl);} + public void Meta_tbl_remake(Db_tbl tbl) {engine.Meta_tbl_delete(tbl.Tbl_name()); tbl.Create_tbl();} public void Meta_tbl_remake(Dbmeta_tbl_itm meta) {engine.Meta_tbl_delete(meta.Name()); engine.Meta_tbl_create(meta);} public void Meta_idx_assert(String tbl, String suffix, String... flds) {if (engine.Meta_idx_exists(tbl + "__" + suffix)) return; this.Meta_idx_create(tbl, suffix, flds);} public void Meta_idx_assert(String tbl, String suffix, Dbmeta_idx_fld... flds) {if (engine.Meta_idx_exists(tbl + "__" + suffix)) return; this.Meta_idx_create(tbl, suffix, flds);} diff --git a/140_dbs/src/gplx/dbs/Db_conn_bldr.java b/140_dbs/src/gplx/dbs/Db_conn_bldr.java index 095344b5d..1afd9c611 100644 --- a/140_dbs/src/gplx/dbs/Db_conn_bldr.java +++ b/140_dbs/src/gplx/dbs/Db_conn_bldr.java @@ -17,26 +17,33 @@ along with this program. If not, see . */ package gplx.dbs; import gplx.*; public class Db_conn_bldr { + private final Object thread_lock = new Object(); // LOCK:synchronized else random failures in Schema_mgr due to diff conn pointing to same db; DATE:2016-07-12 private Db_conn_bldr_wkr wkr; public void Reg_default_sqlite() {wkr = Db_conn_bldr_wkr__sqlite.Instance; wkr.Clear_for_tests();} public void Reg_default_mem() {wkr = Db_conn_bldr_wkr__mem.Instance; wkr.Clear_for_tests();} - public boolean Exists(Io_url url) {return wkr.Exists(url);} - public Db_conn Get(Io_url url) {return wkr.Get(url);} - public Db_conn New(Io_url url) {return wkr.New(url);} + public boolean Exists(Io_url url) {synchronized (thread_lock) {return wkr.Exists(url);}} + public Db_conn Get(Io_url url) {synchronized (thread_lock) {return wkr.Get(url);}} + public Db_conn New(Io_url url) {synchronized (thread_lock) {return wkr.New(url);}} public Db_conn_bldr_data Get_or_new(Io_url url) { - boolean exists = wkr.Exists(url); - Db_conn conn = exists ? Get(url) : New(url); - return new Db_conn_bldr_data(conn, exists); + synchronized (thread_lock) { + boolean exists = wkr.Exists(url); + Db_conn conn = exists ? Get(url) : New(url); + return new Db_conn_bldr_data(conn, exists); + } } public Db_conn Get_or_noop(Io_url url) { - Db_conn rv = wkr.Get(url); - return rv == null ? Db_conn_.Noop : rv; + synchronized (thread_lock) { + Db_conn rv = wkr.Get(url); + return rv == null ? Db_conn_.Noop : rv; + } } public Db_conn Get_or_autocreate(boolean autocreate, Io_url url) { - boolean exists = wkr.Exists(url); - if (exists) return Get(url); - if (autocreate) return New(url); - else throw Err_.new_("dbs", "db does not exist", "url", url.Raw()); + synchronized (thread_lock) { + boolean exists = wkr.Exists(url); + if (exists) return Get(url); + if (autocreate) return New(url); + else throw Err_.new_("dbs", "db does not exist", "url", url.Raw()); + } } public static final Db_conn_bldr Instance = new Db_conn_bldr(); Db_conn_bldr() {} } diff --git a/140_dbs/src/gplx/dbs/metas/parsers/Dbmeta_fld_wkr__base.java b/140_dbs/src/gplx/dbs/metas/parsers/Dbmeta_fld_wkr__base.java index 69142dabf..6c262503c 100644 --- a/140_dbs/src/gplx/dbs/metas/parsers/Dbmeta_fld_wkr__base.java +++ b/140_dbs/src/gplx/dbs/metas/parsers/Dbmeta_fld_wkr__base.java @@ -19,7 +19,7 @@ package gplx.dbs.metas.parsers; import gplx.*; import gplx.dbs.*; import gplx.db import gplx.core.brys.*; import gplx.core.btries.*; abstract class Dbmeta_fld_wkr__base { private byte[] hook; - private final Btrie_slim_mgr words_trie = Btrie_slim_mgr.ci_a7(); + private final Btrie_slim_mgr words_trie = Btrie_slim_mgr.ci_a7(); private int words_len; @gplx.Virtual public int Tid() {return Tid_other;} public void Ctor(byte[] hook, byte[]... words_ary) { @@ -46,47 +46,47 @@ class Dbmeta_fld_wkr__end_comma extends Dbmeta_fld_wkr__base { public Dbmeta_fld_wkr__end_comma() {this.Ctor(Hook);} @Override public int Tid() {return Tid_end_comma;} @Override protected void When_match(Dbmeta_fld_itm fld) {} - private static final byte[] Hook = Bry_.new_a7(","); - public static final Dbmeta_fld_wkr__end_comma Instance = new Dbmeta_fld_wkr__end_comma(); + private static final byte[] Hook = Bry_.new_a7(","); + public static final Dbmeta_fld_wkr__end_comma Instance = new Dbmeta_fld_wkr__end_comma(); } class Dbmeta_fld_wkr__end_paren extends Dbmeta_fld_wkr__base { public Dbmeta_fld_wkr__end_paren() {this.Ctor(Hook);} @Override public int Tid() {return Tid_end_paren;} @Override protected void When_match(Dbmeta_fld_itm fld) {} - private static final byte[] Hook = Bry_.new_a7(")"); - public static final Dbmeta_fld_wkr__end_paren Instance = new Dbmeta_fld_wkr__end_paren(); + private static final byte[] Hook = Bry_.new_a7(")"); + public static final Dbmeta_fld_wkr__end_paren Instance = new Dbmeta_fld_wkr__end_paren(); } class Dbmeta_fld_wkr__nullable_null extends Dbmeta_fld_wkr__base { public Dbmeta_fld_wkr__nullable_null() {this.Ctor(Hook);} @Override protected void When_match(Dbmeta_fld_itm fld) { fld.Nullable_tid_(Dbmeta_fld_itm.Nullable_null); } - private static final byte[] Hook = Bry_.new_a7("null"); - public static final Dbmeta_fld_wkr__nullable_null Instance = new Dbmeta_fld_wkr__nullable_null(); + private static final byte[] Hook = Bry_.new_a7("null"); + public static final Dbmeta_fld_wkr__nullable_null Instance = new Dbmeta_fld_wkr__nullable_null(); } class Dbmeta_fld_wkr__nullable_not extends Dbmeta_fld_wkr__base { public Dbmeta_fld_wkr__nullable_not() {this.Ctor(Hook, Bry_null);} @Override protected void When_match(Dbmeta_fld_itm fld) { fld.Nullable_tid_(Dbmeta_fld_itm.Nullable_not_null); } - private static final byte[] Hook = Bry_.new_a7("not"), Bry_null = Bry_.new_a7("null"); - public static final Dbmeta_fld_wkr__nullable_not Instance = new Dbmeta_fld_wkr__nullable_not(); + private static final byte[] Hook = Bry_.new_a7("not"), Bry_null = Bry_.new_a7("null"); + public static final Dbmeta_fld_wkr__nullable_not Instance = new Dbmeta_fld_wkr__nullable_not(); } class Dbmeta_fld_wkr__primary_key extends Dbmeta_fld_wkr__base { public Dbmeta_fld_wkr__primary_key() {this.Ctor(Hook, Bry_key);} @Override protected void When_match(Dbmeta_fld_itm fld) { fld.Primary_y_(); } - private static final byte[] Hook = Bry_.new_a7("primary"), Bry_key = Bry_.new_a7("key"); - public static final Dbmeta_fld_wkr__primary_key Instance = new Dbmeta_fld_wkr__primary_key(); + private static final byte[] Hook = Bry_.new_a7("primary"), Bry_key = Bry_.new_a7("key"); + public static final Dbmeta_fld_wkr__primary_key Instance = new Dbmeta_fld_wkr__primary_key(); } class Dbmeta_fld_wkr__autonumber extends Dbmeta_fld_wkr__base { public Dbmeta_fld_wkr__autonumber() {this.Ctor(Hook);} @Override protected void When_match(Dbmeta_fld_itm fld) { fld.Autonum_y_(); } - private static final byte[] Hook = Bry_.new_a7("autoincrement"); - public static final Dbmeta_fld_wkr__autonumber Instance = new Dbmeta_fld_wkr__autonumber(); + private static final byte[] Hook = Bry_.new_a7("autoincrement"); + public static final Dbmeta_fld_wkr__autonumber Instance = new Dbmeta_fld_wkr__autonumber(); } class Dbmeta_fld_wkr__default extends Dbmeta_fld_wkr__base { public Dbmeta_fld_wkr__default() {this.Ctor(Hook);} @@ -143,6 +143,6 @@ class Dbmeta_fld_wkr__default extends Dbmeta_fld_wkr__base { return String_.new_a7(src, bgn, end); } @Override protected void When_match(Dbmeta_fld_itm fld) {} - private static final byte[] Hook = Bry_.new_a7("default"); - public static final Dbmeta_fld_wkr__default Instance = new Dbmeta_fld_wkr__default(); + private static final byte[] Hook = Bry_.new_a7("default"); + public static final Dbmeta_fld_wkr__default Instance = new Dbmeta_fld_wkr__default(); } diff --git a/140_dbs/src/gplx/dbs/metas/parsers/Dbmeta_parser__fld.java b/140_dbs/src/gplx/dbs/metas/parsers/Dbmeta_parser__fld.java index e16ffee5b..e24c8d13a 100644 --- a/140_dbs/src/gplx/dbs/metas/parsers/Dbmeta_parser__fld.java +++ b/140_dbs/src/gplx/dbs/metas/parsers/Dbmeta_parser__fld.java @@ -19,6 +19,7 @@ package gplx.dbs.metas.parsers; import gplx.*; import gplx.dbs.*; import gplx.db import gplx.core.brys.*; import gplx.core.btries.*; import gplx.dbs.engines.sqlite.*; public class Dbmeta_parser__fld { + private final Btrie_rv trv = new Btrie_rv(); public Dbmeta_fld_itm Parse_fld(Sql_bry_rdr rdr) { // starts after "(" or ","; EX: "(fld1 int", ", fld2 int"; ends at ")" byte[] name = rdr.Read_sql_identifier(); Dbmeta_fld_tid type = this.Parse_type(rdr); @@ -41,12 +42,12 @@ public class Dbmeta_parser__fld { } return fld; } - Dbmeta_fld_wkr__base type_wkr = (Dbmeta_fld_wkr__base)rdr.Chk_trie_as_obj(fld_trie); + Dbmeta_fld_wkr__base type_wkr = (Dbmeta_fld_wkr__base)rdr.Chk_trie_as_obj(trv, fld_trie); switch (type_wkr.Tid()) { case Dbmeta_fld_wkr__base.Tid_end_comma: case Dbmeta_fld_wkr__base.Tid_end_paren: return fld; default: - rdr.Move_to(fld_trie.Match_pos()); + rdr.Move_to(trv.Pos()); type_wkr.Match(rdr, fld); break; } @@ -54,7 +55,7 @@ public class Dbmeta_parser__fld { } @gplx.Internal protected Dbmeta_fld_tid Parse_type(Bry_rdr rdr) { rdr.Skip_ws(); - Dbmeta_parser__fld_itm type_itm = (Dbmeta_parser__fld_itm)rdr.Chk_trie_as_obj(type_trie); + Dbmeta_parser__fld_itm type_itm = (Dbmeta_parser__fld_itm)rdr.Chk_trie_as_obj(trv, type_trie); rdr.Move_by(type_itm.Word().length); int paren_itms_count = type_itm.Paren_itms_count(); int len_1 = Int_.Min_value, len_2 = Int_.Min_value; diff --git a/140_dbs/src/gplx/dbs/utls/Db_in_wkr__base.java b/140_dbs/src/gplx/dbs/utls/Db_in_wkr__base.java index 2505a73c0..3ba3d2e18 100644 --- a/140_dbs/src/gplx/dbs/utls/Db_in_wkr__base.java +++ b/140_dbs/src/gplx/dbs/utls/Db_in_wkr__base.java @@ -25,7 +25,7 @@ public abstract class Db_in_wkr__base { public void Select_in(Cancelable cancelable, Db_conn conn, int full_bgn, int full_end) { int part_len = Interval(); Gfo_usr_dlg usr_dlg = Gfo_usr_dlg_.Instance; - boolean show_progress = this.Show_progress(); + boolean show_progress = this.Show_progress();; for (int part_bgn = full_bgn; part_bgn < full_end; part_bgn += part_len) { int part_end = part_bgn + part_len; if (part_end > full_end) part_end = full_end; diff --git a/400_xowa/src/gplx/core/ios/Io_stream_zip_mgr.java b/400_xowa/src/gplx/core/ios/Io_stream_zip_mgr.java index 605087b37..ed6e8493c 100644 --- a/400_xowa/src/gplx/core/ios/Io_stream_zip_mgr.java +++ b/400_xowa/src/gplx/core/ios/Io_stream_zip_mgr.java @@ -18,9 +18,7 @@ along with this program. If not, see . package gplx.core.ios; import gplx.*; import gplx.core.*; import gplx.core.ios.streams.*; public class Io_stream_zip_mgr { - private final Bry_bfr bfr = Bry_bfr_.Reset(256); private Io_stream_wtr wtr_gzip, wtr_zip, wtr_bzip2; - private Io_stream_rdr rdr_gzip, rdr_zip, rdr_bzip2; public byte[] Zip(byte type, byte[] val) { if (type == Io_stream_.Tid_raw) return val; Io_stream_wtr wtr = Wtr(type); @@ -29,14 +27,13 @@ public class Io_stream_zip_mgr { return wtr.To_ary_and_clear(); } public byte[] Unzip(byte type, byte[] val) { - synchronized (this) { // LOCK:static-obj;rdr_*;necessary; DATE:2016-07-06 - if (type == Io_stream_.Tid_raw) return val; - Io_stream_rdr rdr = Rdr(type); - rdr.Open_mem(val); - return Io_stream_rdr_.Load_all_as_bry(bfr, rdr); - } + if (type == Io_stream_.Tid_raw) return val; + Io_stream_rdr rdr = Rdr(type); + rdr.Open_mem(val); + return Io_stream_rdr_.Load_all_as_bry(Bry_bfr_.New(), rdr); } private Io_stream_wtr Wtr(byte type) { + Bry_bfr bfr = Bry_bfr_.New(); switch (type) { case Io_stream_.Tid_gzip : if (wtr_gzip == null) wtr_gzip = Io_stream_wtr_.new_by_mem(bfr, Io_stream_.Tid_gzip) ; return wtr_gzip.Open(); case Io_stream_.Tid_zip : if (wtr_zip == null) wtr_zip = Io_stream_wtr_.new_by_mem(bfr, Io_stream_.Tid_zip) ; return wtr_zip.Open(); @@ -45,11 +42,11 @@ public class Io_stream_zip_mgr { default : throw Err_.new_unhandled(type); } } - private Io_stream_rdr Rdr(byte type) { + private Io_stream_rdr Rdr(byte type) { // TS.MEM: DATE:2016-07-12 switch (type) { - case Io_stream_.Tid_gzip : if (rdr_gzip == null) rdr_gzip = Io_stream_rdr_.new_by_tid_(Io_stream_.Tid_gzip) ; return rdr_gzip; - case Io_stream_.Tid_zip : if (rdr_zip == null) rdr_zip = Io_stream_rdr_.new_by_tid_(Io_stream_.Tid_zip) ; return rdr_zip; - case Io_stream_.Tid_bzip2 : if (rdr_bzip2 == null) rdr_bzip2 = Io_stream_rdr_.new_by_tid_(Io_stream_.Tid_bzip2) ; return rdr_bzip2; + case Io_stream_.Tid_gzip : return Io_stream_rdr_.new_by_tid_(Io_stream_.Tid_gzip); + case Io_stream_.Tid_zip : return Io_stream_rdr_.new_by_tid_(Io_stream_.Tid_zip); + case Io_stream_.Tid_bzip2 : return Io_stream_rdr_.new_by_tid_(Io_stream_.Tid_bzip2); case Io_stream_.Tid_raw : default : throw Err_.new_unhandled(type); } diff --git a/400_xowa/src/gplx/core/net/Gfo_url_parser.java b/400_xowa/src/gplx/core/net/Gfo_url_parser.java index b8b01a941..9463c356b 100644 --- a/400_xowa/src/gplx/core/net/Gfo_url_parser.java +++ b/400_xowa/src/gplx/core/net/Gfo_url_parser.java @@ -22,6 +22,7 @@ public class Gfo_url_parser { private final Btrie_slim_mgr protocols = Btrie_slim_mgr.ci_a7(); // ASCII:url_protocol; EX:"http:", "ftp:", etc private final Bry_ary segs_ary = new Bry_ary(4), qargs = new Bry_ary(4); private final Bry_bfr tmp_bfr = Bry_bfr_.Reset(500); + private final Btrie_rv trv = new Btrie_rv(); public byte[] Relative_url_protocol_bry() {return Gfo_protocol_itm.Itm_https.Key_w_colon_bry();} // NOTE: https b/c any WMF wiki will now default to WMF; DATE:2015-07-26 public Gfo_url_parser() { Init_protocols(Gfo_protocol_itm.Ary()); @@ -76,8 +77,8 @@ public class Gfo_url_parser { path_bgn = qarg_key_bgn = qarg_val_bgn = anch_bgn = anch_nth_bgn = -1; segs_ary.Clear(); qargs.Clear(); int pos = src_bgn; - Object protocol_obj = protocols.Match_bgn(src, src_bgn, src_end); - pos = protocols.Match_pos(); + Object protocol_obj = protocols.Match_at(trv, src, src_bgn, src_end); + pos = trv.Pos(); pos = Bry_find_.Find_fwd_while(src, pos, src_end, Byte_ascii.Slash); if (protocol_obj == null) { this.protocol_tid = Gfo_protocol_itm.Tid_unknown; diff --git a/400_xowa/src/gplx/core/net/Http_request_parser.java b/400_xowa/src/gplx/core/net/Http_request_parser.java index 6853940f5..80c22abcb 100644 --- a/400_xowa/src/gplx/core/net/Http_request_parser.java +++ b/400_xowa/src/gplx/core/net/Http_request_parser.java @@ -22,7 +22,7 @@ public class Http_request_parser { private int type, content_length; private byte[] url, protocol, host, user_agent, accept, accept_language, accept_encoding, x_requested_with, cookie, referer, content_type, content_type_boundary, connection, pragma, cache_control, origin; private Http_post_data_hash post_data_hash; - private final Bry_bfr tmp_bfr = Bry_bfr_.New_w_size(255); + private final Bry_bfr tmp_bfr = Bry_bfr_.New_w_size(255); private final Btrie_rv trv = new Btrie_rv(); private final Http_server_wtr server_wtr; private final boolean log; public Http_request_parser(Http_server_wtr server_wtr, boolean log) {this.server_wtr = server_wtr; this.log = log;} public void Clear() { @@ -59,12 +59,12 @@ public class Http_request_parser { } break; // assume form_data sends POST request } - Object o = trie.Match_bgn(line, 0, line_len); + Object o = trie.Match_at(trv, line, 0, line_len); if (o == null) { server_wtr.Write_str_w_nl(String_.Format("http.request.parser; unknown line; line={0} request={1}", line_str, To_str())); continue; } - int val_bgn = Bry_find_.Find_fwd_while_ws(line, trie.Match_pos(), line_len); // skip ws after key; EX: "Host: " + int val_bgn = Bry_find_.Find_fwd_while_ws(line, trv.Pos(), line_len); // skip ws after key; EX: "Host: " int tid = ((Int_obj_val)o).Val(); switch (tid) { case Tid_get: diff --git a/400_xowa/src/gplx/langs/gfs/Gfs_lxr.java b/400_xowa/src/gplx/langs/gfs/Gfs_lxr.java index ea0075ef7..5ce0c5ef3 100644 --- a/400_xowa/src/gplx/langs/gfs/Gfs_lxr.java +++ b/400_xowa/src/gplx/langs/gfs/Gfs_lxr.java @@ -27,7 +27,7 @@ class Gfs_lxr_whitespace implements Gfs_lxr { int rv = Gfs_lxr_.Rv_eos, cur_pos; for (cur_pos = end; cur_pos < src_len; cur_pos++) { byte b = src[cur_pos]; - Object o = ctx.Trie().Match_bgn_w_byte(b, src, cur_pos, src_len); + Object o = ctx.Trie().Match_at_w_b0(ctx.Trie_rv(), b, src, cur_pos, src_len); if (o == null) { rv = Gfs_lxr_.Rv_null; ctx.Process_null(cur_pos); @@ -45,7 +45,7 @@ class Gfs_lxr_whitespace implements Gfs_lxr { } return rv; } - public static final Gfs_lxr_whitespace Instance = new Gfs_lxr_whitespace(); Gfs_lxr_whitespace() {} + public static final Gfs_lxr_whitespace Instance = new Gfs_lxr_whitespace(); Gfs_lxr_whitespace() {} } class Gfs_lxr_comment_flat implements Gfs_lxr { public Gfs_lxr_comment_flat(byte[] bgn_bry, byte[] end_bry) { @@ -69,7 +69,7 @@ class Gfs_lxr_identifier implements Gfs_lxr { int pos, rv = Gfs_lxr_.Rv_eos; for (pos = end; pos < src_len; pos++) { byte b = src[pos]; - Object o = ctx.Trie().Match_bgn_w_byte(b, src, pos, src_len); + Object o = ctx.Trie().Match_at_w_b0(ctx.Trie_rv(), b, src, pos, src_len); if (o == null) { // invalid char; stop; rv = Gfs_lxr_.Rv_null; ctx.Process_null(pos); @@ -89,7 +89,7 @@ class Gfs_lxr_identifier implements Gfs_lxr { if (rv == Gfs_lxr_.Rv_eos) ctx.Process_eos(); // eos return rv; } - public static final Gfs_lxr_identifier Instance = new Gfs_lxr_identifier(); Gfs_lxr_identifier() {} + public static final Gfs_lxr_identifier Instance = new Gfs_lxr_identifier(); Gfs_lxr_identifier() {} } class Gfs_lxr_semic implements Gfs_lxr { public int Lxr_tid() {return Gfs_lxr_.Tid_semic;} @@ -103,7 +103,7 @@ class Gfs_lxr_semic implements Gfs_lxr { } return end; } - public static final Gfs_lxr_semic Instance = new Gfs_lxr_semic(); Gfs_lxr_semic() {} + public static final Gfs_lxr_semic Instance = new Gfs_lxr_semic(); Gfs_lxr_semic() {} } class Gfs_lxr_dot implements Gfs_lxr { public int Lxr_tid() {return Gfs_lxr_.Tid_dot;} @@ -115,7 +115,7 @@ class Gfs_lxr_dot implements Gfs_lxr { } return end; } - public static final Gfs_lxr_dot Instance = new Gfs_lxr_dot(); Gfs_lxr_dot() {} + public static final Gfs_lxr_dot Instance = new Gfs_lxr_dot(); Gfs_lxr_dot() {} } class Gfs_lxr_paren_bgn implements Gfs_lxr { public int Lxr_tid() {return Gfs_lxr_.Tid_paren_bgn;} @@ -126,7 +126,7 @@ class Gfs_lxr_paren_bgn implements Gfs_lxr { } return end; } - public static final Gfs_lxr_paren_bgn Instance = new Gfs_lxr_paren_bgn(); Gfs_lxr_paren_bgn() {} + public static final Gfs_lxr_paren_bgn Instance = new Gfs_lxr_paren_bgn(); Gfs_lxr_paren_bgn() {} } class Gfs_lxr_paren_end implements Gfs_lxr { public int Lxr_tid() {return Gfs_lxr_.Tid_paren_end;} @@ -139,7 +139,7 @@ class Gfs_lxr_paren_end implements Gfs_lxr { } return end; } - public static final Gfs_lxr_paren_end Instance = new Gfs_lxr_paren_end(); Gfs_lxr_paren_end() {} + public static final Gfs_lxr_paren_end Instance = new Gfs_lxr_paren_end(); Gfs_lxr_paren_end() {} } class Gfs_lxr_quote implements Gfs_lxr { public Gfs_lxr_quote(byte[] bgn_bry, byte[] end_bry) { @@ -184,7 +184,7 @@ class Gfs_lxr_curly_bgn implements Gfs_lxr { } return end; } - public static final Gfs_lxr_curly_bgn Instance = new Gfs_lxr_curly_bgn(); Gfs_lxr_curly_bgn() {} + public static final Gfs_lxr_curly_bgn Instance = new Gfs_lxr_curly_bgn(); Gfs_lxr_curly_bgn() {} } class Gfs_lxr_curly_end implements Gfs_lxr { public int Lxr_tid() {return Gfs_lxr_.Tid_curly_end;} @@ -192,7 +192,7 @@ class Gfs_lxr_curly_end implements Gfs_lxr { ctx.Stack_pop(bgn); return end; } - public static final Gfs_lxr_curly_end Instance = new Gfs_lxr_curly_end(); Gfs_lxr_curly_end() {} + public static final Gfs_lxr_curly_end Instance = new Gfs_lxr_curly_end(); Gfs_lxr_curly_end() {} } class Gfs_lxr_equal implements Gfs_lxr { public int Lxr_tid() {return Gfs_lxr_.Tid_eq;} @@ -200,7 +200,7 @@ class Gfs_lxr_equal implements Gfs_lxr { ctx.Make_nde(bgn, end).Op_tid_(Gfs_nde.Op_tid_assign); return end; } - public static final Gfs_lxr_equal Instance = new Gfs_lxr_equal(); Gfs_lxr_equal() {} + public static final Gfs_lxr_equal Instance = new Gfs_lxr_equal(); Gfs_lxr_equal() {} } class Gfs_lxr_comma implements Gfs_lxr { public int Lxr_tid() {return Gfs_lxr_.Tid_comma;} @@ -210,5 +210,5 @@ class Gfs_lxr_comma implements Gfs_lxr { } return end; } - public static final Gfs_lxr_comma Instance = new Gfs_lxr_comma(); Gfs_lxr_comma() {} + public static final Gfs_lxr_comma Instance = new Gfs_lxr_comma(); Gfs_lxr_comma() {} } diff --git a/400_xowa/src/gplx/langs/gfs/Gfs_parser.java b/400_xowa/src/gplx/langs/gfs/Gfs_parser.java index 5c96684c5..dc6ee8576 100644 --- a/400_xowa/src/gplx/langs/gfs/Gfs_parser.java +++ b/400_xowa/src/gplx/langs/gfs/Gfs_parser.java @@ -18,8 +18,8 @@ along with this program. If not, see . package gplx.langs.gfs; import gplx.*; import gplx.langs.*; import gplx.core.btries.*; public class Gfs_parser { - Btrie_fast_mgr trie = Gfs_parser_.trie_(); - Gfs_parser_ctx ctx = new Gfs_parser_ctx(); + private final Btrie_fast_mgr trie = Gfs_parser_.trie_(); + private final Gfs_parser_ctx ctx = new Gfs_parser_ctx(); public Gfs_nde Parse(byte[] src) { ctx.Root().Subs_clear(); int src_len = src.length; if (src_len == 0) return ctx.Root(); @@ -27,13 +27,13 @@ public class Gfs_parser { int pos = 0; while (pos < src_len) { byte b = src[pos]; - Object o = trie.Match_bgn_w_byte(b, src, pos, src_len); + Object o = trie.Match_at_w_b0(ctx.Trie_rv(), b, src, pos, src_len); if (o == null) ctx.Err_mgr().Fail_unknown_char(ctx, pos, b); else { Gfs_lxr lxr = (Gfs_lxr)o; while (lxr != null) { - int rslt = lxr.Process(ctx, pos, trie.Match_pos()); + int rslt = lxr.Process(ctx, pos, ctx.Trie_rv().Pos()); switch (lxr.Lxr_tid()) { case Gfs_lxr_.Tid_whitespace: break; case Gfs_lxr_.Tid_comment: break; diff --git a/400_xowa/src/gplx/langs/gfs/Gfs_parser_ctx.java b/400_xowa/src/gplx/langs/gfs/Gfs_parser_ctx.java index 16eb0eb7e..6d1abd98c 100644 --- a/400_xowa/src/gplx/langs/gfs/Gfs_parser_ctx.java +++ b/400_xowa/src/gplx/langs/gfs/Gfs_parser_ctx.java @@ -19,6 +19,7 @@ package gplx.langs.gfs; import gplx.*; import gplx.langs.*; import gplx.core.btries.*; class Gfs_parser_ctx { public Btrie_fast_mgr Trie() {return trie;} Btrie_fast_mgr trie; + public Btrie_rv Trie_rv() {return trie_rv;} private final Btrie_rv trie_rv = new Btrie_rv(); public Gfs_nde Root() {return root;} Gfs_nde root = new Gfs_nde(); public byte[] Src() {return src;} private byte[] src; public int Src_len() {return src_len;} private int src_len; diff --git a/400_xowa/src/gplx/langs/htmls/Gfh_atr_.java b/400_xowa/src/gplx/langs/htmls/Gfh_atr_.java index 5e841d84f..684039f26 100644 --- a/400_xowa/src/gplx/langs/htmls/Gfh_atr_.java +++ b/400_xowa/src/gplx/langs/htmls/Gfh_atr_.java @@ -50,6 +50,7 @@ public class Gfh_atr_ { , Bry__align = Bry_.new_a7("align") // HTML.v4 , Bry__bgcolor = Bry_.new_a7("bgcolor") // HTML.v4 , Bry__abbr = Bry_.new_a7("abbr") // HTML.ua + , Bry__srcset = Bry_.new_a7("srcset") ; public static byte[] Make(Bry_bfr bfr, byte[] key, byte[] val) { return bfr.Add_byte_space().Add(key).Add_byte_eq().Add_byte_quote().Add(val).Add_byte_quote().To_bry_and_clear(); @@ -66,4 +67,9 @@ public class Gfh_atr_ { bfr.Add_int_variable(val); bfr.Add_byte_quote(); } + public static void Add_double(Bry_bfr bfr, byte[] key, double val) { + bfr.Add_byte_space().Add(key).Add_byte_eq().Add_byte_quote(); + bfr.Add_double(val); + bfr.Add_byte_quote(); + } } diff --git a/400_xowa/src/gplx/langs/htmls/Gfh_tag_.java b/400_xowa/src/gplx/langs/htmls/Gfh_tag_.java index 73da777e1..2bf296e8c 100644 --- a/400_xowa/src/gplx/langs/htmls/Gfh_tag_.java +++ b/400_xowa/src/gplx/langs/htmls/Gfh_tag_.java @@ -65,6 +65,14 @@ public class Gfh_tag_ { // NOTE: not serialized; used by tag_rdr , Id__del = 41 , Id__strike = 42 , Id__tt = 43 + , Id__code = 44 + , Id__wbr = 45 + , Id__center = 46 // en.v:Vandalism_in_progress + , Id__dfn = 47 + , Id__kbd = 48 + , Id__samp = 49 + , Id__ins = 50 + , Id__em = 51 ; public static final byte[] Bry__a = Bry_.new_a7("a") @@ -122,6 +130,14 @@ public class Gfh_tag_ { // NOTE: not serialized; used by tag_rdr .Add_str_int("del" , Id__del) .Add_str_int("strike" , Id__strike) .Add_str_int("tt" , Id__tt) + .Add_str_int("code" , Id__code) + .Add_str_int("wbr" , Id__wbr) + .Add_str_int("center" , Id__center) + .Add_str_int("dfn" , Id__dfn) + .Add_str_int("kbd" , Id__kbd) + .Add_str_int("samp" , Id__samp) + .Add_str_int("ins" , Id__ins) + .Add_str_int("em" , Id__em) ; public static String To_str(int tid) { switch (tid) { @@ -172,6 +188,14 @@ public class Gfh_tag_ { // NOTE: not serialized; used by tag_rdr case Id__del: return "del"; case Id__strike: return "strike"; case Id__tt: return "tt"; + case Id__code: return "code"; + case Id__wbr: return "wbr"; + case Id__center: return "center"; + case Id__dfn: return "dfn"; + case Id__kbd: return "kbd"; + case Id__samp: return "samp"; + case Id__ins: return "ins"; + case Id__em: return "em"; default: throw Err_.new_unhandled(tid); } } @@ -184,8 +208,7 @@ public class Gfh_tag_ { // NOTE: not serialized; used by tag_rdr , I_lhs = Bry_.new_a7("") , I_rhs = Bry_.new_a7("") , P_lhs = Bry_.new_a7("

") , P_rhs = Bry_.new_a7("

") , Pre_lhs = Bry_.new_a7("
")			, Pre_rhs					= Bry_.new_a7("
") - , Div_lhs = Bry_.new_a7("
") , Div_rhs = Bry_.new_a7("
") - , Div_lhs_bgn = Bry_.new_a7("") , Div_rhs = Bry_.new_a7("") , Div_lhs_bgn = Bry_.new_a7("") , Head_lhs_bgn = Bry_.new_a7("") , Style_lhs_w_type = Bry_.new_a7("