|
@@ -1,6 +1,6 @@
|
|
|
/*
|
|
|
XOWA: the XOWA Offline Wiki Application
|
|
|
-Copyright (C) 2012-2017 gnosygnu@gmail.com
|
|
|
+Copyright (C) 2012-2021 gnosygnu@gmail.com
|
|
|
|
|
|
XOWA is licensed under the terms of the General Public License (GPL) Version 3,
|
|
|
or alternatively under the terms of the Apache License Version 2.0.
|
|
@@ -13,216 +13,226 @@ The terms of each license can be found in the source code repository:
|
|
|
GPLv3 License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-GPLv3.txt
|
|
|
Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
|
|
|
*/
|
|
|
-package gplx.xowa.xtns.pfuncs.times; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; import gplx.xowa.xtns.pfuncs.*;
|
|
|
-import gplx.core.btries.*;
|
|
|
-import gplx.xowa.langs.*; import gplx.xowa.langs.msgs.*;
|
|
|
-import gplx.xowa.parsers.*;
|
|
|
-public class Pft_fmt_itm_ {
|
|
|
- public static final int
|
|
|
- Tid_seg_int = 1
|
|
|
- , Tid_hour_base12 = 2
|
|
|
- , Tid_dow_base0 = 3
|
|
|
- , Tid_seg_str = 4
|
|
|
- , Tid_year_isLeap = 5
|
|
|
- , Tid_timestamp_unix = 6
|
|
|
- , Tid_raw_ary = 7
|
|
|
- , Tid_raw_byt = 8
|
|
|
- , Tid_dayOfYear = 9
|
|
|
- , Tid_daysInMonth = 10
|
|
|
- , Tid_AmPm = 11
|
|
|
- , Tid_roman = 12
|
|
|
- , Tid_iso_fmt = 13
|
|
|
- , Tid_rfc_5322 = 14
|
|
|
- , Tid_raw = 15
|
|
|
- , Tid_timezone_offset = 16
|
|
|
- , Tid_thai = 17
|
|
|
- , Tid_minguo = 18
|
|
|
- , Tid_hebrew_year_num = 21
|
|
|
- , Tid_hebrew_month_num = 20
|
|
|
- , Tid_hebrew_day_num = 19
|
|
|
- , Tid_hebrew_month_days_count = 22
|
|
|
- , Tid_hebrew_month_name_full = 23
|
|
|
- , Tid_hebrew_month_name_gen = 24
|
|
|
- , Tid_hebrew_numeral = 25
|
|
|
- , Tid_iranian_year_idx = 26
|
|
|
- , Tid_iranian_month_idx = 27
|
|
|
- , Tid_iranian_day_idx = 28
|
|
|
- , Tid_iranian_month_name = 29
|
|
|
- , Tid_hijiri_year_idx = 30
|
|
|
- , Tid_hijiri_month_idx = 31
|
|
|
- , Tid_hijiri_day_idx = 32
|
|
|
- , Tid_hijiri_month_name = 33
|
|
|
- , Tid_timezone_id_full = 35
|
|
|
- , Tid_timezone_id_abrv = 36
|
|
|
- , Tid_timezone_offset_4 = 37
|
|
|
- , Tid_timezone_offset_4_colon = 38
|
|
|
- ;
|
|
|
-
|
|
|
- public static final Pft_fmt_itm
|
|
|
- Year_len4 = new Pft_fmt_itm_seg_int(DateAdp_.SegIdx_year , 4, Bool_.Y)
|
|
|
- , Year_len2 = new Pft_fmt_itm_seg_int(DateAdp_.SegIdx_year , 2, Bool_.Y)
|
|
|
- , Month_int_len2 = new Pft_fmt_itm_seg_int(DateAdp_.SegIdx_month , 2, Bool_.Y)
|
|
|
- , Month_int = new Pft_fmt_itm_seg_int(DateAdp_.SegIdx_month , 2, Bool_.N)
|
|
|
- , Day_int_len2 = new Pft_fmt_itm_seg_int(DateAdp_.SegIdx_day , 2, Bool_.Y)
|
|
|
- , Day_int = new Pft_fmt_itm_seg_int(DateAdp_.SegIdx_day , 2, Bool_.N)
|
|
|
- , Hour_base24_len2 = new Pft_fmt_itm_seg_int(DateAdp_.SegIdx_hour , 2, Bool_.Y)
|
|
|
- , Hour_base24 = new Pft_fmt_itm_seg_int(DateAdp_.SegIdx_hour , 2, Bool_.N)
|
|
|
- , Hour_base12_len2 = new Pft_fmt_itm_hour_base12(Bool_.Y)
|
|
|
- , Hour_base12 = new Pft_fmt_itm_hour_base12(Bool_.N)
|
|
|
- , Minute_int_len2 = new Pft_fmt_itm_seg_int(DateAdp_.SegIdx_minute , 2, Bool_.Y)
|
|
|
- , Second_int_len2 = new Pft_fmt_itm_seg_int(DateAdp_.SegIdx_second , 2, Bool_.Y)
|
|
|
- , Dow_base1_int = new Pft_fmt_itm_seg_int(DateAdp_.SegIdx_dayOfWeek , 1, Bool_.Y)
|
|
|
- , Dow_base0_int = new Pft_fmt_itm_dow_base0()
|
|
|
- , WeekOfYear_int = new Pft_fmt_itm_seg_int(DateAdp_.SegIdx_weekOfYear , 2, Bool_.N)
|
|
|
- , WeekOfYear_int_len2 = new Pft_fmt_itm_seg_int(DateAdp_.SegIdx_weekOfYear , 2, Bool_.Y)
|
|
|
- , Month_abrv = new Pft_fmt_itm_seg_str(DateAdp_.SegIdx_month, Xol_msg_itm_.Id_dte_month_abrv_jan - Int_.Base1) // Jan
|
|
|
- , Month_name = new Pft_fmt_itm_seg_str(DateAdp_.SegIdx_month, Xol_msg_itm_.Id_dte_month_name_january - Int_.Base1) // January
|
|
|
- , Month_gen = new Pft_fmt_itm_seg_str(DateAdp_.SegIdx_month, Xol_msg_itm_.Id_dte_month_gen_january - Int_.Base1) // January
|
|
|
- , Dow_abrv = new Pft_fmt_itm_seg_str(DateAdp_.SegIdx_dayOfWeek, Xol_msg_itm_.Id_dte_dow_abrv_sun) // Sun
|
|
|
- , Dow_name = new Pft_fmt_itm_seg_str(DateAdp_.SegIdx_dayOfWeek, Xol_msg_itm_.Id_dte_dow_name_sunday) // Sunday
|
|
|
- , Year_isLeap = new Pft_fmt_itm_year_isLeap()
|
|
|
- , Timestamp_unix = new Pft_fmt_itm_timestamp_unix()
|
|
|
- , Byte_space = new Pft_fmt_itm_raw_byt(Byte_ascii.Space)
|
|
|
- , Byte_comma = new Pft_fmt_itm_raw_byt(Byte_ascii.Comma)
|
|
|
- , Byte_dash = new Pft_fmt_itm_raw_byt(Byte_ascii.Dash)
|
|
|
- , DayOfYear_int = new Pft_fmt_itm_dayOfYear()
|
|
|
- , DaysInMonth_int = new Pft_fmt_itm_daysInMonth()
|
|
|
- , AmPm_lower = new Pft_fmt_itm_am_pm(true)
|
|
|
- , AmPm_upper = new Pft_fmt_itm_am_pm(false)
|
|
|
- , Roman = new Pft_fmt_itm_roman()
|
|
|
- , Thai = new Pft_fmt_itm_thai()
|
|
|
- , Minguo = new Pft_fmt_itm_minguo()
|
|
|
- , Hebrew_year_num = new Pft_fmt_itm_hebrew_year_num()
|
|
|
- , Hebrew_month_num = new Pft_fmt_itm_hebrew_month_num()
|
|
|
- , Hebrew_day_num = new Pft_fmt_itm_hebrew_day_num()
|
|
|
- , Hebrew_month_days_count = new Pft_fmt_itm_hebrew_month_days_count()
|
|
|
- , Hebrew_month_name_full = new Pft_fmt_itm_hebrew_month_name_full()
|
|
|
- , Hebrew_month_name_gen = new Pft_fmt_itm_hebrew_month_name_gen()
|
|
|
- , Hebrew_numeral = new Pft_fmt_itm_hebrew_numeral()
|
|
|
- , Raw = new Pft_fmt_itm_raw()
|
|
|
- , Iso_fmt = new Pft_fmt_itm_iso_fmt()
|
|
|
- , Rfc_5322 = new Pft_fmt_itm_rfc_5322()
|
|
|
- , Timezone_offset = new Pft_fmt_itm_timezone_offset()
|
|
|
- , Iranian_year_idx = new Pft_fmt_itm_iranian_year_idx()
|
|
|
- , Iranian_month_idx = new Pft_fmt_itm_iranian_month_idx()
|
|
|
- , Iranian_day_idx = new Pft_fmt_itm_iranian_day_idx()
|
|
|
- , Iranian_month_name = new Pft_fmt_itm_iranian_month_name()
|
|
|
- , Hijiri_year_idx = new Pft_fmt_itm_hijiri_year_idx()
|
|
|
- , Hijiri_month_idx = new Pft_fmt_itm_hijiri_month_idx()
|
|
|
- , Hijiri_day_idx = new Pft_fmt_itm_hijiri_day_idx()
|
|
|
- , Hijiri_month_name = new Pft_fmt_itm_hijiri_month_name()
|
|
|
- , Timezone_id_full = new Pft_fmt_itm_timezone_id(Bool_.N)
|
|
|
- , Timezone_id_abrv = new Pft_fmt_itm_timezone_id(Bool_.Y)
|
|
|
- , Timezone_offset_4 = new Pft_fmt_itm_timezone_offset_4(Bool_.N)
|
|
|
- , Timezone_offset_4_colon = new Pft_fmt_itm_timezone_offset_4(Bool_.Y)
|
|
|
- ;
|
|
|
- public static final Btrie_fast_mgr Regy = Btrie_fast_mgr.cs()
|
|
|
- .Add(Byte_ascii.Ltr_Y , Pft_fmt_itm_.Year_len4) // 2012
|
|
|
- .Add(Byte_ascii.Ltr_y , Pft_fmt_itm_.Year_len2) // 12
|
|
|
- .Add(Byte_ascii.Ltr_L , Pft_fmt_itm_.Year_isLeap) // 1,0
|
|
|
- .Add(Byte_ascii.Ltr_o , Pft_fmt_itm_.Year_len4) // 2012: ISO-8601; don't know why it's different vs Ltr_Y
|
|
|
- .Add(Byte_ascii.Ltr_n , Pft_fmt_itm_.Month_int) // 1
|
|
|
- .Add(Byte_ascii.Ltr_m , Pft_fmt_itm_.Month_int_len2) // 01
|
|
|
- .Add(Byte_ascii.Ltr_M , Pft_fmt_itm_.Month_abrv) // Jan
|
|
|
- .Add(Byte_ascii.Ltr_F , Pft_fmt_itm_.Month_name) // January
|
|
|
- .Add("xg" , Pft_fmt_itm_.Month_gen) // January
|
|
|
- .Add(Byte_ascii.Ltr_W , Pft_fmt_itm_.WeekOfYear_int_len2) // 01
|
|
|
- .Add(Byte_ascii.Ltr_j , Pft_fmt_itm_.Day_int) // 1
|
|
|
- .Add(Byte_ascii.Ltr_d , Pft_fmt_itm_.Day_int_len2) // 01
|
|
|
- .Add(Byte_ascii.Ltr_z , Pft_fmt_itm_.DayOfYear_int) // 0
|
|
|
- .Add(Byte_ascii.Ltr_D , Pft_fmt_itm_.Dow_abrv) // Sun
|
|
|
- .Add(Byte_ascii.Ltr_l , Pft_fmt_itm_.Dow_name) // Sunday
|
|
|
- .Add(Byte_ascii.Ltr_N , Pft_fmt_itm_.Dow_base0_int) // 1; Sunday=7
|
|
|
- .Add(Byte_ascii.Ltr_w , Pft_fmt_itm_.Dow_base1_int) // 1; Sunday=0
|
|
|
- .Add(Byte_ascii.Ltr_a , Pft_fmt_itm_.AmPm_lower) // am/pm
|
|
|
- .Add(Byte_ascii.Ltr_A , Pft_fmt_itm_.AmPm_upper) // AM/PM
|
|
|
- .Add(Byte_ascii.Ltr_g , Pft_fmt_itm_.Hour_base12) // 1; Base12
|
|
|
- .Add(Byte_ascii.Ltr_h , Pft_fmt_itm_.Hour_base12_len2) // 01; Base12; pad2
|
|
|
- .Add(Byte_ascii.Ltr_G , Pft_fmt_itm_.Hour_base24) // 13; Base24;
|
|
|
- .Add(Byte_ascii.Ltr_H , Pft_fmt_itm_.Hour_base24_len2) // 13; Base24; pad2
|
|
|
- .Add(Byte_ascii.Ltr_i , Pft_fmt_itm_.Minute_int_len2) // 04
|
|
|
- .Add(Byte_ascii.Ltr_s , Pft_fmt_itm_.Second_int_len2) // 05
|
|
|
- .Add(Byte_ascii.Ltr_t , Pft_fmt_itm_.DaysInMonth_int) // 31
|
|
|
- .Add(Byte_ascii.Ltr_U , Pft_fmt_itm_.Timestamp_unix) // 1343865600
|
|
|
- .Add(Byte_ascii.Ltr_Z , Pft_fmt_itm_.Timezone_offset) // timezone offset in seconds
|
|
|
- .Add(Byte_ascii.Ltr_c , Pft_fmt_itm_.Iso_fmt) // 2012-01-02T03:04:05+00:00
|
|
|
- .Add(Byte_ascii.Ltr_r , Pft_fmt_itm_.Rfc_5322) // Mon 02 Jan 2012 08:04:05 +0000
|
|
|
- .Add(Byte_ascii.Ltr_e , Pft_fmt_itm_.Timezone_id_full) // UTC
|
|
|
- .Add(Byte_ascii.Ltr_T , Pft_fmt_itm_.Timezone_id_abrv) // UTC
|
|
|
- .Add(Byte_ascii.Ltr_O , Pft_fmt_itm_.Timezone_offset_4) // timezone offset in seconds +0000
|
|
|
- .Add(Byte_ascii.Ltr_P , Pft_fmt_itm_.Timezone_offset_4_colon) // timezone offset in seconds with colon +00:00
|
|
|
- .Add("xr" , Pft_fmt_itm_.Roman) // MCXI
|
|
|
- .Add("xkY" , Pft_fmt_itm_.Thai) // Year += 543
|
|
|
- .Add("xoY" , Pft_fmt_itm_.Minguo) // Year -= 1911
|
|
|
- .Add("xn" , Pft_fmt_itm_.Raw) // NOTE: really does nothing; REF.MW: Language.php|sprintfdate does $s .= $num; DATE:2013-12-31
|
|
|
- .Add("xN" , Pft_fmt_itm_.Raw)
|
|
|
- .Add("xjj" , Pft_fmt_itm_.Hebrew_day_num)
|
|
|
- .Add("xjn" , Pft_fmt_itm_.Hebrew_month_num)
|
|
|
- .Add("xjt" , Pft_fmt_itm_.Hebrew_month_days_count)
|
|
|
- .Add("xjF" , Pft_fmt_itm_.Hebrew_month_name_full)
|
|
|
- .Add("xjx" , Pft_fmt_itm_.Hebrew_month_name_gen)
|
|
|
- .Add("xjY" , Pft_fmt_itm_.Hebrew_year_num)
|
|
|
- .Add("xh" , Pft_fmt_itm_.Hebrew_numeral)
|
|
|
- .Add("xij" , Pft_fmt_itm_.Iranian_day_idx)
|
|
|
- .Add("xiF" , Pft_fmt_itm_.Iranian_month_name)
|
|
|
- .Add("xin" , Pft_fmt_itm_.Iranian_month_idx)
|
|
|
- .Add("xiY" , Pft_fmt_itm_.Iranian_year_idx)
|
|
|
- .Add("xmj" , Pft_fmt_itm_.Hijiri_day_idx)
|
|
|
- .Add("xmF" , Pft_fmt_itm_.Hijiri_month_name)
|
|
|
- .Add("xmn" , Pft_fmt_itm_.Hijiri_month_idx)
|
|
|
- .Add("xmY" , Pft_fmt_itm_.Hijiri_year_idx)
|
|
|
- // TODO_OLD: space; "
|
|
|
- ;
|
|
|
-
|
|
|
- public static Pft_fmt_itm[] Parse(Xop_ctx ctx, byte[] fmt) {
|
|
|
- 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;
|
|
|
- }
|
|
|
- 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);
|
|
|
- }
|
|
|
-}
|
|
|
+package gplx.xowa.xtns.pfuncs.times;
|
|
|
+
|
|
|
+import gplx.Bool_;
|
|
|
+import gplx.Byte_;
|
|
|
+import gplx.Byte_ascii;
|
|
|
+import gplx.DateAdp_;
|
|
|
+import gplx.Int_;
|
|
|
+import gplx.List_adp;
|
|
|
+import gplx.String_;
|
|
|
+import gplx.core.btries.Btrie_fast_mgr;
|
|
|
+import gplx.core.btries.Btrie_rv;
|
|
|
+import gplx.xowa.langs.msgs.Xol_msg_itm_;
|
|
|
+import gplx.xowa.parsers.Xop_ctx;
|
|
|
+
|
|
|
+public class Pft_fmt_itm_ {
|
|
|
+ public static final int
|
|
|
+ Tid_seg_int = 1
|
|
|
+ , Tid_hour_base12 = 2
|
|
|
+ , Tid_dow_base0 = 3
|
|
|
+ , Tid_seg_str = 4
|
|
|
+ , Tid_year_isLeap = 5
|
|
|
+ , Tid_timestamp_unix = 6
|
|
|
+ , Tid_raw_ary = 7
|
|
|
+ , Tid_raw_byt = 8
|
|
|
+ , Tid_dayOfYear = 9
|
|
|
+ , Tid_daysInMonth = 10
|
|
|
+ , Tid_AmPm = 11
|
|
|
+ , Tid_roman = 12
|
|
|
+ , Tid_iso_fmt = 13
|
|
|
+ , Tid_rfc_5322 = 14
|
|
|
+ , Tid_raw = 15
|
|
|
+ , Tid_timezone_offset = 16
|
|
|
+ , Tid_thai = 17
|
|
|
+ , Tid_minguo = 18
|
|
|
+ , Tid_hebrew_year_num = 21
|
|
|
+ , Tid_hebrew_month_num = 20
|
|
|
+ , Tid_hebrew_day_num = 19
|
|
|
+ , Tid_hebrew_month_days_count = 22
|
|
|
+ , Tid_hebrew_month_name_full = 23
|
|
|
+ , Tid_hebrew_month_name_gen = 24
|
|
|
+ , Tid_hebrew_numeral = 25
|
|
|
+ , Tid_iranian_year_idx = 26
|
|
|
+ , Tid_iranian_month_idx = 27
|
|
|
+ , Tid_iranian_day_idx = 28
|
|
|
+ , Tid_iranian_month_name = 29
|
|
|
+ , Tid_hijri_year_idx = 30
|
|
|
+ , Tid_hijri_month_idx = 31
|
|
|
+ , Tid_hijri_day_idx = 32
|
|
|
+ , Tid_hijri_month_name = 33
|
|
|
+ , Tid_timezone_id_full = 35
|
|
|
+ , Tid_timezone_id_abrv = 36
|
|
|
+ , Tid_timezone_offset_4 = 37
|
|
|
+ , Tid_timezone_offset_4_colon = 38
|
|
|
+ ;
|
|
|
+
|
|
|
+ public static final Pft_fmt_itm
|
|
|
+ Year_len4 = new Pft_fmt_itm_seg_int(DateAdp_.SegIdx_year , 4, Bool_.Y)
|
|
|
+ , Year_len2 = new Pft_fmt_itm_seg_int(DateAdp_.SegIdx_year , 2, Bool_.Y)
|
|
|
+ , Month_int_len2 = new Pft_fmt_itm_seg_int(DateAdp_.SegIdx_month , 2, Bool_.Y)
|
|
|
+ , Month_int = new Pft_fmt_itm_seg_int(DateAdp_.SegIdx_month , 2, Bool_.N)
|
|
|
+ , Day_int_len2 = new Pft_fmt_itm_seg_int(DateAdp_.SegIdx_day , 2, Bool_.Y)
|
|
|
+ , Day_int = new Pft_fmt_itm_seg_int(DateAdp_.SegIdx_day , 2, Bool_.N)
|
|
|
+ , Hour_base24_len2 = new Pft_fmt_itm_seg_int(DateAdp_.SegIdx_hour , 2, Bool_.Y)
|
|
|
+ , Hour_base24 = new Pft_fmt_itm_seg_int(DateAdp_.SegIdx_hour , 2, Bool_.N)
|
|
|
+ , Hour_base12_len2 = new Pft_fmt_itm_hour_base12(Bool_.Y)
|
|
|
+ , Hour_base12 = new Pft_fmt_itm_hour_base12(Bool_.N)
|
|
|
+ , Minute_int_len2 = new Pft_fmt_itm_seg_int(DateAdp_.SegIdx_minute , 2, Bool_.Y)
|
|
|
+ , Second_int_len2 = new Pft_fmt_itm_seg_int(DateAdp_.SegIdx_second , 2, Bool_.Y)
|
|
|
+ , Dow_base1_int = new Pft_fmt_itm_seg_int(DateAdp_.SegIdx_dayOfWeek , 1, Bool_.Y)
|
|
|
+ , Dow_base0_int = new Pft_fmt_itm_dow_base0()
|
|
|
+ , WeekOfYear_int = new Pft_fmt_itm_seg_int(DateAdp_.SegIdx_weekOfYear , 2, Bool_.N)
|
|
|
+ , WeekOfYear_int_len2 = new Pft_fmt_itm_seg_int(DateAdp_.SegIdx_weekOfYear , 2, Bool_.Y)
|
|
|
+ , Month_abrv = new Pft_fmt_itm_seg_str(DateAdp_.SegIdx_month, Xol_msg_itm_.Id_dte_month_abrv_jan - Int_.Base1) // Jan
|
|
|
+ , Month_name = new Pft_fmt_itm_seg_str(DateAdp_.SegIdx_month, Xol_msg_itm_.Id_dte_month_name_january - Int_.Base1) // January
|
|
|
+ , Month_gen = new Pft_fmt_itm_seg_str(DateAdp_.SegIdx_month, Xol_msg_itm_.Id_dte_month_gen_january - Int_.Base1) // January
|
|
|
+ , Dow_abrv = new Pft_fmt_itm_seg_str(DateAdp_.SegIdx_dayOfWeek, Xol_msg_itm_.Id_dte_dow_abrv_sun) // Sun
|
|
|
+ , Dow_name = new Pft_fmt_itm_seg_str(DateAdp_.SegIdx_dayOfWeek, Xol_msg_itm_.Id_dte_dow_name_sunday) // Sunday
|
|
|
+ , Year_isLeap = new Pft_fmt_itm_year_isLeap()
|
|
|
+ , Timestamp_unix = new Pft_fmt_itm_timestamp_unix()
|
|
|
+ , Byte_space = new Pft_fmt_itm_raw_byt(Byte_ascii.Space)
|
|
|
+ , Byte_comma = new Pft_fmt_itm_raw_byt(Byte_ascii.Comma)
|
|
|
+ , Byte_dash = new Pft_fmt_itm_raw_byt(Byte_ascii.Dash)
|
|
|
+ , DayOfYear_int = new Pft_fmt_itm_dayOfYear()
|
|
|
+ , DaysInMonth_int = new Pft_fmt_itm_daysInMonth()
|
|
|
+ , AmPm_lower = new Pft_fmt_itm_am_pm(true)
|
|
|
+ , AmPm_upper = new Pft_fmt_itm_am_pm(false)
|
|
|
+ , Roman = new Pft_fmt_itm_roman()
|
|
|
+ , Thai = new Pft_fmt_itm_thai()
|
|
|
+ , Minguo = new Pft_fmt_itm_minguo()
|
|
|
+ , Hebrew_year_num = new Pft_fmt_itm_hebrew_year_num()
|
|
|
+ , Hebrew_month_num = new Pft_fmt_itm_hebrew_month_num()
|
|
|
+ , Hebrew_day_num = new Pft_fmt_itm_hebrew_day_num()
|
|
|
+ , Hebrew_month_days_count = new Pft_fmt_itm_hebrew_month_days_count()
|
|
|
+ , Hebrew_month_name_full = new Pft_fmt_itm_hebrew_month_name_full()
|
|
|
+ , Hebrew_month_name_gen = new Pft_fmt_itm_hebrew_month_name_gen()
|
|
|
+ , Hebrew_numeral = new Pft_fmt_itm_hebrew_numeral()
|
|
|
+ , Raw = new Pft_fmt_itm_raw()
|
|
|
+ , Iso_fmt = new Pft_fmt_itm_iso_fmt()
|
|
|
+ , Rfc_5322 = new Pft_fmt_itm_rfc_5322()
|
|
|
+ , Timezone_offset = new Pft_fmt_itm_timezone_offset()
|
|
|
+ , Iranian_year_idx = new Pft_fmt_itm_iranian_year_idx()
|
|
|
+ , Iranian_month_idx = new Pft_fmt_itm_iranian_month_idx()
|
|
|
+ , Iranian_day_idx = new Pft_fmt_itm_iranian_day_idx()
|
|
|
+ , Iranian_month_name = new Pft_fmt_itm_iranian_month_name()
|
|
|
+ , hijri_year_idx = new Pft_fmt_itm_hijri_year_idx()
|
|
|
+ , hijri_month_idx = new Pft_fmt_itm_hijri_month_idx()
|
|
|
+ , hijri_day_idx = new Pft_fmt_itm_hijri_day_idx()
|
|
|
+ , hijri_month_name = new Pft_fmt_itm_hijri_month_name()
|
|
|
+ , Timezone_id_full = new Pft_fmt_itm_timezone_id(Bool_.N)
|
|
|
+ , Timezone_id_abrv = new Pft_fmt_itm_timezone_id(Bool_.Y)
|
|
|
+ , Timezone_offset_4 = new Pft_fmt_itm_timezone_offset_4(Bool_.N)
|
|
|
+ , Timezone_offset_4_colon = new Pft_fmt_itm_timezone_offset_4(Bool_.Y)
|
|
|
+ ;
|
|
|
+ public static final Btrie_fast_mgr Regy = Btrie_fast_mgr.cs()
|
|
|
+ .Add(Byte_ascii.Ltr_Y , Pft_fmt_itm_.Year_len4) // 2012
|
|
|
+ .Add(Byte_ascii.Ltr_y , Pft_fmt_itm_.Year_len2) // 12
|
|
|
+ .Add(Byte_ascii.Ltr_L , Pft_fmt_itm_.Year_isLeap) // 1,0
|
|
|
+ .Add(Byte_ascii.Ltr_o , Pft_fmt_itm_.Year_len4) // 2012: ISO-8601; don't know why it's different vs Ltr_Y
|
|
|
+ .Add(Byte_ascii.Ltr_n , Pft_fmt_itm_.Month_int) // 1
|
|
|
+ .Add(Byte_ascii.Ltr_m , Pft_fmt_itm_.Month_int_len2) // 01
|
|
|
+ .Add(Byte_ascii.Ltr_M , Pft_fmt_itm_.Month_abrv) // Jan
|
|
|
+ .Add(Byte_ascii.Ltr_F , Pft_fmt_itm_.Month_name) // January
|
|
|
+ .Add("xg" , Pft_fmt_itm_.Month_gen) // January
|
|
|
+ .Add(Byte_ascii.Ltr_W , Pft_fmt_itm_.WeekOfYear_int_len2) // 01
|
|
|
+ .Add(Byte_ascii.Ltr_j , Pft_fmt_itm_.Day_int) // 1
|
|
|
+ .Add(Byte_ascii.Ltr_d , Pft_fmt_itm_.Day_int_len2) // 01
|
|
|
+ .Add(Byte_ascii.Ltr_z , Pft_fmt_itm_.DayOfYear_int) // 0
|
|
|
+ .Add(Byte_ascii.Ltr_D , Pft_fmt_itm_.Dow_abrv) // Sun
|
|
|
+ .Add(Byte_ascii.Ltr_l , Pft_fmt_itm_.Dow_name) // Sunday
|
|
|
+ .Add(Byte_ascii.Ltr_N , Pft_fmt_itm_.Dow_base0_int) // 1; Sunday=7
|
|
|
+ .Add(Byte_ascii.Ltr_w , Pft_fmt_itm_.Dow_base1_int) // 1; Sunday=0
|
|
|
+ .Add(Byte_ascii.Ltr_a , Pft_fmt_itm_.AmPm_lower) // am/pm
|
|
|
+ .Add(Byte_ascii.Ltr_A , Pft_fmt_itm_.AmPm_upper) // AM/PM
|
|
|
+ .Add(Byte_ascii.Ltr_g , Pft_fmt_itm_.Hour_base12) // 1; Base12
|
|
|
+ .Add(Byte_ascii.Ltr_h , Pft_fmt_itm_.Hour_base12_len2) // 01; Base12; pad2
|
|
|
+ .Add(Byte_ascii.Ltr_G , Pft_fmt_itm_.Hour_base24) // 13; Base24;
|
|
|
+ .Add(Byte_ascii.Ltr_H , Pft_fmt_itm_.Hour_base24_len2) // 13; Base24; pad2
|
|
|
+ .Add(Byte_ascii.Ltr_i , Pft_fmt_itm_.Minute_int_len2) // 04
|
|
|
+ .Add(Byte_ascii.Ltr_s , Pft_fmt_itm_.Second_int_len2) // 05
|
|
|
+ .Add(Byte_ascii.Ltr_t , Pft_fmt_itm_.DaysInMonth_int) // 31
|
|
|
+ .Add(Byte_ascii.Ltr_U , Pft_fmt_itm_.Timestamp_unix) // 1343865600
|
|
|
+ .Add(Byte_ascii.Ltr_Z , Pft_fmt_itm_.Timezone_offset) // timezone offset in seconds
|
|
|
+ .Add(Byte_ascii.Ltr_c , Pft_fmt_itm_.Iso_fmt) // 2012-01-02T03:04:05+00:00
|
|
|
+ .Add(Byte_ascii.Ltr_r , Pft_fmt_itm_.Rfc_5322) // Mon 02 Jan 2012 08:04:05 +0000
|
|
|
+ .Add(Byte_ascii.Ltr_e , Pft_fmt_itm_.Timezone_id_full) // UTC
|
|
|
+ .Add(Byte_ascii.Ltr_T , Pft_fmt_itm_.Timezone_id_abrv) // UTC
|
|
|
+ .Add(Byte_ascii.Ltr_O , Pft_fmt_itm_.Timezone_offset_4) // timezone offset in seconds +0000
|
|
|
+ .Add(Byte_ascii.Ltr_P , Pft_fmt_itm_.Timezone_offset_4_colon) // timezone offset in seconds with colon +00:00
|
|
|
+ .Add("xr" , Pft_fmt_itm_.Roman) // MCXI
|
|
|
+ .Add("xkY" , Pft_fmt_itm_.Thai) // Year += 543
|
|
|
+ .Add("xoY" , Pft_fmt_itm_.Minguo) // Year -= 1911
|
|
|
+ .Add("xn" , Pft_fmt_itm_.Raw) // NOTE: really does nothing; REF.MW: Language.php|sprintfdate does $s .= $num; DATE:2013-12-31
|
|
|
+ .Add("xN" , Pft_fmt_itm_.Raw)
|
|
|
+ .Add("xjj" , Pft_fmt_itm_.Hebrew_day_num)
|
|
|
+ .Add("xjn" , Pft_fmt_itm_.Hebrew_month_num)
|
|
|
+ .Add("xjt" , Pft_fmt_itm_.Hebrew_month_days_count)
|
|
|
+ .Add("xjF" , Pft_fmt_itm_.Hebrew_month_name_full)
|
|
|
+ .Add("xjx" , Pft_fmt_itm_.Hebrew_month_name_gen)
|
|
|
+ .Add("xjY" , Pft_fmt_itm_.Hebrew_year_num)
|
|
|
+ .Add("xh" , Pft_fmt_itm_.Hebrew_numeral)
|
|
|
+ .Add("xij" , Pft_fmt_itm_.Iranian_day_idx)
|
|
|
+ .Add("xiF" , Pft_fmt_itm_.Iranian_month_name)
|
|
|
+ .Add("xin" , Pft_fmt_itm_.Iranian_month_idx)
|
|
|
+ .Add("xiY" , Pft_fmt_itm_.Iranian_year_idx)
|
|
|
+ .Add("xmj" , Pft_fmt_itm_.hijri_day_idx)
|
|
|
+ .Add("xmF" , Pft_fmt_itm_.hijri_month_name)
|
|
|
+ .Add("xmn" , Pft_fmt_itm_.hijri_month_idx)
|
|
|
+ .Add("xmY" , Pft_fmt_itm_.hijri_year_idx)
|
|
|
+ // TODO_OLD: space; "
|
|
|
+ ;
|
|
|
+
|
|
|
+ public static Pft_fmt_itm[] Parse(Xop_ctx ctx, byte[] fmt) {
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+}
|