예제 #1
0
 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;
   }
 }
예제 #2
0
  /*
   * @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;
  }