external/skribidi/package/Skribidi/readme.md
Skribidi is nimble bidirectional text stack for building UIs.
Text rendering is hard, text editing is hard too, font selection is hard, text alignment is hard. Everything text related is hard, and messy, and full of nuances.
If you wanted to have bidirection text display and input for you project, there are not many options. There are a lot of great projects that cover parts of the text stack, but there's still huge amount of work left piece things together. A lot of the wisdom is scattered all over old browser bugs, blogs that might not exists anymore, or bits of code scattered all over the world.
Many text stacks are part of larger projects, like browsers or game engines, or have licenses that are not permissive, or require huge dependecies.
Skribidi tries to solve the text stack for UIs without dragging in large dependencies. Text layout, text input, and font rasterization, with features that you'd expect to build an UI.
Skribidi leans heavity on Harfbuzz for text shaping and accessing font data, SheenBidi for bidirectional segmentation, libunibreak for grapheme and linebreak detection, and budouxc for East Asian word boundary detection. All permissively licensed and quite lean dependencies.
Skribidi just got started. There are bugs and the API is very likely to change.
PATHmkdir buildcd buildcmake ..build/skribidi.slncmake --build . -j$(nproc)cmake --build . -j$(sysctl -n hw.ncpu)When running the example or test, the working directory should be the build binary directory (/build/bin). On Windows, the example data direction is copied there and on Linux or macOS there's a symlink for the data directory.
The project uses CMake, but you dont need to. If you handle dependecies yourself you can just add the
include and src to your project and you're good to go. The CMake is used to fetch the right deps
and to build the examples and tests, making development simpler.
Skribidi is developed by Mikko Mononen and uses the MIT license.
The examples use following fonts: