Add hb_segment_properties_overlay()

New API:
+ hb_segment_properties_overlay()
This commit is contained in:
Behdad Esfahbod 2022-01-03 11:21:29 -07:00
parent 165a6073fa
commit 6a66992842
3 changed files with 43 additions and 0 deletions

View File

@ -103,6 +103,7 @@ hb_buffer_serialize_format_to_string
hb_buffer_serialize_list_formats hb_buffer_serialize_list_formats
hb_segment_properties_equal hb_segment_properties_equal
hb_segment_properties_hash hb_segment_properties_hash
hb_segment_properties_overlay
hb_buffer_diff hb_buffer_diff
hb_buffer_set_message_func hb_buffer_set_message_func
hb_buffer_t hb_buffer_t

View File

@ -86,7 +86,46 @@ hb_segment_properties_hash (const hb_segment_properties_t *p)
(intptr_t) (p->language); (intptr_t) (p->language);
} }
/**
* hb_segment_properties_overlay:
* @p: #hb_segment_properties_t to fill in.
* @src: #hb_segment_properties_t to fill in from.
*
* Fills in missing fields of @p from @src in a considered manner.
*
* First, if @p does not have direction set, direction is copied from @src.
*
* Next, if @p and @src have the same direction (which can be unset), if @p
* does not have script set, script is copied from @src.
*
* Finally, if @p and @src have the same direction and script (which either
* can be unset), if @p does not have language set, language is copied from
* @src.
*
* Since: REPLACEME
**/
HB_EXTERN void
hb_segment_properties_overlay (hb_segment_properties_t *p,
const hb_segment_properties_t *src)
{
if (unlikely (!p || !src))
return;
if (!p->direction)
p->direction = src->direction;
if (p->direction != src->direction)
return;
if (!p->script)
p->script = src->script;
if (p->script != src->script)
return;
if (!p->language)
p->language = src->language;
}
/* Here is how the buffer works internally: /* Here is how the buffer works internally:
* *

View File

@ -170,6 +170,9 @@ hb_segment_properties_equal (const hb_segment_properties_t *a,
HB_EXTERN unsigned int HB_EXTERN unsigned int
hb_segment_properties_hash (const hb_segment_properties_t *p); hb_segment_properties_hash (const hb_segment_properties_t *p);
HB_EXTERN void
hb_segment_properties_overlay (hb_segment_properties_t *p,
const hb_segment_properties_t *src);
/** /**