// Copyright 2016 The PDFium Authors
// 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 FXBARCODE_CBC_CODE128_H_
#define FXBARCODE_CBC_CODE128_H_

#include "core/fxcrt/widestring.h"
#include "fxbarcode/BC_Library.h"
#include "fxbarcode/cbc_onecode.h"

class CBC_OnedCode128Writer;
class CFX_Matrix;

class CBC_Code128 final : public CBC_OneCode {
 public:
  explicit CBC_Code128(BC_TYPE type);
  ~CBC_Code128() override;

  // CBC_OneCode:
  BC_TYPE GetType() override;
  bool Encode(WideStringView contents) override;
  bool RenderDevice(CFX_RenderDevice* device,
                    const CFX_Matrix& matrix) override;

 private:
  CBC_OnedCode128Writer* GetOnedCode128Writer();

  WideString m_renderContents;
};

#endif  // FXBARCODE_CBC_CODE128_H_
