@@ -310,26 +310,51 @@ public static void SaveSubtitle(
310310 return ;
311311 }
312312
313- // Plain text output — strip HTML, one paragraph per group separated by blank lines
313+ // Plain text output — strip HTML; optional merge/unbreak and blank-line control
314314 if ( formatName . Replace ( " " , "" ) . Equals ( "PlainText" , StringComparison . OrdinalIgnoreCase ) )
315315 {
316316 var outputDirPlain = Path . GetDirectoryName ( filePath ) ;
317317 if ( ! string . IsNullOrEmpty ( outputDirPlain ) && ! Directory . Exists ( outputDirPlain ) )
318318 {
319319 Directory . CreateDirectory ( outputDirPlain ) ;
320320 }
321+
322+ var plainEncoding = string . IsNullOrWhiteSpace ( encodingName )
323+ ? new UTF8Encoding ( true )
324+ : GetEncoding ( encodingName ) ;
325+
326+ // Merge: collapse every paragraph into a single space-separated block.
327+ if ( options ? . PlainTextMerge == true )
328+ {
329+ var parts = new List < string > ( ) ;
330+ foreach ( var p in subtitle . Paragraphs )
331+ {
332+ var text = HtmlUtil . RemoveHtmlTags ( p . Text , true ) . Replace ( Environment . NewLine , " " ) . Trim ( ) ;
333+ if ( ! string . IsNullOrEmpty ( text ) )
334+ {
335+ parts . Add ( text ) ;
336+ }
337+ }
338+ File . WriteAllText ( filePath , string . Join ( " " , parts ) , plainEncoding ) ;
339+ return ;
340+ }
341+
342+ var unbreak = options ? . PlainTextUnbreak == true ;
343+ var blankLineBetween = options ? . PlainTextLineBetweenSubtitles ?? true ;
321344 var sb = new StringBuilder ( ) ;
322345 foreach ( var p in subtitle . Paragraphs )
323346 {
324- if ( sb . Length > 0 )
347+ var text = HtmlUtil . RemoveHtmlTags ( p . Text , true ) ;
348+ if ( unbreak )
349+ {
350+ text = Utilities . UnbreakLine ( text . Replace ( Environment . NewLine , " " ) ) ;
351+ }
352+ if ( sb . Length > 0 && blankLineBetween )
325353 {
326354 sb . AppendLine ( ) ;
327355 }
328- sb . AppendLine ( HtmlUtil . RemoveHtmlTags ( p . Text , true ) ) ;
356+ sb . AppendLine ( text ) ;
329357 }
330- var plainEncoding = string . IsNullOrWhiteSpace ( encodingName )
331- ? new UTF8Encoding ( true )
332- : GetEncoding ( encodingName ) ;
333358 File . WriteAllText ( filePath , sb . ToString ( ) , plainEncoding ) ;
334359 return ;
335360 }
0 commit comments