1
1
import os
2
2
import sys
3
3
import re
4
+ import argparse
4
5
from os import path
5
6
from jinja2 import Environment , FileSystemLoader
6
7
7
- arg = sys .argv
8
- app = arg [1 ]
9
-
10
8
includeFiles = []
11
9
pubMsgTypes = []
12
10
subMsgTypes = []
@@ -15,7 +13,21 @@ def toSnakeCase(string):
15
13
return re .sub ("(.[A-Z])" ,lambda x :x .group (1 )[0 ] + "_" + x .group (1 )[1 ],string ).lower ()
16
14
17
15
def main ():
18
- with open (app + "/app.cpp" , 'r' ) as m_f :
16
+ print ('Generate template.hpp from mros2 app code file.' )
17
+
18
+ parser = argparse .ArgumentParser (description = 'Generate template.hpp from mros2 app code file.' )
19
+ parser .add_argument ('--outdir' , default = '.' ,
20
+ help = 'directry name to output template.hpp (default: \' .\' (current dir))' )
21
+ parser .add_argument ('--file' , nargs = '*' , type = str , default = ['app.cpp' ],
22
+ help = 'filename(s) of mros2 app code (default: \' app.cpp\' )' )
23
+
24
+ args = parser .parse_args ()
25
+ outdir = args .outdir
26
+ file = args .file
27
+
28
+ for f in file :
29
+ print (' Analyzing \' {}\' to generate...' .format (f ))
30
+ with open (f , 'r' ) as m_f :
19
31
arr = m_f .readlines ()
20
32
for m_line in arr :
21
33
if "create_publisher" in m_line :
@@ -41,8 +53,10 @@ def main():
41
53
env = Environment (loader = FileSystemLoader (path .dirname (__file__ )))
42
54
template = env .get_template ('templates.tpl' )
43
55
datatext = template .render ({ "includeFiles" :includeFiles , "pubMsgTypes" :pubMsgTypes , "subMsgTypes" :subMsgTypes })
44
- with open (os .path .join (app + "/templates.hpp" ), "wb" ) as f :
56
+ with open (os .path .join (outdir + "/templates.hpp" ), "wb" ) as f :
45
57
f .write (datatext .encode ('utf-8' ))
46
58
59
+ print ('Generate {}/template.hpp done.' .format (outdir ))
60
+
47
61
if __name__ == "__main__" :
48
62
main ()
0 commit comments