55using System . Linq ;
66using System . Net ;
77using System . Text ;
8- using System . Text . RegularExpressions ;
9- using System . Threading . Tasks ;
8+ using MwParserFromScratch . Rendering ;
109
1110namespace MwParserFromScratch . Nodes ;
1211
@@ -46,13 +45,11 @@ public override string ToString()
4645 return Content ;
4746 }
4847
49- /// <param name="builder"></param>
50- /// <param name="formatter"></param>
5148 /// <inheritdoc />
52- internal override void ToPlainTextCore ( StringBuilder builder , NodePlainTextFormatter formatter )
49+ internal override void RenderAsPlainText ( PlainTextNodeRenderer renderer )
5350 {
5451 // Unescape HTML entities.
55- builder . Append ( WebUtility . HtmlDecode ( Content ) ) ;
52+ renderer . OutputBuilder . Append ( WebUtility . HtmlDecode ( Content ) ) ;
5653 }
5754}
5855
@@ -97,29 +94,28 @@ protected override Node CloneCore()
9794 /// <inheritdoc />
9895 public override string ToString ( ) => Text == null ? $ "[[{ Target } ]]" : $ "[[{ Target } |{ Text } ]]";
9996
100- /// <param name="builder"></param>
101- /// <param name="formatter"></param>
10297 /// <inheritdoc />
103- internal override void ToPlainTextCore ( StringBuilder builder , NodePlainTextFormatter formatter )
98+ internal override void RenderAsPlainText ( PlainTextNodeRenderer renderer )
10499 {
105100 // Target == null when parsing `[[]]` with AllowEmptyWikiLinkTarget enabled.
106101 if ( Text == null )
107102 {
108103 if ( Target != null )
109104 {
110- formatter ( Target , builder ) ;
105+ renderer . RenderNode ( Target ) ;
111106 }
112107 return ;
113108 }
114109 if ( Text . Inlines . Count > 0 )
115110 {
116- formatter ( Text , builder ) ;
111+ renderer . RenderNode ( Text ) ;
117112 return ;
118113 }
119114 // Pipe trick. E.g.
120115 // [[abc (disambiguation)|]] --> [[abc (disambiguation)|abc]]
116+ var builder = renderer . OutputBuilder ;
121117 var pos1 = builder . Length ;
122- formatter ( Target , builder ) ;
118+ renderer . RenderNode ( Target ) ;
123119 if ( builder . Length - pos1 >= 3 && builder [ builder . Length - 1 ] == ')' )
124120 {
125121 for ( var pos2 = pos1 + 1 ; pos2 < builder . Length - 1 ; pos2 ++ )
@@ -201,15 +197,15 @@ public override string ToString()
201197 }
202198
203199 /// <inheritdoc />
204- internal override void ToPlainTextCore ( StringBuilder builder , NodePlainTextFormatter formatter )
200+ internal override void RenderAsPlainText ( PlainTextNodeRenderer renderer )
205201 {
206202 var alt = Arguments . Alt ;
207- if ( alt != null ) formatter ( alt , builder ) ;
203+ if ( alt != null ) renderer . RenderNode ( alt ) ;
208204 var caption = Arguments . Caption ;
209205 // delimit alt text and caption with a space.
210206 if ( alt != null && caption != null )
211- builder . Append ( ' ' ) ;
212- if ( caption != null ) formatter ( caption , builder ) ;
207+ renderer . OutputBuilder . Append ( ' ' ) ;
208+ if ( caption != null ) renderer . RenderNode ( caption ) ;
213209 }
214210}
215211
@@ -276,9 +272,7 @@ public override string ToString()
276272 /// <summary>
277273 /// Infrastructure. This function will always throw a <seealso cref="NotSupportedException"/>.
278274 /// </summary>
279- /// <param name="builder"></param>
280- /// <param name="formatter"></param>
281- internal override void ToPlainTextCore ( StringBuilder builder , NodePlainTextFormatter formatter )
275+ internal override void RenderAsPlainText ( PlainTextNodeRenderer renderer )
282276 {
283277 throw new NotSupportedException ( ) ;
284278 }
@@ -340,21 +334,20 @@ public override string ToString()
340334 return s ;
341335 }
342336
343- /// <param name="builder"></param>
344- /// <param name="formatter"></param>
345337 /// <inheritdoc />
346- internal override void ToPlainTextCore ( StringBuilder builder , NodePlainTextFormatter formatter )
338+ internal override void RenderAsPlainText ( PlainTextNodeRenderer renderer )
347339 {
348340 if ( ! Brackets )
349341 {
350- formatter ( Target , builder ) ;
342+ renderer . RenderNode ( Target ) ;
351343 }
352344 else
353345 {
346+ var builder = renderer . OutputBuilder ;
354347 if ( Text != null )
355348 {
356349 var pos1 = builder . Length ;
357- formatter ( Text , builder ) ;
350+ renderer . RenderNode ( Text ) ;
358351 for ( var i = pos1 ; i < builder . Length ; i ++ )
359352 if ( ! char . IsWhiteSpace ( builder [ i ] ) )
360353 return ;
@@ -550,12 +543,11 @@ public override string ToString()
550543 return Name + "=" + Value ;
551544 }
552545
546+ /// <inheritdoc />
553547 /// <summary>
554548 /// Infrastructure. This function will always throw a <seealso cref="NotSupportedException"/>.
555549 /// </summary>
556- /// <param name="builder"></param>
557- /// <param name="formatter"></param>
558- internal override void ToPlainTextCore ( StringBuilder builder , NodePlainTextFormatter formatter )
550+ internal override void RenderAsPlainText ( PlainTextNodeRenderer renderer )
559551 {
560552 throw new NotSupportedException ( ) ;
561553 }
@@ -824,10 +816,10 @@ public override TagStyle TagStyle
824816 } ;
825817
826818 /// <inheritdoc />
827- internal override void ToPlainTextCore ( StringBuilder builder , NodePlainTextFormatter formatter )
819+ internal override void RenderAsPlainText ( PlainTextNodeRenderer renderer )
828820 {
829821 if ( Name != null && plainTextInvisibleTags . Contains ( Name ) ) return ;
830- builder . Append ( Content ) ;
822+ renderer . OutputBuilder . Append ( Content ) ;
831823 }
832824}
833825
@@ -902,7 +894,7 @@ public override TagStyle TagStyle
902894 protected override void BuildContentString ( StringBuilder builder ) => builder . Append ( Content ) ;
903895
904896 /// <inheritdoc />
905- internal override void ToPlainTextCore ( StringBuilder builder , NodePlainTextFormatter formatter )
897+ internal override void RenderAsPlainText ( PlainTextNodeRenderer renderer )
906898 {
907899 if ( string . Equals ( Name , "br" , StringComparison . OrdinalIgnoreCase )
908900 || string . Equals ( Name , "hr" , StringComparison . OrdinalIgnoreCase ) )
@@ -913,11 +905,11 @@ internal override void ToPlainTextCore(StringBuilder builder, NodePlainTextForma
913905 // <br></br> will be rendered as <br /><br />.
914906 // In practice, however, <br>abc</br> won't be parsed correctly, as <br> itself as self-closing.
915907 // See WikitextParserOptions.DefaultSelfClosingOnlyTags
916- builder . Append ( '\n ' ) ;
908+ renderer . OutputBuilder . Append ( '\n ' ) ;
917909 if ( Content != null )
918910 {
919- formatter ( Content , builder ) ;
920- builder . Append ( '\n ' ) ;
911+ renderer . RenderNode ( Content ) ;
912+ renderer . OutputBuilder . Append ( '\n ' ) ;
921913 }
922914 return ;
923915 }
@@ -927,7 +919,7 @@ internal override void ToPlainTextCore(StringBuilder builder, NodePlainTextForma
927919 // could be otherwise overridden into block-style.
928920 // We leave such triaging responsibility to the library consumer (`formatter` arg).
929921
930- if ( Content != null ) formatter ( Content , builder ) ;
922+ if ( Content != null ) renderer . RenderNode ( Content ) ;
931923 }
932924
933925}
@@ -1068,10 +1060,8 @@ public override string ToString()
10681060 + WhitespaceAfterEqualSign + quote + Value + quote ;
10691061 }
10701062
1071- /// <param name="builder"></param>
1072- /// <param name="formatter"></param>
10731063 /// <inheritdoc />
1074- internal override void ToPlainTextCore ( StringBuilder builder , NodePlainTextFormatter formatter )
1064+ internal override void RenderAsPlainText ( PlainTextNodeRenderer renderer )
10751065 {
10761066 throw new NotSupportedException ( ) ;
10771067 }
0 commit comments