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