diff --git a/400_xowa/src/gplx/xowa/xtns/pfuncs/times/Pft_fmt_itm_.java b/400_xowa/src/gplx/xowa/xtns/pfuncs/times/Pft_fmt_itm_.java index 6a4556f52..9169af585 100644 --- a/400_xowa/src/gplx/xowa/xtns/pfuncs/times/Pft_fmt_itm_.java +++ b/400_xowa/src/gplx/xowa/xtns/pfuncs/times/Pft_fmt_itm_.java @@ -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); + } +} diff --git a/400_xowa/src/gplx/xowa/xtns/pfuncs/times/Pft_fmt_itm_foreign.java b/400_xowa/src/gplx/xowa/xtns/pfuncs/times/Pft_fmt_itm_foreign.java index 10cfc3fc3..da9551808 100644 --- a/400_xowa/src/gplx/xowa/xtns/pfuncs/times/Pft_fmt_itm_foreign.java +++ b/400_xowa/src/gplx/xowa/xtns/pfuncs/times/Pft_fmt_itm_foreign.java @@ -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,137 +13,142 @@ 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.xowa.langs.*; -class Pft_fmt_itm_roman implements Pft_fmt_itm { - public int TypeId() {return Pft_fmt_itm_.Tid_roman;} - public void Fmt(Bry_bfr bfr, Xowe_wiki wiki, Xol_lang_itm lang, DateAdp date, Pft_func_formatdate_bldr bldr) { - int nxt_idx = bldr.Idx_cur() + 1; - Pft_fmt_itm[] ary = bldr.Fmt_itms(); - if (nxt_idx < ary.length) { - Pft_fmt_itm itm = (Pft_fmt_itm)ary[nxt_idx]; - if (itm.TypeId() == Pft_fmt_itm_.Tid_seg_int) { - Pft_fmt_itm_seg_int nxt_int = (Pft_fmt_itm_seg_int)ary[nxt_idx]; // FUTURE: should check tkn type - int v = date.Segment(nxt_int.SegIdx()); - Pfxtp_roman.ToRoman(v, bfr); - bldr.Idx_nxt_(nxt_idx + 1); - return; - } - } - bfr.Add_str_a7("xf"); - } -} -class Pft_fmt_itm_thai implements Pft_fmt_itm { - public int TypeId() {return Pft_fmt_itm_.Tid_thai;} - public void Fmt(Bry_bfr bfr, Xowe_wiki wiki, Xol_lang_itm lang, DateAdp date, Pft_func_formatdate_bldr bldr) { - bfr.Add_int_variable(date.Year() + 543); - } -} -class Pft_fmt_itm_minguo implements Pft_fmt_itm { - public int TypeId() {return Pft_fmt_itm_.Tid_minguo;} - public void Fmt(Bry_bfr bfr, Xowe_wiki wiki, Xol_lang_itm lang, DateAdp date, Pft_func_formatdate_bldr bldr) { - bfr.Add_int_variable(date.Year() - 1911); - } -} -class Pft_fmt_itm_hebrew_year_num implements Pft_fmt_itm { - public int TypeId() {return Pft_fmt_itm_.Tid_hebrew_year_num;} - public void Fmt(Bry_bfr bfr, Xowe_wiki wiki, Xol_lang_itm lang, DateAdp date, Pft_func_formatdate_bldr bldr) { - int[] hebrew_date = Pft_fmt_itm_hebrew_.Calc_hebrew_date(date); - bfr.Add_int_variable(hebrew_date[Pft_fmt_itm_hebrew_.Rslt_year_num]); - } -} -class Pft_fmt_itm_hebrew_month_num implements Pft_fmt_itm { - public int TypeId() {return Pft_fmt_itm_.Tid_hebrew_month_num;} - public void Fmt(Bry_bfr bfr, Xowe_wiki wiki, Xol_lang_itm lang, DateAdp date, Pft_func_formatdate_bldr bldr) { - int[] hebrew_date = Pft_fmt_itm_hebrew_.Calc_hebrew_date(date); - bfr.Add_int_variable(hebrew_date[Pft_fmt_itm_hebrew_.Rslt_month_num]); - } -} -class Pft_fmt_itm_hebrew_day_num implements Pft_fmt_itm { - public int TypeId() {return Pft_fmt_itm_.Tid_hebrew_day_num;} - public void Fmt(Bry_bfr bfr, Xowe_wiki wiki, Xol_lang_itm lang, DateAdp date, Pft_func_formatdate_bldr bldr) { - int[] hebrew_date = Pft_fmt_itm_hebrew_.Calc_hebrew_date(date); - bfr.Add_int_variable(hebrew_date[Pft_fmt_itm_hebrew_.Rslt_day_num]); - } -} -class Pft_fmt_itm_hebrew_month_days_count implements Pft_fmt_itm { - public int TypeId() {return Pft_fmt_itm_.Tid_hebrew_month_days_count;} - public void Fmt(Bry_bfr bfr, Xowe_wiki wiki, Xol_lang_itm lang, DateAdp date, Pft_func_formatdate_bldr bldr) { - int[] hebrew_date = Pft_fmt_itm_hebrew_.Calc_hebrew_date(date); - bfr.Add_int_variable(hebrew_date[Pft_fmt_itm_hebrew_.Rslt_month_days_count]); - } -} -class Pft_fmt_itm_hebrew_month_name_full implements Pft_fmt_itm { - public int TypeId() {return Pft_fmt_itm_.Tid_hebrew_month_name_full;} - public void Fmt(Bry_bfr bfr, Xowe_wiki wiki, Xol_lang_itm lang, DateAdp date, Pft_func_formatdate_bldr bldr) { - bfr.Add(Pft_fmt_itm_hebrew_.Get_hebrew_month_name_full(wiki, date)); - } -} -class Pft_fmt_itm_hebrew_month_name_gen implements Pft_fmt_itm { - public int TypeId() {return Pft_fmt_itm_.Tid_hebrew_month_name_gen;} - public void Fmt(Bry_bfr bfr, Xowe_wiki wiki, Xol_lang_itm lang, DateAdp date, Pft_func_formatdate_bldr bldr) { - bfr.Add(Pft_fmt_itm_hebrew_.Get_hebrew_month_name_gen(wiki, date)); - } -} -class Pft_fmt_itm_hebrew_numeral implements Pft_fmt_itm { - public int TypeId() {return Pft_fmt_itm_.Tid_hebrew_numeral;} - public void Fmt(Bry_bfr bfr, Xowe_wiki wiki, Xol_lang_itm lang, DateAdp date, Pft_func_formatdate_bldr bldr) { - int num_int = bfr.To_int_and_clear(-1); - byte[] num_bry = Pft_fmt_itm_hebrew_.Calc_hebrew_numeral(num_int); - bfr.Add(num_bry); - } -} -class Pft_fmt_itm_iranian_year_idx implements Pft_fmt_itm { - public int TypeId() {return Pft_fmt_itm_.Tid_iranian_year_idx;} - public void Fmt(Bry_bfr bfr, Xowe_wiki wiki, Xol_lang_itm lang, DateAdp date, Pft_func_formatdate_bldr bldr) { - int[] seg_ary = Pft_fmt_itm_iranian.Calc_date(date); - bfr.Add_int_variable(seg_ary[Pft_fmt_itm_iranian.Rslt__year]); - } -} -class Pft_fmt_itm_iranian_month_idx implements Pft_fmt_itm { - public int TypeId() {return Pft_fmt_itm_.Tid_iranian_month_idx;} - public void Fmt(Bry_bfr bfr, Xowe_wiki wiki, Xol_lang_itm lang, DateAdp date, Pft_func_formatdate_bldr bldr) { - int[] seg_ary = Pft_fmt_itm_iranian.Calc_date(date); - bfr.Add_int_variable(seg_ary[Pft_fmt_itm_iranian.Rslt__month]); - } -} -class Pft_fmt_itm_iranian_day_idx implements Pft_fmt_itm { - public int TypeId() {return Pft_fmt_itm_.Tid_iranian_day_idx;} - public void Fmt(Bry_bfr bfr, Xowe_wiki wiki, Xol_lang_itm lang, DateAdp date, Pft_func_formatdate_bldr bldr) { - int[] seg_ary = Pft_fmt_itm_iranian.Calc_date(date); - bfr.Add_int_variable(seg_ary[Pft_fmt_itm_iranian.Rslt__day]); - } -} -class Pft_fmt_itm_iranian_month_name implements Pft_fmt_itm { - public int TypeId() {return Pft_fmt_itm_.Tid_iranian_month_name;} - public void Fmt(Bry_bfr bfr, Xowe_wiki wiki, Xol_lang_itm lang, DateAdp date, Pft_func_formatdate_bldr bldr) { - bfr.Add(Pft_fmt_itm_iranian.Get_month_name(wiki, date)); - } -} -class Pft_fmt_itm_hijiri_year_idx implements Pft_fmt_itm { - public int TypeId() {return Pft_fmt_itm_.Tid_hijiri_year_idx;} - public void Fmt(Bry_bfr bfr, Xowe_wiki wiki, Xol_lang_itm lang, DateAdp date, Pft_func_formatdate_bldr bldr) { - int[] seg_ary = Pft_fmt_itm_hijiri.Calc_date(date); - bfr.Add_int_variable(seg_ary[Pft_fmt_itm_hijiri.Rslt__year]); - } -} -class Pft_fmt_itm_hijiri_month_idx implements Pft_fmt_itm { - public int TypeId() {return Pft_fmt_itm_.Tid_hijiri_month_idx;} - public void Fmt(Bry_bfr bfr, Xowe_wiki wiki, Xol_lang_itm lang, DateAdp date, Pft_func_formatdate_bldr bldr) { - int[] seg_ary = Pft_fmt_itm_hijiri.Calc_date(date); - bfr.Add_int_variable(seg_ary[Pft_fmt_itm_hijiri.Rslt__month]); - } -} -class Pft_fmt_itm_hijiri_day_idx implements Pft_fmt_itm { - public int TypeId() {return Pft_fmt_itm_.Tid_hijiri_day_idx;} - public void Fmt(Bry_bfr bfr, Xowe_wiki wiki, Xol_lang_itm lang, DateAdp date, Pft_func_formatdate_bldr bldr) { - int[] seg_ary = Pft_fmt_itm_hijiri.Calc_date(date); - bfr.Add_int_variable(seg_ary[Pft_fmt_itm_hijiri.Rslt__day]); - } -} -class Pft_fmt_itm_hijiri_month_name implements Pft_fmt_itm { - public int TypeId() {return Pft_fmt_itm_.Tid_hijiri_month_name;} - public void Fmt(Bry_bfr bfr, Xowe_wiki wiki, Xol_lang_itm lang, DateAdp date, Pft_func_formatdate_bldr bldr) { - bfr.Add(Pft_fmt_itm_hijiri.Get_month_name(wiki, date)); - } -} +package gplx.xowa.xtns.pfuncs.times; + +import gplx.Bry_bfr; +import gplx.DateAdp; +import gplx.xowa.Xowe_wiki; +import gplx.xowa.langs.Xol_lang_itm; + +class Pft_fmt_itm_roman implements Pft_fmt_itm { + public int TypeId() {return Pft_fmt_itm_.Tid_roman;} + public void Fmt(Bry_bfr bfr, Xowe_wiki wiki, Xol_lang_itm lang, DateAdp date, Pft_func_formatdate_bldr bldr) { + int nxt_idx = bldr.Idx_cur() + 1; + Pft_fmt_itm[] ary = bldr.Fmt_itms(); + if (nxt_idx < ary.length) { + Pft_fmt_itm itm = (Pft_fmt_itm)ary[nxt_idx]; + if (itm.TypeId() == Pft_fmt_itm_.Tid_seg_int) { + Pft_fmt_itm_seg_int nxt_int = (Pft_fmt_itm_seg_int)ary[nxt_idx]; // FUTURE: should check tkn type + int v = date.Segment(nxt_int.SegIdx()); + Pfxtp_roman.ToRoman(v, bfr); + bldr.Idx_nxt_(nxt_idx + 1); + return; + } + } + bfr.Add_str_a7("xf"); + } +} +class Pft_fmt_itm_thai implements Pft_fmt_itm { + public int TypeId() {return Pft_fmt_itm_.Tid_thai;} + public void Fmt(Bry_bfr bfr, Xowe_wiki wiki, Xol_lang_itm lang, DateAdp date, Pft_func_formatdate_bldr bldr) { + bfr.Add_int_variable(date.Year() + 543); + } +} +class Pft_fmt_itm_minguo implements Pft_fmt_itm { + public int TypeId() {return Pft_fmt_itm_.Tid_minguo;} + public void Fmt(Bry_bfr bfr, Xowe_wiki wiki, Xol_lang_itm lang, DateAdp date, Pft_func_formatdate_bldr bldr) { + bfr.Add_int_variable(date.Year() - 1911); + } +} +class Pft_fmt_itm_hebrew_year_num implements Pft_fmt_itm { + public int TypeId() {return Pft_fmt_itm_.Tid_hebrew_year_num;} + public void Fmt(Bry_bfr bfr, Xowe_wiki wiki, Xol_lang_itm lang, DateAdp date, Pft_func_formatdate_bldr bldr) { + int[] hebrew_date = Pft_fmt_itm_hebrew_.Calc_hebrew_date(date); + bfr.Add_int_variable(hebrew_date[Pft_fmt_itm_hebrew_.Rslt_year_num]); + } +} +class Pft_fmt_itm_hebrew_month_num implements Pft_fmt_itm { + public int TypeId() {return Pft_fmt_itm_.Tid_hebrew_month_num;} + public void Fmt(Bry_bfr bfr, Xowe_wiki wiki, Xol_lang_itm lang, DateAdp date, Pft_func_formatdate_bldr bldr) { + int[] hebrew_date = Pft_fmt_itm_hebrew_.Calc_hebrew_date(date); + bfr.Add_int_variable(hebrew_date[Pft_fmt_itm_hebrew_.Rslt_month_num]); + } +} +class Pft_fmt_itm_hebrew_day_num implements Pft_fmt_itm { + public int TypeId() {return Pft_fmt_itm_.Tid_hebrew_day_num;} + public void Fmt(Bry_bfr bfr, Xowe_wiki wiki, Xol_lang_itm lang, DateAdp date, Pft_func_formatdate_bldr bldr) { + int[] hebrew_date = Pft_fmt_itm_hebrew_.Calc_hebrew_date(date); + bfr.Add_int_variable(hebrew_date[Pft_fmt_itm_hebrew_.Rslt_day_num]); + } +} +class Pft_fmt_itm_hebrew_month_days_count implements Pft_fmt_itm { + public int TypeId() {return Pft_fmt_itm_.Tid_hebrew_month_days_count;} + public void Fmt(Bry_bfr bfr, Xowe_wiki wiki, Xol_lang_itm lang, DateAdp date, Pft_func_formatdate_bldr bldr) { + int[] hebrew_date = Pft_fmt_itm_hebrew_.Calc_hebrew_date(date); + bfr.Add_int_variable(hebrew_date[Pft_fmt_itm_hebrew_.Rslt_month_days_count]); + } +} +class Pft_fmt_itm_hebrew_month_name_full implements Pft_fmt_itm { + public int TypeId() {return Pft_fmt_itm_.Tid_hebrew_month_name_full;} + public void Fmt(Bry_bfr bfr, Xowe_wiki wiki, Xol_lang_itm lang, DateAdp date, Pft_func_formatdate_bldr bldr) { + bfr.Add(Pft_fmt_itm_hebrew_.Get_hebrew_month_name_full(wiki, date)); + } +} +class Pft_fmt_itm_hebrew_month_name_gen implements Pft_fmt_itm { + public int TypeId() {return Pft_fmt_itm_.Tid_hebrew_month_name_gen;} + public void Fmt(Bry_bfr bfr, Xowe_wiki wiki, Xol_lang_itm lang, DateAdp date, Pft_func_formatdate_bldr bldr) { + bfr.Add(Pft_fmt_itm_hebrew_.Get_hebrew_month_name_gen(wiki, date)); + } +} +class Pft_fmt_itm_hebrew_numeral implements Pft_fmt_itm { + public int TypeId() {return Pft_fmt_itm_.Tid_hebrew_numeral;} + public void Fmt(Bry_bfr bfr, Xowe_wiki wiki, Xol_lang_itm lang, DateAdp date, Pft_func_formatdate_bldr bldr) { + int num_int = bfr.To_int_and_clear(-1); + byte[] num_bry = Pft_fmt_itm_hebrew_.Calc_hebrew_numeral(num_int); + bfr.Add(num_bry); + } +} +class Pft_fmt_itm_iranian_year_idx implements Pft_fmt_itm { + public int TypeId() {return Pft_fmt_itm_.Tid_iranian_year_idx;} + public void Fmt(Bry_bfr bfr, Xowe_wiki wiki, Xol_lang_itm lang, DateAdp date, Pft_func_formatdate_bldr bldr) { + int[] seg_ary = Pft_fmt_itm_iranian.Calc_date(date); + bfr.Add_int_variable(seg_ary[Pft_fmt_itm_iranian.Rslt__year]); + } +} +class Pft_fmt_itm_iranian_month_idx implements Pft_fmt_itm { + public int TypeId() {return Pft_fmt_itm_.Tid_iranian_month_idx;} + public void Fmt(Bry_bfr bfr, Xowe_wiki wiki, Xol_lang_itm lang, DateAdp date, Pft_func_formatdate_bldr bldr) { + int[] seg_ary = Pft_fmt_itm_iranian.Calc_date(date); + bfr.Add_int_variable(seg_ary[Pft_fmt_itm_iranian.Rslt__month]); + } +} +class Pft_fmt_itm_iranian_day_idx implements Pft_fmt_itm { + public int TypeId() {return Pft_fmt_itm_.Tid_iranian_day_idx;} + public void Fmt(Bry_bfr bfr, Xowe_wiki wiki, Xol_lang_itm lang, DateAdp date, Pft_func_formatdate_bldr bldr) { + int[] seg_ary = Pft_fmt_itm_iranian.Calc_date(date); + bfr.Add_int_variable(seg_ary[Pft_fmt_itm_iranian.Rslt__day]); + } +} +class Pft_fmt_itm_iranian_month_name implements Pft_fmt_itm { + public int TypeId() {return Pft_fmt_itm_.Tid_iranian_month_name;} + public void Fmt(Bry_bfr bfr, Xowe_wiki wiki, Xol_lang_itm lang, DateAdp date, Pft_func_formatdate_bldr bldr) { + bfr.Add(Pft_fmt_itm_iranian.Get_month_name(wiki, date)); + } +} +class Pft_fmt_itm_hijri_year_idx implements Pft_fmt_itm { + public int TypeId() {return Pft_fmt_itm_.Tid_hijri_year_idx;} + public void Fmt(Bry_bfr bfr, Xowe_wiki wiki, Xol_lang_itm lang, DateAdp date, Pft_func_formatdate_bldr bldr) { + int[] seg_ary = Pft_fmt_itm_hijri.Calc_date(date); + bfr.Add_int_variable(seg_ary[Pft_fmt_itm_hijri.Rslt__year]); + } +} +class Pft_fmt_itm_hijri_month_idx implements Pft_fmt_itm { + public int TypeId() {return Pft_fmt_itm_.Tid_hijri_month_idx;} + public void Fmt(Bry_bfr bfr, Xowe_wiki wiki, Xol_lang_itm lang, DateAdp date, Pft_func_formatdate_bldr bldr) { + int[] seg_ary = Pft_fmt_itm_hijri.Calc_date(date); + bfr.Add_int_variable(seg_ary[Pft_fmt_itm_hijri.Rslt__month]); + } +} +class Pft_fmt_itm_hijri_day_idx implements Pft_fmt_itm { + public int TypeId() {return Pft_fmt_itm_.Tid_hijri_day_idx;} + public void Fmt(Bry_bfr bfr, Xowe_wiki wiki, Xol_lang_itm lang, DateAdp date, Pft_func_formatdate_bldr bldr) { + int[] seg_ary = Pft_fmt_itm_hijri.Calc_date(date); + bfr.Add_int_variable(seg_ary[Pft_fmt_itm_hijri.Rslt__day]); + } +} +class Pft_fmt_itm_hijri_month_name implements Pft_fmt_itm { + public int TypeId() {return Pft_fmt_itm_.Tid_hijri_month_name;} + public void Fmt(Bry_bfr bfr, Xowe_wiki wiki, Xol_lang_itm lang, DateAdp date, Pft_func_formatdate_bldr bldr) { + bfr.Add(Pft_fmt_itm_hijri.Get_month_name(wiki, date)); + } +} diff --git a/400_xowa/src/gplx/xowa/xtns/pfuncs/times/Pft_fmt_itm_hijiri.java b/400_xowa/src/gplx/xowa/xtns/pfuncs/times/Pft_fmt_itm_hijiri.java index 61230b2d8..fab6415c5 100644 --- a/400_xowa/src/gplx/xowa/xtns/pfuncs/times/Pft_fmt_itm_hijiri.java +++ b/400_xowa/src/gplx/xowa/xtns/pfuncs/times/Pft_fmt_itm_hijiri.java @@ -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,59 +13,65 @@ 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.*; -class Pft_fmt_itm_hijiri { - public static int[] Calc_date(DateAdp date) { - int[] rv = new int[3]; // MEM:cache - Calc_date(rv, date.Year(), date.Month(), date.Day()); - return rv; - } - public static boolean Calc_date(int[] rv, int greg_y, int greg_m, int greg_d) { - int hiji_d = greg_d; - int hiji_m = greg_m; - int hiji_y = greg_y; - int tmp_jd = 0; - if ( - (hiji_y > 1582) || ((hiji_y == 1582) && (hiji_m > 10)) || - ((hiji_y == 1582) && (hiji_m == 10) && (hiji_d > 14)) - ) - { - tmp_jd = (int)((1461 * (hiji_y + 4800 + (int)((hiji_m - 14) / 12))) / 4) + - (int)((367 * (hiji_m - 2 - 12 * ((int)((hiji_m - 14) / 12)))) / 12) - - (int)((3 * (int)(((hiji_y + 4900 + (int)((hiji_m - 14) / 12)) / 100))) / 4) + - hiji_d - 32075; - } else { - tmp_jd = 367 * hiji_y - (int)((7 * (hiji_y + 5001 + (int)((hiji_m - 9) / 7))) / 4) + - (int)((275 * hiji_m) / 9) + hiji_d + 1729777; - } - int tmp_l = tmp_jd -1948440 + 10632; - int tmp_n = (int)((tmp_l - 1) / 10631); - tmp_l = tmp_l - 10631 * tmp_n + 354; - int tmp_j = ((int)((10985 - tmp_l) / 5316)) * ((int)((50 * tmp_l) / 17719)) + ((int)(tmp_l / 5670)) * ((int)((43 * tmp_l) / 15238)); - tmp_l = tmp_l - ((int)((30 - tmp_j) / 15)) * ((int)((17719 * tmp_j) / 50)) - ((int)(tmp_j / 16)) * ((int)((15238 * tmp_j) / 43)) + 29; - hiji_m = (int)((24 * tmp_l) / 709); - hiji_d = tmp_l - (int)((709 * hiji_m) / 24); - hiji_y = 30 * tmp_n + tmp_j - 30; - rv[0] = hiji_y; - rv[1] = hiji_m; - rv[2] = hiji_d; - return true; - } - public static byte[] Get_month_name(Xowe_wiki wiki, DateAdp date) { - int[] seg_ary = Calc_date(date); - int m = seg_ary[Rslt__month] - List_adp_.Base1; - byte[] msg_key = Month_names[m]; - return wiki.Msg_mgr().Val_by_key_obj(msg_key); - } - private static final byte[][] Month_names = new byte[][] - { Bry_.new_a7("hijiri-calendar-m1"), Bry_.new_a7("hijiri-calendar-m2"), Bry_.new_a7("hijiri-calendar-m3") - , Bry_.new_a7("hijiri-calendar-m4"), Bry_.new_a7("hijiri-calendar-m5"), Bry_.new_a7("hijiri-calendar-m6") - , Bry_.new_a7("hijiri-calendar-m7"), Bry_.new_a7("hijiri-calendar-m8"), Bry_.new_a7("hijiri-calendar-m9") - , Bry_.new_a7("hijiri-calendar-m10"), Bry_.new_a7("hijiri-calendar-m11"), Bry_.new_a7("hijiri-calendar-m12") - }; - public static final int - Rslt__year = 0 - , Rslt__month = 1 - , Rslt__day = 2 - ; -} +package gplx.xowa.xtns.pfuncs.times; + +import gplx.Bry_; +import gplx.DateAdp; +import gplx.List_adp_; +import gplx.xowa.Xowe_wiki; + +class Pft_fmt_itm_hijri { + public static int[] Calc_date(DateAdp date) { + int[] rv = new int[3]; // MEM:cache + Calc_date(rv, date.Year(), date.Month(), date.Day()); + return rv; + } + public static boolean Calc_date(int[] rv, int greg_y, int greg_m, int greg_d) { + int hiji_d = greg_d; + int hiji_m = greg_m; + int hiji_y = greg_y; + int tmp_jd = 0; + if ( + (hiji_y > 1582) || ((hiji_y == 1582) && (hiji_m > 10)) || + ((hiji_y == 1582) && (hiji_m == 10) && (hiji_d > 14)) + ) + { + tmp_jd = (int)((1461 * (hiji_y + 4800 + (int)((hiji_m - 14) / 12))) / 4) + + (int)((367 * (hiji_m - 2 - 12 * ((int)((hiji_m - 14) / 12)))) / 12) - + (int)((3 * (int)(((hiji_y + 4900 + (int)((hiji_m - 14) / 12)) / 100))) / 4) + + hiji_d - 32075; + } else { + tmp_jd = 367 * hiji_y - (int)((7 * (hiji_y + 5001 + (int)((hiji_m - 9) / 7))) / 4) + + (int)((275 * hiji_m) / 9) + hiji_d + 1729777; + } + int tmp_l = tmp_jd -1948440 + 10632; + int tmp_n = (int)((tmp_l - 1) / 10631); + tmp_l = tmp_l - 10631 * tmp_n + 354; + int tmp_j = ((int)((10985 - tmp_l) / 5316)) * ((int)((50 * tmp_l) / 17719)) + ((int)(tmp_l / 5670)) * ((int)((43 * tmp_l) / 15238)); + tmp_l = tmp_l - ((int)((30 - tmp_j) / 15)) * ((int)((17719 * tmp_j) / 50)) - ((int)(tmp_j / 16)) * ((int)((15238 * tmp_j) / 43)) + 29; + hiji_m = (int)((24 * tmp_l) / 709); + hiji_d = tmp_l - (int)((709 * hiji_m) / 24); + hiji_y = 30 * tmp_n + tmp_j - 30; + rv[0] = hiji_y; + rv[1] = hiji_m; + rv[2] = hiji_d; + return true; + } + public static byte[] Get_month_name(Xowe_wiki wiki, DateAdp date) { + int[] seg_ary = Calc_date(date); + int m = seg_ary[Rslt__month] - List_adp_.Base1; + byte[] msg_key = Month_names[m]; + return wiki.Msg_mgr().Val_by_key_obj(msg_key); + } + private static final byte[][] Month_names = new byte[][] + { Bry_.new_a7("hijri-calendar-m1"), Bry_.new_a7("hijri-calendar-m2"), Bry_.new_a7("hijri-calendar-m3") + , Bry_.new_a7("hijri-calendar-m4"), Bry_.new_a7("hijri-calendar-m5"), Bry_.new_a7("hijri-calendar-m6") + , Bry_.new_a7("hijri-calendar-m7"), Bry_.new_a7("hijri-calendar-m8"), Bry_.new_a7("hijri-calendar-m9") + , Bry_.new_a7("hijri-calendar-m10"), Bry_.new_a7("hijri-calendar-m11"), Bry_.new_a7("hijri-calendar-m12") + }; + public static final int + Rslt__year = 0 + , Rslt__month = 1 + , Rslt__day = 2 + ; +} diff --git a/400_xowa/src/gplx/xowa/xtns/pfuncs/times/Pft_func_time__other__tst.java b/400_xowa/src/gplx/xowa/xtns/pfuncs/times/Pft_func_time__other__tst.java index 4008c2383..bd775afc6 100644 --- a/400_xowa/src/gplx/xowa/xtns/pfuncs/times/Pft_func_time__other__tst.java +++ b/400_xowa/src/gplx/xowa/xtns/pfuncs/times/Pft_func_time__other__tst.java @@ -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,39 +13,43 @@ 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 org.junit.*; -public class Pft_func_time__other__tst { - @Before public void init() {fxt.Clear();} private Pft_func_time_foreign_fxt fxt = new Pft_func_time_foreign_fxt(); - @After public void term() {fxt.Term();} - @Test public void Thai() {fxt.Test_parse("{{#time:xkY|2012}}" , "2555");} - @Test public void Minguo() {fxt.Test_parse("{{#time:xoY|2012}}" , "101");} - @Test public void Iranian__year_idx() {fxt.Test_parse("{{#time:xiY|2012-01-02}}" , "1390");} - @Test public void Iranian__month_idx() {fxt.Test_parse("{{#time:xin|2012-01-02}}" , "10");} - @Test public void Iranian__day_idx() {fxt.Test_parse("{{#time:xij|2012-01-02}}" , "12");} - @Test public void Iranian__month_name() {fxt.Init_msg("iranian-calendar-m10" , "Dey"); fxt.Test_parse("{{#time:xiF|2012-01-02}}" , "Dey");} - @Test public void Hijiri__year_idx() {fxt.Test_parse("{{#time:xmY|2012-01-02}}" , "1433");} - @Test public void Hijiri__month_idx() {fxt.Test_parse("{{#time:xmn|2012-01-02}}" , "2");} - @Test public void Hijiri__day_idx() {fxt.Test_parse("{{#time:xmj|2012-01-02}}" , "7");} - @Test public void Hijiri__month_name() {fxt.Init_msg("hijiri-calendar-m2" , "Safar"); fxt.Test_parse("{{#time:xmF|2012-01-02}}" , "Safar");} - @Test public void Roman__year() {fxt.Test_parse("{{#time:xrY|2012}}" , "MMXII");} - @Test public void Roman__various() { - fxt.Test_Roman( 1, "I"); - fxt.Test_Roman( 2, "II"); - fxt.Test_Roman( 3, "III"); - fxt.Test_Roman( 4, "IV"); - fxt.Test_Roman( 5, "V"); - fxt.Test_Roman( 6, "VI"); - fxt.Test_Roman( 7, "VII"); - fxt.Test_Roman( 8, "VIII"); - fxt.Test_Roman( 9, "IX"); - fxt.Test_Roman( 10, "X"); - fxt.Test_Roman( 11, "XI"); - fxt.Test_Roman( 100, "C"); - fxt.Test_Roman( 101, "CI"); - fxt.Test_Roman( 111, "CXI"); - fxt.Test_Roman(1000, "M"); - fxt.Test_Roman(1001, "MI"); - fxt.Test_Roman(4000, "4000"); - } -} +package gplx.xowa.xtns.pfuncs.times; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +public class Pft_func_time__other__tst { + @Before public void init() {fxt.Clear();} private Pft_func_time_foreign_fxt fxt = new Pft_func_time_foreign_fxt(); + @After public void term() {fxt.Term();} + @Test public void Thai() {fxt.Test_parse("{{#time:xkY|2012}}" , "2555");} + @Test public void Minguo() {fxt.Test_parse("{{#time:xoY|2012}}" , "101");} + @Test public void Iranian__year_idx() {fxt.Test_parse("{{#time:xiY|2012-01-02}}" , "1390");} + @Test public void Iranian__month_idx() {fxt.Test_parse("{{#time:xin|2012-01-02}}" , "10");} + @Test public void Iranian__day_idx() {fxt.Test_parse("{{#time:xij|2012-01-02}}" , "12");} + @Test public void Iranian__month_name() {fxt.Init_msg("iranian-calendar-m10" , "Dey"); fxt.Test_parse("{{#time:xiF|2012-01-02}}" , "Dey");} + @Test public void hijri__year_idx() {fxt.Test_parse("{{#time:xmY|2012-01-02}}" , "1433");} + @Test public void hijri__month_idx() {fxt.Test_parse("{{#time:xmn|2012-01-02}}" , "2");} + @Test public void hijri__day_idx() {fxt.Test_parse("{{#time:xmj|2012-01-02}}" , "7");} + @Test public void hijri__month_name() {fxt.Init_msg("hijri-calendar-m2" , "Safar"); fxt.Test_parse("{{#time:xmF|2012-01-02}}" , "Safar");} + @Test public void Roman__year() {fxt.Test_parse("{{#time:xrY|2012}}" , "MMXII");} + @Test public void Roman__various() { + fxt.Test_Roman( 1, "I"); + fxt.Test_Roman( 2, "II"); + fxt.Test_Roman( 3, "III"); + fxt.Test_Roman( 4, "IV"); + fxt.Test_Roman( 5, "V"); + fxt.Test_Roman( 6, "VI"); + fxt.Test_Roman( 7, "VII"); + fxt.Test_Roman( 8, "VIII"); + fxt.Test_Roman( 9, "IX"); + fxt.Test_Roman( 10, "X"); + fxt.Test_Roman( 11, "XI"); + fxt.Test_Roman( 100, "C"); + fxt.Test_Roman( 101, "CI"); + fxt.Test_Roman( 111, "CXI"); + fxt.Test_Roman(1000, "M"); + fxt.Test_Roman(1001, "MI"); + fxt.Test_Roman(4000, "4000"); + } +}