// 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 XFA_SRC_FXBARCODE_PDF417_BC_PDF417DECODEDBITSTREAMPARSER_H_ #define XFA_SRC_FXBARCODE_PDF417_BC_PDF417DECODEDBITSTREAMPARSER_H_ #include "core/include/fxcrt/fx_basic.h" #include "core/include/fxcrt/fx_string.h" class CBC_CommonDecoderResult; class CBC_PDF417ResultMetadata; class CBC_DecodedBitStreamPaser { public: CBC_DecodedBitStreamPaser(); virtual ~CBC_DecodedBitStreamPaser(); static void Initialize(); static void Finalize(); static CBC_CommonDecoderResult* decode(CFX_Int32Array& codewords, CFX_ByteString ecLevel, int32_t& e); private: enum Mode { ALPHA, LOWER, MIXED, PUNCT, ALPHA_SHIFT, PUNCT_SHIFT }; static int32_t MAX_NUMERIC_CODEWORDS; static int32_t PL; static int32_t LL; static int32_t AS; static int32_t ML; static int32_t AL; static int32_t PS; static int32_t PAL; static FX_CHAR PUNCT_CHARS[29]; static FX_CHAR MIXED_CHARS[30]; static int32_t NUMBER_OF_SEQUENCE_CODEWORDS; static int32_t decodeMacroBlock(CFX_Int32Array& codewords, int32_t codeIndex, CBC_PDF417ResultMetadata* resultMetadata, int32_t& e); static int32_t textCompaction(CFX_Int32Array& codewords, int32_t codeIndex, CFX_ByteString& result); static void decodeTextCompaction(CFX_Int32Array& textCompactionData, CFX_Int32Array& byteCompactionData, int32_t length, CFX_ByteString& result); static int32_t byteCompaction(int32_t mode, CFX_Int32Array& codewords, int32_t codeIndex, CFX_ByteString& result); static int32_t numericCompaction(CFX_Int32Array& codewords, int32_t codeIndex, CFX_ByteString& result, int32_t& e); static CFX_ByteString decodeBase900toBase10(CFX_Int32Array& codewords, int32_t count, int32_t& e); }; #endif // XFA_SRC_FXBARCODE_PDF417_BC_PDF417DECODEDBITSTREAMPARSER_H_