blob: 4e2aeae19f20cdc4fd9de488298304eaf736a7d6 [file] [log] [blame] [view]
---
layout: default
title: Paragraph Layout
nav_order: 1
parent: Layout Engine
---
<!--
© 2020 and later: Unicode, Inc. and others.
License & terms of use: http://www.unicode.org/copyright.html
-->
# Paragraph Layout
{: .no_toc }
## Contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
# Overview
This page is about the Paragraph Layout library that is available in ICU4C/C++.
For information about the deprecated Line Layout Engine, including its deprecation notice,
see: [Layout Engine](index.md).
### About the Paragraph Layout library
* The ICU Line LayoutEngine works on small chunks - unidirectional runs. It does
not layout text at the paragraph level.
* The **ParagraphLayout** object will analyze the text into runs of text in
the same font, script and direction, and will create a LayoutEngine object
for each run. The LayoutEngine will transform the characters into glyph
codes in visual order. Clients can use this to break a paragraph into lines,
and to display the glyphs in each line.
* Also see the
[ParagraphLayout](https://unicode-org.github.io/icu-docs/apidoc/released/icu4c/classicu_1_1ParagraphLayout.html)
API Docs
### Building the Paragraph Layout library with HarfBuzz
While the ICU LayoutEngine is deprecated as of ICU 54, the ICU *Paragraph* Layout library is not.
The Paragraph Layout library must now be built using the HarfBuzz engine instead of the ICU LayoutEngine.
#### UNIX Makefile instructions / Cygwin / Msys / etc. (ICU 54+)
The following steps must be completed in order:
1. Build and install a complete ICU with the **`--disable-layout` `--disable-layoutex`**
switches passed to configure
3. Build and install HarfBuzz - http://harfbuzz.org (HarfBuzz's use of ICU may
be enabled or disabled at your choice)
4. Build and install the [icu-le-hb](https://github.com/harfbuzz/icu-le-hb) library.
5. Now, rerun "configure" on the exact **same** ICU workspace used above:
* with "icu-le-hb" AND the above-mentioned installed ICU available via
pkg-config ( `pkg-config --modversion icu-le-hb` should return a version,
such as "0.0.0" )
* with the --disable-layout **`--enable-layoutex`** switches passed to configure
6. next, run `make install` JUST in the **`source/layoutex`** directory, to install
libiculx and `icu-lx.pc`
The above steps will produce a libiculx library that depends on HarfBuzz.
If pkg-config visible installation is not suitable for step 4, you may also
manually set the following variables when building ICU in step 5:
* set `ICULEHB_CFLAGS` to the appropriate include path for icu-le-hb ( such
as **`-I/usr/local/include/icu-le-hb`** )
* set `ICULEHB_LIBS` to link against icu-le-hb and dependents as needed
(such as **`-L/usr/local/lib -licu-le-hb`** )