1
0
mirror of https://github.com/gnosygnu/xowa.git synced 2026-03-02 03:49:30 +00:00

'v3.7.4.1'

This commit is contained in:
gnosygnu
2016-07-25 21:59:51 -04:00
parent 7a851a41a5
commit 8e91ac0bc4
175 changed files with 2079 additions and 933 deletions

View File

@@ -163,56 +163,56 @@ public class Pft_fmt_itm_ {
.Add("xmY" , Pft_fmt_itm_.Hijiri_year_idx)
// TODO_OLD: space; "
;
public static Pft_fmt_itm[] Parse(Xop_ctx ctx, byte[] fmt) {
synchronized (fmt_itms) { // LOCK:static-obj; DATE:2016-07-06
Btrie_fast_mgr trie = Pft_fmt_itm_.Regy;
Btrie_rv trv = new Btrie_rv();
int i = 0, fmt_len = fmt.length;
fmt_itms.Clear(); int raw_bgn = String_.Pos_neg1; byte raw_byt = Byte_.Zero;
while (i < fmt_len) {
byte b = fmt[i];
Object o = trie.Match_at_w_b0(trv, b, fmt, i, fmt_len);
if (o != null) {
if (raw_bgn != String_.Pos_neg1) {fmt_itms.Add(i - raw_bgn == 1 ? new Pft_fmt_itm_raw_byt(raw_byt) : (Pft_fmt_itm)new Pft_fmt_itm_raw_ary(fmt, raw_bgn, i)); raw_bgn = String_.Pos_neg1;}
fmt_itms.Add((Pft_fmt_itm)o);
i = trv.Pos();
}
else {
switch (b) {
case Byte_ascii.Backslash:
if (raw_bgn != String_.Pos_neg1) {fmt_itms.Add(i - raw_bgn == 1 ? new Pft_fmt_itm_raw_byt(raw_byt) : (Pft_fmt_itm)new Pft_fmt_itm_raw_ary(fmt, raw_bgn, i)); raw_bgn = String_.Pos_neg1;}
++i; // peek next char
if (i == fmt_len) // trailing backslash; add one; EX: "b\" -> "b\" not "b"
fmt_itms.Add(new Pft_fmt_itm_raw_byt(Byte_ascii.Backslash));
else
fmt_itms.Add(new Pft_fmt_itm_raw_byt(fmt[i]));
++i;
break;
case Byte_ascii.Quote:
if (raw_bgn != String_.Pos_neg1) {fmt_itms.Add(i - raw_bgn == 1 ? new Pft_fmt_itm_raw_byt(raw_byt) : (Pft_fmt_itm)new Pft_fmt_itm_raw_ary(fmt, raw_bgn, i)); raw_bgn = String_.Pos_neg1;}
++i; // skip quote_bgn
raw_bgn = i;
while (i < fmt_len) {
b = fmt[i];
if (b == Byte_ascii.Quote) {
break;
}
else
++i;
List_adp fmt_itms = ctx.Wiki().Parser_mgr().Time_parser_itms();
Btrie_fast_mgr trie = Pft_fmt_itm_.Regy;
Btrie_rv trv = new Btrie_rv();
int i = 0, fmt_len = fmt.length;
fmt_itms.Clear(); int raw_bgn = String_.Pos_neg1; byte raw_byt = Byte_.Zero;
while (i < fmt_len) {
byte b = fmt[i];
Object o = trie.Match_at_w_b0(trv, b, fmt, i, fmt_len);
if (o != null) {
if (raw_bgn != String_.Pos_neg1) {fmt_itms.Add(i - raw_bgn == 1 ? new Pft_fmt_itm_raw_byt(raw_byt) : (Pft_fmt_itm)new Pft_fmt_itm_raw_ary(fmt, raw_bgn, i)); raw_bgn = String_.Pos_neg1;}
fmt_itms.Add((Pft_fmt_itm)o);
i = trv.Pos();
}
else {
switch (b) {
case Byte_ascii.Backslash:
if (raw_bgn != String_.Pos_neg1) {fmt_itms.Add(i - raw_bgn == 1 ? new Pft_fmt_itm_raw_byt(raw_byt) : (Pft_fmt_itm)new Pft_fmt_itm_raw_ary(fmt, raw_bgn, i)); raw_bgn = String_.Pos_neg1;}
++i; // peek next char
if (i == fmt_len) // trailing backslash; add one; EX: "b\" -> "b\" not "b"
fmt_itms.Add(new Pft_fmt_itm_raw_byt(Byte_ascii.Backslash));
else
fmt_itms.Add(new Pft_fmt_itm_raw_byt(fmt[i]));
++i;
break;
case Byte_ascii.Quote:
if (raw_bgn != String_.Pos_neg1) {fmt_itms.Add(i - raw_bgn == 1 ? new Pft_fmt_itm_raw_byt(raw_byt) : (Pft_fmt_itm)new Pft_fmt_itm_raw_ary(fmt, raw_bgn, i)); raw_bgn = String_.Pos_neg1;}
++i; // skip quote_bgn
raw_bgn = i;
while (i < fmt_len) {
b = fmt[i];
if (b == Byte_ascii.Quote) {
break;
}
fmt_itms.Add(i - raw_bgn == 0 ? new Pft_fmt_itm_raw_byt(Byte_ascii.Quote) : (Pft_fmt_itm)new Pft_fmt_itm_raw_ary(fmt, raw_bgn, i));
raw_bgn = String_.Pos_neg1;
++i; // skip quote_end
break;
default:
if (raw_bgn == String_.Pos_neg1) {raw_bgn = i; raw_byt = b;}
i += gplx.core.intls.Utf8_.Len_of_char_by_1st_byte(b);
break;
}
else
++i;
}
fmt_itms.Add(i - raw_bgn == 0 ? new Pft_fmt_itm_raw_byt(Byte_ascii.Quote) : (Pft_fmt_itm)new Pft_fmt_itm_raw_ary(fmt, raw_bgn, i));
raw_bgn = String_.Pos_neg1;
++i; // skip quote_end
break;
default:
if (raw_bgn == String_.Pos_neg1) {raw_bgn = i; raw_byt = b;}
i += gplx.core.intls.Utf8_.Len_of_char_by_1st_byte(b);
break;
}
}
if (raw_bgn != String_.Pos_neg1) {fmt_itms.Add(fmt_len - raw_bgn == 1 ? new Pft_fmt_itm_raw_byt(fmt[fmt_len - 1]) : (Pft_fmt_itm)new Pft_fmt_itm_raw_ary(fmt, raw_bgn, fmt_len)); raw_bgn = String_.Pos_neg1;}
return (Pft_fmt_itm[])fmt_itms.To_ary(Pft_fmt_itm.class);
}
} private static List_adp fmt_itms = List_adp_.New();
if (raw_bgn != String_.Pos_neg1) {fmt_itms.Add(fmt_len - raw_bgn == 1 ? new Pft_fmt_itm_raw_byt(fmt[fmt_len - 1]) : (Pft_fmt_itm)new Pft_fmt_itm_raw_ary(fmt, raw_bgn, fmt_len)); raw_bgn = String_.Pos_neg1;}
return (Pft_fmt_itm[])fmt_itms.To_ary(Pft_fmt_itm.class);
}
}

View File

@@ -17,7 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.xowa.xtns.pfuncs.times; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; import gplx.xowa.xtns.pfuncs.*;
import gplx.xowa.langs.*; import gplx.xowa.langs.kwds.*;
import gplx.xowa.parsers.*; import gplx.xowa.parsers.tmpls.*;
import gplx.xowa.parsers.*; import gplx.xowa.parsers.tmpls.*; import gplx.xowa.xtns.pfuncs.times.*;
public class Pft_func_date_int extends Pf_func_base {
public Pft_func_date_int(int id, int date_tid) {this.id = id; this.date_tid = date_tid;} private int date_tid;
@Override public int Id() {return id;} private int id;
@@ -25,6 +25,7 @@ public class Pft_func_date_int extends Pf_func_base {
@Override public void Func_evaluate(Bry_bfr bfr, Xop_ctx ctx, Xot_invk caller, Xot_invk self, byte[] src) {
DateAdp date = DateAdp_.MinValue;
Xowe_wiki wiki = ctx.Wiki(); Xol_lang_itm lang = ctx.Lang();
Pft_func_formatdate_bldr date_fmt_bldr = wiki.Parser_mgr().Date_fmt_bldr();
switch (date_tid) {
case Date_tid_lcl: date = DateAdp_.Now(); break;
case Date_tid_utc: date = DateAdp_.Now().XtoUtc(); break;
@@ -35,39 +36,39 @@ public class Pft_func_date_int extends Pf_func_base {
case Xol_kwd_grp_.Id_utc_year:
case Xol_kwd_grp_.Id_lcl_year:
case Xol_kwd_grp_.Id_rev_year:
Pft_func_formatdate.Date_bldr().Format(bfr, wiki, lang, date, Pft_fmt_itm_.Year_len4);
date_fmt_bldr.Format(bfr, wiki, lang, date, Pft_fmt_itm_.Year_len4);
break;
case Xol_kwd_grp_.Id_utc_month_int_len2:
case Xol_kwd_grp_.Id_lcl_month_int_len2:
case Xol_kwd_grp_.Id_rev_month_int_len2:
Pft_func_formatdate.Date_bldr().Format(bfr, wiki, lang, date, Pft_fmt_itm_.Month_int_len2);
date_fmt_bldr.Format(bfr, wiki, lang, date, Pft_fmt_itm_.Month_int_len2);
break;
case Xol_kwd_grp_.Id_utc_month_int:
case Xol_kwd_grp_.Id_lcl_month_int:
case Xol_kwd_grp_.Id_rev_month_int:
Pft_func_formatdate.Date_bldr().Format(bfr, wiki, lang, date, Pft_fmt_itm_.Month_int);
date_fmt_bldr.Format(bfr, wiki, lang, date, Pft_fmt_itm_.Month_int);
break;
case Xol_kwd_grp_.Id_utc_day_int_len2:
case Xol_kwd_grp_.Id_lcl_day_int_len2:
case Xol_kwd_grp_.Id_rev_day_int_len2:
Pft_func_formatdate.Date_bldr().Format(bfr, wiki, lang, date, Pft_fmt_itm_.Day_int_len2);
date_fmt_bldr.Format(bfr, wiki, lang, date, Pft_fmt_itm_.Day_int_len2);
break;
case Xol_kwd_grp_.Id_utc_day_int:
case Xol_kwd_grp_.Id_lcl_day_int:
case Xol_kwd_grp_.Id_rev_day_int:
Pft_func_formatdate.Date_bldr().Format(bfr, wiki, lang, date, Pft_fmt_itm_.Day_int);
date_fmt_bldr.Format(bfr, wiki, lang, date, Pft_fmt_itm_.Day_int);
break;
case Xol_kwd_grp_.Id_lcl_hour:
case Xol_kwd_grp_.Id_utc_hour:
Pft_func_formatdate.Date_bldr().Format(bfr, wiki, lang, date, Pft_fmt_itm_.Hour_base24_len2);
date_fmt_bldr.Format(bfr, wiki, lang, date, Pft_fmt_itm_.Hour_base24_len2);
break;
case Xol_kwd_grp_.Id_lcl_dow:
case Xol_kwd_grp_.Id_utc_dow:
Pft_func_formatdate.Date_bldr().Format(bfr, wiki, lang, date, Pft_fmt_itm_.Dow_base1_int);
date_fmt_bldr.Format(bfr, wiki, lang, date, Pft_fmt_itm_.Dow_base1_int);
break;
case Xol_kwd_grp_.Id_lcl_week:
case Xol_kwd_grp_.Id_utc_week:
Pft_func_formatdate.Date_bldr().Format(bfr, wiki, lang, date, Pft_fmt_itm_.WeekOfYear_int);
date_fmt_bldr.Format(bfr, wiki, lang, date, Pft_fmt_itm_.WeekOfYear_int);
break;
case Xol_kwd_grp_.Id_lcl_time:
case Xol_kwd_grp_.Id_utc_time: // 17:29

View File

@@ -35,13 +35,12 @@ public class Pft_func_formatdate extends Pf_func_base {
bfr.Add(date_bry);
return;
}
DateAdp date = Pft_func_time.ParseDate(date_bry, false, ctx.App().Utl__bfr_mkr().Get_b512().Mkr_rls());
DateAdp date = Pft_func_time.ParseDate(date_bry, false, ctx.Wiki().Utl__bfr_mkr().Get_b512().Mkr_rls());
if (date == null) {bfr.Add(date_bry); return;} // date not parseable; return self; DATE:2014-04-13
date_bldr.Format(bfr, ctx.Wiki(), ctx.Lang(), date, (Pft_fmt_itm[])o);
ctx.Wiki().Parser_mgr().Date_fmt_bldr().Format(bfr, ctx.Wiki(), ctx.Lang(), date, (Pft_fmt_itm[])o);
}
public static Pft_func_formatdate_bldr Date_bldr() {return date_bldr;} private static Pft_func_formatdate_bldr date_bldr = new Pft_func_formatdate_bldr();
private static final Pft_fmt_itm[] Fmt_itms_default = new Pft_fmt_itm[0];
private static final Btrie_fast_mgr trie = Btrie_fast_mgr.cs()
private static final Pft_fmt_itm[] Fmt_itms_default = new Pft_fmt_itm[0];
private static final Btrie_fast_mgr trie = Btrie_fast_mgr.cs()
.Add("dmy" , new Pft_fmt_itm[] {Pft_fmt_itm_.Day_int, Pft_fmt_itm_.Byte_space, Pft_fmt_itm_.Month_name, Pft_fmt_itm_.Byte_space, Pft_fmt_itm_.Year_len4})
.Add("mdy" , new Pft_fmt_itm[] {Pft_fmt_itm_.Month_name, Pft_fmt_itm_.Byte_space, Pft_fmt_itm_.Day_int, Pft_fmt_itm_.Byte_comma, Pft_fmt_itm_.Byte_space, Pft_fmt_itm_.Year_len4})
.Add("ymd" , new Pft_fmt_itm[] {Pft_fmt_itm_.Year_len4, Pft_fmt_itm_.Byte_space, Pft_fmt_itm_.Month_name, Pft_fmt_itm_.Byte_space, Pft_fmt_itm_.Day_int})

View File

@@ -22,46 +22,42 @@ public class Pft_func_formatdate_bldr {
public Pft_func_formatdate_bldr Idx_nxt_(int v) {idx_nxt = v; return this;} private int idx_nxt;
public Pft_fmt_itm[] Fmt_itms() {return fmt_itms;} private Pft_fmt_itm[] fmt_itms;
public void Format(Bry_bfr bfr, Xowe_wiki wiki, Xol_lang_itm lang, DateAdp date, Pft_fmt_itm fmt_itm) {
synchronized (this) { // LOCK:static-obj;Pft_func_formatdate.Date_bldr(); DATE:2016-07-07
fmt_itm.Fmt(bfr, wiki, lang, date, this);
}
fmt_itm.Fmt(bfr, wiki, lang, date, this);
}
public void Format(Bry_bfr bfr, Xowe_wiki wiki, Xol_lang_itm lang, DateAdp date, Pft_fmt_itm[] fmt_itms) {
synchronized (this) { // LOCK:static-obj;Pft_func_formatdate.Date_bldr(); DATE:2016-07-07
this.fmt_itms = fmt_itms;
int len = fmt_itms.length;
idx_cur = 0; idx_nxt = -1;
Pft_fmt_itm chained_fmt = null;
while (idx_cur < len) {
Pft_fmt_itm fmt_itm = fmt_itms[idx_cur];
if (fmt_itm.TypeId() == Pft_fmt_itm_.Tid_hebrew_numeral)
chained_fmt = fmt_itm;
else {
if (chained_fmt != null) {
Bry_bfr tmp_bfr = Xoa_app_.Utl__bfr_mkr().Get_b128();
synchronized (tmp_bfr) {
fmt_itm.Fmt(tmp_bfr, wiki, lang, date, this);
chained_fmt.Fmt(tmp_bfr, wiki, lang, date, this);
bfr.Add(tmp_bfr.To_bry_and_rls());
chained_fmt = null;
}
this.fmt_itms = fmt_itms;
int len = fmt_itms.length;
idx_cur = 0; idx_nxt = -1;
Pft_fmt_itm chained_fmt = null;
while (idx_cur < len) {
Pft_fmt_itm fmt_itm = fmt_itms[idx_cur];
if (fmt_itm.TypeId() == Pft_fmt_itm_.Tid_hebrew_numeral)
chained_fmt = fmt_itm;
else {
if (chained_fmt != null) {
Bry_bfr tmp_bfr = Xoa_app_.Utl__bfr_mkr().Get_b128();
synchronized (tmp_bfr) {
fmt_itm.Fmt(tmp_bfr, wiki, lang, date, this);
chained_fmt.Fmt(tmp_bfr, wiki, lang, date, this);
bfr.Add(tmp_bfr.To_bry_and_rls());
chained_fmt = null;
}
else
fmt_itm.Fmt(bfr, wiki, lang, date, this);
}
if (idx_nxt == -1)
++idx_cur;
else {
idx_cur = idx_nxt;
idx_nxt = -1;
}
else
fmt_itm.Fmt(bfr, wiki, lang, date, this);
}
if (chained_fmt != null) {
int year_int = bfr.To_int_and_clear(-1);
if (year_int != -1) { // handle no format; EX:{{#time:xh}} DATE:2014-07-20
date = DateAdp_.seg_(new int[] {year_int, date.Month(), date.Day(), date.Hour(), date.Minute(), date.Second(), date.Frac()});
chained_fmt.Fmt(bfr, wiki, lang, date, this);
}
if (idx_nxt == -1)
++idx_cur;
else {
idx_cur = idx_nxt;
idx_nxt = -1;
}
}
if (chained_fmt != null) {
int year_int = bfr.To_int_and_clear(-1);
if (year_int != -1) { // handle no format; EX:{{#time:xh}} DATE:2014-07-20
date = DateAdp_.seg_(new int[] {year_int, date.Month(), date.Day(), date.Hour(), date.Minute(), date.Second(), date.Frac()});
chained_fmt.Fmt(bfr, wiki, lang, date, this);
}
}
}

View File

@@ -30,6 +30,7 @@ public class Pft_func_time extends Pf_func_base {
byte[] arg_lang = Pf_func_.Eval_arg_or_empty(ctx, src, caller, self, self_args_len, 1);
Bry_bfr error_bfr = Bry_bfr_.New();
DateAdp date = ParseDate(arg_date, utc, error_bfr);
Xowe_wiki wiki = ctx.Wiki();
if (date == null || error_bfr.Len() > 0)
bfr.Add_str_a7("<strong class=\"error\">").Add_bfr_and_clear(error_bfr).Add_str_a7("</strong>");
else {
@@ -37,11 +38,11 @@ public class Pft_func_time extends Pf_func_base {
if (Bry_.Len_gt_0(arg_lang)) {
Xol_lang_stub specified_lang_itm = Xol_lang_stub_.Get_by_key_or_null(arg_lang);
if (specified_lang_itm != null) { // NOTE: if lang_code is bad, then ignore (EX:bad_code)
Xol_lang_itm specified_lang = ctx.Wiki().Appe().Lang_mgr().Get_by_or_new(arg_lang);
Xol_lang_itm specified_lang = wiki.Appe().Lang_mgr().Get_by_or_new(arg_lang);
lang = specified_lang;
}
}
Pft_func_formatdate.Date_bldr().Format(bfr, ctx.Wiki(), lang, date, fmt_ary);
wiki.Parser_mgr().Date_fmt_bldr().Format(bfr, wiki, lang, date, fmt_ary);
}
}
public static DateAdp ParseDate(byte[] date, boolean utc, Bry_bfr error_bfr) {

View File

@@ -45,10 +45,8 @@ class Pxd_parser {
fmtr.Bld_bfr(error_bfr, args);
} private Bry_bfr error_bfr = Bry_bfr_.New_w_size(32);
public DateAdp Parse(byte[] src, Bry_bfr error_bfr) {
// synchronized (this) { // LOCK:static-obj; DATE:2016-07-06
Tokenize(src); // NOTE: should check if Tokenize failed, but want to be liberal as date parser is not fully implemented; this will always default to 1st day of year; DATE:2014-03-27
return Evaluate(src, error_bfr);
// }
Tokenize(src); // NOTE: should check if Tokenize failed, but want to be liberal as date parser is not fully implemented; this will always default to 1st day of year; DATE:2014-03-27
return Evaluate(src, error_bfr);
}
private boolean Tokenize(byte[] src) {
this.src = src; src_len = src.length;