Silence strict casting warnings and apply bidi mirroring - libgrapheme - unicode string library
 (HTM) git clone git://git.suckless.org/libgrapheme
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit ba923230c7b25b0737d151c3f607a75b63676456
 (DIR) parent c2aa140007c3fe8f6b58839668219e9c8414865b
 (HTM) Author: Laslo Hunhold <dev@frign.de>
       Date:   Mon, 29 May 2023 08:37:11 +0200
       
       Silence strict casting warnings and apply bidi mirroring
       
       The mirroring-part must have been accidentally dropped in one previous
       refactoring.
       
       Signed-off-by: Laslo Hunhold <dev@frign.de>
       
       Diffstat:
         M src/bidirectional.c                 |      21 +++++++++++++--------
       
       1 file changed, 13 insertions(+), 8 deletions(-)
       ---
 (DIR) diff --git a/src/bidirectional.c b/src/bidirectional.c
       @@ -903,7 +903,7 @@ get_isolated_paragraph_level(const uint_least32_t *state, size_t statelen)
        
                /* determine paragraph level (rules P1-P3) and terminate on PDI */
                for (stateoff = 0, isolate_level = 0; stateoff < statelen; stateoff++) {
       -                prop = get_state(STATE_PROP, state[stateoff]);
       +                prop = (uint_least8_t)get_state(STATE_PROP, state[stateoff]);
        
                        if (prop == BIDI_PROP_PDI && isolate_level == 0) {
                                /*
       @@ -1488,6 +1488,7 @@ get_line_embedding_levels(const uint_least32_t *linedata, size_t linelen,
        
                /* rule L1.4 */
                runsince = SIZE_MAX;
       +        runlevel = -1;
                for (i = 0, levlen = 0; i < linelen; i++) {
                        level = (int_least8_t)get_state(STATE_LEVEL, linedata[i]);
                        prop = (uint_least8_t)get_state(STATE_PRESERVED_PROP,
       @@ -1512,8 +1513,8 @@ get_line_embedding_levels(const uint_least32_t *linedata, size_t linelen,
                                if (runsince == SIZE_MAX) {
                                        /* a new run has begun */
                                        runsince = levlen - 1; /* levlen > 0 */
       -                                runlevel = get_state(STATE_PARAGRAPH_LEVEL,
       -                                                     linedata[i]);
       +                                runlevel = (int_least8_t)get_state(
       +                                        STATE_PARAGRAPH_LEVEL, linedata[i]);
                                }
                        } else {
                                /* sequence ended */
       @@ -1539,7 +1540,7 @@ get_line_embedding_levels(const uint_least32_t *linedata, size_t linelen,
        static inline int_least8_t
        get_level_int8(const void *lev, size_t off)
        {
       -        return ((int_least8_t *)lev)[off];
       +        return ((const int_least8_t *)lev)[off];
        }
        
        static inline void
       @@ -1561,7 +1562,7 @@ grapheme_bidirectional_get_line_embedding_levels(const uint_least32_t *linedata,
        static inline int_least8_t
        get_level_uint32(const void *lev, size_t off)
        {
       -        return (int_least8_t)((((uint_least32_t *)lev)[off] &
       +        return (int_least8_t)((((const uint_least32_t *)lev)[off] &
                                       UINT32_C(0x1FE00000)) >>
                                      21) -
                       1;
       @@ -1591,15 +1592,19 @@ grapheme_bidirectional_reorder_line(const uint_least32_t *line,
                                            size_t linelen, uint_least32_t *output,
                                            size_t outputsize)
        {
       -        size_t i, outputlen, first, last, j, k, l, laststart;
       +        size_t i, outputlen, first, last, j, k, l /*, laststart*/;
                int_least8_t level, min_odd_level = MAX_DEPTH + 2, max_level = 0;
                uint_least32_t tmp;
        
       -        /* write output characters */
       +        /* write output characters (and apply possible mirroring) */
                for (i = 0, outputlen = 0; i < linelen; i++) {
                        if (get_state(STATE_LEVEL, linedata[i]) != -1) {
                                if (outputlen < outputsize) {
       -                                output[outputlen] = line[i];
       +                                output[outputlen] =
       +                                        (uint_least32_t)((int_least32_t)
       +                                                                 line[i] +
       +                                                         get_mirror_offset(
       +                                                                 line[i]));
                                }
                                outputlen++;
                        }