Home | History | Annotate | Download | only in oned
      1 // Copyright 2014 PDFium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
      6 // Original code is licensed as follows:
      7 /*
      8  * Copyright 2008 ZXing authors
      9  *
     10  * Licensed under the Apache License, Version 2.0 (the "License");
     11  * you may not use this file except in compliance with the License.
     12  * You may obtain a copy of the License at
     13  *
     14  *      http://www.apache.org/licenses/LICENSE-2.0
     15  *
     16  * Unless required by applicable law or agreed to in writing, software
     17  * distributed under the License is distributed on an "AS IS" BASIS,
     18  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     19  * See the License for the specific language governing permissions and
     20  * limitations under the License.
     21  */
     22 
     23 #include "xfa/src/fxbarcode/barcode.h"
     24 #include "xfa/src/fxbarcode/BC_Reader.h"
     25 #include "BC_OneDReader.h"
     26 #include "BC_OneDimReader.h"
     27 #include "BC_OnedEAN13Reader.h"
     28 #include "BC_OnedUPCAReader.h"
     29 CBC_OnedUPCAReader::CBC_OnedUPCAReader() {
     30   m_ean13Reader = NULL;
     31 }
     32 void CBC_OnedUPCAReader::Init() {
     33   m_ean13Reader = new CBC_OnedEAN13Reader;
     34 }
     35 CBC_OnedUPCAReader::~CBC_OnedUPCAReader() {
     36   if (m_ean13Reader != NULL) {
     37     delete m_ean13Reader;
     38   }
     39   m_ean13Reader = NULL;
     40 }
     41 CFX_ByteString CBC_OnedUPCAReader::DecodeRow(int32_t rowNumber,
     42                                              CBC_CommonBitArray* row,
     43                                              int32_t hints,
     44                                              int32_t& e) {
     45   CFX_ByteString bytestring =
     46       m_ean13Reader->DecodeRow(rowNumber, row, hints, e);
     47   BC_EXCEPTION_CHECK_ReturnValue(e, "");
     48   CFX_ByteString temp = MaybeReturnResult(bytestring, e);
     49   BC_EXCEPTION_CHECK_ReturnValue(e, "");
     50   return temp;
     51 }
     52 CFX_ByteString CBC_OnedUPCAReader::DecodeRow(int32_t rowNumber,
     53                                              CBC_CommonBitArray* row,
     54                                              CFX_Int32Array* startGuardRange,
     55                                              int32_t hints,
     56                                              int32_t& e) {
     57   CFX_ByteString bytestring =
     58       m_ean13Reader->DecodeRow(rowNumber, row, startGuardRange, hints, e);
     59   BC_EXCEPTION_CHECK_ReturnValue(e, "");
     60   CFX_ByteString temp = MaybeReturnResult(bytestring, e);
     61   BC_EXCEPTION_CHECK_ReturnValue(e, "");
     62   return temp;
     63 }
     64 CFX_ByteString CBC_OnedUPCAReader::Decode(CBC_BinaryBitmap* image, int32_t& e) {
     65   CFX_ByteString bytestring = m_ean13Reader->Decode(image, e);
     66   BC_EXCEPTION_CHECK_ReturnValue(e, "");
     67   CFX_ByteString temp = MaybeReturnResult(bytestring, e);
     68   BC_EXCEPTION_CHECK_ReturnValue(e, "");
     69   return temp;
     70 }
     71 CFX_ByteString CBC_OnedUPCAReader::Decode(CBC_BinaryBitmap* image,
     72                                           int32_t hints,
     73                                           int32_t& e) {
     74   CFX_ByteString bytestring = m_ean13Reader->Decode(image, hints, e);
     75   BC_EXCEPTION_CHECK_ReturnValue(e, "");
     76   CFX_ByteString temp = MaybeReturnResult(bytestring, e);
     77   BC_EXCEPTION_CHECK_ReturnValue(e, "");
     78   return temp;
     79 }
     80 int32_t CBC_OnedUPCAReader::DecodeMiddle(CBC_CommonBitArray* row,
     81                                          CFX_Int32Array* startRange,
     82                                          CFX_ByteString& resultString,
     83                                          int32_t& e) {
     84   int32_t temp = m_ean13Reader->DecodeMiddle(row, startRange, resultString, e);
     85   BC_EXCEPTION_CHECK_ReturnValue(e, 0);
     86   return temp;
     87 }
     88 CFX_ByteString CBC_OnedUPCAReader::MaybeReturnResult(CFX_ByteString& result,
     89                                                      int32_t& e) {
     90   if (result[0] == '0') {
     91     result.Delete(0);
     92     return result;
     93   } else {
     94     e = BCExceptionFormatException;
     95     return "";
     96   }
     97   return "";
     98 }
     99