public boolean[] a(String paramString) { if (paramString.length() < 2) { throw new IllegalArgumentException("Codabar should start/end with start/stop symbols"); } char c1 = Character.toUpperCase(paramString.charAt(0)); char c2 = Character.toUpperCase(paramString.charAt(-1 + paramString.length())); int i; if ((CodaBarReader.a(a, c1)) && (CodaBarReader.a(a, c2))) { i = 1; if ((!CodaBarReader.a(b, c1)) || (!CodaBarReader.a(b, c2))) { break label149; } } label149: for (int j = 1;; j = 0) { if ((i != 0) || (j != 0)) { break label155; } throw new IllegalArgumentException("Codabar should start/end with " + Arrays.toString(a) + ", or start/end with " + Arrays.toString(b)); i = 0; break; } label155: int k = 20; int m = 1; if (m < -1 + paramString.length()) { if ((Character.isDigit(paramString.charAt(m))) || (paramString.charAt(m) == '-') || (paramString.charAt(m) == '$')) { k += 9; } for (;;) { m++; break; if (!CodaBarReader.a(c, paramString.charAt(m))) { break label237; } k += 10; } label237: throw new IllegalArgumentException("Cannot encode : '" + paramString.charAt(m) + '\''); } boolean[] arrayOfBoolean = new boolean[k + (-1 + paramString.length())]; int n = 0; int i1 = 0; int i2; int i3; if (n < paramString.length()) { i2 = Character.toUpperCase(paramString.charAt(n)); if ((n == 0) || (n == -1 + paramString.length())) {} switch (i2) { default: i3 = 0; label375: if (i3 < CodaBarReader.a.length) { if (i2 != CodaBarReader.a[i3]) { break; } } break; } } for (int i4 = CodaBarReader.b[i3];; i4 = 0) { int i5 = 0; int i6 = 0; int i7 = 1; for (;;) { label412: if (i5 >= 7) { break label526; } arrayOfBoolean[i1] = i7; int i8 = i1 + 1; if (((0x1 & i4 >> 6 - i5) == 0) || (i6 == 1)) { if (i7 == 0) {} for (int i9 = 1;; i9 = 0) { i5++; i7 = i9; i1 = i8; i6 = 0; break label412; i2 = 65; break; i2 = 66; break; i2 = 67; break; i2 = 68; break; i3++; break label375; } } i6++; i1 = i8; } label526: if (n < -1 + paramString.length()) { arrayOfBoolean[i1] = false; i1++; } n++; break; return arrayOfBoolean; } }
/* * @see OneDimensionalCodeWriter#encode(java.lang.String) */ @Override public byte[] encode(String contents) { // Verify input and calculate decoded length. if (!CodaBarReader.arrayContains( new char[] {'A', 'B', 'C', 'D'}, Character.toUpperCase(contents.charAt(0)))) { throw new IllegalArgumentException( "Codabar should start with one of the following: 'A', 'B', 'C' or 'D'"); } if (!CodaBarReader.arrayContains( new char[] {'T', 'N', '*', 'E'}, Character.toUpperCase(contents.charAt(contents.length() - 1)))) { throw new IllegalArgumentException( "Codabar should end with one of the following: 'T', 'N', '*' or 'E'"); } // The start character and the end character are decoded to 10 length each. int resultLength = 20; char[] charsWhichAreTenLengthEachAfterDecoded = {'/', ':', '+', '.'}; for (int i = 1; i < contents.length() - 1; i++) { if (Character.isDigit(contents.charAt(i)) || contents.charAt(i) == '-' || contents.charAt(i) == '$') { resultLength += 9; } else if (CodaBarReader.arrayContains( charsWhichAreTenLengthEachAfterDecoded, contents.charAt(i))) { resultLength += 10; } else { throw new IllegalArgumentException("Cannot encode : '" + contents.charAt(i) + '\''); } } // A blank is placed between each character. resultLength += contents.length() - 1; byte[] result = new byte[resultLength]; int position = 0; for (int index = 0; index < contents.length(); index++) { char c = Character.toUpperCase(contents.charAt(index)); if (index == contents.length() - 1) { // The end chars are not in the CodaBarReader.ALPHABET. switch (c) { case 'T': c = 'A'; break; case 'N': c = 'B'; break; case '*': c = 'C'; break; case 'E': c = 'D'; break; } } int code = 0; for (int i = 0; i < CodaBarReader.ALPHABET.length; i++) { // Found any, because I checked above. if (c == CodaBarReader.ALPHABET[i]) { code = CodaBarReader.CHARACTER_ENCODINGS[i]; break; } } byte color = 1; int counter = 0; int bit = 0; while (bit < 7) { // A character consists of 7 digit. result[position] = color; position++; if (((code >> (6 - bit)) & 1) == 0 || counter == 1) { color ^= 1; // Flip the color. bit++; counter = 0; } else { counter++; } } if (index < contents.length() - 1) { result[position] = 0; position++; } } return result; }