in graveyard/tools/org/apache/axis/tools/cbindings/CBindingGenerator.java [131:238]
private void generateHeader(InputCppSourceCode inputFile, BufferedWriter outputFile) throws Exception
{
boolean foundCopyright = false;
String define = inputFile.getName();
define = define.toUpperCase();
define = define.substring(0, define.indexOf("."));
define += "_INCLUDED";
String syncComment =
"/* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */\n" +
"/* NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE */\n" +
"/* ---------------------------------------------------------------- */\n" +
"/* THIS HEADER FILE PATTERNED AFTER CORRESPONDING hpp HEADER FILE. */\n" +
"/* CHANGES TO hpp HEADER FILE MAY NEED TO BE PROPAGATED HERE AND IN */\n" +
"/* THE IMPLEMEMTATION OF THE C APIS. */\n" +
"/* */\n" +
"/* THIS FILE GENERATED BY CBINDINGGENERATOR TOOL. */\n" +
"/* ---------------------------------------------------------------- */\n" +
"/* NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE */\n" +
"/* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */\n";
String cplusplusStart = "#ifdef __cplusplus\n extern \"C\" {\n#endif\n";
String cplusplusEnd = "#ifdef __cplusplus\n }\n#endif\n";
int prevPart = FilePart.COMMENT; // Suppresse newline before copyright
String text;
Iterator it = inputFile.getPartIterator();
while (it.hasNext())
{
FilePart fp = (FilePart) (it.next());
if (!foundCopyright
&& (FilePart.DIRECTIVE == fp.getType()
|| FilePart.ENUM == fp.getType()
|| FilePart.PROTOTYPE == fp.getType()))
{
outputFile.write("#ifndef " + define);
outputFile.newLine();
outputFile.write("#define " + define);
outputFile.newLine();
outputFile.newLine();
outputFile.write(syncComment);
outputFile.newLine();
outputFile.write(cplusplusStart);
outputFile.newLine();
foundCopyright = true;
}
switch (fp.getType())
{
case FilePart.COMMENT :
if (FilePart.COMMENT != prevPart)
outputFile.newLine();
prevPart = fp.getType();
text = fp.toString().trim();
StringTokenizer tkzr = new StringTokenizer(text, "\n\r");
while (tkzr.hasMoreTokens())
{
String line = tkzr.nextToken().trim();
if (-1 == line.indexOf("@author"))
{
if (line.startsWith("*"))
outputFile.write(" ");
outputFile.write(line);
outputFile.newLine();
}
}
break;
case FilePart.DIRECTIVE :
if (FilePart.DIRECTIVE != prevPart)
outputFile.newLine();
prevPart = fp.getType();
generateDirective(fp, outputFile, inputFile.getName());
break;
case FilePart.TYPEDEF :
prevPart = fp.getType();
generateTypedef(fp, outputFile);
break;
case FilePart.METHOD :
case FilePart.PROTOTYPE :
if (FilePart.COMMENT != prevPart
&& FilePart.METHOD != prevPart
&& FilePart.PROTOTYPE != prevPart)
outputFile.newLine();
prevPart = fp.getType();
generateFunctionPrototype(fp, outputFile);
break;
case FilePart.ENUM :
Utils.rude(
"Enums should be wrappered with a typedef so "
+ "they appear the same in C and C++",
inputFile.getName(), 0, fp.toString());
break;
// do nothing for other file parts
}
}
outputFile.newLine();
outputFile.write(cplusplusEnd);
outputFile.newLine();
outputFile.write("#endif /* " + define + " */");
outputFile.newLine();
}