// 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_PDF417HIGHLEVELENCODER_H_ #define FXBARCODE_PDF417_BC_PDF417HIGHLEVELENCODER_H_ #include #include "core/fxcrt/fx_string.h" #include "fxbarcode/pdf417/BC_PDF417Compaction.h" class CBC_PDF417HighLevelEncoder { public: static WideString encodeHighLevel(WideString msg, Compaction compaction, int32_t& e); static void Inverse(); static void Initialize(); static void Finalize(); private: static const int32_t TEXT_COMPACTION; static const int32_t BYTE_COMPACTION; static const int32_t NUMERIC_COMPACTION; static const int32_t SUBMODE_PUNCTUATION; static const int32_t LATCH_TO_TEXT; static const int32_t LATCH_TO_BYTE_PADDED; static const int32_t LATCH_TO_NUMERIC; static const int32_t SHIFT_TO_BYTE; static const int32_t LATCH_TO_BYTE; static const uint8_t TEXT_MIXED_RAW[]; static const uint8_t TEXT_PUNCTUATION_RAW[]; static int32_t MIXED[128]; static int32_t PUNCTUATION[128]; static int32_t encodeText(WideString msg, size_t startpos, size_t count, WideString& sb, int32_t initialSubmode); static void encodeBinary(std::vector* bytes, size_t startpos, size_t count, int32_t startmode, WideString& sb); static void encodeNumeric(WideString msg, size_t startpos, size_t count, WideString& sb); static bool isDigit(wchar_t ch); static bool isAlphaUpper(wchar_t ch); static bool isAlphaLower(wchar_t ch); static bool isMixed(wchar_t ch); static bool isPunctuation(wchar_t ch); static bool isText(wchar_t ch); static size_t determineConsecutiveDigitCount(WideString msg, size_t startpos); static size_t determineConsecutiveTextCount(WideString msg, size_t startpos); static Optional determineConsecutiveBinaryCount( WideString msg, std::vector* bytes, size_t startpos); 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 // FXBARCODE_PDF417_BC_PDF417HIGHLEVELENCODER_H_