void hb_buffer_t::guess_segment_properties (void) { assert (content_type == HB_BUFFER_CONTENT_TYPE_UNICODE || (!len && content_type == HB_BUFFER_CONTENT_TYPE_INVALID)); /* If script is set to INVALID, guess from buffer contents */ if (props.script == HB_SCRIPT_INVALID) { for (unsigned int i = 0; i < len; i++) { hb_script_t script = unicode->script (info[i].codepoint); if (likely (script != HB_SCRIPT_COMMON && script != HB_SCRIPT_INHERITED && script != HB_SCRIPT_UNKNOWN)) { props.script = script; break; } } } /* If direction is set to INVALID, guess from script */ if (props.direction == HB_DIRECTION_INVALID) { props.direction = hb_script_get_horizontal_direction (props.script); } /* If language is not set, use default language from locale */ if (props.language == HB_LANGUAGE_INVALID) { /* TODO get_default_for_script? using $LANGUAGE */ props.language = hb_language_get_default (); } }
static bool _raqm_shape (raqm_t *rq) { for (raqm_run_t *run = rq->runs; run != NULL; run = run->next) { run->buffer = hb_buffer_create (); hb_buffer_add_utf32 (run->buffer, rq->text, rq->text_len, run->pos, run->len); hb_buffer_set_script (run->buffer, run->script); hb_buffer_set_language (run->buffer, hb_language_get_default ()); hb_buffer_set_direction (run->buffer, run->direction); hb_shape_full (rq->font, run->buffer, rq->features, rq->features_len, NULL); } return true; }