/** * Initializes line breaking context for a given language. * * @param[in,out] lbpCtx pointer to the line breaking context * @param[in] ch the first character to process * @param[in] lang language of the input * @post the line breaking context is initialized */ void lb_init_break_context( struct LineBreakContext* lbpCtx, utf32_t ch, const char* lang) { lbpCtx->lang = lang; lbpCtx->lbpLang = get_lb_prop_lang(lang); lbpCtx->lbcLast = LBP_Undefined; lbpCtx->lbcNew = LBP_Undefined; lbpCtx->lbcCur = resolve_lb_class( get_char_lb_class_lang(ch, lbpCtx->lbpLang), lbpCtx->lang); treat_first_char(lbpCtx); }
/** * Updates LineBreakingContext for the next code point and returns * the detected break. * * @param[in,out] lbpCtx pointer to the line breaking context * @param[in] ch Unicode code point * @return break result, one of #LINEBREAK_MUSTBREAK, * #LINEBREAK_ALLOWBREAK, and #LINEBREAK_NOBREAK * @post the line breaking context is updated */ int lb_process_next_char( struct LineBreakContext *lbpCtx, utf32_t ch ) { int brk; lbpCtx->lbcLast = lbpCtx->lbcNew; lbpCtx->lbcNew = get_char_lb_class_lang(ch, lbpCtx->lbpLang); brk = get_lb_result_simple(lbpCtx); switch (brk) { case LINEBREAK_MUSTBREAK: lbpCtx->lbcCur = resolve_lb_class(lbpCtx->lbcNew, lbpCtx->lang); treat_first_char(lbpCtx); break; case LINEBREAK_UNDEFINED: lbpCtx->lbcNew = resolve_lb_class(lbpCtx->lbcNew, lbpCtx->lang); brk = get_lb_result_lookup(lbpCtx); break; default: break; } return brk; }