1 #pragma once
2 
3 typedef struct GX_CANONICAL_DECOMPOSE_MAP_STRUCT
4 {
5     ULONG gx_canonical_decompose_map_code;
6     ULONG gx_canonical_decompose_map[2];
7 }GX_CANONICAL_DECOMPOSE_MAP;
8 
9 typedef struct GX_CANONICAL_COMBINING_CLASS_STRUCT
10 {
11     ULONG    gx_canonical_combining_class_code;
12     GX_UBYTE gx_canonical_combining_class;
13 }GX_CANONICAL_COMBINING_CLASS;
14 
15 typedef struct GX_UNICODE_RANGE_STRUCT
16 {
17     ULONG gx_unicode_range_start;
18     ULONG gx_unicode_range_end;
19 }GX_UNICODE_RANGE;
20 
21 typedef struct GX_CANONICAL_UNIT_STRUCT
22 {
23     ULONG    gx_canonical_unit_code_point;
24     GX_UBYTE gx_canonical_unit_combining_class;
25 } GX_CANONICAL_UNIT;
26 
27 typedef struct GX_CANONICAL_CONTEXT_STRUCT
28 {
29     ULONG             *gx_canonical_context_code_list;
30     UINT               gx_canonical_context_code_count;
31     GX_CANONICAL_UNIT *gx_canonical_context_unit_list;
32     UINT               gx_canonical_context_unit_count;
33 } GX_CANONICAL_CONTEXT;
34 
35 #define GX_NORMALIZATION_FORM_NO    0 /* The code point cannot occur in the normalization form. */
36 #define GX_NORMALIZATION_FORM_YES   1 /* The code point is a starter and can occur in the normalization form. */
37 #define GX_NORMALIZATION_FORM_MAYBE 2
38 
39 UINT gx_studio_canonical_normalize(GX_CONST GX_STRING *string, GX_STRING *normalised_string);
40