Commit 4dfa0a03 authored by Alexander Alekhin's avatar Alexander Alekhin

bindings: basic support for #if preprocessor directives

- #if 0
- #ifdef __OPENCV_BUILD
parent eb44e0a5
...@@ -9,7 +9,7 @@ CV_EXPORTS_W void setErrorVerbosity(bool verbose); ...@@ -9,7 +9,7 @@ CV_EXPORTS_W void setErrorVerbosity(bool verbose);
} }
#if 0 #ifdef OPENCV_BINDINGS_PARSER
namespace cv namespace cv
{ {
...@@ -30,4 +30,4 @@ CV_EXPORTS_W void min(InputArray src1, Scalar src2, OutputArray dst); ...@@ -30,4 +30,4 @@ CV_EXPORTS_W void min(InputArray src1, Scalar src2, OutputArray dst);
CV_EXPORTS_W void max(InputArray src1, Scalar src2, OutputArray dst); CV_EXPORTS_W void max(InputArray src1, Scalar src2, OutputArray dst);
} }
#endif //0 #endif
...@@ -294,7 +294,7 @@ private: ...@@ -294,7 +294,7 @@ private:
Ptr<DescriptorExtractor> wrapped; Ptr<DescriptorExtractor> wrapped;
}; };
#if 0 #ifdef OPENCV_BINDINGS_PARSER
//DO NOT REMOVE! The block is required for sources parser //DO NOT REMOVE! The block is required for sources parser
enum enum
{ {
......
...@@ -793,6 +793,7 @@ class CppHeaderParser(object): ...@@ -793,6 +793,7 @@ class CppHeaderParser(object):
COMMENT = 1 # inside a multi-line comment COMMENT = 1 # inside a multi-line comment
DIRECTIVE = 2 # inside a multi-line preprocessor directive DIRECTIVE = 2 # inside a multi-line preprocessor directive
DOCSTRING = 3 # inside a multi-line docstring DOCSTRING = 3 # inside a multi-line docstring
DIRECTIVE_IF_0 = 4 # inside a '#if 0' directive
state = SCAN state = SCAN
...@@ -802,6 +803,8 @@ class CppHeaderParser(object): ...@@ -802,6 +803,8 @@ class CppHeaderParser(object):
self.lineno = 0 self.lineno = 0
self.wrap_mode = wmode self.wrap_mode = wmode
depth_if_0 = 0
for l0 in linelist: for l0 in linelist:
self.lineno += 1 self.lineno += 1
#print(state, self.lineno, l0) #print(state, self.lineno, l0)
...@@ -813,8 +816,28 @@ class CppHeaderParser(object): ...@@ -813,8 +816,28 @@ class CppHeaderParser(object):
# fall through to the if state == DIRECTIVE check # fall through to the if state == DIRECTIVE check
if state == DIRECTIVE: if state == DIRECTIVE:
if not l.endswith("\\"): if l.endswith("\\"):
continue
state = SCAN state = SCAN
l = re.sub(r'//(.+)?', '', l).strip() # drop // comment
if l == '#if 0' or l == '#if defined(__OPENCV_BUILD)' or l == '#ifdef __OPENCV_BUILD':
state = DIRECTIVE_IF_0
depth_if_0 = 1
continue
if state == DIRECTIVE_IF_0:
if l.startswith('#'):
l = l[1:].strip()
if l.startswith("if"):
depth_if_0 += 1
continue
if l.startswith("endif"):
depth_if_0 -= 1
if depth_if_0 == 0:
state = SCAN
else:
# print('---- {:30s}:{:5d}: {}'.format(hname[-30:], self.lineno, l))
pass
continue continue
if state == COMMENT: if state == COMMENT:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment