@@ -5950,19 +5950,21 @@ create_node_from_array(int kind, Node **np, Node **node_array)
5950
5950
* nodes of the source to NULL_NODE, we can overlap the target array
5951
5951
* as long as we do not override the actual target location.
5952
5952
*
5953
- * Target Array name Index
5953
+ * Target Array name Index
5954
5954
*
5955
- * node_array 0 1 2 3 4 5 6 7 8 9 A B C D E F
5956
- * top_alts alts[5] 0 1 2 3 4*
5957
- * alts+1 list[4] 0 1 2 3*
5958
- * list+1 core_alts[7] 0 1 2 3 4 5 6*
5959
- * core_alts+0 H_list[4] 0 1 2 3*
5960
- * H_list+1 H_alt2[4] 0 1 2 3*
5961
- * h_alt2+1 H_list2[3] 0 1 2*
5962
- * core_alts+4 XP_list[4] 0 1 2 3*
5963
- * XP_list+1 Ex_list[4] 0 1 2 3*
5955
+ * node_array 0 1 2 3 4 5 6 7 8 9 A B C D E F G H
5956
+ * top_alts alts[5] 0 1 2 3 4*
5957
+ * alts+2 list[4] 0 1 2 3*
5958
+ * list+1 core_alts[8] 0 1 2 3 4 5 6 7*
5959
+ * core_alts+0 H_list[4] 0 1 2 3*
5960
+ * H_list+1 H_alt2[4] 0 1 2 3*
5961
+ * H_alt2+1 H_list2[3] 0 1 2*
5962
+ * core_alts+4 XP_list[3] 0 1 2*
5963
+ * XP_list+1 Ex_list[4] 0 1 2 3*
5964
+ * core_alts+5 CC_list[3] 0 1 2*
5965
+ * CC_list+1 CC_inner_list[5] 0 1 2 3 4*
5964
5966
*/
5965
- #define NODE_COMMON_SIZE 16
5967
+ #define NODE_COMMON_SIZE 18
5966
5968
5967
5969
static int
5968
5970
node_extended_grapheme_cluster (Node * * np , ScanEnv * env )
@@ -6029,9 +6031,10 @@ node_extended_grapheme_cluster(Node** np, ScanEnv* env)
6029
6031
/* core := hangul-syllable
6030
6032
* | ri-sequence
6031
6033
* | xpicto-sequence
6034
+ * | conjunctCluster
6032
6035
* | [^Control CR LF] */
6033
6036
{
6034
- Node * * core_alts = list + 2 ; /* size: 7 */
6037
+ Node * * core_alts = list + 2 ; /* size: 8 */
6035
6038
6036
6039
/* hangul-syllable :=
6037
6040
* L* (V+ | LV V* | LVT) T*
@@ -6099,10 +6102,49 @@ node_extended_grapheme_cluster(Node** np, ScanEnv* env)
6099
6102
R_ERR (create_node_from_array (LIST , core_alts + 4 , XP_list ));
6100
6103
}
6101
6104
6105
+ /* conjunctCluster := \p{InCB=Consonant} ([\p{InCB=Extend} \p{InCB=Linker}]* \p{InCB=Linker} [\p{InCB=Extend} \p{InCB=Linker}]* \p{InCB=Consonant})+ */
6106
+ {
6107
+ // \p{InCB=Consonant}
6108
+ Node * * CC_list = core_alts + 6 ; /* size: 3 */
6109
+ R_ERR (create_property_node (CC_list + 0 , env , "InCB=Consonant" ));
6110
+
6111
+ {
6112
+ Node * * CC_inner_list = CC_list + 2 ; /* size: 5 */
6113
+ {
6114
+ // [\p{InCB=Extend} \p{InCB=Linker}]*
6115
+ R_ERR (create_property_node (CC_inner_list + 0 , env , "InCB=Extend" ));
6116
+ R_ERR (add_property_to_cc (NCCLASS (CC_inner_list [0 ]), "InCB=Linker" , 0 , env ));
6117
+ R_ERR (quantify_node (CC_inner_list + 0 , 0 , REPEAT_INFINITE ));
6118
+ }
6119
+
6120
+ // \p{InCB=Linker}
6121
+ R_ERR (create_property_node (CC_inner_list + 1 , env , "InCB=Linker" ));
6122
+
6123
+ {
6124
+ // [\p{InCB=Extend} \p{InCB=Linker}]*
6125
+ R_ERR (create_property_node (CC_inner_list + 2 , env , "InCB=Extend" ));
6126
+ R_ERR (add_property_to_cc (NCCLASS (CC_inner_list [2 ]), "InCB=Linker" , 0 , env ));
6127
+ R_ERR (quantify_node (CC_inner_list + 2 , 0 , REPEAT_INFINITE ));
6128
+ }
6129
+
6130
+ // \p{InCB=Consonant}
6131
+ R_ERR (create_property_node (CC_inner_list + 3 , env , "InCB=Consonant" ));
6132
+
6133
+ // ([\p{InCB=Extend} \p{InCB=Linker}]* \p{InCB=Linker} [\p{InCB=Extend} \p{InCB=Linker}]* \p{InCB=Consonant})
6134
+ R_ERR (create_node_from_array (LIST , CC_list + 1 , CC_inner_list ));
6135
+
6136
+ // (...)+
6137
+ R_ERR (quantify_node (CC_list + 1 , 1 , REPEAT_INFINITE ));
6138
+ }
6139
+
6140
+ // \p{InCB=Consonant} ([\p{InCB=Extend} \p{InCB=Linker}]* \p{InCB=Linker} [\p{InCB=Extend} \p{InCB=Linker}]* \p{InCB=Consonant})+
6141
+ R_ERR (create_node_from_array (LIST , core_alts + 5 , CC_list ));
6142
+ }
6143
+
6102
6144
/* [^Control CR LF] */
6103
- core_alts [5 ] = node_new_cclass ();
6104
- if (IS_NULL (core_alts [5 ])) goto err ;
6105
- cc = NCCLASS (core_alts [5 ]);
6145
+ core_alts [6 ] = node_new_cclass ();
6146
+ if (IS_NULL (core_alts [6 ])) goto err ;
6147
+ cc = NCCLASS (core_alts [6 ]);
6106
6148
if (ONIGENC_MBC_MINLEN (env -> enc ) > 1 ) { /* UTF-16/UTF-32 */
6107
6149
BBuf * inverted_buf = NULL ;
6108
6150
0 commit comments