// Copyright 2014 PDFium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com #ifndef XFA_FXBARCODE_PDF417_BC_PDF417_H_ #define XFA_FXBARCODE_PDF417_BC_PDF417_H_ #include "core/fxcrt/include/fx_basic.h" #include "xfa/fxbarcode/pdf417/BC_PDF417Compaction.h" class CBC_BarcodeRow; class CBC_BarcodeMatrix; class CBC_PDF417 { public: CBC_PDF417(); CBC_PDF417(FX_BOOL compact); virtual ~CBC_PDF417(); CBC_BarcodeMatrix* getBarcodeMatrix(); void generateBarcodeLogic(CFX_WideString msg, int32_t errorCorrectionLevel, int32_t& e); void setDimensions(int32_t maxCols, int32_t minCols, int32_t maxRows, int32_t minRows); void setCompaction(Compaction compaction); void setCompact(FX_BOOL compact); private: static const int32_t START_PATTERN = 0x1fea8; static const int32_t STOP_PATTERN = 0x3fa29; static const int32_t CODEWORD_TABLE[][929]; static FX_FLOAT PREFERRED_RATIO; static FX_FLOAT DEFAULT_MODULE_WIDTH; static FX_FLOAT HEIGHT; CBC_BarcodeMatrix* m_barcodeMatrix; FX_BOOL m_compact; Compaction m_compaction; int32_t m_minCols; int32_t m_maxCols; int32_t m_maxRows; int32_t m_minRows; private: static int32_t calculateNumberOfRows(int32_t m, int32_t k, int32_t c); static int32_t getNumberOfPadCodewords(int32_t m, int32_t k, int32_t c, int32_t r); static void encodeChar(int32_t pattern, int32_t len, CBC_BarcodeRow* logic); void encodeLowLevel(CFX_WideString fullCodewords, int32_t c, int32_t r, int32_t errorCorrectionLevel, CBC_BarcodeMatrix* logic); CFX_Int32Array* determineDimensions(int32_t sourceCodeWords, int32_t errorCorrectionCodeWords, int32_t& e); }; #endif // XFA_FXBARCODE_PDF417_BC_PDF417_H_