// Copyright 2018 The 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.

#include <cstdint>
#include <memory>

#include "core/fxcrt/widestring.h"
#include "core/fxge/cfx_font.h"
#include "core/fxge/fx_font.h"
#include "xfa/fgas/font/cfgas_gefont.h"
#include "xfa/fgas/layout/cfx_char.h"
#include "xfa/fgas/layout/cfx_rtfbreak.h"

extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
  auto font = std::make_unique<CFX_Font>();
  font->LoadSubst("Arial", true, 0, FXFONT_FW_NORMAL, 0, 0, 0);
  assert(font);

  CFX_RTFBreak rtf_break(FX_LAYOUTSTYLE_ExpandTab);
  rtf_break.SetLineBreakTolerance(1);
  rtf_break.SetFont(CFGAS_GEFont::LoadFont(std::move(font)));
  rtf_break.SetFontSize(12);

  WideString input =
      WideString::FromUTF16LE(reinterpret_cast<const unsigned short*>(data),
                              size / sizeof(unsigned short));
  for (wchar_t ch : input)
    rtf_break.AppendChar(ch);

  std::vector<CFX_Char> chars =
      rtf_break.GetCurrentLineForTesting()->m_LineChars;
  CFX_Char::BidiLine(&chars, chars.size());
  return 0;
}
