Lang: Fix misspelling of `hijri` [#837]

master
gnosygnu 3 years ago
parent 559503786b
commit 7e53c8462d

@ -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);
}
}

@ -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));
}
}

@ -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
;
}

@ -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");
}
}

Loading…
Cancel
Save