mirror of
https://github.com/gnosygnu/xowa.git
synced 2026-03-02 03:49:30 +00:00
Scribunto: Use Luaj for pattern-matching (instead of Java Regex) [#413]
This commit is contained in:
36
baselib/src/gplx/objects/primitives/Bool_.java
Normal file
36
baselib/src/gplx/objects/primitives/Bool_.java
Normal file
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
XOWA: the XOWA Offline Wiki Application
|
||||
Copyright (C) 2012-2017 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.
|
||||
|
||||
You may use XOWA according to either of these licenses as is most appropriate
|
||||
for your project on a case-by-case basis.
|
||||
|
||||
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.objects.primitives; import gplx.*; import gplx.objects.*;
|
||||
import gplx.objects.errs.*;
|
||||
public class Bool_ {
|
||||
public static final String Cls_val_name = "bool";
|
||||
public static final Class<?> Cls_ref_type = Boolean.class;
|
||||
|
||||
public static final boolean N = false , Y = true;
|
||||
public static final byte N_byte = 0 , Y_byte = 1 , __byte = 127;
|
||||
public static final int N_int = 0 , Y_int = 1 , __int = -1;
|
||||
public static final String True_str = "true", False_str = "false";
|
||||
|
||||
|
||||
public static boolean Cast(Object o) {
|
||||
try {
|
||||
return (Boolean)o;
|
||||
}
|
||||
catch (Exception e) {
|
||||
throw Err_.New_fmt(e, "failed to cast to boolean; obj={0}", Object_.To_str(o));
|
||||
}
|
||||
}
|
||||
}
|
||||
29
baselib/src/gplx/objects/primitives/Byte_.java
Normal file
29
baselib/src/gplx/objects/primitives/Byte_.java
Normal file
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
XOWA: the XOWA Offline Wiki Application
|
||||
Copyright (C) 2012-2017 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.
|
||||
|
||||
You may use XOWA according to either of these licenses as is most appropriate
|
||||
for your project on a case-by-case basis.
|
||||
|
||||
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.objects.primitives; import gplx.*; import gplx.objects.*;
|
||||
import gplx.objects.errs.*;
|
||||
public class Byte_ {
|
||||
public static final String Cls_val_name = "byte";
|
||||
public static final Class<?> Cls_ref_type = Byte.class;
|
||||
public static byte Cast(Object o) {
|
||||
try {
|
||||
return (Byte)o;
|
||||
}
|
||||
catch (Exception e) {
|
||||
throw Err_.New_fmt(e, "failed to cast to byte; obj={0}", Object_.To_str(o));
|
||||
}
|
||||
}
|
||||
}
|
||||
20
baselib/src/gplx/objects/primitives/Char_.java
Normal file
20
baselib/src/gplx/objects/primitives/Char_.java
Normal file
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
XOWA: the XOWA Offline Wiki Application
|
||||
Copyright (C) 2012-2017 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.
|
||||
|
||||
You may use XOWA according to either of these licenses as is most appropriate
|
||||
for your project on a case-by-case basis.
|
||||
|
||||
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.objects.primitives; import gplx.*; import gplx.objects.*;
|
||||
public class Char_ {
|
||||
public static final String Cls_val_name = "char";
|
||||
public static final Class<?> Cls_ref_type = Character.class;
|
||||
}
|
||||
25
baselib/src/gplx/objects/primitives/Char_code_.java
Normal file
25
baselib/src/gplx/objects/primitives/Char_code_.java
Normal file
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
XOWA: the XOWA Offline Wiki Application
|
||||
Copyright (C) 2012-2017 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.
|
||||
|
||||
You may use XOWA according to either of these licenses as is most appropriate
|
||||
for your project on a case-by-case basis.
|
||||
|
||||
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.objects.primitives; import gplx.*; import gplx.objects.*;
|
||||
public class Char_code_ {
|
||||
public static final char
|
||||
New_line = '\n'
|
||||
, Space = ' '
|
||||
, Colon = ':'
|
||||
, Num_0 = '0'
|
||||
, Pipe = '|'
|
||||
;
|
||||
}
|
||||
20
baselib/src/gplx/objects/primitives/Double_.java
Normal file
20
baselib/src/gplx/objects/primitives/Double_.java
Normal file
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
XOWA: the XOWA Offline Wiki Application
|
||||
Copyright (C) 2012-2017 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.
|
||||
|
||||
You may use XOWA according to either of these licenses as is most appropriate
|
||||
for your project on a case-by-case basis.
|
||||
|
||||
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.objects.primitives; import gplx.*; import gplx.objects.*;
|
||||
public class Double_ {
|
||||
public static final String Cls_val_name = "double";
|
||||
public static final Class<?> Cls_ref_type = Double.class;
|
||||
}
|
||||
20
baselib/src/gplx/objects/primitives/Float_.java
Normal file
20
baselib/src/gplx/objects/primitives/Float_.java
Normal file
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
XOWA: the XOWA Offline Wiki Application
|
||||
Copyright (C) 2012-2017 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.
|
||||
|
||||
You may use XOWA according to either of these licenses as is most appropriate
|
||||
for your project on a case-by-case basis.
|
||||
|
||||
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.objects.primitives; import gplx.*; import gplx.objects.*;
|
||||
public class Float_ {
|
||||
public static final String Cls_val_name = "float";
|
||||
public static final Class<?> Cls_ref_type = Float.class;
|
||||
}
|
||||
112
baselib/src/gplx/objects/primitives/Int_.java
Normal file
112
baselib/src/gplx/objects/primitives/Int_.java
Normal file
@@ -0,0 +1,112 @@
|
||||
/*
|
||||
XOWA: the XOWA Offline Wiki Application
|
||||
Copyright (C) 2012-2017 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.
|
||||
|
||||
You may use XOWA according to either of these licenses as is most appropriate
|
||||
for your project on a case-by-case basis.
|
||||
|
||||
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.objects.primitives; import gplx.*; import gplx.objects.*;
|
||||
import gplx.objects.errs.*;
|
||||
import gplx.objects.strings.*;
|
||||
public class Int_ {
|
||||
public static final String Cls_val_name = "int";
|
||||
public static final Class<?> Cls_ref_type = Integer.class;
|
||||
|
||||
public static final int
|
||||
Min_value = Integer.MIN_VALUE
|
||||
, Max_value = Integer.MAX_VALUE
|
||||
, Max_value__31 = 2147483647
|
||||
, Neg1 = -1
|
||||
, Null = Int_.Min_value
|
||||
, Base1 = 1 // for super 1 lists / arrays; EX: PHP; [a, b, c]; [1] => a
|
||||
, Offset_1 = 1 // common symbol for + 1 after current pos; EX: String_.Mid(lhs + Offset_1, rhs)
|
||||
;
|
||||
|
||||
public static int Cast(Object o) {
|
||||
try {
|
||||
return (Integer)o;
|
||||
}
|
||||
catch(Exception e) {
|
||||
throw Err_.New_fmt(e, "failed to cast to int; obj={0}", Object_.To_str(o));
|
||||
}
|
||||
}
|
||||
|
||||
public static String To_str(int v) {return new Integer(v).toString();}
|
||||
|
||||
public static int Parse_or(String raw, int or) {
|
||||
// process args
|
||||
if (raw == null) return or;
|
||||
int raw_len = String_.Len(raw);
|
||||
if (raw_len == 0) return or;
|
||||
|
||||
// loop backwards from nth to 0th char
|
||||
int rv = 0, power_of_10 = 1;
|
||||
for (int idx = raw_len - 1; idx >= 0; idx--) {
|
||||
char cur = String_.Char_at(raw, idx);
|
||||
int digit = -1;
|
||||
switch (cur) {
|
||||
// numbers -> assign digit
|
||||
case '0': digit = 0; break; case '1': digit = 1; break; case '2': digit = 2; break; case '3': digit = 3; break; case '4': digit = 4; break;
|
||||
case '5': digit = 5; break; case '6': digit = 6; break; case '7': digit = 7; break; case '8': digit = 8; break; case '9': digit = 9; break;
|
||||
|
||||
// negative sign
|
||||
case '-':
|
||||
if (idx != 0) { // invalid if not 1st
|
||||
return or;
|
||||
}
|
||||
else { // is first; multiply by -1
|
||||
rv *= -1;
|
||||
continue;
|
||||
}
|
||||
|
||||
// anything else
|
||||
default:
|
||||
return or;
|
||||
}
|
||||
rv += (digit * power_of_10);
|
||||
power_of_10 *= 10;
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
public static boolean Between(int v, int lhs, int rhs) {
|
||||
int lhs_comp = v == lhs ? 0 : (v < lhs ? -1 : 1);
|
||||
int rhs_comp = v == rhs ? 0 : (v < rhs ? -1 : 1);
|
||||
return (lhs_comp * rhs_comp) != 1; // 1 when v is (a) greater than both or (b) less than both
|
||||
}
|
||||
|
||||
private static int[] Log_10s = new int[] {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000, Int_.Max_value};
|
||||
public static int Log10(int v) {
|
||||
if (v == 0) return 0;
|
||||
int sign = 1;
|
||||
if (v < 0) {
|
||||
if (v == Int_.Min_value) return -9; // NOTE: Int_.Min_value * -1 = Int_.Min_value
|
||||
v *= -1;
|
||||
sign = -1;
|
||||
}
|
||||
int log_10s_len = Log_10s.length;
|
||||
int rv = log_10s_len - 2; // rv will only happen when v == Int_.Max_value
|
||||
int bgn = 0;
|
||||
if (v > 1000) { // optimization to reduce number of ops to < 5
|
||||
bgn = 3;
|
||||
if (v > 1000000) bgn = 6;
|
||||
}
|
||||
for (int i = bgn; i < log_10s_len; i++) {
|
||||
if (v < Log_10s[i]) {rv = i - 1; break;}
|
||||
}
|
||||
return rv * sign;
|
||||
}
|
||||
|
||||
public static int Count_digits(int v) {
|
||||
int log10 = Log10(v);
|
||||
return v > -1 ? log10 + 1 : log10 * -1 + 2;
|
||||
}
|
||||
}
|
||||
90
baselib/src/gplx/objects/primitives/Int__tst.java
Normal file
90
baselib/src/gplx/objects/primitives/Int__tst.java
Normal file
@@ -0,0 +1,90 @@
|
||||
/*
|
||||
XOWA: the XOWA Offline Wiki Application
|
||||
Copyright (C) 2012-2017 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.
|
||||
|
||||
You may use XOWA according to either of these licenses as is most appropriate
|
||||
for your project on a case-by-case basis.
|
||||
|
||||
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.objects.primitives; import gplx.*; import gplx.objects.*;
|
||||
import org.junit.*; import gplx.tests.*;
|
||||
public class Int__tst {
|
||||
private final Int__fxt fxt = new Int__fxt();
|
||||
@Test public void Parse_or() {
|
||||
fxt.Test__Parse_or("123", 123); // basic
|
||||
fxt.Test__Parse_or_min_value(null); // null
|
||||
fxt.Test__Parse_or_min_value(""); // empty
|
||||
fxt.Test__Parse_or_min_value("1a"); // invalid number
|
||||
|
||||
fxt.Test__Parse_or("-123", -123); // negative
|
||||
fxt.Test__Parse_or_min_value("1-23"); // negative at invalid position
|
||||
}
|
||||
@Test public void Between() {
|
||||
fxt.Test__Between(1, 0, 2, true); // simple true
|
||||
fxt.Test__Between(3, 0, 2, false); // simple false
|
||||
fxt.Test__Between(0, 0, 2, true); // bgn true
|
||||
fxt.Test__Between(2, 0, 2, true); // end true
|
||||
}
|
||||
@Test public void Count_digits() {
|
||||
fxt.Test__Count_digits( 0, 1);
|
||||
fxt.Test__Count_digits( 9, 1);
|
||||
fxt.Test__Count_digits( 100, 3);
|
||||
fxt.Test__Count_digits( -1, 2);
|
||||
fxt.Test__Count_digits(-100, 4);
|
||||
}
|
||||
@Test public void Log10() {
|
||||
fxt.Test__Log10( 0, 0);
|
||||
fxt.Test__Log10( 1, 0);
|
||||
fxt.Test__Log10( 2, 0);
|
||||
fxt.Test__Log10( 10, 1);
|
||||
fxt.Test__Log10( 12, 1);
|
||||
fxt.Test__Log10( 100, 2);
|
||||
fxt.Test__Log10( 123, 2);
|
||||
fxt.Test__Log10( 1000, 3);
|
||||
fxt.Test__Log10( 1234, 3);
|
||||
fxt.Test__Log10( 10000, 4);
|
||||
fxt.Test__Log10( 12345, 4);
|
||||
fxt.Test__Log10( 100000, 5);
|
||||
fxt.Test__Log10( 123456, 5);
|
||||
fxt.Test__Log10( 1000000, 6);
|
||||
fxt.Test__Log10( 1234567, 6);
|
||||
fxt.Test__Log10( 10000000, 7);
|
||||
fxt.Test__Log10( 12345678, 7);
|
||||
fxt.Test__Log10( 100000000, 8);
|
||||
fxt.Test__Log10( 123456789, 8);
|
||||
fxt.Test__Log10( 1000000000, 9);
|
||||
fxt.Test__Log10( 1234567890, 9);
|
||||
fxt.Test__Log10(Int_.Max_value, 9);
|
||||
fxt.Test__Log10( -1, 0);
|
||||
fxt.Test__Log10( -10, -1);
|
||||
fxt.Test__Log10( -100, -2);
|
||||
fxt.Test__Log10( -1000000, -6);
|
||||
fxt.Test__Log10( -1000000000, -9);
|
||||
fxt.Test__Log10(Int_.Min_value, -9);
|
||||
fxt.Test__Log10(Int_.Min_value + 1, -9);
|
||||
}
|
||||
}
|
||||
class Int__fxt {
|
||||
public void Test__Parse_or(String raw, int expd) {
|
||||
Gftest_fxt.Eq__int(expd, Int_.Parse_or(raw, -1));
|
||||
}
|
||||
public void Test__Parse_or_min_value(String raw) {
|
||||
Gftest_fxt.Eq__int(Int_.Min_value, Int_.Parse_or(raw, Int_.Min_value));
|
||||
}
|
||||
public void Test__Between(int val, int lhs, int rhs, boolean expd) {
|
||||
Gftest_fxt.Eq__bool(expd, Int_.Between(val, lhs, rhs));
|
||||
}
|
||||
public void Test__Count_digits(int val, int expd) {
|
||||
Gftest_fxt.Eq__int(expd, Int_.Count_digits(val), Int_.To_str(val));
|
||||
}
|
||||
public void Test__Log10(int val, int expd) {
|
||||
Gftest_fxt.Eq__int(expd, Int_.Log10(val));
|
||||
}
|
||||
}
|
||||
29
baselib/src/gplx/objects/primitives/Long_.java
Normal file
29
baselib/src/gplx/objects/primitives/Long_.java
Normal file
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
XOWA: the XOWA Offline Wiki Application
|
||||
Copyright (C) 2012-2017 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.
|
||||
|
||||
You may use XOWA according to either of these licenses as is most appropriate
|
||||
for your project on a case-by-case basis.
|
||||
|
||||
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.objects.primitives; import gplx.*; import gplx.objects.*;
|
||||
import gplx.objects.errs.*;
|
||||
public class Long_ {
|
||||
public static final String Cls_val_name = "long";
|
||||
public static final Class<?> Cls_ref_type = Long.class;
|
||||
public static long Cast(Object o) {
|
||||
try {
|
||||
return (Long)o;
|
||||
}
|
||||
catch(Exception e) {
|
||||
throw Err_.New_fmt(e, "failed to cast to long; obj={0}", Object_.To_str(o));
|
||||
}
|
||||
}
|
||||
}
|
||||
20
baselib/src/gplx/objects/primitives/Short_.java
Normal file
20
baselib/src/gplx/objects/primitives/Short_.java
Normal file
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
XOWA: the XOWA Offline Wiki Application
|
||||
Copyright (C) 2012-2017 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.
|
||||
|
||||
You may use XOWA according to either of these licenses as is most appropriate
|
||||
for your project on a case-by-case basis.
|
||||
|
||||
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.objects.primitives; import gplx.*; import gplx.objects.*;
|
||||
public class Short_ {
|
||||
public static final String Cls_val_name = "short";
|
||||
public static final Class<?> Cls_ref_type = Short.class;
|
||||
}
|
||||
Reference in New Issue
Block a user