OpenType shaping library in C

Overview

Hamza

Hamza is a lightweight, fast and portable C90 OpenType library. It was written to be primarily for Arabic but also supports basic-shaping (Latin, Greek, etc...). However I do wish it to support more languages and writing systems.

Documentation

https://saidwho12.github.io/hamza/

Supported Languages

  • Arabic
  • English
  • French
  • Japanese
  • Chinese
  • Korean
  • Russian
  • Urdu

TODO

  • RTL
  • Ligatures
  • Kerning
  • Vertical Layouts (for Kanji)
  • Emojis
  • Justification
  • Multi-Threading (TinyCThread?)
  • BCP47 Parser
  • Documentation (Natural Docs)
Issues
  • Mark-to-base attachments sometimes don't work with omar-type fonts.

    Mark-to-base attachments sometimes don't work with omar-type fonts.

    Mark-to-base attachments sometimes don't work when a GSUB lookup replaces a medial form glyph as an example with 2 or 3 glyphs. As an example a base, tanqeet (dotting) and a khatt (stroke) can replace a initial form glyph, afterwhich the GPOS mark-to-base lookup will naively pick the first previous base glyph to attempt to attach to, and obviously it will not find any valid attachment points. This is my best assessment for what is happening in this case, in some cases it finds the correct base, but it has no attachment points in the font itself, so this is because some GPOS lookups are not yet handled.

    image image image

    bug 
    opened by saidwho13 1
  • Bug with omar-type fonts Arabic shaping, joining is inconsistent with YEH, BEH and JIM.

    Bug with omar-type fonts Arabic shaping, joining is inconsistent with YEH, BEH and JIM.

    After working for a few days on omar-type font Ayesha Quran, I have come up to a few bugs. These fonts utilize mainly GSUB lookups 1,2,4,6 (excluding 7, which is the extension lookup). The isol, init, medi and fina features are implemented with lookup 1, 2 and 6. It seems to generate strokes between the base character glyphs depending on the context it's in. Contextual substitutions are built for that kind of operation, where you compare a sequence of glyphs e.g. <abc> against the original string, and if they match the engine has to apply "nested" substitutions to glyphs within that context, for some reason though, it's not working especially for the base characters (dotless, these are the base strokes) YEH, BEH and JIM.

    image image image

    bug 
    opened by saidwho13 1
  • Nested lookups problem with mark to base positioning cannot get previous base glyph.

    Nested lookups problem with mark to base positioning cannot get previous base glyph.

    Issue with nested lookups (depth >= 1) of type HZ_GPOS_LOOKUP_TYPE_MARK_TO_BASE_ATTACHMENT in the case of chained contextual lookups. The hz_buffer_t *in argument for the nested should possibly also contain the prefix and suffix ranges for this to be resolved. I suspect this is the reason certain mark to base adjustments are not being applied in such fonts as omar-type Ayesha Quran with the ALEF character. This happens regardless if the mark is to be placed above or below the base, it is independent of attachment point.

    The following is reference from LibreOffice Writer: image

    Hamza: image

    opened by saidwho13 0
Owner
Saïd Metiche
Saïd Metiche
The official Open-Asset-Importer-Library Repository. Loads 40+ 3D-file-formats into one unified and clean data structure.

Open Asset Import Library (assimp) A library to import and export various 3d-model-formats including scene-post-processing to generate missing render

Open Asset Import Library 7.9k Jun 24, 2022
Cross-platform, graphics API agnostic, "Bring Your Own Engine/Framework" style rendering library.

bgfx - Cross-platform rendering library GitHub Discussions Discord Chat What is it? Cross-platform, graphics API agnostic, "Bring Your Own Engine/Fram

Бранимир Караџић 11.7k Jun 22, 2022
Modern C++14 library for the development of real-time graphical applications

CI Community Support bs::framework is a C++ library that aims to provide a unified foundation for the development of real-time graphical applications,

null 1.7k Jun 10, 2022
A modern cross-platform low-level graphics library and rendering framework

Diligent Engine A Modern Cross-Platform Low-Level 3D Graphics Library Diligent Engine is a lightweight cross-platform graphics API abstraction library

