Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ISC Open Source Projects
Kea
Commits
7c4d8ab9
Commit
7c4d8ab9
authored
Jun 02, 2011
by
Michal 'vorner' Vaner
Browse files
[trac755] Output the python file
parent
684a395b
Changes
1
Hide whitespace changes
Inline
Side-by-side
src/lib/log/compiler/message.cc
View file @
7c4d8ab9
...
...
@@ -35,6 +35,8 @@
#include
<log/logger.h>
#include
<boost/foreach.hpp>
using
namespace
std
;
using
namespace
isc
::
log
;
using
namespace
isc
::
util
;
...
...
@@ -78,10 +80,11 @@ version() {
void
usage
()
{
cout
<<
"Usage: message [-h] [-v] <message-file>
\n
"
<<
"Usage: message [-h] [-v]
[-p]
<message-file>
\n
"
<<
"
\n
"
<<
"-h Print this message and exit
\n
"
<<
"-v Print the program version and exit
\n
"
<<
"-p Output python source instead of C++ ones
\n
"
<<
"
\n
"
<<
"<message-file> is the name of the input message file.
\n
"
;
}
...
...
@@ -237,6 +240,44 @@ writeClosingNamespace(ostream& output, const vector<string>& ns) {
}
}
/// \breif Write python file
///
/// Writes the python file containing the symbol definitions as module level
/// constants. These are objects which register themself at creation time,
/// so they can be replaced by dictionary later.
///
/// \param file Name of the message file. The source code is written to a file
/// file of the same name but with a .py suffix.
/// \param dictionary The dictionary holding the message definitions.
///
/// \note We don't use the namespace as in C++. We don't need it, because
/// python file/module works as implicit namespace as well.
void
writePythonFile
(
const
string
&
file
,
MessageDictionary
&
dictionary
)
{
Filename
message_file
(
file
);
Filename
python_file
(
Filename
(
message_file
.
name
()).
useAsDefault
(
".py"
));
// Open the file for writing
ofstream
pyfile
(
python_file
.
fullName
().
c_str
());
// Write the comment and imports
pyfile
<<
"# File created from "
<<
message_file
.
fullName
()
<<
" on "
<<
currentTime
()
<<
"
\n
"
<<
"
\n
"
<<
"import isc.log.message
\n
"
<<
"
\n
"
;
vector
<
string
>
idents
(
sortedIdentifiers
(
dictionary
));
BOOST_FOREACH
(
const
string
&
ident
,
idents
)
{
pyfile
<<
ident
<<
" = isc.log.message.Message(
\"
"
<<
ident
<<
"
\"
,
\"
"
<<
quoteString
(
dictionary
.
getText
(
ident
))
<<
"
\"
)
\n
"
;
}
pyfile
.
close
();
}
/// \brief Write Header File
///
...
...
@@ -455,13 +496,19 @@ warnDuplicates(MessageReader& reader) {
int
main
(
int
argc
,
char
*
argv
[])
{
const
char
*
soptions
=
"hv"
;
// Short options
const
char
*
soptions
=
"hv
p
"
;
// Short options
optind
=
1
;
// Ensure we start a new scan
int
opt
;
// Value of the option
bool
doPython
=
false
;
while
((
opt
=
getopt
(
argc
,
argv
,
soptions
))
!=
-
1
)
{
switch
(
opt
)
{
case
'p'
:
doPython
=
true
;
break
;
case
'h'
:
usage
();
return
0
;
...
...
@@ -497,15 +544,27 @@ main(int argc, char* argv[]) {
MessageReader
reader
(
&
dictionary
);
reader
.
readFile
(
message_file
);
// Get the namespace into which the message definitions will be put and
// split it into components.
vector
<
string
>
ns_components
=
splitNamespace
(
reader
.
getNamespace
());
// Write the header file.
writeHeaderFile
(
message_file
,
ns_components
,
dictionary
);
// Write the file that defines the message symbols and text
writeProgramFile
(
message_file
,
ns_components
,
dictionary
);
if
(
doPython
)
{
// Warn in case of ignored directives
if
(
!
reader
.
getNamespace
().
empty
())
{
cerr
<<
"Python mode, ignoring the $NAMESPACE directive"
<<
endl
;
}
// Write the whole python file
writePythonFile
(
message_file
,
dictionary
);
}
else
{
// Get the namespace into which the message definitions will be put and
// split it into components.
vector
<
string
>
ns_components
=
splitNamespace
(
reader
.
getNamespace
());
// Write the header file.
writeHeaderFile
(
message_file
,
ns_components
,
dictionary
);
// Write the file that defines the message symbols and text
writeProgramFile
(
message_file
,
ns_components
,
dictionary
);
}
// Finally, warn of any duplicates encountered.
warnDuplicates
(
reader
);
...
...
Write
Preview
Supports
Markdown
0%
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!
Cancel
Please
register
or
sign in
to comment