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