1 /**************************************************************************/
2 /*                                                                        */
3 /*       Copyright (c) Microsoft Corporation. All rights reserved.        */
4 /*                                                                        */
5 /*       This software is licensed under the Microsoft Software License   */
6 /*       Terms for Microsoft Azure RTOS. Full text of the license can be  */
7 /*       found in the LICENSE file at https://aka.ms/AzureRTOS_EULA       */
8 /*       and in the root directory of this software.                      */
9 /*                                                                        */
10 /**************************************************************************/
11 
12 
13 /**************************************************************************/
14 /**************************************************************************/
15 /**                                                                       */
16 /** GUIX Component                                                        */
17 /**                                                                       */
18 /**   Utility (Utility)                                                   */
19 /**                                                                       */
20 /**************************************************************************/
21 #define GX_SOURCE_CODE
22 
23 
24 /* Include necessary system files.  */
25 
26 #include "gx_api.h"
27 #include "gx_utility.h"
28 
29 #if defined(GX_DYNAMIC_BIDI_TEXT_SUPPORT)
30 static GX_CONST GX_BIDI_BRACKET_PAIR _gx_bidi_bracket_pair[] =
31 {
32     {0x0028, 0x0029},    /* PARENTHESIS */
33     {0x005B, 0x005D},    /* SQUARE BRACKET*/
34     {0x007B, 0x007D},    /* CURLY BRACKET*/
35     {0x0F3A, 0x0F3B},    /* TIBETAN MARK GUG RTAGS GYON*/
36     {0x0F3C, 0x0F3D},    /* TIBETAN MARK ANG KHANG GYON*/
37     {0x169B, 0x169C},    /* OGHAM FEATHER MARK*/
38     {0x2045, 0x2046},    /* SQUARE BRACKET WITH QUILL*/
39     {0x207D, 0x207E},    /* SUPERSCRIPT PARENTHESIS*/
40     {0x208D, 0x208E},    /* SUBSCRIPT PARENTHESIS*/
41     {0x2308, 0x2309},    /* CEILING*/
42     {0x230A, 0x230B},    /* FLOOR*/
43     {0x2329, 0x232A},    /* POINTING ANGLE BRACKET*/
44     {0x2768, 0x2769},    /* MEDIUM PARENTHESIS ORNAMENT*/
45     {0x276A, 0x276B},    /* MEDIUM FLATTENED PARENTHESIS ORNAMENT*/
46     {0x276C, 0x276D},    /* MEDIUM - POINTING ANGLE BRACKET ORNAMENT*/
47     {0x276E, 0x276F},    /* HEAVY - POINTING ANGLE QUOTATION MARK ORNAMENT*/
48     {0x2770, 0x2771},    /* HEAVY - POINTING ANGLE BRACKET ORNAMENT*/
49     {0x2772, 0x2773},    /* LIGHT TORTOISE SHELL BRACKET ORNAMENT*/
50     {0x2774, 0x2775},    /* MEDIUM CURLY BRACKET ORNAMENT*/
51     {0x27C5, 0x27C6},    /* LEFT S - SHAPED BAG DELIMITER*/
52     {0x27E6, 0x27E7},    /* MATHEMATICAL WHITE SQUARE BRACKET*/
53     {0x27E8, 0x27E9},    /* MATHEMATICAL ANGLE BRACKET*/
54     {0x27EA, 0x27EB},    /* MATHEMATICAL DOUBLE ANGLE BRACKET*/
55     {0x27EC, 0x27ED},    /* MATHEMATICAL WHITE TORTOISE SHELL BRACKET*/
56     {0x27EE, 0x27EF},    /* MATHEMATICAL FLATTENED PARENTHESIS*/
57     {0x2983, 0x2984},    /* WHITE CURLY BRACKET*/
58     {0x2985, 0x2986},    /* WHITE PARENTHESIS*/
59     {0x2987, 0x2988},    /* Z NOTATION IMAGE BRACKET*/
60     {0x2989, 0x298A},    /* Z NOTATION BINDING BRACKET*/
61     {0x298B, 0x298C},    /* SQUARE BRACKET WITH UNDERBAR*/
62     {0x298D, 0x2990},    /* SQUARE BRACKET WITH TICK IN TOP CORNER*/
63     {0x298F, 0x298E},    /* SQUARE BRACKET WITH TICK IN BOTTOM CORNER*/
64     {0x2991, 0x2992},    /* ANGLE BRACKET WITH DOT*/
65     {0x2993, 0x2994},    /* ARC LESS - THAN BRACKET*/
66     {0x2995, 0x2996},    /* DOUBLE ARC GREATER - THAN BRACKET*/
67     {0x2997, 0x2998},    /* BLACK TORTOISE SHELL BRACKET*/
68     {0x29D8, 0x29D9},    /* WIGGLY FENCE*/
69     {0x29DA, 0x29DB},    /* DOUBLE WIGGLY FENCE*/
70     {0x29FC, 0x29FD},    /* POINTING CURVED ANGLE BRACKET*/
71     {0x2E22, 0x2E23},    /* TOP HALF BRACKET*/
72     {0x2E24, 0x2E25},    /* BOTTOM HALF BRACKET*/
73     {0x2E26, 0x2E27},    /* SIDEWAYS U BRACKET*/
74     {0x2E28, 0x2E29},    /* DOUBLE PARENTHESIS*/
75     {0x3008, 0x3009},    /* ANGLE BRACKET*/
76     {0x300A, 0x300B},    /* DOUBLE ANGLE BRACKET*/
77     {0x300C, 0x300D},    /* CORNER BRACKET*/
78     {0x300E, 0x300F},    /* WHITE CORNER BRACKET*/
79     {0x3010, 0x3011},    /* BLACK LENTICULAR BRACKET*/
80     {0x3014, 0x3015},    /* TORTOISE SHELL BRACKET*/
81     {0x3016, 0x3017},    /* WHITE LENTICULAR BRACKET*/
82     {0x3018, 0x3019},    /* WHITE TORTOISE SHELL BRACKET*/
83     {0x301A, 0x301B},    /* WHITE SQUARE BRACKET*/
84     {0xFE59, 0xFE5A},    /* SMALL PARENTHESIS*/
85     {0xFE5B, 0xFE5C},    /* SMALL CURLY BRACKET*/
86     {0xFE5D, 0xFE5E},    /* SMALL TORTOISE SHELL BRACKET*/
87     {0xFF08, 0xFF09},    /* FULLWIDTH PARENTHESIS*/
88     {0xFF3B, 0xFF3D},    /* FULLWIDTH SQUARE BRACKET*/
89     {0xFF5B, 0xFF5D},    /* FULLWIDTH CURLY BRACKET*/
90     {0xFF5F, 0xFF60},    /* FULLWIDTH WHITE PARENTHESIS*/
91     {0xFF62, 0xFF63},    /* HALFWIDTH CORNER BRACKET*/
92     {0, 0}
93 };
94 
95 /**************************************************************************/
96 /*                                                                        */
97 /*  FUNCTION                                               RELEASE        */
98 /*                                                                        */
99 /*    _gx_utility_bidi_bracket_pair_get                   PORTABLE C      */
100 /*                                                           6.1          */
101 /*  AUTHOR                                                                */
102 /*                                                                        */
103 /*    Kenneth Maxwell, Microsoft Corporation                              */
104 /*                                                                        */
105 /*  DESCRIPTION                                                           */
106 /*                                                                        */
107 /*    This function finds the bracked pair that contain the specified     */
108 /*    code point.                                                         */
109 /*                                                                        */
110 /*  INPUT                                                                 */
111 /*                                                                        */
112 /*    code                                  Code point whose bracket pair */
113 /*                                            is retrieved                */
114 /*    bracket_pair                          Retrieved bracket pair        */
115 /*                                                                        */
116 /*  OUTPUT                                                                */
117 /*                                                                        */
118 /*    status                                Completion status             */
119 /*                                                                        */
120 /*  CALLS                                                                 */
121 /*                                                                        */
122 /*    None                                                                */
123 /*                                                                        */
124 /*  CALLED BY                                                             */
125 /*                                                                        */
126 /*    Application Code                                                    */
127 /*                                                                        */
128 /*  RELEASE HISTORY                                                       */
129 /*                                                                        */
130 /*    DATE              NAME                      DESCRIPTION             */
131 /*                                                                        */
132 /*  05-19-2020     Kenneth Maxwell          Initial Version 6.0           */
133 /*  09-30-2020     Kenneth Maxwell          Modified comment(s),          */
134 /*                                            resulting in version 6.1    */
135 /*                                                                        */
136 /**************************************************************************/
_gx_utility_bidi_bracket_pair_get(ULONG code,GX_BIDI_BRACKET_PAIR * bracket_pair)137 UINT _gx_utility_bidi_bracket_pair_get(ULONG code, GX_BIDI_BRACKET_PAIR *bracket_pair)
138 {
139 GX_CONST GX_BIDI_BRACKET_PAIR *entry = _gx_bidi_bracket_pair;
140 
141     memset(bracket_pair, 0, sizeof(GX_BIDI_BRACKET_PAIR));
142 
143     while (entry -> gx_bidi_bracket_pair_open)
144     {
145         if (code == entry -> gx_bidi_bracket_pair_open ||
146             code == entry -> gx_bidi_bracket_pair_close)
147         {
148             *bracket_pair = *entry;
149             break;
150         }
151         entry++;
152     }
153 
154     return GX_SUCCESS;
155 }
156 #endif
157