| // 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 FXBARCODE_PDF417_BC_PDF417_H_ | 
 | #define FXBARCODE_PDF417_BC_PDF417_H_ | 
 |  | 
 | #include <memory> | 
 | #include <vector> | 
 |  | 
 | #include "core/fxcrt/fx_string.h" | 
 | #include "fxbarcode/pdf417/BC_PDF417Compaction.h" | 
 |  | 
 | class CBC_BarcodeRow; | 
 | class CBC_BarcodeMatrix; | 
 |  | 
 | class CBC_PDF417 { | 
 |  public: | 
 |   CBC_PDF417(); | 
 |   explicit CBC_PDF417(bool compact); | 
 |   virtual ~CBC_PDF417(); | 
 |  | 
 |   CBC_BarcodeMatrix* getBarcodeMatrix(); | 
 |   bool generateBarcodeLogic(WideString msg, int32_t errorCorrectionLevel); | 
 |   void setDimensions(int32_t maxCols, | 
 |                      int32_t minCols, | 
 |                      int32_t maxRows, | 
 |                      int32_t minRows); | 
 |   void setCompaction(Compaction compaction); | 
 |   void setCompact(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 constexpr float PREFERRED_RATIO = 3.0f; | 
 |   static constexpr float DEFAULT_MODULE_WIDTH = 0.357f; | 
 |   static constexpr float HEIGHT = 2.0f; | 
 |  | 
 |   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(WideString fullCodewords, | 
 |                       int32_t c, | 
 |                       int32_t r, | 
 |                       int32_t errorCorrectionLevel, | 
 |                       CBC_BarcodeMatrix* logic); | 
 |   std::vector<int32_t> determineDimensions( | 
 |       int32_t sourceCodeWords, | 
 |       int32_t errorCorrectionCodeWords) const; | 
 |  | 
 |   std::unique_ptr<CBC_BarcodeMatrix> m_barcodeMatrix; | 
 |   bool m_compact; | 
 |   Compaction m_compaction; | 
 |   int32_t m_minCols; | 
 |   int32_t m_maxCols; | 
 |   int32_t m_maxRows; | 
 |   int32_t m_minRows; | 
 | }; | 
 |  | 
 | #endif  // FXBARCODE_PDF417_BC_PDF417_H_ |