Skip to content

Commit 7475b9e

Browse files
committed
handle several nps
1 parent ea3f73d commit 7475b9e

File tree

1 file changed

+56
-54
lines changed

1 file changed

+56
-54
lines changed

Scripts/developer_scripts/add_checks_for_named_parameters.py

Lines changed: 56 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -26,57 +26,28 @@ def is_in_comment_section(line):
2626

2727
in_comment_section = False
2828

29+
params_stack={}
30+
np_names=[]
2931
while 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

117119
f.close()
118120
if modified:

0 commit comments

Comments
 (0)