// Copyright (C) 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*
* (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved
*
*/
/*
* paragraphLayout doesn't make much sense without
* BreakIterator...
*/
#include "layout/LETypes.h"
#include "layout/loengine.h"
#include "layout/plruns.h"
#include "layout/playout.h"
#include "unicode/locid.h"
#include "layout/LayoutEngine.h"
#include "layout/ParagraphLayout.h"
#if ! UCONFIG_NO_BREAK_ITERATION
U_NAMESPACE_USE
U_CAPI pl_paragraph * U_EXPORT2
pl_create(const LEUnicode chars[],
le_int32 count,
const pl_fontRuns *fontRuns,
const pl_valueRuns *levelRuns,
const pl_valueRuns *scriptRuns,
const pl_localeRuns *localeRuns,
UBiDiLevel paragraphLevel,
le_bool vertical,
LEErrorCode *status)
{
ParagraphLayout *pl = new ParagraphLayout(chars, count, (const FontRuns *) fontRuns,
(const ValueRuns *) levelRuns, (const ValueRuns *) scriptRuns, (const LocaleRuns *) localeRuns,
paragraphLevel, vertical, *status);
return (pl_paragraph *) pl;
}
U_CAPI void U_EXPORT2
pl_close(pl_paragraph *paragraph)
{
ParagraphLayout *pl = (ParagraphLayout *) paragraph;
delete pl;
}
U_CAPI le_bool U_EXPORT2
pl_isComplex(const LEUnicode chars[],
le_int32 count)
{
return ParagraphLayout::isComplex(chars, count);
}
U_CAPI UBiDiLevel U_EXPORT2
pl_getParagraphLevel(pl_paragraph *paragraph)
{
ParagraphLayout *pl = (ParagraphLayout *) paragraph;
if (pl == NULL) {
return 0;
}
return pl->getParagraphLevel();
}
U_CAPI UBiDiDirection U_EXPORT2
pl_getTextDirection(pl_paragraph *paragraph)
{
ParagraphLayout *pl = (ParagraphLayout *) paragraph;
if (pl == NULL) {
return UBIDI_LTR;
}
return pl->getTextDirection();
}
U_CAPI le_int32 U_EXPORT2
pl_getAscent(const pl_paragraph *paragraph)
{
ParagraphLayout *pl = (ParagraphLayout *) paragraph;
if (pl == NULL) {
return 0;
}
return pl->getAscent();
}
U_CAPI le_int32 U_EXPORT2
pl_getDescent(const pl_paragraph *paragraph)
{
ParagraphLayout *pl = (ParagraphLayout *) paragraph;
if (pl == NULL) {
return 0;
}
return pl->getDescent();
}
U_CAPI le_int32 U_EXPORT2
pl_getLeading(const pl_paragraph *paragraph)
{
ParagraphLayout *pl = (ParagraphLayout *) paragraph;
if (pl == NULL) {
return 0;
}
return pl->getLeading();
}
U_CAPI void U_EXPORT2
pl_reflow(pl_paragraph *paragraph)
{
ParagraphLayout *pl = (ParagraphLayout *) paragraph;
if (pl == NULL) {
return;
}
return pl->reflow();
}
U_CAPI pl_line * U_EXPORT2
pl_nextLine(pl_paragraph *paragraph, float width)
{
ParagraphLayout *pl = (ParagraphLayout *) paragraph;
if (pl == NULL) {
return NULL;
}
return (pl_line *) pl->nextLine(width);
}
U_CAPI void U_EXPORT2
pl_closeLine(pl_line *line)
{
ParagraphLayout::Line *ll = (ParagraphLayout::Line *) line;
delete ll;
}
U_CAPI le_int32 U_EXPORT2
pl_countLineRuns(const pl_line *line)
{
ParagraphLayout::Line *ll = (ParagraphLayout::Line *) line;
if (ll == NULL) {
return 0;
}
return ll->countRuns();
}
U_CAPI le_int32 U_EXPORT2
pl_getLineAscent(const pl_line *line)
{
ParagraphLayout::Line *ll = (ParagraphLayout::Line *) line;
if (ll == NULL) {
return 0;
}
return ll->getAscent();
}
U_CAPI le_int32 U_EXPORT2
pl_getLineDescent(const pl_line *line)
{
ParagraphLayout::Line *ll = (ParagraphLayout::Line *) line;
if (ll == NULL) {
return 0;
}
return ll->getDescent();
}
U_CAPI le_int32 U_EXPORT2
pl_getLineLeading(const pl_line *line)
{
ParagraphLayout::Line *ll = (ParagraphLayout::Line *) line;
if (ll == NULL) {
return 0;
}
return ll->getLeading();
}
U_CAPI le_int32 U_EXPORT2
pl_getLineWidth(const pl_line *line)
{
ParagraphLayout::Line *ll = (ParagraphLayout::Line *) line;
if (ll == NULL) {
return 0;
}
return ll->getWidth();
}
U_CAPI const pl_visualRun * U_EXPORT2
pl_getLineVisualRun(const pl_line *line, le_int32 runIndex)
{
ParagraphLayout::Line *ll = (ParagraphLayout::Line *) line;
if (ll == NULL) {
return 0;
}
return (pl_visualRun *) ll->getVisualRun(runIndex);
}
U_CAPI const le_font * U_EXPORT2
pl_getVisualRunFont(const pl_visualRun *run)
{
ParagraphLayout::VisualRun *vr = (ParagraphLayout::VisualRun *) run;
if (vr == NULL) {
return NULL;
}
return (const le_font *) vr->getFont();
}
U_CAPI UBiDiDirection U_EXPORT2
pl_getVisualRunDirection(const pl_visualRun *run)
{
ParagraphLayout::VisualRun *vr = (ParagraphLayout::VisualRun *) run;
if (vr == NULL) {
return UBIDI_LTR;
}
return vr->getDirection();
}
U_CAPI le_int32 U_EXPORT2
pl_getVisualRunGlyphCount(const pl_visualRun *run)
{
ParagraphLayout::VisualRun *vr = (ParagraphLayout::VisualRun *) run;
if (vr == NULL) {
return -1;
}
return vr->getGlyphCount();
}
U_CAPI const LEGlyphID * U_EXPORT2
pl_getVisualRunGlyphs(const pl_visualRun *run)
{
ParagraphLayout::VisualRun *vr = (ParagraphLayout::VisualRun *) run;
if (vr == NULL) {
return NULL;
}
return vr->getGlyphs();
}
U_CAPI const float * U_EXPORT2
pl_getVisualRunPositions(const pl_visualRun *run)
{
ParagraphLayout::VisualRun *vr = (ParagraphLayout::VisualRun *) run;
if (vr == NULL) {
return NULL;
}
return vr->getPositions();
}
U_CAPI const le_int32 * U_EXPORT2
pl_getVisualRunGlyphToCharMap(const pl_visualRun *run)
{
ParagraphLayout::VisualRun *vr = (ParagraphLayout::VisualRun *) run;
if (vr == NULL) {
return NULL;
}
return vr->getGlyphToCharMap();
}
U_CAPI le_int32 U_EXPORT2
pl_getVisualRunAscent(const pl_visualRun *run)
{
ParagraphLayout::VisualRun *vr = (ParagraphLayout::VisualRun *) run;
if (vr == NULL) {
return 0;
}
return vr->getAscent();
}
U_CAPI le_int32 U_EXPORT2
pl_getVisualRunDescent(const pl_visualRun *run)
{
ParagraphLayout::VisualRun *vr = (ParagraphLayout::VisualRun *) run;
if (vr == NULL) {
return 0;
}
return vr->getDescent();
}
U_CAPI le_int32 U_EXPORT2
pl_getVisualRunLeading(const pl_visualRun *run)
{
ParagraphLayout::VisualRun *vr = (ParagraphLayout::VisualRun *) run;
if (vr == NULL) {
return 0;
}
return vr->getLeading();
}
#endif