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