1ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Copyright 2014 PDFium Authors. All rights reserved.
2ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be
3ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// found in the LICENSE file.
4ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
5ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
7ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifndef XFA_SRC_FXBARCODE_PDF417_BC_PDF417HIGHLEVELENCODER_H_
8ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define XFA_SRC_FXBARCODE_PDF417_BC_PDF417HIGHLEVELENCODER_H_
9ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
10ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "core/include/fxcrt/fx_basic.h"
11ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "core/include/fxcrt/fx_string.h"
12ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa/src/fxbarcode/pdf417/BC_PDF417Compaction.h"
13ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
14ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CBC_PDF417HighLevelEncoder {
15ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
16ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static CFX_WideString encodeHighLevel(CFX_WideString msg,
17ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                        Compaction compaction,
18ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                        int32_t& e);
19ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static void Inverse();
20ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static void Initialize();
21ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static void Finalize();
22ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
23ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann private:
24ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static int32_t TEXT_COMPACTION;
25ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static int32_t BYTE_COMPACTION;
26ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static int32_t NUMERIC_COMPACTION;
27ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static int32_t SUBMODE_PUNCTUATION;
28ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static int32_t LATCH_TO_TEXT;
29ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static int32_t LATCH_TO_BYTE_PADDED;
30ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static int32_t LATCH_TO_NUMERIC;
31ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static int32_t SHIFT_TO_BYTE;
32ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static int32_t LATCH_TO_BYTE;
33ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static uint8_t TEXT_MIXED_RAW[];
34ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static uint8_t TEXT_PUNCTUATION_RAW[];
35ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static int32_t MIXED[128];
36ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static int32_t PUNCTUATION[128];
37ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static int32_t encodeText(CFX_WideString msg,
38ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            int32_t startpos,
39ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            int32_t count,
40ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            CFX_WideString& sb,
41ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            int32_t initialSubmode);
42ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static void encodeBinary(CFX_ByteArray* bytes,
43ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           int32_t startpos,
44ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           int32_t count,
45ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           int32_t startmode,
46ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           CFX_WideString& sb);
47ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static void encodeNumeric(CFX_WideString msg,
48ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            int32_t startpos,
49ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            int32_t count,
50ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            CFX_WideString& sb);
51ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static FX_BOOL isDigit(FX_WCHAR ch);
52ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static FX_BOOL isAlphaUpper(FX_WCHAR ch);
53ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static FX_BOOL isAlphaLower(FX_WCHAR ch);
54ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static FX_BOOL isMixed(FX_WCHAR ch);
55ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static FX_BOOL isPunctuation(FX_WCHAR ch);
56ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static FX_BOOL isText(FX_WCHAR ch);
57ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static int32_t determineConsecutiveDigitCount(CFX_WideString msg,
58ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                int32_t startpos);
59ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static int32_t determineConsecutiveTextCount(CFX_WideString msg,
60ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                               int32_t startpos);
61ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static int32_t determineConsecutiveBinaryCount(CFX_WideString msg,
62ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                 CFX_ByteArray* bytes,
63ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                 int32_t startpos,
64ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                 int32_t& e);
65ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
66ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  friend class PDF417HighLevelEncoder_EncodeNumeric_Test;
67ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  friend class PDF417HighLevelEncoder_EncodeBinary_Test;
68ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  friend class PDF417HighLevelEncoder_EncodeText_Test;
69ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  friend class PDF417HighLevelEncoder_ConsecutiveDigitCount_Test;
70ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  friend class PDF417HighLevelEncoder_ConsecutiveTextCount_Test;
71ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  friend class PDF417HighLevelEncoder_ConsecutiveBinaryCount_Test;
72ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann};
73ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
74ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif  // XFA_SRC_FXBARCODE_PDF417_BC_PDF417HIGHLEVELENCODER_H_
75