diff options
Diffstat (limited to 'fxbarcode/datamatrix/BC_HighLevelEncoder.h')
-rw-r--r-- | fxbarcode/datamatrix/BC_HighLevelEncoder.h | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/fxbarcode/datamatrix/BC_HighLevelEncoder.h b/fxbarcode/datamatrix/BC_HighLevelEncoder.h new file mode 100644 index 0000000000..83136be2f4 --- /dev/null +++ b/fxbarcode/datamatrix/BC_HighLevelEncoder.h @@ -0,0 +1,79 @@ +// 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_DATAMATRIX_BC_HIGHLEVELENCODER_H_ +#define FXBARCODE_DATAMATRIX_BC_HIGHLEVELENCODER_H_ + +#include <vector> + +#include "fxbarcode/datamatrix/BC_SymbolShapeHint.h" + +#define ASCII_ENCODATION 0 +#define C40_ENCODATION 1 +#define TEXT_ENCODATION 2 +#define X12_ENCODATION 3 +#define EDIFACT_ENCODATION 4 +#define BASE256_ENCODATION 5 + +class CBC_HighLevelEncoder : public CBC_SymbolShapeHint { + public: + CBC_HighLevelEncoder(); + ~CBC_HighLevelEncoder() override; + + std::vector<uint8_t>& getBytesForMessage(CFX_WideString msg); + static CFX_WideString encodeHighLevel(CFX_WideString msg, + CFX_WideString ecLevel, + int32_t& e); + static CFX_WideString encodeHighLevel(CFX_WideString msg, + CFX_WideString ecLevel, + SymbolShapeHint shape, + CBC_Dimension* minSize, + CBC_Dimension* maxSize, + int32_t& e); + static int32_t lookAheadTest(CFX_WideString msg, + int32_t startpos, + int32_t currentMode); + static bool isDigit(wchar_t ch); + static bool isExtendedASCII(wchar_t ch); + static int32_t determineConsecutiveDigitCount(CFX_WideString msg, + int32_t startpos); + static void illegalCharacter(wchar_t c, int32_t& e); + + public: + static wchar_t LATCH_TO_C40; + static wchar_t LATCH_TO_BASE256; + static wchar_t UPPER_SHIFT; + static wchar_t LATCH_TO_ANSIX12; + static wchar_t LATCH_TO_TEXT; + static wchar_t LATCH_TO_EDIFACT; + static wchar_t C40_UNLATCH; + static wchar_t X12_UNLATCH; + + private: + static wchar_t PAD; + static wchar_t MACRO_05; + static wchar_t MACRO_06; + static const wchar_t* MACRO_05_HEADER; + static const wchar_t* MACRO_06_HEADER; + static const wchar_t MACRO_TRAILER; + std::vector<uint8_t> m_bytearray; + + private: + static wchar_t randomize253State(wchar_t ch, int32_t codewordPosition); + static int32_t findMinimums(std::vector<float>& charCounts, + std::vector<int32_t>& intCharCounts, + int32_t min, + std::vector<uint8_t>& mins); + static int32_t getMinimumCount(std::vector<uint8_t>& mins); + static bool isNativeC40(wchar_t ch); + static bool isNativeText(wchar_t ch); + static bool isNativeX12(wchar_t ch); + static bool isX12TermSep(wchar_t ch); + static bool isNativeEDIFACT(wchar_t ch); + static bool isSpecialB256(wchar_t ch); +}; + +#endif // FXBARCODE_DATAMATRIX_BC_HIGHLEVELENCODER_H_ |