Paragraph Layout
Contents
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.
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 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:
- Build and install a complete ICU with the
--disable-layout
--disable-layoutex
switches passed to configure - Build and install HarfBuzz - http://harfbuzz.org (HarfBuzz’s use of ICU may be enabled or disabled at your choice)
- Build and install the icu-le-hb library.
- 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
- with “icu-le-hb” AND the above-mentioned installed ICU available via pkg-config (
- next, run
make install
JUST in thesource/layoutex
directory, to install libiculx andicu-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
)