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