Diligent Graphics 2.4k Jun 29, 2022
A multi-platform library for OpenGL, OpenGL ES, Vulkan, window and input

GLFW Introduction GLFW is an Open Source, multi-platform library for OpenGL, OpenGL ES and Vulkan application development. It provides a simple, platf

GLFW 9.2k Jun 24, 2022
Low Level Graphics Library (LLGL) is a thin abstraction layer for the modern graphics APIs OpenGL, Direct3D, Vulkan, and Metal

Low Level Graphics Library (LLGL) Documentation NOTE: This repository receives bug fixes only, but no major updates. Pull requests may still be accept

Lukas Hermanns 1.4k Jun 19, 2022
Antialiased 2D vector drawing library on top of OpenGL for UI and visualizations.

This project is not actively maintained. NanoVG NanoVG is small antialiased vector graphics rendering library for OpenGL. It has lean API modeled afte

Mikko Mononen 4.4k Jun 19, 2022
An Open-Source subdivision surface library.

OpenSubdiv OpenSubdiv is a set of open source libraries that implement high performance subdivision surface (subdiv) evaluation on massively parallel

Pixar Animation Studios 2.6k Jun 25, 2022
C++ (with python bindings) library for easily reading/writing/manipulating common animation particle formats such as PDB, BGEO, PTC. See the discussion group @ http://groups.google.com/group/partio-discuss

Partio - A library for particle IO and manipulation This is the initial source code release of partio a tool we used for particle reading/writing. It

Walt Disney Animation Studios 400 Jun 20, 2022
ANSI C library for NURBS, B-Splines, and Bézier curves with interfaces for C++, C#, D, Go, Java, Lua, Octave, PHP, Python, R, and Ruby.

TinySpline TinySpline is a small, yet powerful library for interpolating, transforming, and querying arbitrary NURBS, B-Splines, and Bézier curves. Th

Marcel Steinbeck 797 Jun 27, 2022
🎨 Modern 2D/3D - Importer • Exporter • Util - Library, also called (AssetIO)

Brand-new modern 3D asset importer, exporter library. This library will include common 3D utils funcs. It is written with C99 but C++ wrappers or othe

Recep Aslantas 150 Jun 8, 2022
Epoxy is a library for handling OpenGL function pointer management for you

Epoxy is a library for handling OpenGL function pointer management for you. It hides the complexity of dlopen(), dlsym(), glXGetProcAddress(), eglGetP

Eric Anholt 545 Jun 27, 2022
Freecell Solver - a C library for automatically solving Freecell and some other variants of card Solitaire

The Freecell Solver Repository Root README Freecell Solver is an open source (distributed under the MIT/Expat licence) library, written in C, for atte

Shlomi Fish 49 Jun 24, 2022
A C math library targeted at games

Kazmath Kazmath is a simple 3D maths library written in C. It was initially coded for use in my book, Beginning OpenGL Game Programming - Second editi

Luke Benstead 502 May 25, 2022
Pure C math library for 2D and 3D programming

MATHC MATHC is a simple math library for 2D and 3D programming. Features Vectors (2D, 3D and 4D) (integer type and floating-point type) Quaternions Ma

Felipe da Silva 594 Jun 24, 2022
A library for high-performance, modern 2D graphics with SDL written in C.

SDL_gpu, a library for making hardware-accelerated 2D graphics easy. by Jonathan Dearborn SDL_gpu is licensed under the terms of the MIT License. See

Jonathan Dearborn 1k Jun 20, 2022
3D engine from scratch (without OpenGL or any other 3D graphics library)

Simple 3d engine based on SFML library. I tried to make this engine powerful and easy to understand.

Vectozavr 21 Jun 4, 2022
An OCR Library based on PaddleOCR & OnnxRuntime

An OCR Library based on PaddleOCR & OnnxRuntime

Daniel 0 Mar 27, 2021
Open3D: A Modern Library for 3D Data Processing

Open3D is an open-source library that supports rapid development of software that deals with 3D data. The Open3D frontend exposes a set of carefully selected data structures and algorithms in both C++ and Python. The backend is highly optimized and is set up for parallelization. We welcome contributions from the open-source community.

Intel ISL (Intel Intelligent Systems Lab) 6.9k Jun 27, 2022