[PATCH 2/5] usp10: Handle C2_ARABICNUMBER as numeric.

Aric Stewart aric at codeweavers.com
Wed Jun 8 07:02:30 CDT 2016


Signed-off-by: Aric Stewart <aric at codeweavers.com>


On 6/7/16 2:18 PM, Henri Verbeet wrote:
> I.e., make sure ٬ and ٫ get classified as Script_Arabic_Numeric.
> 
> Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
> ---
>  dlls/usp10/tests/usp10.c | 22 +++++++++++-----------
>  dlls/usp10/usp10.c       |  5 +++--
>  2 files changed, 14 insertions(+), 13 deletions(-)
> 
> diff --git a/dlls/usp10/tests/usp10.c b/dlls/usp10/tests/usp10.c
> index 1793e65..fe579d3 100644
> --- a/dlls/usp10/tests/usp10.c
> +++ b/dlls/usp10/tests/usp10.c
> @@ -584,19 +584,19 @@ static const itemTest t74[4] = {{{0,0,0,0,0,0},0,0,0,0,1,latn_tag,FALSE},
>                                      {{0,0,0,0,0,0}, 3,0,0,0,1,arab_tag,FALSE},{{0,0,0,0,0,0}, 6,0,0,0,1,arab_tag,FALSE},
>                                      {{0,0,0,0,0,0}, 7,0,0,0,1,arab_tag,FALSE},{{0,0,0,0,0,0},10,0,0,0,1,arab_tag,FALSE},
>                                      {{0,0,0,0,0,0},11,0,0,0,1,arab_tag,FALSE},{{0,0,0,0,0,0},13,0,0,0,0,-1,FALSE}};
> -    static const itemTest t574[] = {{{0,0,0,0,0,0}, 0,0,1,2,0,arab_tag,FALSE},{{0,0,1,0,0,0}, 2,0,1,2,0,arab_tag,FALSE},
> -                                    {{0,0,0,0,0,0}, 3,0,1,2,0,arab_tag,FALSE},{{0,0,1,0,0,0}, 6,0,1,2,0,arab_tag,FALSE},
> -                                    {{0,0,0,0,0,0}, 7,0,1,2,0,arab_tag,FALSE},{{0,0,1,0,0,0},10,0,1,2,0,arab_tag,FALSE},
> +    static const itemTest t574[] = {{{0,0,0,0,0,0}, 0,0,1,2,0,arab_tag,FALSE},{{0,0,0,0,0,0}, 2,0,1,2,0,arab_tag,FALSE},
> +                                    {{0,0,0,0,0,0}, 3,0,1,2,0,arab_tag,FALSE},{{0,0,0,0,0,0}, 6,0,1,2,0,arab_tag,FALSE},
> +                                    {{0,0,0,0,0,0}, 7,0,1,2,0,arab_tag,FALSE},{{0,0,0,0,0,0},10,0,1,2,0,arab_tag,FALSE},
>                                      {{0,0,0,0,0,0},11,0,1,2,0,arab_tag,FALSE},{{0,0,0,0,0,0},13,0,0,0,0,-1,FALSE}};
>      /* Arabic numerals and punctuation. */
>      static const WCHAR test58[] = {0x0661, 0x0662, 0x066c, 0x0663, 0x0664, 0x0665, 0x066c,  /* ١٢٬٣٤٥٬ */
>                                     0x0666, 0x0667, 0x0668, 0x066b, 0x0669, 0x0660};         /* ٦٧٨٫٩٠ */
>      static const itemTest t581[] = {{{0,1,0,1,0,0}, 0,0,1,2,0,arab_tag,FALSE},
> -                                    {{1,1,1,1,1,0},13,0,0,0,0,-1,FALSE}};
> +                                    {{0,0,0,0,0,0},13,0,0,0,0,-1,FALSE}};
>      static const itemTest t582[] = {{{0,1,1,1,0,1}, 0,0,0,0,1,arab_tag,FALSE},
> -                                    {{1,1,1,1,1,0},13,0,0,0,0,-1,FALSE}};
> +                                    {{0,0,0,0,0,0},13,0,0,0,0,-1,FALSE}};
>      static const itemTest t583[] = {{{0,0,0,0,0,0}, 0,0,1,2,0,arab_tag,FALSE},
> -                                    {{1,0,0,1,1,0},13,0,0,0,0,-1,FALSE}};
> +                                    {{0,0,0,0,0,0},13,0,0,0,0,-1,FALSE}};
>  
>      SCRIPT_ITEM items[15];
>      SCRIPT_CONTROL  Control;
> @@ -680,7 +680,7 @@ static const itemTest t74[4] = {{{0,0,0,0,0,0},0,0,0,0,1,latn_tag,FALSE},
>      test_items_ok(test47,26,NULL,NULL,1,t471,FALSE,0);
>      test_items_ok(test56,6,NULL,NULL,1,t561,FALSE,0);
>      test_items_ok(test57,13,NULL,NULL,7,t571,FALSE,0);
> -    test_items_ok(test58,13,NULL,NULL,1,t581,TRUE,0);
> +    test_items_ok(test58,13,NULL,NULL,1,t581,FALSE,0);
>  
>      State.uBidiLevel = 0;
>      test_items_ok(test1,4,&Control,&State,1,t11,FALSE,0);
> @@ -745,7 +745,7 @@ static const itemTest t74[4] = {{{0,0,0,0,0,0},0,0,0,0,1,latn_tag,FALSE},
>      test_items_ok(test55,8,&Control,&State,2,t551,FALSE,0);
>      test_items_ok(test56,6,&Control,&State,1,t561,FALSE,0);
>      test_items_ok(test57,13,&Control,&State,7,t572,FALSE,0);
> -    test_items_ok(test58,13,&Control,&State,1,t581,TRUE,0);
> +    test_items_ok(test58,13,&Control,&State,1,t581,FALSE,0);
>  
>      State.uBidiLevel = 1;
>      test_items_ok(test1,4,&Control,&State,1,t12,FALSE,0);
> @@ -802,7 +802,7 @@ static const itemTest t74[4] = {{{0,0,0,0,0,0},0,0,0,0,1,latn_tag,FALSE},
>      test_items_ok(test47,26,&Control,&State,1,t472,FALSE,0);
>      test_items_ok(test56,6,&Control,&State,1,t561,FALSE,0);
>      test_items_ok(test57,13,&Control,&State,7,t574,FALSE,0);
> -    test_items_ok(test58,13,&Control,&State,1,t583,TRUE,0);
> +    test_items_ok(test58,13,&Control,&State,1,t583,FALSE,0);
>  
>      State.uBidiLevel = 1;
>      Control.fMergeNeutralItems = TRUE;
> @@ -860,7 +860,7 @@ static const itemTest t74[4] = {{{0,0,0,0,0,0},0,0,0,0,1,latn_tag,FALSE},
>      test_items_ok(test47,26,&Control,&State,1,t472,FALSE,0);
>      test_items_ok(test56,6,&Control,&State,1,t561,FALSE,0);
>      test_items_ok(test57,13,&Control,&State,7,t574,FALSE,0);
> -    test_items_ok(test58,13,&Control,&State,1,t583,TRUE,0);
> +    test_items_ok(test58,13,&Control,&State,1,t583,FALSE,0);
>  
>      State.uBidiLevel = 0;
>      Control.fMergeNeutralItems = FALSE;
> @@ -927,7 +927,7 @@ static const itemTest t74[4] = {{{0,0,0,0,0,0},0,0,0,0,1,latn_tag,FALSE},
>      test_items_ok(test55,8,&Control,&State,2,t552,FALSE,0);
>      test_items_ok(test56,6,&Control,&State,1,t562,FALSE,0);
>      test_items_ok(test57,13,&Control,&State,7,t573,FALSE,0);
> -    test_items_ok(test58,13,&Control,&State,1,t582,TRUE,0);
> +    test_items_ok(test58,13,&Control,&State,1,t582,FALSE,0);
>  }
>  
>  static inline void _test_shape_ok(int valid, HDC hdc, LPCWSTR string,
> diff --git a/dlls/usp10/usp10.c b/dlls/usp10/usp10.c
> index 8c4991a..d686a68 100644
> --- a/dlls/usp10/usp10.c
> +++ b/dlls/usp10/usp10.c
> @@ -891,7 +891,7 @@ static inline DWORD decode_surrogate_pair(LPCWSTR str, INT index, INT end)
>  static WORD get_char_script( LPCWSTR str, INT index, INT end, INT *consumed)
>  {
>      static const WCHAR latin_punc[] = {'#','$','&','\'',',',';','<','>','?','@','\\','^','_','`','{','|','}','~', 0x00a0, 0};
> -    WORD type = 0;
> +    WORD type = 0, type2 = 0;
>      DWORD ch;
>      int i;
>  
> @@ -921,6 +921,7 @@ static WORD get_char_script( LPCWSTR str, INT index, INT end, INT *consumed)
>      }
>  
>      GetStringTypeW(CT_CTYPE1, &str[index], 1, &type);
> +    GetStringTypeW(CT_CTYPE2, &str[index], 1, &type2);
>  
>      if (type == 0)
>          return SCRIPT_UNDEFINED;
> @@ -942,7 +943,7 @@ static WORD get_char_script( LPCWSTR str, INT index, INT end, INT *consumed)
>  
>          if (ch >= scriptRanges[i].rangeFirst && ch <= scriptRanges[i].rangeLast)
>          {
> -            if (scriptRanges[i].numericScript && type & C1_DIGIT)
> +            if (scriptRanges[i].numericScript && (type & C1_DIGIT || type2 == C2_ARABICNUMBER))
>                  return scriptRanges[i].numericScript;
>              if (scriptRanges[i].punctScript && type & C1_PUNCT)
>                  return scriptRanges[i].punctScript;
> 



More information about the wine-patches mailing list