@@ -26,57 +26,28 @@ def is_in_comment_section(line):
2626
2727in_comment_section = False
2828
29+ params_stack = {}
30+ np_names = []
2931while True :
3032 line = f .readline ()
3133 if not line :
3234 break ;
3335 res += line
3436
35- if not is_in_comment_section (line ):
36- continue
37-
38- #possible np name (TODO: does not work if not on the same line)
39- if re .search ("bgl_namedparameters" , line ):
40- m = re .search ("[@\\ \]param\s+([^ ]+)\s" , line )
41- if m :
42- np_name = m .group (1 )
43- #print("found "+np_name)
44-
45- if re .search ("cgalNamedParamsBegin" , line ):
46- params = []
47- while True :
48- line = f .readline ()
49- if not line :
50- break
51- res += line
52- if re .search ("cgalNamedParamsEnd" , line ):
53- is_in_comment_section (line )
54- break
55- m = re .search (r"cgalParamNBegin{\s*([^ ]+)\s*}" , line )
56- if m :
57- params .append (m .group (1 ).strip ())
58- if not line :
59- break
60- while True :
61- line = f .readline ()
62- if not line :
63- break
64- res += line
65- if re .search ("cgalNamedParamsBegin" , line ):
66- stderr .write ("Function with several nps! Not handled yet (" + argv [1 ]+ ")\n " )
67- exit (1 )
68- if is_in_comment_section (line ):
69- continue
70-
37+ if bool (params_stack ):
38+ if not is_in_comment_section (line ):
7139 m = re .search ("^(\s*).*{" , line )
7240 if m :
73- if len (params )== 0 :
74- stderr .write ("Cannot parse documented named parameters (" + argv [1 ]+ ")\n " )
75- exit (1 )
76- s = m .group (1 )+ " CGAL_CHECK_AUTHORIZED_NAMED_PARAMETERS(" + np_name
77- for p in params :
78- s += ", " + p + "_t"
79- s += ");"
41+ s = ""
42+ for np_name , params in params_stack .items ():
43+ if len (params )== 0 :
44+ stderr .write ("Cannot parse documented named parameters (" + argv [1 ]+ ")\n " )
45+ exit (1 )
46+ s += m .group (1 )+ " CGAL_CHECK_AUTHORIZED_NAMED_PARAMETERS(" + np_name
47+ for p in params :
48+ s += ", " + p + "_t"
49+ s += ");\n "
50+ params_stack = {}
8051
8152 mb = re .search ("(^\s+{)(.*)}$" , line )
8253 if mb :
@@ -99,20 +70,51 @@ def is_in_comment_section(line):
9970 stderr .write ("Error parsing the function\n " )
10071 exit (1 )
10172 if re .search ("CGAL_CHECK_AUTHORIZED_NAMED_PARAMETERS" , line ):
102- macro_already_here = True
103- break
73+ continue # in case there are more than one macro
10474 else :
105- if line == "\n " :
106- res += line
107- else :
75+ #~ if line=="\n":
76+ #~ res+=line
77+ #~ else:
10878 break # do we want to support comments?
10979
110- if add_macro :
111- res += s + "\n "
112- if not macro_already_here :
113- res += "\n " + line
114- modified = True
115- break ;
80+ res += s + "\n "
81+ if line != "\n " :
82+ res += line
83+ modified = True
84+ continue ;
85+ else :
86+ if not is_in_comment_section (line ):
87+ continue
88+
89+ #possible np name (TODO: does not work if not on the same line)
90+ if re .search ("bgl_namedparameters" , line ):
91+ m = re .search ("[@\\ \]param\s+([^ ]+)\s" , line )
92+ if m :
93+ np_name = m .group (1 )
94+ np_names .append (np_name )
95+
96+ if re .search ("cgalNamedParamsBegin" , line ):
97+ params = []
98+ while True :
99+ line = f .readline ()
100+ if not line :
101+ break
102+ res += line
103+ if re .search ("cgalNamedParamsEnd" , line ):
104+ is_in_comment_section (line )
105+ for np_name in np_names :
106+ params_stack [np_name ]= params
107+ np_names = []
108+ break
109+ m = re .search (r"cgalParamNBegin{\s*([^ ]+)\s*}" , line )
110+ if m :
111+ params .append (m .group (1 ).strip ())
112+ if not line :
113+ stderr .write ("ERROR: don't remember why I put that (" + argv [1 ]+ ")\n " )
114+ break
115+
116+
117+
116118
117119f .close ()
118120if modified :
0 commit comments