The ifdef is for the optional hyphen dictionaries. We should support
hyphenation with SHY-HYPHEN even without those.
This had disabled everything altogether.

On 02/12/2016 02:21 PM, Tom Hacohen wrote:
> tasn pushed a commit to branch master.
> 
> http://git.enlightenment.org/core/efl.git/commit/?id=5b083ace84ca91496810cd1826c9469a6c741700
> 
> commit 5b083ace84ca91496810cd1826c9469a6c741700
> Author: Tom Hacohen <[email protected]>
> Date:   Fri Feb 12 12:08:29 2016 +0000
> 
>     Evas textblock: Properly ifdef hyphenation out.
>     
>     I found this thanks to coverity. There was some code that we were running
>     although hyphenation was actually off.
>     
>     CID 1341062.
> ---
>  src/lib/evas/canvas/evas_object_textblock.c | 95 
> +++++++++++++++--------------
>  1 file changed, 49 insertions(+), 46 deletions(-)
> 
> diff --git a/src/lib/evas/canvas/evas_object_textblock.c 
> b/src/lib/evas/canvas/evas_object_textblock.c
> index 841918b..80e9774 100644
> --- a/src/lib/evas/canvas/evas_object_textblock.c
> +++ b/src/lib/evas/canvas/evas_object_textblock.c
> @@ -3725,8 +3725,6 @@ _layout_text_cutoff_get(Ctxt *c, 
> Evas_Object_Textblock_Format *fmt,
>     return -1;
>  }
>  
> -static Evas_Object_Textblock_Text_Item * _layout_hyphen_item_new(Ctxt *c, 
> const Evas_Object_Textblock_Text_Item *cur_ti);
> -
>  /**
>   * @internal
>   * Split before cut, and strip if str[cut - 1] is a whitespace.
> @@ -4445,6 +4443,7 @@ _layout_get_charwrap(Ctxt *c, 
> Evas_Object_Textblock_Format *fmt,
>  #define ALLOW_BREAK(i) \
>     (breaks[i] <= LINEBREAK_ALLOWBREAK)
>  
> +#ifdef HAVE_HYPHEN
>  /* Give a position in text, find the end of word by using Unicode word
>   * boundary rules */
>  static inline size_t
> @@ -4455,13 +4454,58 @@ _layout_word_end(const char *breaks, size_t pos, 
> size_t len)
>     return pos;
>  }
>  
> +/* Hyphenation (since 1.17) */
> +static Evas_Object_Textblock_Text_Item *
> +_layout_hyphen_item_new(Ctxt *c, const Evas_Object_Textblock_Text_Item 
> *cur_ti)
> +{
> +   /* U+2010 - Unicode HYPHEN */
> +   const Eina_Unicode _hyphen_str[2] = { 0x2010, '\0' };
> +   Evas_Object_Textblock_Text_Item *hyphen_ti;
> +   Evas_Script_Type script;
> +   Evas_Font_Instance *script_fi = NULL, *cur_fi;
> +   size_t len = 1; /* The length of _hyphen_str */
> +
> +   if (c->hyphen_ti)
> +     {
> +        _item_free(c->obj, NULL, _ITEM(c->hyphen_ti));
> +     }
> +   c->hyphen_ti = hyphen_ti = _layout_text_item_new(c, 
> cur_ti->parent.format);
> +   hyphen_ti->parent.text_node = cur_ti->parent.text_node;
> +   hyphen_ti->parent.text_pos = cur_ti->parent.text_pos + 
> cur_ti->text_props.text_len - 1;
> +   script = evas_common_language_script_type_get(_hyphen_str, len);
> +
> +   evas_common_text_props_bidi_set(&hyphen_ti->text_props,
> +         c->par->bidi_props, hyphen_ti->parent.text_pos);
> +   evas_common_text_props_script_set (&hyphen_ti->text_props, script);
> +
> +   if (hyphen_ti->parent.format->font.font)
> +     {
> +        Evas_Object_Protected_Data *obj = eo_data_scope_get(c->obj, 
> EVAS_OBJECT_CLASS);
> +        /* It's only 1 char anyway, we don't need the run end. */
> +        (void) ENFN->font_run_end_get(ENDT,
> +              hyphen_ti->parent.format->font.font, &script_fi, &cur_fi,
> +              script, _hyphen_str, len);
> +
> +        ENFN->font_text_props_info_create(ENDT,
> +              cur_fi, _hyphen_str, &hyphen_ti->text_props,
> +              c->par->bidi_props, hyphen_ti->parent.text_pos, len, 
> EVAS_TEXT_PROPS_MODE_SHAPE,
> +              hyphen_ti->parent.format->font.fdesc->lang);
> +     }
> +
> +   _text_item_update_sizes(c, hyphen_ti);
> +   return hyphen_ti;
> +}
> +
>  #define SHY_HYPHEN 0xad
>  
> +#endif
> +
>  static int
>  _layout_get_hyphenationwrap(Ctxt *c, Evas_Object_Textblock_Format *fmt,
>        const Evas_Object_Textblock_Item *it, size_t line_start,
>        const char *breaks, const char *wordbreaks)
>  {
> +#ifdef HAVE_HYPHEN
>     size_t wrap;
>     size_t orig_wrap;
>     const Eina_Unicode *str = eina_ustrbuf_string_get(
> @@ -4542,9 +4586,7 @@ _layout_get_hyphenationwrap(Ctxt *c, 
> Evas_Object_Textblock_Format *fmt,
>                         size_t i = 0;
>                         size_t pos = 0;
>  
> -#ifdef HAVE_HYPHEN
>                         hyphens = _layout_wrap_hyphens_get(str, 
> it->format->font.fdesc->lang, word_start, word_len);
> -#endif
>  
>                         /* This only happens one time, if the cutoff is in
>                          * the middle of this word */
> @@ -4608,6 +4650,9 @@ _layout_get_hyphenationwrap(Ctxt *c, 
> Evas_Object_Textblock_Format *fmt,
>               return wrap;
>            }
>       }
> +#else
> +   (void) wordbreaks;
> +#endif
>  
>     /* Hyphenation falls-back to char wrapping at start of line */
>     return _layout_get_charwrap(c, fmt, it,
> @@ -7509,48 +7554,6 @@ _layout_item_obstacle_get(Ctxt *c, 
> Evas_Object_Textblock_Item *it)
>     return min_obs;
>  }
>  
> -/* Hyphenation (since 1.17) */
> -static Evas_Object_Textblock_Text_Item *
> -_layout_hyphen_item_new(Ctxt *c, const Evas_Object_Textblock_Text_Item 
> *cur_ti)
> -{
> -   /* U+2010 - Unicode HYPHEN */
> -   const Eina_Unicode _hyphen_str[2] = { 0x2010, '\0' };
> -   Evas_Object_Textblock_Text_Item *hyphen_ti;
> -   Evas_Script_Type script;
> -   Evas_Font_Instance *script_fi = NULL, *cur_fi;
> -   size_t len = 1; /* The length of _hyphen_str */
> -
> -   if (c->hyphen_ti)
> -     {
> -        _item_free(c->obj, NULL, _ITEM(c->hyphen_ti));
> -     }
> -   c->hyphen_ti = hyphen_ti = _layout_text_item_new(c, 
> cur_ti->parent.format);
> -   hyphen_ti->parent.text_node = cur_ti->parent.text_node;
> -   hyphen_ti->parent.text_pos = cur_ti->parent.text_pos + 
> cur_ti->text_props.text_len - 1;
> -   script = evas_common_language_script_type_get(_hyphen_str, len);
> -
> -   evas_common_text_props_bidi_set(&hyphen_ti->text_props,
> -         c->par->bidi_props, hyphen_ti->parent.text_pos);
> -   evas_common_text_props_script_set (&hyphen_ti->text_props, script);
> -
> -   if (hyphen_ti->parent.format->font.font)
> -     {
> -        Evas_Object_Protected_Data *obj = eo_data_scope_get(c->obj, 
> EVAS_OBJECT_CLASS);
> -        /* It's only 1 char anyway, we don't need the run end. */
> -        (void) ENFN->font_run_end_get(ENDT,
> -              hyphen_ti->parent.format->font.font, &script_fi, &cur_fi,
> -              script, _hyphen_str, len);
> -
> -        ENFN->font_text_props_info_create(ENDT,
> -              cur_fi, _hyphen_str, &hyphen_ti->text_props,
> -              c->par->bidi_props, hyphen_ti->parent.text_pos, len, 
> EVAS_TEXT_PROPS_MODE_SHAPE,
> -              hyphen_ti->parent.format->font.fdesc->lang);
> -     }
> -
> -   _text_item_update_sizes(c, hyphen_ti);
> -   return hyphen_ti;
> -}
> -
>  /* cursors */
>  
>  /**
> 

------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to