Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
O
opencv
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
opencv
Commits
6174f627
Commit
6174f627
authored
Nov 17, 2017
by
tribta
Committed by
Alexander Alekhin
Dec 09, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Sample for functions
parent
d715badb
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
155 additions
and
61 deletions
+155
-61
CMakeLists.txt
doc/CMakeLists.txt
+3
-3
add_signatures.py
doc/tools/add_signatures.py
+101
-0
doxygen_scan.py
doc/tools/doxygen_scan.py
+51
-0
html_functions.py
doc/tools/html_functions.py
+0
-0
python_signatures.py
doc/tools/python_signatures.py
+0
-58
No files found.
doc/CMakeLists.txt
View file @
6174f627
...
...
@@ -205,7 +205,7 @@ if(BUILD_DOCS AND DOXYGEN_FOUND)
list
(
APPEND js_tutorials_assets_deps
"
${
f
}
"
"
${
opencv_tutorial_html_dir
}
/
${
fname
}
"
)
endforeach
()
set
(
doxygen_result
"
${
CMAKE_CURRENT_BINARY_DIR
}
/doxygen/html/
index
.html"
)
set
(
doxygen_result
"
${
CMAKE_CURRENT_BINARY_DIR
}
/doxygen/html/
modules
.html"
)
add_custom_target
(
doxygen_cpp
COMMAND
${
DOXYGEN_EXECUTABLE
}
${
doxyfile
}
...
...
@@ -220,7 +220,7 @@ if(BUILD_DOCS AND DOXYGEN_FOUND)
if
(
BUILD_opencv_python2
)
add_custom_target
(
doxygen_python
COMMAND
${
PYTHON2_EXECUTABLE
}
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/tools/
python_signatures.py"
"
${
CMAKE_CURRENT_BINARY_DIR
}
/doxygen/html/"
"
${
OPENCV_PYTHON2_SIGNATURES_FILE
}
"
COMMAND
${
PYTHON2_EXECUTABLE
}
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/tools/
add_signatures.py"
"
${
CMAKE_CURRENT_BINARY_DIR
}
/doxygen/html/"
"
${
OPENCV_PYTHON2_SIGNATURES_FILE
}
"
"python
"
DEPENDS
"
${
doxygen_result
}
"
gen_opencv_python2
)
add_custom_target
(
doxygen
...
...
@@ -228,7 +228,7 @@ if(BUILD_DOCS AND DOXYGEN_FOUND)
)
elseif
(
BUILD_opencv_python3
)
add_custom_target
(
doxygen_python
COMMAND
${
PYTHON3_EXECUTABLE
}
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/tools/
python_signatures.py"
"
${
CMAKE_CURRENT_BINARY_DIR
}
/doxygen/html/"
"
${
OPENCV_PYTHON3_SIGNATURES_FILE
}
"
COMMAND
${
PYTHON3_EXECUTABLE
}
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/tools/
add_signatures.py"
"
${
CMAKE_CURRENT_BINARY_DIR
}
/doxygen/html/"
"
${
OPENCV_PYTHON3_SIGNATURES_FILE
}
"
"python
"
DEPENDS
"
${
doxygen_result
}
"
gen_opencv_python3
)
add_custom_target
(
doxygen
...
...
doc/tools/add_signatures.py
0 → 100644
View file @
6174f627
"""
This code adds Python/Java signatures to the docs.
TODO: Do the same thing for Java
* using javadoc/ get all the methods/classes/constants to a json file
TODO:
* clarify when there are several C++ signatures corresponding to a single Python function.
i.e: calcHist():
http://docs.opencv.org/3.2.0/d6/dc7/group__imgproc__hist.html#ga4b2b5fd75503ff9e6844cc4dcdaed35d
* clarify special case:
http://docs.opencv.org/3.2.0/db/de0/group__core__utils.html#ga4910d7f86336cd4eff9dd05575667e41
"""
from
__future__
import
print_function
import
os
import
re
import
sys
import
logging
import
html_functions
import
doxygen_scan
loglevel
=
os
.
environ
.
get
(
"LOGLEVEL"
,
None
)
if
loglevel
:
logging
.
basicConfig
(
level
=
loglevel
)
ROOT_DIR
=
sys
.
argv
[
1
]
PYTHON_SIGNATURES_FILE
=
sys
.
argv
[
2
]
JAVA_PYTHON
=
sys
.
argv
[
3
]
ADD_JAVA
=
False
ADD_PYTHON
=
False
if
JAVA_PYTHON
==
"python"
:
ADD_PYTHON
=
True
import
json
python_signatures
=
dict
()
with
open
(
PYTHON_SIGNATURES_FILE
,
"rt"
)
as
f
:
python_signatures
=
json
.
load
(
f
)
print
(
"Loaded Python signatures:
%
d"
%
len
(
python_signatures
))
# only name -> class
# name and ret -> constant
# name, ret, arg-> function / class method
class
Configuration
():
def
__init__
(
self
):
self
.
ADD_PYTHON
=
ADD_PYTHON
self
.
python_signatures
=
python_signatures
self
.
ADD_JAVA
=
ADD_JAVA
config
=
Configuration
()
import
xml.etree.ElementTree
as
ET
root
=
ET
.
parse
(
ROOT_DIR
+
'opencv.tag'
)
files_dict
=
dict
()
# constants and function from opencv.tag
namespaces
=
root
.
findall
(
"./compound[@kind='namespace']"
)
#print("Found {} namespaces".format(len(namespaces)))
for
ns
in
namespaces
:
ns_name
=
ns
.
find
(
"./name"
)
.
text
#print('NS: {}'.format(ns_name))
files_dict
=
doxygen_scan
.
scan_namespace_constants
(
ns
,
ns_name
,
files_dict
)
files_dict
=
doxygen_scan
.
scan_namespace_functions
(
ns
,
ns_name
,
files_dict
)
# class methods from opencv.tag
classes
=
root
.
findall
(
"./compound[@kind='class']"
)
#print("Found {} classes".format(len(classes)))
for
c
in
classes
:
c_name
=
c
.
find
(
"./name"
)
.
text
name
=
ns_name
+
'::'
+
c_name
file
=
c
.
find
(
"./filename"
)
.
text
#print('Class: {} => {}'.format(name, file))
files_dict
=
doxygen_scan
.
scan_class_methods
(
c
,
c_name
,
files_dict
)
# test
for
file
in
files_dict
:
soup
=
html_functions
.
load_html_file
(
ROOT_DIR
+
file
)
if
file
==
"d4/d86/group__imgproc__filter.html"
:
#"d4/d86/group__imgproc__filter.html":
anchor_list
=
files_dict
[
file
]
counter
=
0
anchor_tmp_list
=
[]
for
anchor
in
anchor_list
:
counter
+=
1
# if the next anchor shares the same C++ name (= same method/function), join them together
if
counter
<
len
(
anchor_list
)
and
anchor_list
[
counter
]
.
cppname
==
anchor
.
cppname
:
anchor_tmp_list
.
append
(
anchor
)
continue
else
:
anchor_tmp_list
.
append
(
anchor
)
# check if extists a python equivalent signature
for
signature
in
python_signatures
:
# signature is a key with the C++ name
if
signature
==
anchor
.
cppname
:
# if available name in python
# they should also have the same type
soup
=
html_functions
.
append_python_signature
(
python_signatures
[
signature
],
anchor_tmp_list
,
soup
)
#print(signature)
# reset anchor temporary list
anchor_tmp_list
[:]
=
[]
html_functions
.
update_html
(
ROOT_DIR
+
file
,
soup
)
doc/tools/doxygen_scan.py
0 → 100644
View file @
6174f627
class
Anchor
(
object
):
anchor
=
""
type
=
""
cppname
=
""
def
__init__
(
self
,
anchor
,
type
,
cppname
):
self
.
anchor
=
anchor
self
.
type
=
type
self
.
cppname
=
cppname
def
add_to_file
(
files_dict
,
file
,
anchor
):
if
file
in
files_dict
:
# if that file already exists as a key in the dictionary
files_dict
[
file
]
.
append
(
anchor
)
else
:
files_dict
[
file
]
=
[
anchor
]
return
files_dict
def
scan_namespace_constants
(
ns
,
ns_name
,
files_dict
):
constants
=
ns
.
findall
(
"./member[@kind='enumvalue']"
)
for
c
in
constants
:
c_name
=
c
.
find
(
"./name"
)
.
text
name
=
ns_name
+
'::'
+
c_name
file
=
c
.
find
(
"./anchorfile"
)
.
text
anchor
=
c
.
find
(
"./anchor"
)
.
text
#print(' CONST: {} => {}#{}'.format(name, file, anchor))
files_dict
=
add_to_file
(
files_dict
,
file
,
Anchor
(
anchor
,
"const"
,
name
))
return
files_dict
def
scan_namespace_functions
(
ns
,
ns_name
,
files_dict
):
functions
=
ns
.
findall
(
"./member[@kind='function']"
)
for
f
in
functions
:
f_name
=
f
.
find
(
"./name"
)
.
text
name
=
ns_name
+
'::'
+
f_name
file
=
f
.
find
(
"./anchorfile"
)
.
text
anchor
=
f
.
find
(
"./anchor"
)
.
text
#print(' FN: {} => {}#{}'.format(name, file, anchor))
files_dict
=
add_to_file
(
files_dict
,
file
,
Anchor
(
anchor
,
"fn"
,
name
))
return
files_dict
def
scan_class_methods
(
c
,
c_name
,
files_dict
):
methods
=
c
.
findall
(
"./member[@kind='function']"
)
for
m
in
methods
:
m_name
=
m
.
find
(
"./name"
)
.
text
name
=
c_name
+
'::'
+
m_name
file
=
m
.
find
(
"./anchorfile"
)
.
text
anchor
=
m
.
find
(
"./anchor"
)
.
text
#print(' Method: {} => {}#{}'.format(name, file, anchor))
files_dict
=
add_to_file
(
files_dict
,
file
,
Anchor
(
anchor
,
"method"
,
name
))
return
files_dict
doc/tools/html_functions.py
View file @
6174f627
This diff is collapsed.
Click to expand it.
doc/tools/python_signatures.py
deleted
100644 → 0
View file @
d715badb
"""
This code adds Python signatures to the docs.
TODO:
* clarify when there are several C++ signatures corresponding to a single Python function.
i.e: calcHist():
http://docs.opencv.org/3.2.0/d6/dc7/group__imgproc__hist.html#ga4b2b5fd75503ff9e6844cc4dcdaed35d
* clarify special case:
http://docs.opencv.org/3.2.0/db/de0/group__core__utils.html#ga4910d7f86336cd4eff9dd05575667e41
"""
from
__future__
import
print_function
import
os
import
re
import
sys
import
logging
loglevel
=
os
.
environ
.
get
(
"LOGLEVEL"
,
None
)
if
loglevel
:
logging
.
basicConfig
(
level
=
loglevel
)
ADD_JAVA
=
False
ADD_PYTHON
=
True
ROOT_DIR
=
sys
.
argv
[
1
]
PYTHON_SIGNATURES_FILE
=
sys
.
argv
[
2
]
import
json
python_signatures
=
dict
()
with
open
(
PYTHON_SIGNATURES_FILE
,
"rt"
)
as
f
:
python_signatures
=
json
.
load
(
f
)
print
(
"Loaded Python signatures:
%
d"
%
len
(
python_signatures
))
class
Configuration
():
def
__init__
(
self
):
self
.
ADD_PYTHON
=
ADD_PYTHON
self
.
python_signatures
=
python_signatures
self
.
ADD_JAVA
=
ADD_JAVA
config
=
Configuration
()
import
html_functions
soup
=
html_functions
.
load_html_file
(
ROOT_DIR
+
"index.html"
)
href_list
=
html_functions
.
get_links_list
(
soup
,
True
)
for
link
in
href_list
:
# add python signatures to the module
soup
=
html_functions
.
load_html_file
(
ROOT_DIR
+
link
)
sub_href_list
=
html_functions
.
get_links_list
(
soup
,
True
)
module_name
=
html_functions
.
get_text_between_substrings
(
link
,
"group__"
,
".html"
)
html_functions
.
add_signatures
(
soup
,
ROOT_DIR
+
link
,
module_name
,
config
)
# add python signatures to the sub-modules
link
=
re
.
sub
(
r"group__.+html"
,
""
,
link
)
for
sub_link
in
sub_href_list
:
tmp_dir
=
ROOT_DIR
+
link
+
sub_link
soup
=
html_functions
.
load_html_file
(
tmp_dir
)
html_functions
.
add_signatures
(
soup
,
tmp_dir
,
module_name
,
config
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment