Skip to content

Commit b4a7957

Browse files
committed
Fix to read all <command:inputType> and <command:returnValue>
1 parent 2c026a0 commit b4a7957

File tree

1 file changed

+48
-32
lines changed

1 file changed

+48
-32
lines changed

src/Transform/TransformMaml.cs

Lines changed: 48 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,48 @@ private string ReadNotes(XmlReader reader)
288288
}
289289
}
290290

291+
/// <summary>
292+
/// Reads nodes in &lt;command:inputType&gt; or &lt;command:returnValue&gt;
293+
/// and returns <see cref="InputOutput"/> object if possible.
294+
/// </summary>
295+
/// <param name="subTreeReader">Sub tree instance of <see cref="XmlReader"/>.</param>
296+
private static InputOutput? ReadInputOutput(XmlReader subTreeReader)
297+
{
298+
string? typeName = null;
299+
StringBuilder typeDescription = Constants.StringBuilderPool.Get();
300+
301+
try
302+
{
303+
while (subTreeReader.Read())
304+
{
305+
switch (subTreeReader.Name)
306+
{
307+
// Supports both `<maml:name>` and `<dev:name>`.
308+
// `<dev:name>` is wrong namespace, but used in PlatyPS v1.0.1
309+
case Constants.MamlNameTag:
310+
case "dev:name":
311+
typeName = subTreeReader.ReadElementContentAsString();
312+
continue;
313+
case Constants.MamlParaTag:
314+
typeDescription.AppendLine(subTreeReader.ReadElementContentAsString().Trim())
315+
.AppendLine();
316+
continue;
317+
}
318+
}
319+
320+
if (typeName is not null)
321+
{
322+
return new InputOutput(typeName, typeDescription.ToString().Trim());
323+
}
324+
325+
return null;
326+
}
327+
finally
328+
{
329+
Constants.StringBuilderPool.Return(typeDescription);
330+
}
331+
}
332+
291333
private List<InputOutput> ReadInput(XmlReader reader)
292334
{
293335
List<InputOutput> inputItem = new();
@@ -298,24 +340,11 @@ private List<InputOutput> ReadInput(XmlReader reader)
298340
{
299341
do
300342
{
301-
string? typeName = null;
302-
string? typeDescription = null;
303-
304-
if (reader.ReadToFollowing(Constants.MamlNameTag))
305-
{
306-
typeName = reader.ReadElementContentAsString();
307-
}
308-
309-
if (reader.ReadToFollowing(Constants.MamlParaTag))
343+
var input = ReadInputOutput(reader.ReadSubtree());
344+
if (input is not null)
310345
{
311-
typeDescription = reader.ReadElementContentAsString();
346+
inputItem.Add(input);
312347
}
313-
314-
if (typeName is not null && typeDescription is not null)
315-
{
316-
inputItem.Add(new InputOutput(typeName, typeDescription));
317-
}
318-
319348
} while (reader.ReadToNextSibling(Constants.MamlCommandInputTypeTag));
320349
}
321350
}
@@ -333,24 +362,11 @@ private List<InputOutput> ReadOutput(XmlReader reader)
333362
{
334363
do
335364
{
336-
string? typeName = null;
337-
string? typeDescription = null;
338-
339-
if (reader.ReadToFollowing(Constants.MamlNameTag))
340-
{
341-
typeName = reader.ReadElementContentAsString();
342-
}
343-
344-
if (reader.ReadToFollowing(Constants.MamlParaTag))
365+
var output = ReadInputOutput(reader.ReadSubtree());
366+
if (output is not null)
345367
{
346-
typeDescription = reader.ReadElementContentAsString();
368+
outputItem.Add(output);
347369
}
348-
349-
if (typeName is not null && typeDescription is not null)
350-
{
351-
outputItem.Add(new InputOutput(typeName, typeDescription));
352-
}
353-
354370
} while (reader.ReadToNextSibling(Constants.MamlCommandReturnValueTag));
355371
}
356372
}

0 commit comments

Comments
 (0)