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