|
|
|
@ -11,7 +11,7 @@ namespace CppSharp.Generators.CSharp
@@ -11,7 +11,7 @@ namespace CppSharp.Generators.CSharp
|
|
|
|
|
{ |
|
|
|
|
public static void Print(this ITextGenerator textGenerator, Comment comment, CommentKind kind) |
|
|
|
|
{ |
|
|
|
|
var sections = new List<Section> { new Section(CommentElement.Summary) }; |
|
|
|
|
var sections = new List<Section>(); |
|
|
|
|
GetCommentSections(comment, sections); |
|
|
|
|
foreach (var section in sections) |
|
|
|
|
TrimSection(section); |
|
|
|
@ -23,14 +23,17 @@ namespace CppSharp.Generators.CSharp
@@ -23,14 +23,17 @@ namespace CppSharp.Generators.CSharp
|
|
|
|
|
switch (comment.Kind) |
|
|
|
|
{ |
|
|
|
|
case DocumentationCommentKind.FullComment: |
|
|
|
|
var fullComment = (FullComment)comment; |
|
|
|
|
foreach (var block in fullComment.Blocks) |
|
|
|
|
{ |
|
|
|
|
foreach (var block in ((FullComment)comment).Blocks) |
|
|
|
|
block.GetCommentSections(sections); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
case DocumentationCommentKind.BlockCommandComment: |
|
|
|
|
{ |
|
|
|
|
var blockCommandComment = (BlockCommandComment)comment; |
|
|
|
|
if (blockCommandComment.ParagraphComment == null) |
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
switch (blockCommandComment.CommandKind) |
|
|
|
|
{ |
|
|
|
|
case CommentCommandKind.Brief: |
|
|
|
@ -49,6 +52,7 @@ namespace CppSharp.Generators.CSharp
@@ -49,6 +52,7 @@ namespace CppSharp.Generators.CSharp
|
|
|
|
|
if (inlineContentComment.HasTrailingNewline) |
|
|
|
|
lastBlockSection.NewLine(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
sections.Add(new Section(CommentElement.Remarks)); |
|
|
|
@ -56,31 +60,30 @@ namespace CppSharp.Generators.CSharp
@@ -56,31 +60,30 @@ namespace CppSharp.Generators.CSharp
|
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
case DocumentationCommentKind.ParamCommandComment: |
|
|
|
|
{ |
|
|
|
|
var paramCommandComment = (ParamCommandComment)comment; |
|
|
|
|
var param = new Section(CommentElement.Param); |
|
|
|
|
sections.Add(param); |
|
|
|
|
if (paramCommandComment.Arguments.Count > 0) |
|
|
|
|
param.Attributes.Add( |
|
|
|
|
string.Format("name=\"{0}\"", paramCommandComment.Arguments[0].Text)); |
|
|
|
|
param.Attributes.Add($"name=\"{paramCommandComment.Arguments[0].Text}\""); |
|
|
|
|
|
|
|
|
|
if (paramCommandComment.ParagraphComment != null) |
|
|
|
|
{ |
|
|
|
|
foreach (var inlineContentComment in paramCommandComment.ParagraphComment.Content) |
|
|
|
|
{ |
|
|
|
|
inlineContentComment.GetCommentSections(sections); |
|
|
|
|
if (inlineContentComment.HasTrailingNewline) |
|
|
|
|
sections.Last().NewLine(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!string.IsNullOrEmpty(sections.Last().CurrentLine.ToString())) |
|
|
|
|
sections.Add(new Section(CommentElement.Remarks)); |
|
|
|
|
break; |
|
|
|
|
case DocumentationCommentKind.TParamCommandComment: |
|
|
|
|
break; |
|
|
|
|
case DocumentationCommentKind.VerbatimBlockComment: |
|
|
|
|
break; |
|
|
|
|
case DocumentationCommentKind.VerbatimLineComment: |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
case DocumentationCommentKind.ParagraphComment: |
|
|
|
|
var summaryParagraph = sections.Count == 1; |
|
|
|
|
var paragraphComment = (ParagraphComment)comment; |
|
|
|
@ -101,22 +104,21 @@ namespace CppSharp.Generators.CSharp
@@ -101,22 +104,21 @@ namespace CppSharp.Generators.CSharp
|
|
|
|
|
sections.RemoveRange(1, sections.Count - 1); |
|
|
|
|
sections.Add(new Section(CommentElement.Remarks)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
break; |
|
|
|
|
case DocumentationCommentKind.HTMLTagComment: |
|
|
|
|
break; |
|
|
|
|
case DocumentationCommentKind.HTMLStartTagComment: |
|
|
|
|
break; |
|
|
|
|
case DocumentationCommentKind.HTMLEndTagComment: |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
case DocumentationCommentKind.TextComment: |
|
|
|
|
var lastTextsection = sections.Last(); |
|
|
|
|
lastTextsection.CurrentLine.Append(GetText(comment, |
|
|
|
|
lastTextsection.Type == CommentElement.Returns || |
|
|
|
|
lastTextsection.Type == CommentElement.Param).Trim()); |
|
|
|
|
break; |
|
|
|
|
case DocumentationCommentKind.InlineContentComment: |
|
|
|
|
{ |
|
|
|
|
var lastTextSection = sections.Last(); |
|
|
|
|
lastTextSection.CurrentLine |
|
|
|
|
.Append( |
|
|
|
|
GetText(comment, lastTextSection.Type is CommentElement.Returns or CommentElement.Param) |
|
|
|
|
.TrimStart() |
|
|
|
|
); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
case DocumentationCommentKind.InlineCommandComment: |
|
|
|
|
{ |
|
|
|
|
var lastInlineSection = sections.Last(); |
|
|
|
|
var inlineCommand = (InlineCommandComment)comment; |
|
|
|
|
|
|
|
|
@ -125,9 +127,27 @@ namespace CppSharp.Generators.CSharp
@@ -125,9 +127,27 @@ namespace CppSharp.Generators.CSharp
|
|
|
|
|
var argText = $" <c>{inlineCommand.Arguments[0].Text}</c> "; |
|
|
|
|
lastInlineSection.CurrentLine.Append(argText); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
case DocumentationCommentKind.HTMLStartTagComment: |
|
|
|
|
{ |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
case DocumentationCommentKind.HTMLEndTagComment: |
|
|
|
|
{ |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
case DocumentationCommentKind.HTMLTagComment: |
|
|
|
|
case DocumentationCommentKind.TParamCommandComment: |
|
|
|
|
case DocumentationCommentKind.VerbatimBlockComment: |
|
|
|
|
case DocumentationCommentKind.VerbatimLineComment: |
|
|
|
|
case DocumentationCommentKind.InlineContentComment: |
|
|
|
|
case DocumentationCommentKind.VerbatimBlockLineComment: |
|
|
|
|
case DocumentationCommentKind.BlockContentComment: |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
throw new ArgumentOutOfRangeException(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -139,10 +159,10 @@ namespace CppSharp.Generators.CSharp
@@ -139,10 +159,10 @@ namespace CppSharp.Generators.CSharp
|
|
|
|
|
text = text.Trim(); |
|
|
|
|
|
|
|
|
|
if (Helpers.RegexTag.IsMatch(text)) |
|
|
|
|
return String.Empty; |
|
|
|
|
return string.Empty; |
|
|
|
|
|
|
|
|
|
return HtmlEncoder.HtmlEncode( |
|
|
|
|
text.Length > 1 && text[0] == ' ' && text[1] != ' ' ? text.Substring(1) : text); |
|
|
|
|
text.Length > 1 && text[0] == ' ' && text[1] != ' ' ? text[1..] : text); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static void TrimSection(Section section) |
|
|
|
@ -166,22 +186,25 @@ namespace CppSharp.Generators.CSharp
@@ -166,22 +186,25 @@ namespace CppSharp.Generators.CSharp
|
|
|
|
|
|
|
|
|
|
private static void FormatComment(ITextGenerator textGenerator, List<Section> sections, CommentKind kind) |
|
|
|
|
{ |
|
|
|
|
var commentPrefix = Comment.GetMultiLineCommentPrologue(kind); |
|
|
|
|
|
|
|
|
|
sections.Sort((x, y) => x.Type.CompareTo(y.Type)); |
|
|
|
|
|
|
|
|
|
var remarks = sections.Where(s => s.Type == CommentElement.Remarks).ToList(); |
|
|
|
|
if (remarks.Any()) |
|
|
|
|
if (remarks.Count != 0) |
|
|
|
|
remarks.First().GetLines().AddRange(remarks.Skip(1).SelectMany(s => s.GetLines())); |
|
|
|
|
|
|
|
|
|
if (remarks.Count > 1) |
|
|
|
|
sections.RemoveRange(sections.IndexOf(remarks.First()) + 1, remarks.Count - 1); |
|
|
|
|
|
|
|
|
|
var commentPrefix = Comment.GetMultiLineCommentPrologue(kind); |
|
|
|
|
foreach (var section in sections.Where(s => s.HasLines)) |
|
|
|
|
{ |
|
|
|
|
var lines = section.GetLines(); |
|
|
|
|
var tag = section.Type.ToString().ToLowerInvariant(); |
|
|
|
|
|
|
|
|
|
var attributes = string.Empty; |
|
|
|
|
if (section.Attributes.Any()) |
|
|
|
|
if (section.Attributes.Count != 0) |
|
|
|
|
attributes = ' ' + string.Join(" ", section.Attributes); |
|
|
|
|
|
|
|
|
|
textGenerator.Write($"{commentPrefix} <{tag}{attributes}>"); |
|
|
|
|
if (lines.Count == 1) |
|
|
|
|
{ |
|
|
|
@ -205,13 +228,13 @@ namespace CppSharp.Generators.CSharp
@@ -205,13 +228,13 @@ namespace CppSharp.Generators.CSharp
|
|
|
|
|
Type = type; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public StringBuilder CurrentLine { get; set; } = new StringBuilder(); |
|
|
|
|
public StringBuilder CurrentLine { get; set; } = new(); |
|
|
|
|
|
|
|
|
|
public CommentElement Type { get; set; } |
|
|
|
|
|
|
|
|
|
public List<string> Attributes { get; } = new List<string>(); |
|
|
|
|
public List<string> Attributes { get; init; } = new(); |
|
|
|
|
|
|
|
|
|
private List<string> lines { get; } = new List<string>(); |
|
|
|
|
private List<string> lines { get; } = new(); |
|
|
|
|
|
|
|
|
|
public bool HasLines => lines.Any(); |
|
|
|
|
|
|
|
|
|