ci: drop gitlab CI
nanosvg: update to 9da543e
readme: spelling: correclty -> correctly
fcft is a small font loading and glyph rasterization library built on-top of FontConfig, FreeType2 and pixman.
It can load and cache fonts from a fontconfig-formatted name string,
e.g. Monospace:size=12
, optionally with user configured fallback fonts.
After a font has been loaded, you can rasterize glyphs. When doing so, the primary font is first considered. If it does not have the requested glyph, the user configured fallback fonts (if any) are considered. If none of the user configured fallback fonts has the requested glyph, the FontConfig generated list of fallback fonts are checked.
The API is documented as man pages. These are built and installed when fcft is built as a standalone project, but not when built as a subproject.
Starting with 2.3.0, fcft gained the ability to do text shaping using HarfBuzz (an optional dependency). Initially, only individual grapheme clusters could be shaped. With 2.4.0, the ability to shape whole text-runs were added. It should be noted however, that fcft does not aim to compete with e.g. Pango, and that the text shaping support may not be (and perhaps never will be) sufficient for “professional” text layout.
The screenshot above is the output of the example program shipped with the fcft sources (but not built by default). It showcases the three different levels, at which fcft can rasterize glyphs:
Top: fcft_glyph_rasterize()
: Glyphs are rasterized character by character; no ligatures, no
grapheme shaping, and right-to-left scripts are not rendered
correctly.
Middle: fcft_grapheme_rasterize()
: Glyphs are rasterized grapheme by grapheme. Here, graphemes are
shaped correctly (e.g. the family emoji), but ligatures and RTL
scripts are still not rendered correctly.
Bottom: fcft_text_run_rasterize()
: The entire string is rasterized in one go. This means full shaping
is applied; ligatures, graphemes, and RTL scripts.
[^1]: only basic kerning supported (i.e. the old 'kern' tables, not the new 'GPOS' tables)
Remember, this is a simple library, not a full blown layout engine.
You can either install fcft as a system library, or use it as a meson subproject (assuming your project is meson based, of course).
If you install fcft as a system library, you can use pkg-config
to
get the compiler flags needed to find and link against fcft.
If your project is meson based, you can use fcft as a subproject. In
your main project's meson.build
, do something like:
fcft = subproject('fcft').get_variable('fcft')
executable('you-executable', ..., dependencies: [fcft])
Or, if fcft has been installed as a system library, a regular
fcft = dependency('fcft')
will suffice. Optionally, you can combine the two; search for a system library first, and fallback to a subproject:
fcft = dependency('fcft', version: '>=0.4.0', fallback: 'fcft')
Run-time dependencies:
[^2]: required by example programs
Build dependencies:
-Ddocs=disabled
)For most users, this is typically enough:
meson build --buildtype=release
ninja -C build
ninja -C build test
sudo ninja -C build install
The tests require at least one latin font to be installed.
By default, fcft will be built with support for text-shaping if
HarfBuzz is available. You can explicitly enable or disable this
with the -Dtext-shaping=disabled|enabled|auto
meson command line
option.
If text-shaping is enabled, you might also want to enable the
associated tests. Use -Dtest-text-shaping=true
to do so. Note that
these tests require an emoji font to be installed, and fc-match emoji
must return that font first.
SVG support is also enabled by default, using the bundled
nanosvg library. You can
disable this with -Dsvg-backend=none
.
To build the example programs, use the -Dexamples=true
meson command
line option.
fcft is released under the MIT license.
fcft uses Unicode data files released under the Unicode, INC. License Agreement.