annotate src/luan/modules/BinaryLuan.java @ 1802:ca98dee04e08 default tip

add Parsers.json_null
author Franklin Schmidt <fschmidt@gmail.com>
date Sun, 21 Apr 2024 21:25:15 -0600
parents f7e2df85fc0a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
167
4c0131c2b650 merge luan/lib into modules
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 142
diff changeset
1 package luan.modules;
113
8c706d6eb5dc add binary type
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
2
1257
e38f5869e9df don't reset in send_redirect and other improvements
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
3 import java.io.UnsupportedEncodingException;
1649
f7e2df85fc0a add String.digest_message
Franklin Schmidt <fschmidt@gmail.com>
parents: 1335
diff changeset
4 import java.security.MessageDigest;
f7e2df85fc0a add String.digest_message
Franklin Schmidt <fschmidt@gmail.com>
parents: 1335
diff changeset
5 import java.security.NoSuchAlgorithmException;
221
ec016471c6eb make LuanTable an interface
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 171
diff changeset
6 import luan.Luan;
113
8c706d6eb5dc add binary type
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
7 import luan.LuanTable;
8c706d6eb5dc add binary type
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
8 import luan.LuanFunction;
124
f537ff5e511d minor cleanup
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 113
diff changeset
9 import luan.LuanException;
113
8c706d6eb5dc add binary type
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
10
8c706d6eb5dc add binary type
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
11
168
ebe9db183eb7 rename *Lib.java to *Luan.java
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 167
diff changeset
12 public final class BinaryLuan {
113
8c706d6eb5dc add binary type
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
13
305
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
14 static int start(byte[] binary,int i) {
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
15 int len = binary.length;
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
16 return i==0 ? 0 : i > 0 ? Math.min(i-1,len) : Math.max(len+i,0);
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
17 }
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
18
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
19 static int start(byte[] binary,Integer i,int dflt) {
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
20 return i==null ? dflt : start(binary,i);
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
21 }
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
22
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
23 static int end(byte[] binary,int i) {
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
24 int len = binary.length;
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
25 return i==0 ? 0 : i > 0 ? Math.min(i,len) : Math.max(len+i+1,0);
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
26 }
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
27
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
28 static int end(byte[] binary,Integer i,int dflt) {
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
29 return i==null ? dflt : end(binary,i);
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
30 }
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
31
1335
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
32 public static Byte[] byte_(byte[] binary,Integer i,Integer j) throws LuanException {
646
cdc70de628b5 simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents: 576
diff changeset
33 Utils.checkNotNull(binary);
305
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
34 int start = start(binary,i,1);
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
35 int end = end(binary,j,start+1);
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
36 Byte[] bytes = new Byte[end-start];
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
37 for( int k=0; k<bytes.length; k++ ) {
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
38 bytes[k] = binary[start+k];
302
2f8938fc518c fix modules Binary and Html
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 221
diff changeset
39 }
2f8938fc518c fix modules Binary and Html
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 221
diff changeset
40 return bytes;
113
8c706d6eb5dc add binary type
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
41 }
8c706d6eb5dc add binary type
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
42
1335
e0cf0d108a77 major cleanup
Franklin Schmidt <fschmidt@gmail.com>
parents: 1333
diff changeset
43 public static byte[] binary(byte... bytes) {
305
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
44 return bytes;
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
45 }
5e7450ac27f2 rename String.byte() to String.unicode();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 302
diff changeset
46
1257
e38f5869e9df don't reset in send_redirect and other improvements
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
47 private static String toString(byte[] a) {
e38f5869e9df don't reset in send_redirect and other improvements
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
48 char[] ac = new char[a.length];
e38f5869e9df don't reset in send_redirect and other improvements
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
49 for( int i=0; i<a.length; i++ ) {
e38f5869e9df don't reset in send_redirect and other improvements
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
50 ac[i] = (char)a[i];
e38f5869e9df don't reset in send_redirect and other improvements
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
51 }
e38f5869e9df don't reset in send_redirect and other improvements
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
52 return new String(ac);
e38f5869e9df don't reset in send_redirect and other improvements
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
53 }
e38f5869e9df don't reset in send_redirect and other improvements
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
54
e38f5869e9df don't reset in send_redirect and other improvements
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
55 public static String to_string(byte[] binary,String charsetName) throws LuanException, UnsupportedEncodingException {
e38f5869e9df don't reset in send_redirect and other improvements
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
56 Utils.checkNotNull(binary);
e38f5869e9df don't reset in send_redirect and other improvements
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
57 return charsetName!=null ? new String(binary,charsetName) : toString(binary);
360
cbb94a7c7a9e allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents: 305
diff changeset
58 }
cbb94a7c7a9e allow mail attachments;
Franklin Schmidt <fschmidt@gmail.com>
parents: 305
diff changeset
59
1649
f7e2df85fc0a add String.digest_message
Franklin Schmidt <fschmidt@gmail.com>
parents: 1335
diff changeset
60 public static byte[] digest_message(String algorithm,byte[] input) throws NoSuchAlgorithmException {
f7e2df85fc0a add String.digest_message
Franklin Schmidt <fschmidt@gmail.com>
parents: 1335
diff changeset
61 return MessageDigest.getInstance(algorithm).digest(input);
f7e2df85fc0a add String.digest_message
Franklin Schmidt <fschmidt@gmail.com>
parents: 1335
diff changeset
62 }
f7e2df85fc0a add String.digest_message
Franklin Schmidt <fschmidt@gmail.com>
parents: 1335
diff changeset
63
f7e2df85fc0a add String.digest_message
Franklin Schmidt <fschmidt@gmail.com>
parents: 1335
diff changeset
64 public static String to_hex(byte[] a) {
f7e2df85fc0a add String.digest_message
Franklin Schmidt <fschmidt@gmail.com>
parents: 1335
diff changeset
65 StringBuilder sb = new StringBuilder();
f7e2df85fc0a add String.digest_message
Franklin Schmidt <fschmidt@gmail.com>
parents: 1335
diff changeset
66 for( byte b : a ) {
f7e2df85fc0a add String.digest_message
Franklin Schmidt <fschmidt@gmail.com>
parents: 1335
diff changeset
67 sb.append( String.format("%02x",b) );
f7e2df85fc0a add String.digest_message
Franklin Schmidt <fschmidt@gmail.com>
parents: 1335
diff changeset
68 }
f7e2df85fc0a add String.digest_message
Franklin Schmidt <fschmidt@gmail.com>
parents: 1335
diff changeset
69 return sb.toString();
f7e2df85fc0a add String.digest_message
Franklin Schmidt <fschmidt@gmail.com>
parents: 1335
diff changeset
70 }
f7e2df85fc0a add String.digest_message
Franklin Schmidt <fschmidt@gmail.com>
parents: 1335
diff changeset
71
113
8c706d6eb5dc add binary type
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
72 }