package com.google.zxing.qrcode.encoder;
-import com.google.zxing.common.reedsolomon.ReedSolomonEncoder;
-import com.google.zxing.common.reedsolomon.GF256;
import com.google.zxing.common.ByteMatrix;
+import com.google.zxing.common.ByteArray;
+import com.google.zxing.common.reedsolomon.GF256;
+import com.google.zxing.common.reedsolomon.ReedSolomonEncoder;
import java.util.Vector;
// Return the code point of the table used in alphanumeric mode. Return -1 if there is no
// corresponding code in the table.
- private static int GetAlphanumericCode(int code) {
+ static int GetAlphanumericCode(int code) {
if (code < kAlphanumericTable.length) {
return kAlphanumericTable[code];
}
num_data_bytes_in_block, num_ec_bytes_in_block);
ByteArray data_bytes = new ByteArray();
- ByteArray ec_bytes = new ByteArray();
+ data_bytes.set(bits.getArray(), data_bytes_offset, num_data_bytes_in_block[0]);
+ ByteArray ec_bytes = GenerateECBytes(data_bytes, num_ec_bytes_in_block[0]);
blocks.addElement(new BlockPair(data_bytes, ec_bytes));
- data_bytes.set(bits, data_bytes_offset, num_data_bytes_in_block[0]);
- GenerateECBytes(data_bytes, num_ec_bytes_in_block[0], ec_bytes);
-
max_num_data_bytes = Math.max(max_num_data_bytes, data_bytes.size());
max_num_ec_bytes = Math.max(max_num_ec_bytes, ec_bytes.size());
data_bytes_offset += num_data_bytes_in_block[0];
return false;
}
- private static void GenerateECBytes(ByteArray data_bytes, int num_ec_bytes_in_block, ByteArray ec_bytes) {
+ static ByteArray GenerateECBytes(ByteArray data_bytes, int num_ec_bytes_in_block) {
int numDataBytes = data_bytes.size();
- int[] toEncode = new int[numDataBytes + ec_bytes.size()];
+ int[] toEncode = new int[numDataBytes + num_ec_bytes_in_block];
for (int i = 0; i < numDataBytes; i++) {
toEncode[i] = data_bytes.at(i);
}
new ReedSolomonEncoder(GF256.QR_CODE_FIELD).encode(toEncode, num_ec_bytes_in_block);
- for (int i = 0; i < ec_bytes.size(); i++) {
+
+ ByteArray ec_bytes = new ByteArray(num_ec_bytes_in_block);
+ for (int i = 0; i < num_ec_bytes_in_block; i++) {
ec_bytes.set(i, toEncode[numDataBytes + i]);
}
+ return ec_bytes;
}
// Append mode info. On success, store the result in "bits" and return true. On error, return
// Kanji bytes.
static boolean AppendKanjiBytes(final ByteArray bytes, BitVector bits) {
if (bytes.size() % 2 != 0) {
- Debug.LOG_ERROR("Invalid byte sequence: " + bytes);
+ // JAVAPORT: Our log implementation throws, which causes the unit test to fail.
+ //Debug.LOG_ERROR("Invalid byte sequence: " + bytes);
return false;
}
for (int i = 0; i < bytes.size(); i += 2) {
// Check if "byte1" and "byte2" can compose a valid Kanji letter (2-byte Shift_JIS letter). The
// numbers are from http://ja.wikipedia.org/wiki/Shift_JIS.
- private static boolean IsValidKanji(final int byte1, final int byte2) {
+ static boolean IsValidKanji(final int byte1, final int byte2) {
return (byte2 != 0x7f &&
((byte1 >= 0x81 && byte1 <= 0x9f &&
byte2 >= 0x40 && byte2 <= 0xfc) ||
byte2 >= 0x40 && byte2 <= 0xfc))));
}
- // Check if "bytes" is a valid Kanji sequence.
- //
- // JAVAPORT - Remove if not used by the unit tests.
- private static boolean IsValidKanjiSequence(final ByteArray bytes) {
+ // Check if "bytes" is a valid Kanji sequence. Used by the unit tests.
+ static boolean IsValidKanjiSequence(final ByteArray bytes) {
if (bytes.size() % 2 != 0) {
return false;
}