1 // Copyright 2014 PDFium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6 7 #ifndef _BC_HIGHLEVALENCODER_H_ 8 #define _BC_HIGHLEVALENCODER_H_ 9 class CBC_SymbolShapeHint; 10 class CBC_HighLevelEncoder; 11 #define ASCII_ENCODATION 0 12 #define C40_ENCODATION 1 13 #define TEXT_ENCODATION 2 14 #define X12_ENCODATION 3 15 #define EDIFACT_ENCODATION 4 16 #define BASE256_ENCODATION 5 17 class CBC_HighLevelEncoder : public CBC_SymbolShapeHint { 18 public: 19 CBC_HighLevelEncoder(); 20 virtual ~CBC_HighLevelEncoder(); 21 CFX_ByteArray& getBytesForMessage(CFX_WideString msg); 22 static CFX_WideString encodeHighLevel(CFX_WideString msg, 23 CFX_WideString ecLevel, 24 int32_t& e); 25 static CFX_WideString encodeHighLevel(CFX_WideString msg, 26 CFX_WideString ecLevel, 27 SymbolShapeHint shape, 28 CBC_Dimension* minSize, 29 CBC_Dimension* maxSize, 30 int32_t& e); 31 static int32_t lookAheadTest(CFX_WideString msg, 32 int32_t startpos, 33 int32_t currentMode); 34 static FX_BOOL isDigit(FX_WCHAR ch); 35 static FX_BOOL isExtendedASCII(FX_WCHAR ch); 36 static int32_t determineConsecutiveDigitCount(CFX_WideString msg, 37 int32_t startpos); 38 static void illegalCharacter(FX_WCHAR c, int32_t& e); 39 40 public: 41 static FX_WCHAR LATCH_TO_C40; 42 static FX_WCHAR LATCH_TO_BASE256; 43 static FX_WCHAR UPPER_SHIFT; 44 static FX_WCHAR LATCH_TO_ANSIX12; 45 static FX_WCHAR LATCH_TO_TEXT; 46 static FX_WCHAR LATCH_TO_EDIFACT; 47 static FX_WCHAR C40_UNLATCH; 48 static FX_WCHAR X12_UNLATCH; 49 50 private: 51 static FX_WCHAR PAD; 52 static FX_WCHAR MACRO_05; 53 static FX_WCHAR MACRO_06; 54 static const wchar_t* MACRO_05_HEADER; 55 static const wchar_t* MACRO_06_HEADER; 56 static const wchar_t MACRO_TRAILER; 57 CFX_ByteArray m_bytearray; 58 59 private: 60 static FX_WCHAR randomize253State(FX_WCHAR ch, int32_t codewordPosition); 61 static int32_t findMinimums(CFX_FloatArray& charCounts, 62 CFX_Int32Array& intCharCounts, 63 int32_t min, 64 CFX_ByteArray& mins); 65 static int32_t getMinimumCount(CFX_ByteArray& mins); 66 static FX_BOOL isNativeC40(FX_WCHAR ch); 67 static FX_BOOL isNativeText(FX_WCHAR ch); 68 static FX_BOOL isNativeX12(FX_WCHAR ch); 69 static FX_BOOL isX12TermSep(FX_WCHAR ch); 70 static FX_BOOL isNativeEDIFACT(FX_WCHAR ch); 71 static FX_BOOL isSpecialB256(FX_WCHAR ch); 72 }; 73 #endif 74