Skip to content

Commit 07c95e9

Browse files
authored
[Java.Interop.Tools.JavaSource] Parse <code/> tags (#1044)
Fixes: #1041 Translates Javadoc `<code/>` tags into C# `<c/>` tags, which should clean up thousands of illegible `&lt;code&gt;foo&lt;/code&gt;` occurrences.
1 parent a0728ed commit 07c95e9

File tree

3 files changed

+22
-3
lines changed

3 files changed

+22
-3
lines changed

src/Java.Interop.Tools.JavaSource/Java.Interop.Tools.JavaSource/SourceJavadocToXmldocGrammar.HtmlBnfTerms.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ internal void CreateRules (SourceJavadocToXmldocGrammar grammar)
3535
| FormCtrlDeclaration
3636
*/
3737
| InlineHyperLinkDeclaration
38+
| CodeElementDeclaration
3839
| grammar.InlineTagsTerms.AllInlineTerms
3940
| UnknownHtmlElementStart
4041
,
@@ -136,6 +137,12 @@ internal void CreateRules (SourceJavadocToXmldocGrammar grammar)
136137
var aElementValue = new XText (parseNode.ChildNodes [1].AstNode.ToString ());
137138
parseNode.AstNode = aElementValue;
138139
};
140+
141+
CodeElementDeclaration.Rule = CreateStartElement ("code", grammar) + InlineDeclarations + CreateEndElement ("code", grammar);
142+
CodeElementDeclaration.AstConfig.NodeCreator = (context, parseNode) => {
143+
var target = parseNode.ChildNodes [1].AstNode;
144+
parseNode.AstNode = new XElement ("c", target);
145+
};
139146
}
140147

141148
static IEnumerable<XElement> GetParagraphs (ParseTreeNodeList children)
@@ -205,6 +212,7 @@ static IEnumerable<XElement> GetParagraphs (ParseTreeNodeList children)
205212
public readonly NonTerminal PreBlockDeclaration = new NonTerminal (nameof (PreBlockDeclaration), ConcatChildNodes);
206213
public readonly NonTerminal InlineHyperLinkDeclaration = new NonTerminal (nameof (InlineHyperLinkDeclaration), ConcatChildNodes);
207214
public readonly NonTerminal IgnorableElementDeclaration = new NonTerminal (nameof (IgnorableElementDeclaration), ConcatChildNodes);
215+
public readonly NonTerminal CodeElementDeclaration = new NonTerminal (nameof (CodeElementDeclaration), ConcatChildNodes);
208216

209217
public readonly Terminal InlineHyperLinkOpenTerm = new RegexBasedTerminal ("<a href=", @"(?i)<a\s*href\s*=") {
210218
AstConfig = new AstNodeConfig {

tests/Java.Interop.Tools.JavaSource-Tests/SourceJavadocToXmldocGrammar.HtmlBnfTermsTests.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,5 +67,16 @@ public void HyperLinkDeclaration ()
6767
Assert.AreEqual ("\"AutofillService.html#FieldClassification\"&gt;field classification",
6868
r.Root.AstNode.ToString ());
6969
}
70+
71+
[Test]
72+
public void CodeElementDeclaration ()
73+
{
74+
var p = CreateParser (g => g.HtmlTerms.CodeElementDeclaration);
75+
76+
var r = p.Parse ("<code>input.position()</code>");
77+
Assert.IsFalse (r.HasErrors (), DumpMessages (r, p));
78+
Assert.AreEqual ("<c>input.position()</c>", r.Root.AstNode.ToString ());
79+
}
80+
7081
}
7182
}

tests/Java.Interop.Tools.JavaSource-Tests/SourceJavadocToXmldocParserTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -146,14 +146,14 @@ more description here.</para>
146146
new ParseResult {
147147
Javadoc = "Something {@link #method}: description, \"<code>declaration</code>\" or \"<code>another declaration</code>\".\n\n@apiSince 1\n",
148148
FullXml = @"<member>
149-
<summary>Something <c>#method</c>: description, ""&lt;code&gt;declaration&lt;/code&gt;"" or ""&lt;code&gt;another declaration&lt;/code&gt;"".</summary>
149+
<summary>Something <c>#method</c>: description, ""<c>declaration</c>"" or ""<c>another declaration</c>"".</summary>
150150
<remarks>
151-
<para>Something <c>#method</c>: description, ""&lt;code&gt;declaration&lt;/code&gt;"" or ""&lt;code&gt;another declaration&lt;/code&gt;"".</para>
151+
<para>Something <c>#method</c>: description, ""<c>declaration</c>"" or ""<c>another declaration</c>"".</para>
152152
<para>Added in API level 1.</para>
153153
</remarks>
154154
</member>",
155155
IntelliSenseXml = @"<member>
156-
<summary>Something <c>#method</c>: description, ""&lt;code&gt;declaration&lt;/code&gt;"" or ""&lt;code&gt;another declaration&lt;/code&gt;"".</summary>
156+
<summary>Something <c>#method</c>: description, ""<c>declaration</c>"" or ""<c>another declaration</c>"".</summary>
157157
</member>",
158158
},
159159
new ParseResult {

0 commit comments

Comments
 (0)