// 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_PDF417HIGHLEVELENCODER_H_ #define XFA_FXBARCODE_PDF417_BC_PDF417HIGHLEVELENCODER_H_ #include "core/fxcrt/fx_basic.h" #include "core/fxcrt/fx_string.h" #include "xfa/fxbarcode/pdf417/BC_PDF417Compaction.h" class CBC_PDF417HighLevelEncoder { public: static CFX_WideString encodeHighLevel(CFX_WideString msg, Compaction compaction, int32_t& e); static void Inverse(); static void Initialize(); static void Finalize(); private: static int32_t TEXT_COMPACTION; static int32_t BYTE_COMPACTION; static int32_t NUMERIC_COMPACTION; static int32_t SUBMODE_PUNCTUATION; static int32_t LATCH_TO_TEXT; static int32_t LATCH_TO_BYTE_PADDED; static int32_t LATCH_TO_NUMERIC; static int32_t SHIFT_TO_BYTE; static int32_t LATCH_TO_BYTE; static uint8_t TEXT_MIXED_RAW[]; static uint8_t TEXT_PUNCTUATION_RAW[]; static int32_t MIXED[128]; static int32_t PUNCTUATION[128]; static int32_t encodeText(CFX_WideString msg, int32_t startpos, int32_t count, CFX_WideString& sb, int32_t initialSubmode); static void encodeBinary(CFX_ArrayTemplate<uint8_t>* bytes, int32_t startpos, int32_t count, int32_t startmode, CFX_WideString& sb); static void encodeNumeric(CFX_WideString msg, int32_t startpos, int32_t count, CFX_WideString& sb); static bool isDigit(FX_WCHAR ch); static bool isAlphaUpper(FX_WCHAR ch); static bool isAlphaLower(FX_WCHAR ch); static bool isMixed(FX_WCHAR ch); static bool isPunctuation(FX_WCHAR ch); static bool isText(FX_WCHAR ch); static int32_t determineConsecutiveDigitCount(CFX_WideString msg, int32_t startpos); static int32_t determineConsecutiveTextCount(CFX_WideString msg, int32_t startpos); static int32_t determineConsecutiveBinaryCount( CFX_WideString msg, CFX_ArrayTemplate<uint8_t>* bytes, int32_t startpos, int32_t& e); friend class PDF417HighLevelEncoder_EncodeNumeric_Test; friend class PDF417HighLevelEncoder_EncodeBinary_Test; friend class PDF417HighLevelEncoder_EncodeText_Test; friend class PDF417HighLevelEncoder_ConsecutiveDigitCount_Test; friend class PDF417HighLevelEncoder_ConsecutiveTextCount_Test; friend class PDF417HighLevelEncoder_ConsecutiveBinaryCount_Test; }; #endif // XFA_FXBARCODE_PDF417_BC_PDF417HIGHLEVELENCODER_H_