mirror of
https://github.com/Pinball3D/Rabbit-R1.git
synced 2025-01-09 13:43:22 +00:00
318 lines
11 KiB
Java
318 lines
11 KiB
Java
|
package com.google.zxing.datamatrix.encoder;
|
||
|
|
||
|
import com.google.zxing.Dimension;
|
||
|
import java.util.Arrays;
|
||
|
|
||
|
/* loaded from: classes3.dex */
|
||
|
public final class HighLevelEncoder {
|
||
|
static final int ASCII_ENCODATION = 0;
|
||
|
static final int BASE256_ENCODATION = 5;
|
||
|
static final int C40_ENCODATION = 1;
|
||
|
static final char C40_UNLATCH = 254;
|
||
|
static final int EDIFACT_ENCODATION = 4;
|
||
|
static final char LATCH_TO_ANSIX12 = 238;
|
||
|
static final char LATCH_TO_BASE256 = 231;
|
||
|
static final char LATCH_TO_C40 = 230;
|
||
|
static final char LATCH_TO_EDIFACT = 240;
|
||
|
static final char LATCH_TO_TEXT = 239;
|
||
|
private static final char MACRO_05 = 236;
|
||
|
private static final String MACRO_05_HEADER = "[)>\u001e05\u001d";
|
||
|
private static final char MACRO_06 = 237;
|
||
|
private static final String MACRO_06_HEADER = "[)>\u001e06\u001d";
|
||
|
private static final String MACRO_TRAILER = "\u001e\u0004";
|
||
|
private static final char PAD = 129;
|
||
|
static final int TEXT_ENCODATION = 2;
|
||
|
static final char UPPER_SHIFT = 235;
|
||
|
static final int X12_ENCODATION = 3;
|
||
|
static final char X12_UNLATCH = 254;
|
||
|
|
||
|
/* JADX INFO: Access modifiers changed from: package-private */
|
||
|
public static boolean isDigit(char c) {
|
||
|
return c >= '0' && c <= '9';
|
||
|
}
|
||
|
|
||
|
/* JADX INFO: Access modifiers changed from: package-private */
|
||
|
public static boolean isExtendedASCII(char c) {
|
||
|
return c >= 128 && c <= 255;
|
||
|
}
|
||
|
|
||
|
private static boolean isNativeC40(char c) {
|
||
|
if (c == ' ') {
|
||
|
return true;
|
||
|
}
|
||
|
if (c < '0' || c > '9') {
|
||
|
return c >= 'A' && c <= 'Z';
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
private static boolean isNativeEDIFACT(char c) {
|
||
|
return c >= ' ' && c <= '^';
|
||
|
}
|
||
|
|
||
|
private static boolean isNativeText(char c) {
|
||
|
if (c == ' ') {
|
||
|
return true;
|
||
|
}
|
||
|
if (c < '0' || c > '9') {
|
||
|
return c >= 'a' && c <= 'z';
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
private static boolean isSpecialB256(char c) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
private static boolean isX12TermSep(char c) {
|
||
|
return c == '\r' || c == '*' || c == '>';
|
||
|
}
|
||
|
|
||
|
private HighLevelEncoder() {
|
||
|
}
|
||
|
|
||
|
private static char randomize253State(int i) {
|
||
|
int i2 = (i * 149) % 253;
|
||
|
int i3 = i2 + 130;
|
||
|
if (i3 > 254) {
|
||
|
i3 = i2 - 124;
|
||
|
}
|
||
|
return (char) i3;
|
||
|
}
|
||
|
|
||
|
public static String encodeHighLevel(String str) {
|
||
|
return encodeHighLevel(str, SymbolShapeHint.FORCE_NONE, null, null);
|
||
|
}
|
||
|
|
||
|
public static String encodeHighLevel(String str, SymbolShapeHint symbolShapeHint, Dimension dimension, Dimension dimension2) {
|
||
|
int i = 0;
|
||
|
Encoder[] encoderArr = {new ASCIIEncoder(), new C40Encoder(), new TextEncoder(), new X12Encoder(), new EdifactEncoder(), new Base256Encoder()};
|
||
|
EncoderContext encoderContext = new EncoderContext(str);
|
||
|
encoderContext.setSymbolShape(symbolShapeHint);
|
||
|
encoderContext.setSizeConstraints(dimension, dimension2);
|
||
|
if (str.startsWith(MACRO_05_HEADER) && str.endsWith(MACRO_TRAILER)) {
|
||
|
encoderContext.writeCodeword(MACRO_05);
|
||
|
encoderContext.setSkipAtEnd(2);
|
||
|
encoderContext.pos += 7;
|
||
|
} else if (str.startsWith(MACRO_06_HEADER) && str.endsWith(MACRO_TRAILER)) {
|
||
|
encoderContext.writeCodeword(MACRO_06);
|
||
|
encoderContext.setSkipAtEnd(2);
|
||
|
encoderContext.pos += 7;
|
||
|
}
|
||
|
while (encoderContext.hasMoreCharacters()) {
|
||
|
encoderArr[i].encode(encoderContext);
|
||
|
if (encoderContext.getNewEncoding() >= 0) {
|
||
|
i = encoderContext.getNewEncoding();
|
||
|
encoderContext.resetEncoderSignal();
|
||
|
}
|
||
|
}
|
||
|
int codewordCount = encoderContext.getCodewordCount();
|
||
|
encoderContext.updateSymbolInfo();
|
||
|
int dataCapacity = encoderContext.getSymbolInfo().getDataCapacity();
|
||
|
if (codewordCount < dataCapacity && i != 0 && i != 5 && i != 4) {
|
||
|
encoderContext.writeCodeword((char) 254);
|
||
|
}
|
||
|
StringBuilder codewords = encoderContext.getCodewords();
|
||
|
if (codewords.length() < dataCapacity) {
|
||
|
codewords.append(PAD);
|
||
|
}
|
||
|
while (codewords.length() < dataCapacity) {
|
||
|
codewords.append(randomize253State(codewords.length() + 1));
|
||
|
}
|
||
|
return encoderContext.getCodewords().toString();
|
||
|
}
|
||
|
|
||
|
/* JADX INFO: Access modifiers changed from: package-private */
|
||
|
public static int lookAheadTest(CharSequence charSequence, int i, int i2) {
|
||
|
float[] fArr;
|
||
|
char c;
|
||
|
if (i >= charSequence.length()) {
|
||
|
return i2;
|
||
|
}
|
||
|
int i3 = 6;
|
||
|
if (i2 == 0) {
|
||
|
fArr = new float[]{0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.25f};
|
||
|
} else {
|
||
|
fArr = new float[]{1.0f, 2.0f, 2.0f, 2.0f, 2.0f, 2.25f};
|
||
|
fArr[i2] = 0.0f;
|
||
|
}
|
||
|
int i4 = 0;
|
||
|
while (true) {
|
||
|
int i5 = i + i4;
|
||
|
if (i5 == charSequence.length()) {
|
||
|
byte[] bArr = new byte[i3];
|
||
|
int[] iArr = new int[i3];
|
||
|
int findMinimums = findMinimums(fArr, iArr, Integer.MAX_VALUE, bArr);
|
||
|
int minimumCount = getMinimumCount(bArr);
|
||
|
if (iArr[0] == findMinimums) {
|
||
|
return 0;
|
||
|
}
|
||
|
if (minimumCount == 1 && bArr[5] > 0) {
|
||
|
return 5;
|
||
|
}
|
||
|
if (minimumCount == 1 && bArr[4] > 0) {
|
||
|
return 4;
|
||
|
}
|
||
|
if (minimumCount != 1 || bArr[2] <= 0) {
|
||
|
return (minimumCount != 1 || bArr[3] <= 0) ? 1 : 3;
|
||
|
}
|
||
|
return 2;
|
||
|
}
|
||
|
char charAt = charSequence.charAt(i5);
|
||
|
i4++;
|
||
|
if (isDigit(charAt)) {
|
||
|
fArr[0] = fArr[0] + 0.5f;
|
||
|
} else if (isExtendedASCII(charAt)) {
|
||
|
float ceil = (float) Math.ceil(fArr[0]);
|
||
|
fArr[0] = ceil;
|
||
|
fArr[0] = ceil + 2.0f;
|
||
|
} else {
|
||
|
float ceil2 = (float) Math.ceil(fArr[0]);
|
||
|
fArr[0] = ceil2;
|
||
|
fArr[0] = ceil2 + 1.0f;
|
||
|
}
|
||
|
if (isNativeC40(charAt)) {
|
||
|
fArr[1] = fArr[1] + 0.6666667f;
|
||
|
} else if (isExtendedASCII(charAt)) {
|
||
|
fArr[1] = fArr[1] + 2.6666667f;
|
||
|
} else {
|
||
|
fArr[1] = fArr[1] + 1.3333334f;
|
||
|
}
|
||
|
if (isNativeText(charAt)) {
|
||
|
fArr[2] = fArr[2] + 0.6666667f;
|
||
|
} else if (isExtendedASCII(charAt)) {
|
||
|
fArr[2] = fArr[2] + 2.6666667f;
|
||
|
} else {
|
||
|
fArr[2] = fArr[2] + 1.3333334f;
|
||
|
}
|
||
|
if (isNativeX12(charAt)) {
|
||
|
fArr[3] = fArr[3] + 0.6666667f;
|
||
|
} else if (isExtendedASCII(charAt)) {
|
||
|
fArr[3] = fArr[3] + 4.3333335f;
|
||
|
} else {
|
||
|
fArr[3] = fArr[3] + 3.3333333f;
|
||
|
}
|
||
|
if (isNativeEDIFACT(charAt)) {
|
||
|
fArr[4] = fArr[4] + 0.75f;
|
||
|
} else if (isExtendedASCII(charAt)) {
|
||
|
fArr[4] = fArr[4] + 4.25f;
|
||
|
} else {
|
||
|
fArr[4] = fArr[4] + 3.25f;
|
||
|
}
|
||
|
if (isSpecialB256(charAt)) {
|
||
|
c = 5;
|
||
|
fArr[5] = fArr[5] + 4.0f;
|
||
|
} else {
|
||
|
c = 5;
|
||
|
fArr[5] = fArr[5] + 1.0f;
|
||
|
}
|
||
|
if (i4 >= 4) {
|
||
|
int[] iArr2 = new int[i3];
|
||
|
byte[] bArr2 = new byte[i3];
|
||
|
findMinimums(fArr, iArr2, Integer.MAX_VALUE, bArr2);
|
||
|
int minimumCount2 = getMinimumCount(bArr2);
|
||
|
int i6 = iArr2[0];
|
||
|
int i7 = iArr2[c];
|
||
|
if (i6 < i7 && i6 < iArr2[1] && i6 < iArr2[2] && i6 < iArr2[3] && i6 < iArr2[4]) {
|
||
|
return 0;
|
||
|
}
|
||
|
if (i7 < i6) {
|
||
|
return 5;
|
||
|
}
|
||
|
byte b = bArr2[1];
|
||
|
byte b2 = bArr2[2];
|
||
|
byte b3 = bArr2[3];
|
||
|
byte b4 = bArr2[4];
|
||
|
if (b + b2 + b3 + b4 == 0) {
|
||
|
return 5;
|
||
|
}
|
||
|
if (minimumCount2 == 1 && b4 > 0) {
|
||
|
return 4;
|
||
|
}
|
||
|
if (minimumCount2 == 1 && b2 > 0) {
|
||
|
return 2;
|
||
|
}
|
||
|
if (minimumCount2 == 1 && b3 > 0) {
|
||
|
return 3;
|
||
|
}
|
||
|
int i8 = iArr2[1];
|
||
|
if (i8 + 1 < i6 && i8 + 1 < i7 && i8 + 1 < iArr2[4] && i8 + 1 < iArr2[2]) {
|
||
|
int i9 = iArr2[3];
|
||
|
if (i8 < i9) {
|
||
|
return 1;
|
||
|
}
|
||
|
if (i8 == i9) {
|
||
|
for (int i10 = i + i4 + 1; i10 < charSequence.length(); i10++) {
|
||
|
char charAt2 = charSequence.charAt(i10);
|
||
|
if (isX12TermSep(charAt2)) {
|
||
|
return 3;
|
||
|
}
|
||
|
if (!isNativeX12(charAt2)) {
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
return 1;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
i3 = 6;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private static int findMinimums(float[] fArr, int[] iArr, int i, byte[] bArr) {
|
||
|
Arrays.fill(bArr, (byte) 0);
|
||
|
for (int i2 = 0; i2 < 6; i2++) {
|
||
|
int ceil = (int) Math.ceil(fArr[i2]);
|
||
|
iArr[i2] = ceil;
|
||
|
if (i > ceil) {
|
||
|
Arrays.fill(bArr, (byte) 0);
|
||
|
i = ceil;
|
||
|
}
|
||
|
if (i == ceil) {
|
||
|
bArr[i2] = (byte) (bArr[i2] + 1);
|
||
|
}
|
||
|
}
|
||
|
return i;
|
||
|
}
|
||
|
|
||
|
private static int getMinimumCount(byte[] bArr) {
|
||
|
int i = 0;
|
||
|
for (int i2 = 0; i2 < 6; i2++) {
|
||
|
i += bArr[i2];
|
||
|
}
|
||
|
return i;
|
||
|
}
|
||
|
|
||
|
private static boolean isNativeX12(char c) {
|
||
|
if (isX12TermSep(c) || c == ' ') {
|
||
|
return true;
|
||
|
}
|
||
|
if (c < '0' || c > '9') {
|
||
|
return c >= 'A' && c <= 'Z';
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
public static int determineConsecutiveDigitCount(CharSequence charSequence, int i) {
|
||
|
int length = charSequence.length();
|
||
|
int i2 = 0;
|
||
|
if (i < length) {
|
||
|
char charAt = charSequence.charAt(i);
|
||
|
while (isDigit(charAt) && i < length) {
|
||
|
i2++;
|
||
|
i++;
|
||
|
if (i < length) {
|
||
|
charAt = charSequence.charAt(i);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return i2;
|
||
|
}
|
||
|
|
||
|
/* JADX INFO: Access modifiers changed from: package-private */
|
||
|
public static void illegalCharacter(char c) {
|
||
|
String hexString = Integer.toHexString(c);
|
||
|
throw new IllegalArgumentException("Illegal character: " + c + " (0x" + ("0000".substring(0, 4 - hexString.length()) + hexString) + ')');
|
||
|
}
|
||
|
}
|