@@ -5765,41 +5765,20 @@ quantify_property_node(Node **np, ScanEnv* env, const char* propname, char repet
5765
5765
return quantify_node (np , lower , upper );
5766
5766
}
5767
5767
5768
- /* IMPORTANT: Make sure node_array ends with NULL_NODE */
5769
- static int
5770
- create_sequence_node (Node * * np , Node * * node_array )
5771
- {
5772
- Node * tmp = NULL_NODE ;
5773
- int i = 0 ;
5774
-
5775
- while (node_array [i ] != NULL_NODE ) i ++ ;
5776
- while (-- i >= 0 ) {
5777
- * np = node_new_list (node_array [i ], tmp );
5778
- if (IS_NULL (* np )) {
5779
- while (i >= 0 ) {
5780
- onig_node_free (node_array [i ]);
5781
- node_array [i -- ] = NULL_NODE ;
5782
- }
5783
- onig_node_free (tmp );
5784
- return ONIGERR_MEMORY ;
5785
- }
5786
- else
5787
- node_array [i ] = NULL_NODE ;
5788
- tmp = * np ;
5789
- }
5790
- return 0 ;
5791
- }
5768
+ #define LIST 0
5769
+ #define ALT 1
5792
5770
5793
5771
/* IMPORTANT: Make sure node_array ends with NULL_NODE */
5794
5772
static int
5795
- create_alternate_node ( Node * * np , Node * * node_array )
5773
+ create_node_from_array ( int kind , Node * * np , Node * * node_array )
5796
5774
{
5797
5775
Node * tmp = NULL_NODE ;
5798
5776
int i = 0 ;
5799
5777
5800
5778
while (node_array [i ] != NULL_NODE ) i ++ ;
5801
5779
while (-- i >= 0 ) {
5802
- * np = onig_node_new_alt (node_array [i ], tmp );
5780
+ * np = kind == LIST ? node_new_list (node_array [i ], tmp )
5781
+ : onig_node_new_alt (node_array [i ], tmp );
5803
5782
if (IS_NULL (* np )) {
5804
5783
while (i >= 0 ) {
5805
5784
onig_node_free (node_array [i ]);
@@ -5869,10 +5848,10 @@ node_extended_grapheme_cluster(Node** np, ScanEnv* env)
5869
5848
5870
5849
/* precore* core postcore* */
5871
5850
{
5872
- Node * seq [4 ];
5851
+ Node * list [4 ];
5873
5852
5874
5853
/* precore*; precore := Prepend */
5875
- R_ERR (quantify_property_node (seq + 0 , env , "Grapheme_Cluster_Break=Prepend" , '*' ));
5854
+ R_ERR (quantify_property_node (list + 0 , env , "Grapheme_Cluster_Break=Prepend" , '*' ));
5876
5855
5877
5856
/* core := hangul-syllable
5878
5857
* | ri-sequence
@@ -5890,9 +5869,9 @@ node_extended_grapheme_cluster(Node** np, ScanEnv* env)
5890
5869
5891
5870
/* L* (V+ | LV V* | LVT) T* */
5892
5871
{
5893
- Node * H_seq [4 ];
5872
+ Node * H_list [4 ];
5894
5873
5895
- R_ERR (quantify_property_node (H_seq + 0 , env , "Grapheme_Cluster_Break=L" , '*' ));
5874
+ R_ERR (quantify_property_node (H_list + 0 , env , "Grapheme_Cluster_Break=L" , '*' ));
5896
5875
5897
5876
/* V+ | LV V* | LVT */
5898
5877
{
@@ -5902,25 +5881,25 @@ node_extended_grapheme_cluster(Node** np, ScanEnv* env)
5902
5881
5903
5882
/* LV V* */
5904
5883
{
5905
- Node * H_seq2 [3 ];
5884
+ Node * H_list2 [3 ];
5906
5885
5907
- R_ERR (create_property_node (H_seq2 + 0 , env , "Grapheme_Cluster_Break=LV" ));
5908
- R_ERR (quantify_property_node (H_seq2 + 1 , env , "Grapheme_Cluster_Break=V" , '*' ));
5886
+ R_ERR (create_property_node (H_list2 + 0 , env , "Grapheme_Cluster_Break=LV" ));
5887
+ R_ERR (quantify_property_node (H_list2 + 1 , env , "Grapheme_Cluster_Break=V" , '*' ));
5909
5888
5910
- H_seq2 [2 ] = NULL_NODE ;
5911
- R_ERR (create_sequence_node ( H_alt2 + 1 , H_seq2 ));
5889
+ H_list2 [2 ] = NULL_NODE ;
5890
+ R_ERR (create_node_from_array ( LIST , H_alt2 + 1 , H_list2 ));
5912
5891
}
5913
5892
5914
5893
R_ERR (create_property_node (H_alt2 + 2 , env , "Grapheme_Cluster_Break=LVT" ));
5915
5894
5916
5895
H_alt2 [3 ] = NULL_NODE ;
5917
- R_ERR (create_alternate_node ( H_seq + 1 , H_alt2 ));
5896
+ R_ERR (create_node_from_array ( ALT , H_list + 1 , H_alt2 ));
5918
5897
}
5919
5898
5920
- R_ERR (quantify_property_node (H_seq + 2 , env , "Grapheme_Cluster_Break=T" , '*' ));
5899
+ R_ERR (quantify_property_node (H_list + 2 , env , "Grapheme_Cluster_Break=T" , '*' ));
5921
5900
5922
- H_seq [3 ] = NULL_NODE ;
5923
- R_ERR (create_sequence_node ( core_alts + 0 , H_seq ));
5901
+ H_list [3 ] = NULL_NODE ;
5902
+ R_ERR (create_node_from_array ( LIST , core_alts + 0 , H_list ));
5924
5903
}
5925
5904
5926
5905
/* L+ */
@@ -5935,31 +5914,31 @@ node_extended_grapheme_cluster(Node** np, ScanEnv* env)
5935
5914
5936
5915
/* xpicto-sequence := \p{Extended_Pictographic} (Extend* ZWJ \p{Extended_Pictographic})* */
5937
5916
{
5938
- Node * XP_seq [3 ];
5917
+ Node * XP_list [3 ];
5939
5918
5940
- R_ERR (create_property_node (XP_seq + 0 , env , "Extended_Pictographic" ));
5919
+ R_ERR (create_property_node (XP_list + 0 , env , "Extended_Pictographic" ));
5941
5920
5942
5921
/* (Extend* ZWJ \p{Extended_Pictographic})* */
5943
5922
{
5944
- Node * Ex_seq [4 ];
5923
+ Node * Ex_list [4 ];
5945
5924
5946
- R_ERR (quantify_property_node (Ex_seq + 0 , env , "Grapheme_Cluster_Break=Extend" , '*' ));
5925
+ R_ERR (quantify_property_node (Ex_list + 0 , env , "Grapheme_Cluster_Break=Extend" , '*' ));
5947
5926
5948
5927
/* ZWJ (ZERO WIDTH JOINER) */
5949
5928
r = ONIGENC_CODE_TO_MBC (env -> enc , 0x200D , buf );
5950
5929
if (r < 0 ) goto err ;
5951
- Ex_seq [1 ] = node_new_str_raw (buf , buf + r );
5952
- if (IS_NULL (Ex_seq [1 ])) goto err ;
5930
+ Ex_list [1 ] = node_new_str_raw (buf , buf + r );
5931
+ if (IS_NULL (Ex_list [1 ])) goto err ;
5953
5932
5954
- R_ERR (create_property_node (Ex_seq + 2 , env , "Extended_Pictographic" ));
5933
+ R_ERR (create_property_node (Ex_list + 2 , env , "Extended_Pictographic" ));
5955
5934
5956
- Ex_seq [3 ] = NULL_NODE ;
5957
- R_ERR (create_sequence_node ( XP_seq + 1 , Ex_seq ));
5935
+ Ex_list [3 ] = NULL_NODE ;
5936
+ R_ERR (create_node_from_array ( LIST , XP_list + 1 , Ex_list ));
5958
5937
}
5959
- R_ERR (quantify_node (XP_seq + 1 , 0 , REPEAT_INFINITE )); /* TODO: Check about node freeing */
5938
+ R_ERR (quantify_node (XP_list + 1 , 0 , REPEAT_INFINITE )); /* TODO: Check about node freeing */
5960
5939
5961
- XP_seq [2 ] = NULL_NODE ;
5962
- R_ERR (create_sequence_node ( core_alts + 4 , XP_seq ));
5940
+ XP_list [2 ] = NULL_NODE ;
5941
+ R_ERR (create_node_from_array ( LIST , core_alts + 4 , XP_list ));
5963
5942
}
5964
5943
5965
5944
/* [^Control CR LF] */
@@ -5984,18 +5963,18 @@ node_extended_grapheme_cluster(Node** np, ScanEnv* env)
5984
5963
}
5985
5964
5986
5965
core_alts [6 ] = NULL_NODE ;
5987
- R_ERR (create_alternate_node ( seq + 1 , core_alts ));
5966
+ R_ERR (create_node_from_array ( ALT , list + 1 , core_alts ));
5988
5967
}
5989
5968
5990
5969
/* postcore*; postcore = [Extend ZWJ SpacingMark] */
5991
- R_ERR (create_property_node (seq + 2 , env , "Grapheme_Cluster_Break=Extend" ));
5992
- cc = NCCLASS (seq [2 ]);
5970
+ R_ERR (create_property_node (list + 2 , env , "Grapheme_Cluster_Break=Extend" ));
5971
+ cc = NCCLASS (list [2 ]);
5993
5972
R_ERR (add_property_to_cc (cc , "Grapheme_Cluster_Break=SpacingMark" , 0 , env ));
5994
5973
R_ERR (add_code_range (& (cc -> mbuf ), env , 0x200D , 0x200D ));
5995
- R_ERR (quantify_node (seq + 2 , 0 , REPEAT_INFINITE ));
5974
+ R_ERR (quantify_node (list + 2 , 0 , REPEAT_INFINITE ));
5996
5975
5997
- seq [3 ] = NULL_NODE ;
5998
- R_ERR (create_sequence_node ( alts + 1 , seq ));
5976
+ list [3 ] = NULL_NODE ;
5977
+ R_ERR (create_node_from_array ( LIST , alts + 1 , list ));
5999
5978
}
6000
5979
6001
5980
/* PerlSyntax: (?s:.), RubySyntax: (?m:.) */
@@ -6012,7 +5991,7 @@ node_extended_grapheme_cluster(Node** np, ScanEnv* env)
6012
5991
alts [2 ] = tmp ;
6013
5992
6014
5993
alts [3 ] = NULL_NODE ;
6015
- R_ERR (create_alternate_node ( & top_alt , alts ));
5994
+ R_ERR (create_node_from_array ( ALT , & top_alt , alts ));
6016
5995
}
6017
5996
}
6018
5997
else
0 commit comments