Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
gmsh
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Terraform modules
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Romin Tomasetti
gmsh
Commits
1b010816
Commit
1b010816
authored
7 years ago
by
Jonathan Lambrechts
Browse files
Options
Downloads
Patches
Plain Diff
GenAPI : add doc
parent
7da78adb
No related branches found
No related tags found
No related merge requests found
Changes
3
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
api/GenApi.py
+60
-44
60 additions, 44 deletions
api/GenApi.py
api/extract.py
+17
-4
17 additions, 4 deletions
api/extract.py
api/gen.py
+416
-151
416 additions, 151 deletions
api/gen.py
with
493 additions
and
199 deletions
api/GenApi.py
+
60
−
44
View file @
1b010816
import
os
import
textwrap
class
arg
:
class
arg
:
def
__init__
(
self
,
name
,
value
,
type_cpp
,
type_c
,
out
):
def
__init__
(
self
,
name
,
value
,
type_cpp
,
type_c
,
out
):
...
@@ -74,10 +74,10 @@ def ovectorpair(name,value=None):
...
@@ -74,10 +74,10 @@ def ovectorpair(name,value=None):
a
.
c_arg
=
name_
a
.
c_arg
=
name_
a
.
c_pre
=
"
gmsh::vector_pair
"
+
name_
+
"
;
\n
"
a
.
c_pre
=
"
gmsh::vector_pair
"
+
name_
+
"
;
\n
"
a
.
c_post
=
"
pairvector2intptr(
"
+
name_
+
"
,
"
+
name
+
"
,
"
+
name
+
"
_n);
\n
"
a
.
c_post
=
"
pairvector2intptr(
"
+
name_
+
"
,
"
+
name
+
"
,
"
+
name
+
"
_n);
\n
"
a
.
c
=
"
int**
"
+
name
+
"
,size_t*
"
+
name
+
"
_n
"
a
.
c
=
"
int**
"
+
name
+
"
,
size_t*
"
+
name
+
"
_n
"
a
.
python_pre
=
name_
+
"
,
"
+
name_n
+
"
= POINTER(c_int)(), c_size_t()
"
a
.
python_pre
=
name_
+
"
,
"
+
name_n
+
"
= POINTER(c_int)(), c_size_t()
"
a
.
python_arg
=
"
byref(
"
+
name_
+
"
),byref(
"
+
name_n
+
"
)
"
a
.
python_arg
=
"
byref(
"
+
name_
+
"
),
byref(
"
+
name_n
+
"
)
"
a
.
python_return
=
"
_ovectorpair(
"
+
name_
+
"
,
"
+
name_n
+
"
.value)
"
a
.
python_return
=
"
_ovectorpair(
"
+
name_
+
"
,
"
+
name_n
+
"
.value)
"
return
a
return
a
def
ovectorstring
(
name
,
value
=
None
):
def
ovectorstring
(
name
,
value
=
None
):
...
@@ -89,14 +89,14 @@ def ovectorstring(name,value=None):
...
@@ -89,14 +89,14 @@ def ovectorstring(name,value=None):
a
.
c_post
=
"
stringvector2charpp(
"
+
name_
+
"
,
"
+
name
+
"
,
"
+
name
+
"
_n);
\n
"
a
.
c_post
=
"
stringvector2charpp(
"
+
name_
+
"
,
"
+
name
+
"
,
"
+
name
+
"
_n);
\n
"
a
.
c
=
"
char***
"
+
name
+
"
,size_t*
"
+
name
+
"
_n
"
a
.
c
=
"
char***
"
+
name
+
"
,size_t*
"
+
name
+
"
_n
"
a
.
python_pre
=
name_
+
"
,
"
+
name_n
+
"
= POINTER(c_char_p)(), c_size_t()
"
a
.
python_pre
=
name_
+
"
,
"
+
name_n
+
"
= POINTER(c_char_p)(), c_size_t()
"
a
.
python_arg
=
"
byref(
"
+
name_
+
"
),byref(
"
+
name_n
+
"
)
"
a
.
python_arg
=
"
byref(
"
+
name_
+
"
),
byref(
"
+
name_n
+
"
)
"
a
.
python_return
=
"
_ovectorstring(
"
+
name_
+
"
,
"
+
name_n
+
"
.value)
"
a
.
python_return
=
"
_ovectorstring(
"
+
name_
+
"
,
"
+
name_n
+
"
.value)
"
return
a
return
a
def
ivectorpair
(
name
,
value
=
None
):
def
ivectorpair
(
name
,
value
=
None
):
a
=
arg
(
name
,
value
,
"
const gmsh::vector_pair &
"
,
"
const int*
"
,
False
)
a
=
arg
(
name
,
value
,
"
const gmsh::vector_pair &
"
,
"
const int*
"
,
False
)
a
.
c_arg
=
"
intptr2pairvector(
"
+
name
+
"
,
"
+
name
+
"
_n)
"
a
.
c_arg
=
"
intptr2pairvector(
"
+
name
+
"
,
"
+
name
+
"
_n)
"
a
.
c
=
"
int*
"
+
name
+
"
,size_t
"
+
name
+
"
_n
"
a
.
c
=
"
int*
"
+
name
+
"
,
size_t
"
+
name
+
"
_n
"
a
.
python_pre
=
"
api_
"
+
name
+
"
_, api
"
+
name
+
"
_n_ = _ivectorpair(
"
+
name
+
"
)
"
a
.
python_pre
=
"
api_
"
+
name
+
"
_, api
"
+
name
+
"
_n_ = _ivectorpair(
"
+
name
+
"
)
"
a
.
python_arg
=
"
api_
"
+
name
+
"
_, api
"
+
name
+
"
_n_
"
a
.
python_arg
=
"
api_
"
+
name
+
"
_, api
"
+
name
+
"
_n_
"
return
a
return
a
...
@@ -116,7 +116,7 @@ def obool(name,value=None):
...
@@ -116,7 +116,7 @@ def obool(name,value=None):
def
ivectorint
(
name
,
value
=
None
):
def
ivectorint
(
name
,
value
=
None
):
a
=
arg
(
name
,
value
,
"
const std::vector<int> &
"
,
"
const int*
"
,
False
)
a
=
arg
(
name
,
value
,
"
const std::vector<int> &
"
,
"
const int*
"
,
False
)
a
.
c_arg
=
"
ptr2vector(
"
+
name
+
"
,
"
+
name
+
"
_n)
"
a
.
c_arg
=
"
ptr2vector(
"
+
name
+
"
,
"
+
name
+
"
_n)
"
a
.
c
=
"
int*
"
+
name
+
"
,size_t
"
+
name
+
"
_n
"
a
.
c
=
"
int*
"
+
name
+
"
,
size_t
"
+
name
+
"
_n
"
a
.
python_pre
=
"
api_
"
+
name
+
"
_, api
"
+
name
+
"
_n_ = _ivectorint(
"
+
name
+
"
)
"
a
.
python_pre
=
"
api_
"
+
name
+
"
_, api
"
+
name
+
"
_n_ = _ivectorint(
"
+
name
+
"
)
"
a
.
python_arg
=
"
api_
"
+
name
+
"
_, api
"
+
name
+
"
_n_
"
a
.
python_arg
=
"
api_
"
+
name
+
"
_, api
"
+
name
+
"
_n_
"
return
a
return
a
...
@@ -128,7 +128,7 @@ def ovectorint(name,value=None):
...
@@ -128,7 +128,7 @@ def ovectorint(name,value=None):
a
.
c_arg
=
name_
a
.
c_arg
=
name_
a
.
c_pre
=
"
std::vector<int>
"
+
name_
+
"
;
\n
"
a
.
c_pre
=
"
std::vector<int>
"
+
name_
+
"
;
\n
"
a
.
c_post
=
"
vector2ptr(
"
+
name_
+
"
,
"
+
name
+
"
,
"
+
name
+
"
_n);
\n
"
a
.
c_post
=
"
vector2ptr(
"
+
name_
+
"
,
"
+
name
+
"
,
"
+
name
+
"
_n);
\n
"
a
.
c
=
"
int**
"
+
name
+
"
,size_t*
"
+
name
+
"
_n
"
a
.
c
=
"
int**
"
+
name
+
"
,
size_t*
"
+
name
+
"
_n
"
a
.
python_pre
=
name_
+
"
,
"
+
name_n
+
"
= POINTER(c_int)(), c_size_t()
"
a
.
python_pre
=
name_
+
"
,
"
+
name_n
+
"
= POINTER(c_int)(), c_size_t()
"
a
.
python_arg
=
"
byref(
"
+
name_
+
"
),byref(
"
+
name_n
+
"
)
"
a
.
python_arg
=
"
byref(
"
+
name_
+
"
),byref(
"
+
name_n
+
"
)
"
a
.
python_return
=
"
_ovectorint(
"
+
name_
+
"
,
"
+
name_n
+
"
.value)
"
a
.
python_return
=
"
_ovectorint(
"
+
name_
+
"
,
"
+
name_n
+
"
.value)
"
...
@@ -137,7 +137,7 @@ def ovectorint(name,value=None):
...
@@ -137,7 +137,7 @@ def ovectorint(name,value=None):
def
ivectordouble
(
name
,
value
=
None
):
def
ivectordouble
(
name
,
value
=
None
):
a
=
arg
(
name
,
value
,
"
const std::vector<double> &
"
,
"
double**
"
,
False
)
a
=
arg
(
name
,
value
,
"
const std::vector<double> &
"
,
"
double**
"
,
False
)
a
.
c_arg
=
"
ptr2vector(
"
+
name
+
"
,
"
+
name
+
"
_n)
"
a
.
c_arg
=
"
ptr2vector(
"
+
name
+
"
,
"
+
name
+
"
_n)
"
a
.
c
=
"
double*
"
+
name
+
"
,size_t
"
+
name
+
"
_n
"
a
.
c
=
"
double*
"
+
name
+
"
,
size_t
"
+
name
+
"
_n
"
a
.
python_pre
=
"
api_
"
+
name
+
"
_, api
"
+
name
+
"
_n_ = _ivectordouble(
"
+
name
+
"
)
"
a
.
python_pre
=
"
api_
"
+
name
+
"
_, api
"
+
name
+
"
_n_ = _ivectordouble(
"
+
name
+
"
)
"
a
.
python_arg
=
"
api_
"
+
name
+
"
_, api
"
+
name
+
"
_n_
"
a
.
python_arg
=
"
api_
"
+
name
+
"
_, api
"
+
name
+
"
_n_
"
return
a
return
a
...
@@ -149,7 +149,7 @@ def ovectordouble(name,value=None):
...
@@ -149,7 +149,7 @@ def ovectordouble(name,value=None):
a
.
c_arg
=
name_
a
.
c_arg
=
name_
a
.
c_pre
=
"
std::vector<double>
"
+
a
.
c_arg
+
"
;
\n
"
a
.
c_pre
=
"
std::vector<double>
"
+
a
.
c_arg
+
"
;
\n
"
a
.
c_post
=
"
vector2ptr(
"
+
name_
+
"
,
"
+
name
+
"
,
"
+
name
+
"
_n);
\n
"
a
.
c_post
=
"
vector2ptr(
"
+
name_
+
"
,
"
+
name
+
"
,
"
+
name
+
"
_n);
\n
"
a
.
c
=
"
double**
"
+
name
+
"
,size_t*
"
+
name
+
"
_n
"
a
.
c
=
"
double**
"
+
name
+
"
,
size_t*
"
+
name
+
"
_n
"
a
.
python_pre
=
name_
+
"
,
"
+
name_n
+
"
= POINTER(c_double)(), c_size_t()
"
a
.
python_pre
=
name_
+
"
,
"
+
name_n
+
"
= POINTER(c_double)(), c_size_t()
"
a
.
python_arg
=
"
byref(
"
+
name_
+
"
),byref(
"
+
name_n
+
"
)
"
a
.
python_arg
=
"
byref(
"
+
name_
+
"
),byref(
"
+
name_n
+
"
)
"
a
.
python_return
=
"
_ovectordouble(
"
+
name_
+
"
,
"
+
name_n
+
"
.value)
"
a
.
python_return
=
"
_ovectordouble(
"
+
name_
+
"
,
"
+
name_n
+
"
.value)
"
...
@@ -163,7 +163,7 @@ def ovectorvectorint(name,value=None):
...
@@ -163,7 +163,7 @@ def ovectorvectorint(name,value=None):
a
.
c_arg
=
name_
a
.
c_arg
=
name_
a
.
c_pre
=
"
std::vector<std::vector<int> >
"
+
a
.
c_arg
+
"
;
\n
"
a
.
c_pre
=
"
std::vector<std::vector<int> >
"
+
a
.
c_arg
+
"
;
\n
"
a
.
c_post
=
"
vectorvector2ptrptr(
"
+
name_
+
"
,
"
+
name
+
"
,
"
+
name
+
"
_n,
"
+
name
+
"
_nn);
\n
"
a
.
c_post
=
"
vectorvector2ptrptr(
"
+
name_
+
"
,
"
+
name
+
"
,
"
+
name
+
"
_n,
"
+
name
+
"
_nn);
\n
"
a
.
c
=
"
int***
"
+
name
+
"
,size_t**
"
+
name
+
"
_n,size_t *
"
+
name
+
"
_nn
"
a
.
c
=
"
int***
"
+
name
+
"
,
size_t**
"
+
name
+
"
_n,
size_t *
"
+
name
+
"
_nn
"
a
.
python_pre
=
name_
+
"
,
"
+
name_n
+
"
,
"
+
name_nn
+
"
= POINTER(POINTER(c_int))(), POINTER(c_size_t)(), c_size_t()
"
a
.
python_pre
=
name_
+
"
,
"
+
name_n
+
"
,
"
+
name_nn
+
"
= POINTER(POINTER(c_int))(), POINTER(c_size_t)(), c_size_t()
"
a
.
python_arg
=
"
byref(
"
+
name_
+
"
),byref(
"
+
name_n
+
"
),byref(
"
+
name_nn
+
"
)
"
a
.
python_arg
=
"
byref(
"
+
name_
+
"
),byref(
"
+
name_n
+
"
),byref(
"
+
name_nn
+
"
)
"
a
.
python_return
=
"
_ovectorvectorint(
"
+
name_
+
"
,
"
+
name_n
+
"
,
"
+
name_nn
+
"
)
"
a
.
python_return
=
"
_ovectorvectorint(
"
+
name_
+
"
,
"
+
name_n
+
"
,
"
+
name_nn
+
"
)
"
...
@@ -177,7 +177,7 @@ def ovectorvectorpair(name,value=None):
...
@@ -177,7 +177,7 @@ def ovectorvectorpair(name,value=None):
a
.
c_arg
=
name_
a
.
c_arg
=
name_
a
.
c_pre
=
"
std::vector<gmsh::vector_pair >
"
+
name_
+
"
;
\n
"
a
.
c_pre
=
"
std::vector<gmsh::vector_pair >
"
+
name_
+
"
;
\n
"
a
.
c_post
=
"
pairvectorvector2intptrptr(
"
+
name_
+
"
,
"
+
name
+
"
,
"
+
name
+
"
_n,
"
+
name
+
"
_nn);
\n
"
a
.
c_post
=
"
pairvectorvector2intptrptr(
"
+
name_
+
"
,
"
+
name
+
"
,
"
+
name
+
"
_n,
"
+
name
+
"
_nn);
\n
"
a
.
c
=
"
int***
"
+
name
+
"
,size_t**
"
+
name
+
"
_n,size_t *
"
+
name
+
"
_nn
"
a
.
c
=
"
int***
"
+
name
+
"
,
size_t**
"
+
name
+
"
_n,
size_t *
"
+
name
+
"
_nn
"
a
.
python_pre
=
name_
+
"
,
"
+
name_n
+
"
,
"
+
name_nn
+
"
= POINTER(POINTER(c_int))(), POINTER(c_size_t)(), c_size_t()
"
a
.
python_pre
=
name_
+
"
,
"
+
name_n
+
"
,
"
+
name_nn
+
"
= POINTER(POINTER(c_int))(), POINTER(c_size_t)(), c_size_t()
"
a
.
python_arg
=
"
byref(
"
+
name_
+
"
),byref(
"
+
name_n
+
"
),byref(
"
+
name_nn
+
"
)
"
a
.
python_arg
=
"
byref(
"
+
name_
+
"
),byref(
"
+
name_n
+
"
),byref(
"
+
name_nn
+
"
)
"
a
.
python_return
=
"
_ovectorvectorpair(
"
+
name_
+
"
,
"
+
name_n
+
"
,
"
+
name_nn
+
"
)
"
a
.
python_return
=
"
_ovectorvectorpair(
"
+
name_
+
"
,
"
+
name_n
+
"
,
"
+
name_nn
+
"
)
"
...
@@ -185,16 +185,17 @@ def ovectorvectorpair(name,value=None):
...
@@ -185,16 +185,17 @@ def ovectorvectorpair(name,value=None):
class
Module
:
class
Module
:
def
__init__
(
self
,
name
):
def
__init__
(
self
,
name
,
doc
):
self
.
name
=
name
self
.
name
=
name
self
.
doc
=
doc
self
.
fs
=
[]
self
.
fs
=
[]
self
.
submodules
=
[]
self
.
submodules
=
[]
def
add
(
self
,
rtype
,
nam
e
,
*
args
):
def
add
(
self
,
name
,
doc
,
rtyp
e
,
*
args
):
self
.
fs
.
append
((
rtype
,
name
,
args
))
self
.
fs
.
append
((
rtype
,
name
,
args
,
doc
))
def
add_module
(
self
,
name
)
:
def
add_module
(
self
,
name
,
doc
)
:
module
=
Module
(
name
)
module
=
Module
(
name
,
doc
)
self
.
submodules
.
append
(
module
)
self
.
submodules
.
append
(
module
)
return
module
return
module
...
@@ -461,22 +462,26 @@ class API:
...
@@ -461,22 +462,26 @@ class API:
def
__init__
(
self
):
def
__init__
(
self
):
self
.
modules
=
[]
self
.
modules
=
[]
def
add_module
(
self
,
name
):
def
add_module
(
self
,
name
,
doc
):
module
=
Module
(
name
)
module
=
Module
(
name
,
doc
)
self
.
modules
.
append
(
module
)
self
.
modules
.
append
(
module
)
return
module
return
module
def
write_cpp
(
self
):
def
write_cpp
(
self
):
def
write_module
(
module
,
indent
)
:
def
write_module
(
module
,
indent
)
:
f
.
write
(
indent
+
"
namespace
"
+
module
.
name
+
"
{
\n
"
)
f
.
write
(
"
\n
"
+
indent
+
"
namespace
"
+
module
.
name
+
"
{
//
"
+
module
.
doc
+
"
\n
\n
"
)
indent
+=
"
"
indent
+=
"
"
for
rtype
,
name
,
args
in
module
.
fs
:
for
rtype
,
name
,
args
,
doc
in
module
.
fs
:
f
.
write
(
"
\n
"
)
f
.
write
(
indent
+
"
//
"
+
(
"
\n
"
+
indent
+
"
//
"
).
join
(
textwrap
.
wrap
(
doc
,
75
))
+
"
\n\n
"
)
rt
=
rtype
.
rtype_cpp
if
rtype
else
"
void
"
rt
=
rtype
.
rtype_cpp
if
rtype
else
"
void
"
f
.
write
(
indent
+
"
GMSH_API
"
+
rt
+
"
"
+
name
+
"
(
"
+
"
,
"
.
join
(
f
.
write
(
indent
+
"
GMSH_API
"
+
rt
+
"
"
+
name
+
"
(
"
)
list
((
a
.
cpp
for
a
in
args
)))
+
"
);
\n
"
)
if
args
:
f
.
write
(
"
\n
"
+
indent
+
"
"
+
(
"
,
\n
"
+
indent
+
"
"
).
join
(
a
.
cpp
for
a
in
args
))
f
.
write
(
"
);
\n\n
"
)
for
m
in
module
.
submodules
:
for
m
in
module
.
submodules
:
write_module
(
m
,
indent
)
write_module
(
m
,
indent
)
f
.
write
(
indent
[:
-
2
]
+
"
} // namespace
"
+
module
.
name
+
"
\n
"
)
f
.
write
(
indent
[:
-
2
]
+
"
} // namespace
"
+
module
.
name
+
"
\n
\n
"
)
with
open
(
"
gmsh.h
"
,
"
w
"
)
as
f
:
with
open
(
"
gmsh.h
"
,
"
w
"
)
as
f
:
f
.
write
(
cpp_header
)
f
.
write
(
cpp_header
)
for
m
in
self
.
modules
:
for
m
in
self
.
modules
:
...
@@ -484,22 +489,18 @@ class API:
...
@@ -484,22 +489,18 @@ class API:
f
.
write
(
cpp_footer
)
f
.
write
(
cpp_footer
)
def
write_c
(
self
):
def
write_c
(
self
):
def
c_fun_name
(
module
,
f
)
:
n
=
"
gmshc
"
if
module
:
n
+=
module
[
0
].
upper
()
+
module
[
1
:]
return
n
+
f
[
0
].
upper
()
+
f
[
1
:]
def
write_module
(
module
,
c_namespace
,
cpp_namespace
)
:
def
write_module
(
module
,
c_namespace
,
cpp_namespace
)
:
cpp_namespace
+=
module
.
name
+
"
::
"
cpp_namespace
+=
module
.
name
+
"
::
"
if
c_namespace
:
if
c_namespace
:
c_namespace
+=
module
.
name
[
0
].
upper
()
+
module
.
name
[
1
:]
c_namespace
+=
module
.
name
[
0
].
upper
()
+
module
.
name
[
1
:]
else
:
else
:
c_namespace
=
module
.
name
c_namespace
=
module
.
name
for
rtype
,
name
,
args
in
module
.
fs
:
for
rtype
,
name
,
args
,
doc
in
module
.
fs
:
fname
=
c_namespace
+
name
[
0
].
upper
()
+
name
[
1
:]
fname
=
c_namespace
+
name
[
0
].
upper
()
+
name
[
1
:]
f
.
write
(
"
\n
/*
"
+
"
\n
*
"
.
join
(
textwrap
.
wrap
(
doc
,
75
))
+
"
*/
\n
"
)
f
.
write
(
"
GMSH_API
"
+
(
rtype
.
rtype_c
if
rtype
else
"
void
"
))
f
.
write
(
"
GMSH_API
"
+
(
rtype
.
rtype_c
if
rtype
else
"
void
"
))
f
.
write
(
"
"
+
fname
+
"
(
"
f
.
write
(
"
"
+
fname
+
"
(
\n
"
+
"
,
"
.
join
(
list
((
a
.
c
for
a
in
args
+
(
oint
(
"
ierr
"
),))))
+
"
,
\n
"
.
join
(
list
((
a
.
c
for
a
in
args
+
(
oint
(
"
ierr
"
),))))
+
"
);
\n
"
)
+
"
);
\n
"
)
fc
.
write
(
rtype
.
rtype_c
if
rtype
else
"
void
"
)
fc
.
write
(
rtype
.
rtype_c
if
rtype
else
"
void
"
)
fc
.
write
(
"
"
+
fname
+
"
(
"
fc
.
write
(
"
"
+
fname
+
"
(
"
...
@@ -532,29 +533,40 @@ class API:
...
@@ -532,29 +533,40 @@ class API:
f
.
write
(
c_footer
)
f
.
write
(
c_footer
)
def
write_python
(
self
)
:
def
write_python
(
self
)
:
def
write_function
(
f
,
rtype
,
name
,
args
,
modulepath
,
indent
):
def
write_function
(
f
,
rtype
,
name
,
args
,
doc
,
modulepath
,
indent
):
iargs
=
list
(
a
for
a
in
args
if
not
a
.
out
)
iargs
=
list
(
a
for
a
in
args
if
not
a
.
out
)
oargs
=
list
(
a
for
a
in
args
if
a
.
out
)
oargs
=
list
(
a
for
a
in
args
if
a
.
out
)
f
.
write
(
"
\n
"
+
indent
+
"
def
"
+
name
+
"
(
"
f
.
write
(
"
\n
"
+
indent
+
"
def
"
+
name
+
"
(
"
+
"
,
"
.
join
((
a
.
name
for
a
in
iargs
))
+
"
,
"
.
join
((
a
.
name
for
a
in
iargs
))
+
"
):
\n
"
)
+
"
):
\n
"
)
indent
+=
"
"
f
.
write
(
indent
+
'"""
\n
'
)
f
.
write
(
indent
+
(
"
\n
"
+
indent
).
join
(
textwrap
.
wrap
(
doc
,
75
))
+
"
\n
"
)
if
rtype
or
oargs
:
f
.
write
(
"
\n
"
+
indent
+
"
return
"
+
"
,
"
.
join
(
([
rtype
.
rtype_c
]
if
rtype
else
[])
+
[
a
.
name
for
a
in
oargs
])
+
"
\n
"
)
f
.
write
(
indent
+
'"""
\n
'
)
for
a
in
args
:
for
a
in
args
:
if
a
.
python_pre
:
f
.
write
(
indent
+
"
"
+
a
.
python_pre
+
"
\n
"
)
if
a
.
python_pre
:
f
.
write
(
indent
+
a
.
python_pre
+
"
\n
"
)
f
.
write
(
indent
+
"
ierr = c_int()
\n
"
)
f
.
write
(
indent
+
"
ierr = c_int()
\n
"
)
f
.
write
(
indent
+
"
api__result__ =
"
if
rtype
is
oint
else
(
"
"
+
indent
))
f
.
write
(
indent
+
"
api__result__ =
"
if
rtype
is
oint
else
(
indent
))
c_name
=
modulepath
+
name
[
0
].
upper
()
+
name
[
1
:]
c_name
=
modulepath
+
name
[
0
].
upper
()
+
name
[
1
:]
f
.
write
(
"
lib.
"
+
c_name
+
"
(
\n
"
+
indent
f
.
write
(
"
lib.
"
+
c_name
+
"
(
\n
"
+
indent
+
(
"
,
\n
"
+
indent
+
"
"
).
join
(
tuple
((
a
.
python_arg
for
a
in
args
))
+
(
"
byref(ierr)
"
,))
+
(
"
,
\n
"
+
indent
+
"
"
).
join
(
tuple
((
a
.
python_arg
for
a
in
args
))
+
(
"
byref(ierr)
"
,))
+
"
)
\n
"
)
+
"
)
\n
"
)
f
.
write
(
indent
+
"
if ierr.value != 0 :
\n
"
)
f
.
write
(
indent
+
"
if ierr.value != 0 :
\n
"
)
f
.
write
(
indent
+
"
raise ValueError(
\"
"
+
c_name
+
"
returned non-zero error code :
\"
+ str(ierr.value))
\n
"
)
f
.
write
(
indent
+
"
raise ValueError(
\n
"
)
f
.
write
(
indent
+
"
\"
"
+
c_name
+
"
returned non-zero error code :
\"
,
\n
"
)
f
.
write
(
indent
+
"
ierr.value)
\n
"
)
r
=
([
"
api__result__
"
])
if
rtype
else
[]
r
=
([
"
api__result__
"
])
if
rtype
else
[]
r
+=
list
((
o
.
python_return
for
o
in
oargs
))
r
+=
list
((
o
.
python_return
for
o
in
oargs
))
if
len
(
r
)
!=
0
:
if
len
(
r
)
!=
0
:
if
len
(
r
)
==
1
:
if
len
(
r
)
==
1
:
f
.
write
(
indent
+
"
return
"
+
r
[
0
]
+
"
\n
"
)
f
.
write
(
indent
+
"
return
"
+
r
[
0
]
+
"
\n
"
)
else
:
else
:
f
.
write
(
indent
+
"
return (
\n
"
+
"
,
\n
"
.
join
(
r
)
+
"
)
\n
"
)
f
.
write
(
indent
+
"
return (
\n
"
+
indent
+
"
"
+
(
"
,
\n
"
+
indent
+
"
"
)
.
join
(
r
)
+
"
)
\n
"
)
def
write_module
(
f
,
m
,
modulepath
,
indent
)
:
def
write_module
(
f
,
m
,
modulepath
,
indent
)
:
if
modulepath
:
if
modulepath
:
modulepath
+=
m
.
name
[
0
].
upper
()
+
m
.
name
[
1
:]
modulepath
+=
m
.
name
[
0
].
upper
()
+
m
.
name
[
1
:]
...
@@ -564,7 +576,11 @@ class API:
...
@@ -564,7 +576,11 @@ class API:
write_function
(
f
,
*
fun
,
modulepath
,
indent
)
write_function
(
f
,
*
fun
,
modulepath
,
indent
)
for
module
in
m
.
submodules
:
for
module
in
m
.
submodules
:
f
.
write
(
"
\n\n
"
+
indent
+
"
class
"
+
module
.
name
+
"
:
\n
"
)
f
.
write
(
"
\n\n
"
+
indent
+
"
class
"
+
module
.
name
+
"
:
\n
"
)
write_module
(
f
,
module
,
modulepath
,
indent
+
"
"
)
indentm
=
indent
+
"
"
f
.
write
(
indentm
+
'"""
\n
'
)
f
.
write
(
indentm
+
(
"
\n
"
+
indentm
).
join
(
textwrap
.
wrap
(
module
.
doc
,
75
))
+
"
\n
"
)
f
.
write
(
indentm
+
'"""
\n
'
)
write_module
(
f
,
module
,
modulepath
,
indentm
)
with
open
(
"
gmsh.py
"
,
"
w
"
)
as
f
:
with
open
(
"
gmsh.py
"
,
"
w
"
)
as
f
:
f
.
write
(
python_header
)
f
.
write
(
python_header
)
for
module
in
self
.
modules
:
for
module
in
self
.
modules
:
...
...
This diff is collapsed.
Click to expand it.
api/extract.py
+
17
−
4
View file @
1b010816
import
textwrap
tmap
=
{
tmap
=
{
'
int
'
:
'
iint
'
,
'
int
'
:
'
iint
'
,
'
char**
'
:
'
icharpp
'
,
'
char**
'
:
'
icharpp
'
,
...
@@ -31,7 +32,7 @@ def parse_arg(a) :
...
@@ -31,7 +32,7 @@ def parse_arg(a) :
typ
=
a
[:
p
+
1
].
replace
(
"
"
,
""
)
typ
=
a
[:
p
+
1
].
replace
(
"
"
,
""
)
return
tmap
[
typ
]
+
"
(
'"
+
name
+
"'"
+
((
"
,
'"
+
value
+
"'"
)
if
value
else
""
)
+
"
)
"
return
tmap
[
typ
]
+
"
(
'"
+
name
+
"'"
+
((
"
,
'"
+
value
+
"'"
)
if
value
else
""
)
+
"
)
"
def
parse_fun
(
f
,
fun
,
namespace
)
:
def
parse_fun
(
f
,
fun
,
namespace
,
doc
)
:
iarg
=
fun
.
find
(
"
(
"
)
iarg
=
fun
.
find
(
"
(
"
)
earg
=
fun
.
rfind
(
"
)
"
)
earg
=
fun
.
rfind
(
"
)
"
)
pre
=
fun
[:
iarg
]
pre
=
fun
[:
iarg
]
...
@@ -46,14 +47,18 @@ def parse_fun(f,fun,namespace) :
...
@@ -46,14 +47,18 @@ def parse_fun(f,fun,namespace) :
raise
NameError
(
"
Unknown return type :
"
,
t
)
raise
NameError
(
"
Unknown return type :
"
,
t
)
if
(
args
==
[
''
])
:
if
(
args
==
[
''
])
:
args
=
[]
args
=
[]
#f.write("\ndoc = (\n"
# "'''"+" '''\n'''".join(textwrap.wrap(doc))+"'''\n)\n")
f
.
write
(
"
\n
doc =
'''"
+
doc
+
"'''
\n
"
)
if
(
name
in
[
"
initialize
"
,
"
setElements
"
,
"
addModelData
"
])
:
if
(
name
in
[
"
initialize
"
,
"
setElements
"
,
"
addModelData
"
])
:
f
.
write
(
"
#
"
)
f
.
write
(
"
#
"
)
f
.
write
(
namespace
+
"
.add(
"
+
"
,
"
.
join
([
ret
,
"'"
+
name
+
"'"
]
+
[
parse_arg
(
a
)
for
a
in
args
])
+
"
)
\n
"
)
f
.
write
(
namespace
+
"
.add(
"
+
"
,
"
.
join
([
"'"
+
name
+
"'"
,
"
doc
"
,
ret
]
+
[
parse_arg
(
a
)
for
a
in
args
])
+
"
)
\n
"
)
namespace
=
[
"
api
"
]
namespace
=
[
"
api
"
]
with
open
(
"
../Common/gmsh.h
"
)
as
f
:
with
open
(
"
../Common/gmsh.h
"
)
as
f
:
with
open
(
"
gen.py
"
,
"
w
"
)
as
fo
:
with
open
(
"
gen.py
"
,
"
w
"
)
as
fo
:
current_doc
=
""
fo
.
write
(
"
from GenApi import *
\n\n
api = API()
\n
"
)
fo
.
write
(
"
from GenApi import *
\n\n
api = API()
\n
"
)
ls
=
f
.
readlines
()
ls
=
f
.
readlines
()
i
=
0
i
=
0
...
@@ -70,14 +75,22 @@ with open("../Common/gmsh.h") as f :
...
@@ -70,14 +75,22 @@ with open("../Common/gmsh.h") as f :
i
+=
1
i
+=
1
f
+=
"
"
+
l
f
+=
"
"
+
l
try
:
try
:
parse_fun
(
fo
,
f
,
namespace
[
-
1
])
parse_fun
(
fo
,
f
,
namespace
[
-
1
]
,
current_doc
)
except
:
except
:
raise
NameError
(
f
)
raise
NameError
(
f
)
elif
l
[:
2
]
==
"
//
"
:
current_doc
=
l
[
2
:].
strip
()
while
ls
[
i
].
strip
()[:
2
]
==
"
//
"
:
current_doc
+=
ls
[
i
].
strip
()[
2
:]
i
+=
1
elif
w
[
0
]
==
"
namespace
"
:
elif
w
[
0
]
==
"
namespace
"
:
fo
.
write
(
"
\n
"
+
w
[
1
]
+
"
=
"
+
namespace
[
-
1
]
+
"
.add_module(
'"
+
w
[
1
]
+
"'
)
\n
"
)
doc
=
"
"
.
join
(
w
[
4
:])
fo
.
write
(
"
\n
"
+
w
[
1
]
+
"
=
"
+
namespace
[
-
1
]
+
"
.add_module(
'"
+
w
[
1
]
+
"'
,
'"
+
doc
+
"'
)
\n
"
)
namespace
+=
[
w
[
1
]]
namespace
+=
[
w
[
1
]]
current_doc
=
""
elif
w
[
0
]
==
"
}
"
:
elif
w
[
0
]
==
"
}
"
:
namespace
.
pop
()
namespace
.
pop
()
fo
.
write
(
"
\n
"
)
fo
.
write
(
"
api.write_cpp()
\n
"
)
fo
.
write
(
"
api.write_cpp()
\n
"
)
fo
.
write
(
"
api.write_c()
\n
"
)
fo
.
write
(
"
api.write_c()
\n
"
)
fo
.
write
(
"
api.write_python()
\n
"
)
fo
.
write
(
"
api.write_python()
\n
"
)
This diff is collapsed.
Click to expand it.
api/gen.py
+
416
−
151
View file @
1b010816
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment