Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 7 additions & 6 deletions harfrust_capi/README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
# harfrust_capi

A C API for [HarfRust](https://github.com/harfbuzz/harfrust), mirroring the
shaping half of HarfBuzz's API with an `hr_` prefix in place of `hb_`.
shaping, OpenType BASE baseline, and MATH query APIs of HarfBuzz with an `hr_`
prefix in place of `hb_`.

Every type, function, enumerator and constant is named and numbered to match
its HarfBuzz counterpart, so C code can usually be ported by renaming `hb_` to
Expand Down Expand Up @@ -51,9 +52,8 @@ hb_shape(font, buffer, NULL, 0);

Two things to know. It cannot be combined with HarfBuzz itself in one
translation unit, since the macros would rewrite HarfBuzz's own declarations;
include one or the other. And it covers only the shaping API, so anything from
the list below fails to compile rather than failing at run time, which is the
point.
include one or the other. It covers the APIs listed below, so unsupported
HarfBuzz calls fail to compile.

The header is generated from `hr.h`, so the two cannot drift:

Expand Down Expand Up @@ -99,8 +99,9 @@ and can be frozen with `hr_*_make_immutable`, after which setters are ignored.
Blobs, faces, fonts, font callbacks, buffers, shape plans and `hr_shape`,
along with the tags, directions, scripts, languages, features and variations
they need. OpenType `BASE` baseline queries are available through
`hr_ot_layout_get_baseline` and its related functions.
Set `hr_font_set_ppem` when `BASE` device adjustments should apply; it is
`hr_ot_layout_get_baseline` and its related functions. OpenType `MATH` queries
are available through `hr_ot_math_*` functions.
Set `hr_font_set_ppem` when `BASE` or `MATH` device adjustments should apply; it is
independent of the point size set by `hr_font_set_ptem`.

Faces can be built two ways: over a blob with `hr_face_create`, or from a
Expand Down
85 changes: 82 additions & 3 deletions harfrust_capi/include/hr-hb.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/* Generated by scripts/gen-hb-compat-header.py from hr.h. Do not edit by hand.
*
* HarfBuzz names, mapped onto their HarfRust counterparts. Include this in
* place of <hb.h> to build code written against HarfBuzz's shaping API
* place of <hb.h> to build code written against the supported HarfBuzz APIs
* against HarfRust instead:
*
* #include <hr-hb.h>
Expand All @@ -16,9 +16,9 @@
* macros below would rewrite HarfBuzz's own declarations. Include one or the
* other.
*
* Only the shaping API is covered, because that is all HarfRust implements.
* Shaping, BASE baseline, and MATH query APIs are covered.
* Anything else HarfBuzz offers -- drawing and painting callbacks,
* subsetting, layout table introspection, hb_set and hb_map, custom Unicode
* subsetting, other layout table introspection, hb_set and hb_map, custom Unicode
* callbacks -- has no mapping here and will fail to compile, which is the
* point: you find out at build time rather than at run time. The version
* macros (HB_VERSION_MAJOR and friends) are also absent; call hr_version() or
Expand Down Expand Up @@ -211,6 +211,22 @@
#define hb_ot_layout_get_baseline_with_fallback hr_ot_layout_get_baseline_with_fallback
#define hb_ot_layout_get_baseline_with_fallback2 hr_ot_layout_get_baseline_with_fallback2
#define hb_ot_layout_get_horizontal_baseline_tag_for_script hr_ot_layout_get_horizontal_baseline_tag_for_script
#define hb_ot_math_constant_t hr_ot_math_constant_t
#define hb_ot_math_get_constant hr_ot_math_get_constant
#define hb_ot_math_get_glyph_assembly hr_ot_math_get_glyph_assembly
#define hb_ot_math_get_glyph_italics_correction hr_ot_math_get_glyph_italics_correction
#define hb_ot_math_get_glyph_kerning hr_ot_math_get_glyph_kerning
#define hb_ot_math_get_glyph_kernings hr_ot_math_get_glyph_kernings
#define hb_ot_math_get_glyph_top_accent_attachment hr_ot_math_get_glyph_top_accent_attachment
#define hb_ot_math_get_glyph_variants hr_ot_math_get_glyph_variants
#define hb_ot_math_get_min_connector_overlap hr_ot_math_get_min_connector_overlap
#define hb_ot_math_glyph_part_flags_t hr_ot_math_glyph_part_flags_t
#define hb_ot_math_glyph_part_t hr_ot_math_glyph_part_t
#define hb_ot_math_glyph_variant_t hr_ot_math_glyph_variant_t
#define hb_ot_math_has_data hr_ot_math_has_data
#define hb_ot_math_is_glyph_extended_shape hr_ot_math_is_glyph_extended_shape
#define hb_ot_math_kern_entry_t hr_ot_math_kern_entry_t
#define hb_ot_math_kern_t hr_ot_math_kern_t
#define hb_position_t hr_position_t
#define hb_reference_table_func_t hr_reference_table_func_t
#define hb_script_from_iso15924_tag hr_script_from_iso15924_tag
Expand Down Expand Up @@ -311,6 +327,69 @@
#define HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_TOP_OR_RIGHT HR_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_TOP_OR_RIGHT
#define HB_OT_LAYOUT_BASELINE_TAG_MATH HR_OT_LAYOUT_BASELINE_TAG_MATH
#define HB_OT_LAYOUT_BASELINE_TAG_ROMAN HR_OT_LAYOUT_BASELINE_TAG_ROMAN
#define HB_OT_MATH_CONSTANT_ACCENT_BASE_HEIGHT HR_OT_MATH_CONSTANT_ACCENT_BASE_HEIGHT
#define HB_OT_MATH_CONSTANT_AXIS_HEIGHT HR_OT_MATH_CONSTANT_AXIS_HEIGHT
#define HB_OT_MATH_CONSTANT_DELIMITED_SUB_FORMULA_MIN_HEIGHT HR_OT_MATH_CONSTANT_DELIMITED_SUB_FORMULA_MIN_HEIGHT
#define HB_OT_MATH_CONSTANT_DISPLAY_OPERATOR_MIN_HEIGHT HR_OT_MATH_CONSTANT_DISPLAY_OPERATOR_MIN_HEIGHT
#define HB_OT_MATH_CONSTANT_FLATTENED_ACCENT_BASE_HEIGHT HR_OT_MATH_CONSTANT_FLATTENED_ACCENT_BASE_HEIGHT
#define HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_DISPLAY_STYLE_SHIFT_DOWN HR_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_DISPLAY_STYLE_SHIFT_DOWN
#define HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_GAP_MIN HR_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_GAP_MIN
#define HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_SHIFT_DOWN HR_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_SHIFT_DOWN
#define HB_OT_MATH_CONSTANT_FRACTION_DENOM_DISPLAY_STYLE_GAP_MIN HR_OT_MATH_CONSTANT_FRACTION_DENOM_DISPLAY_STYLE_GAP_MIN
#define HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_DISPLAY_STYLE_SHIFT_UP HR_OT_MATH_CONSTANT_FRACTION_NUMERATOR_DISPLAY_STYLE_SHIFT_UP
#define HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_GAP_MIN HR_OT_MATH_CONSTANT_FRACTION_NUMERATOR_GAP_MIN
#define HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_SHIFT_UP HR_OT_MATH_CONSTANT_FRACTION_NUMERATOR_SHIFT_UP
#define HB_OT_MATH_CONSTANT_FRACTION_NUM_DISPLAY_STYLE_GAP_MIN HR_OT_MATH_CONSTANT_FRACTION_NUM_DISPLAY_STYLE_GAP_MIN
#define HB_OT_MATH_CONSTANT_FRACTION_RULE_THICKNESS HR_OT_MATH_CONSTANT_FRACTION_RULE_THICKNESS
#define HB_OT_MATH_CONSTANT_LOWER_LIMIT_BASELINE_DROP_MIN HR_OT_MATH_CONSTANT_LOWER_LIMIT_BASELINE_DROP_MIN
#define HB_OT_MATH_CONSTANT_LOWER_LIMIT_GAP_MIN HR_OT_MATH_CONSTANT_LOWER_LIMIT_GAP_MIN
#define HB_OT_MATH_CONSTANT_MATH_LEADING HR_OT_MATH_CONSTANT_MATH_LEADING
#define HB_OT_MATH_CONSTANT_OVERBAR_EXTRA_ASCENDER HR_OT_MATH_CONSTANT_OVERBAR_EXTRA_ASCENDER
#define HB_OT_MATH_CONSTANT_OVERBAR_RULE_THICKNESS HR_OT_MATH_CONSTANT_OVERBAR_RULE_THICKNESS
#define HB_OT_MATH_CONSTANT_OVERBAR_VERTICAL_GAP HR_OT_MATH_CONSTANT_OVERBAR_VERTICAL_GAP
#define HB_OT_MATH_CONSTANT_RADICAL_DEGREE_BOTTOM_RAISE_PERCENT HR_OT_MATH_CONSTANT_RADICAL_DEGREE_BOTTOM_RAISE_PERCENT
#define HB_OT_MATH_CONSTANT_RADICAL_DISPLAY_STYLE_VERTICAL_GAP HR_OT_MATH_CONSTANT_RADICAL_DISPLAY_STYLE_VERTICAL_GAP
#define HB_OT_MATH_CONSTANT_RADICAL_EXTRA_ASCENDER HR_OT_MATH_CONSTANT_RADICAL_EXTRA_ASCENDER
#define HB_OT_MATH_CONSTANT_RADICAL_KERN_AFTER_DEGREE HR_OT_MATH_CONSTANT_RADICAL_KERN_AFTER_DEGREE
#define HB_OT_MATH_CONSTANT_RADICAL_KERN_BEFORE_DEGREE HR_OT_MATH_CONSTANT_RADICAL_KERN_BEFORE_DEGREE
#define HB_OT_MATH_CONSTANT_RADICAL_RULE_THICKNESS HR_OT_MATH_CONSTANT_RADICAL_RULE_THICKNESS
#define HB_OT_MATH_CONSTANT_RADICAL_VERTICAL_GAP HR_OT_MATH_CONSTANT_RADICAL_VERTICAL_GAP
#define HB_OT_MATH_CONSTANT_SCRIPT_PERCENT_SCALE_DOWN HR_OT_MATH_CONSTANT_SCRIPT_PERCENT_SCALE_DOWN
#define HB_OT_MATH_CONSTANT_SCRIPT_SCRIPT_PERCENT_SCALE_DOWN HR_OT_MATH_CONSTANT_SCRIPT_SCRIPT_PERCENT_SCALE_DOWN
#define HB_OT_MATH_CONSTANT_SKEWED_FRACTION_HORIZONTAL_GAP HR_OT_MATH_CONSTANT_SKEWED_FRACTION_HORIZONTAL_GAP
#define HB_OT_MATH_CONSTANT_SKEWED_FRACTION_VERTICAL_GAP HR_OT_MATH_CONSTANT_SKEWED_FRACTION_VERTICAL_GAP
#define HB_OT_MATH_CONSTANT_SPACE_AFTER_SCRIPT HR_OT_MATH_CONSTANT_SPACE_AFTER_SCRIPT
#define HB_OT_MATH_CONSTANT_STACK_BOTTOM_DISPLAY_STYLE_SHIFT_DOWN HR_OT_MATH_CONSTANT_STACK_BOTTOM_DISPLAY_STYLE_SHIFT_DOWN
#define HB_OT_MATH_CONSTANT_STACK_BOTTOM_SHIFT_DOWN HR_OT_MATH_CONSTANT_STACK_BOTTOM_SHIFT_DOWN
#define HB_OT_MATH_CONSTANT_STACK_DISPLAY_STYLE_GAP_MIN HR_OT_MATH_CONSTANT_STACK_DISPLAY_STYLE_GAP_MIN
#define HB_OT_MATH_CONSTANT_STACK_GAP_MIN HR_OT_MATH_CONSTANT_STACK_GAP_MIN
#define HB_OT_MATH_CONSTANT_STACK_TOP_DISPLAY_STYLE_SHIFT_UP HR_OT_MATH_CONSTANT_STACK_TOP_DISPLAY_STYLE_SHIFT_UP
#define HB_OT_MATH_CONSTANT_STACK_TOP_SHIFT_UP HR_OT_MATH_CONSTANT_STACK_TOP_SHIFT_UP
#define HB_OT_MATH_CONSTANT_STRETCH_STACK_BOTTOM_SHIFT_DOWN HR_OT_MATH_CONSTANT_STRETCH_STACK_BOTTOM_SHIFT_DOWN
#define HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_ABOVE_MIN HR_OT_MATH_CONSTANT_STRETCH_STACK_GAP_ABOVE_MIN
#define HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_BELOW_MIN HR_OT_MATH_CONSTANT_STRETCH_STACK_GAP_BELOW_MIN
#define HB_OT_MATH_CONSTANT_STRETCH_STACK_TOP_SHIFT_UP HR_OT_MATH_CONSTANT_STRETCH_STACK_TOP_SHIFT_UP
#define HB_OT_MATH_CONSTANT_SUBSCRIPT_BASELINE_DROP_MIN HR_OT_MATH_CONSTANT_SUBSCRIPT_BASELINE_DROP_MIN
#define HB_OT_MATH_CONSTANT_SUBSCRIPT_SHIFT_DOWN HR_OT_MATH_CONSTANT_SUBSCRIPT_SHIFT_DOWN
#define HB_OT_MATH_CONSTANT_SUBSCRIPT_TOP_MAX HR_OT_MATH_CONSTANT_SUBSCRIPT_TOP_MAX
#define HB_OT_MATH_CONSTANT_SUB_SUPERSCRIPT_GAP_MIN HR_OT_MATH_CONSTANT_SUB_SUPERSCRIPT_GAP_MIN
#define HB_OT_MATH_CONSTANT_SUPERSCRIPT_BASELINE_DROP_MAX HR_OT_MATH_CONSTANT_SUPERSCRIPT_BASELINE_DROP_MAX
#define HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MAX_WITH_SUBSCRIPT HR_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MAX_WITH_SUBSCRIPT
#define HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MIN HR_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MIN
#define HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP HR_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP
#define HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP_CRAMPED HR_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP_CRAMPED
#define HB_OT_MATH_CONSTANT_UNDERBAR_EXTRA_DESCENDER HR_OT_MATH_CONSTANT_UNDERBAR_EXTRA_DESCENDER
#define HB_OT_MATH_CONSTANT_UNDERBAR_RULE_THICKNESS HR_OT_MATH_CONSTANT_UNDERBAR_RULE_THICKNESS
#define HB_OT_MATH_CONSTANT_UNDERBAR_VERTICAL_GAP HR_OT_MATH_CONSTANT_UNDERBAR_VERTICAL_GAP
#define HB_OT_MATH_CONSTANT_UPPER_LIMIT_BASELINE_RISE_MIN HR_OT_MATH_CONSTANT_UPPER_LIMIT_BASELINE_RISE_MIN
#define HB_OT_MATH_CONSTANT_UPPER_LIMIT_GAP_MIN HR_OT_MATH_CONSTANT_UPPER_LIMIT_GAP_MIN
#define HB_OT_MATH_GLYPH_PART_FLAG_EXTENDER HR_OT_MATH_GLYPH_PART_FLAG_EXTENDER
#define HB_OT_MATH_KERN_BOTTOM_LEFT HR_OT_MATH_KERN_BOTTOM_LEFT
#define HB_OT_MATH_KERN_BOTTOM_RIGHT HR_OT_MATH_KERN_BOTTOM_RIGHT
#define HB_OT_MATH_KERN_TOP_LEFT HR_OT_MATH_KERN_TOP_LEFT
#define HB_OT_MATH_KERN_TOP_RIGHT HR_OT_MATH_KERN_TOP_RIGHT
#define HB_OT_TAG_MATH HR_OT_TAG_MATH
#define HB_OT_TAG_MATH_SCRIPT HR_OT_TAG_MATH_SCRIPT
#define HB_SCRIPT_ADLAM HR_SCRIPT_ADLAM
#define HB_SCRIPT_AHOM HR_SCRIPT_AHOM
#define HB_SCRIPT_ANATOLIAN_HIEROGLYPHS HR_SCRIPT_ANATOLIAN_HIEROGLYPHS
Expand Down
Loading
Loading