diff --git a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JMain/CS2JMain.cs b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JMain/CS2JMain.cs
index 23f7728..c0b771f 100644
--- a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JMain/CS2JMain.cs
+++ b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JMain/CS2JMain.cs
@@ -132,6 +132,7 @@ namespace Twiglet.CS2J.Translator
.Add ("translator-timestamp-files=", v => cfg.TranslatorAddTimeStamp = Boolean.Parse(v))
.Add ("translator-blanket-throw=", v => cfg.TranslatorBlanketThrow = Boolean.Parse(v))
.Add ("translator-exception-is-throwable=", v => cfg.TranslatorExceptionIsThrowable = Boolean.Parse(v))
+ .Add ("translator-make-javadoc-comments=", v => cfg.TranslatorMakeJavadocComments = Boolean.Parse(v))
.Add ("experimental-enums-numericconsts", v => cfg.EnumsAsNumericConsts = true)
.Add ("experimental-unsigned-translatesigned", v => cfg.UnsignedNumbersToSigned = true)
.Add ("experimental-transforms=", v => cfg.ExperimentalTransforms = Boolean.Parse(v))
diff --git a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JMain/CS2JSettings.cs b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JMain/CS2JSettings.cs
index 94e56a0..ca81633 100644
--- a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JMain/CS2JSettings.cs
+++ b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JMain/CS2JSettings.cs
@@ -61,6 +61,11 @@ namespace Twiglet.CS2J.Translator
get; set;
}
+ public bool TranslatorMakeJavadocComments
+ {
+ get; set;
+ }
+
public bool EnumsAsNumericConsts
{
get; set;
@@ -114,6 +119,7 @@ namespace Twiglet.CS2J.Translator
TranslatorAddTimeStamp = true;
TranslatorExceptionIsThrowable = false;
TranslatorBlanketThrow = true;
+ TranslatorMakeJavadocComments = true;
EnumsAsNumericConsts = false;
UnsignedNumbersToSigned = false;
diff --git a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/CommonWalker.cs b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/CommonWalker.cs
index a2f2cf6..e549f66 100644
--- a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/CommonWalker.cs
+++ b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/CommonWalker.cs
@@ -3,6 +3,9 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
+using System.Xml;
+using System.Xml.Xsl;
+using System.IO;
using Antlr.Runtime.Tree;
using Antlr.Runtime;
@@ -229,6 +232,94 @@ namespace Twiglet.CS2J.Translator.Transform
}
}
+ protected const string javaDocXslt = @"
+
+
+
+
+
+
+
+
+
+
+ {@code }
+
+
+
+ {@code }
+
+
+
+ <b></b>
+
+
+
+ {@link #}
+
+
+
+ {@code }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ @param
+
+
+
+ @throws
+
+
+
+ @return
+
+
+
+ @see
+
+
+
+";
+
+ private XslCompiledTransform _jdXslTrans = null;
+ protected XslCompiledTransform JdXslTrans
+ {
+ get
+ {
+ if (_jdXslTrans == null)
+ {
+ _jdXslTrans = new XslCompiledTransform();
+
+ // Encode the XML string in a UTF-8 byte array
+ byte[] encodedXsltString = Encoding.UTF8.GetBytes(javaDocXslt);
+
+ // Put the byte array into a stream and rewind it to the beginning
+ MemoryStream msXslt = new MemoryStream(encodedXsltString);
+ msXslt.Flush();
+ msXslt.Position = 0;
+ _jdXslTrans.Load(XmlReader.Create(msXslt));
+ }
+ return _jdXslTrans;
+ }
+ }
+
}
// Wraps a compilation unit with its imports search path
diff --git a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/JavaPrettyPrint.g b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/JavaPrettyPrint.g
index fbfaf61..b38f80c 100644
--- a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/JavaPrettyPrint.g
+++ b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/JavaPrettyPrint.g
@@ -22,6 +22,9 @@ scope TypeContext {
@header
{
using System;
+ using System.IO;
+ using System.Xml;
+ using System.Xml.Xsl;
using System.Collections;
using System.Text;
using System.Text.RegularExpressions;
@@ -35,16 +38,80 @@ scope TypeContext {
// If top level is partial then this will contain the components so that we can mere with other parts down the line
public ClassDescriptorSerialized PartialDescriptor { get; set; }
- private List collectedComments = null;
+ protected string convertToJavaDoc(string docComment) {
+ string ret = null;
+ try {
+ StringBuilder javaDocStr = new StringBuilder();
+
+ string xml = "\n" + docComment + "\n";
+
+ // Encode the XML string in a UTF-8 byte array
+ byte[] encodedString = Encoding.UTF8.GetBytes(xml);
+
+ // Put the byte array into a stream and rewind it to the beginning
+ MemoryStream ms = new MemoryStream(encodedString);
+ ms.Flush();
+ ms.Position = 0;
+
+ // Build the XmlDocument from the MemorySteam of UTF-8 encoded bytes
+ XmlDocument xmlDoc = new XmlDocument();
+ xmlDoc.Load(ms);
+
+ JdXslTrans.Transform(xmlDoc,null,new StringWriter(javaDocStr));
+ ret = javaDocStr.ToString().Trim().Replace("\n", "\n* ");
+ ret = String.Format("/**\n* {0}\n*/", ret);
+ }
+ catch (Exception)
+ {
+ // skip, just return null
+ }
+ return ret;
+ }
+
+ private List collectedComments = null;
List CollectedComments {
get {
List rets = new List();
if (collectedComments != null) {
- foreach (string c in collectedComments) {
- rets.Add(processComment(c));
+ List savedComments = new List();
+ bool inDoc = false;
+ string xmlDoc = "";
+ foreach (string c in collectedComments) {
+ string line = processComment(c);
+ if (Cfg.TranslatorMakeJavadocComments && line.TrimStart().StartsWith("///")) {
+ inDoc = true;
+ savedComments.Add(line);
+ xmlDoc += line.TrimStart().Substring(3).TrimStart() + "\n";
+ }
+ else
+ {
+ if (inDoc) {
+ string javaDoc = convertToJavaDoc(xmlDoc);
+ if (javaDoc != null) {
+ rets.Add(javaDoc);
+ }
+ else {
+ rets.AddRange(savedComments);
+ }
+ savedComments = new List();
+ inDoc = false;
+ xmlDoc = "";
+ }
+ rets.Add(line);
+ }
}
+ if (inDoc) {
+ string javaDoc = convertToJavaDoc(xmlDoc);
+ if (javaDoc != null) {
+ rets.Add(javaDoc);
+ }
+ else {
+ rets.AddRange(savedComments);
+ }
+ }
}
+
collectedComments = null;
return rets;