Advertisement
ivandrofly

Subtitlte Edit: RemoveLineBreaks (Undone)

Dec 12th, 2024 (edited)
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.47 KB | None | 0 0
  1. public static string RemoveLineBreaks(string input)
  2.         {
  3.             const string singleWhiteSpace = " ";
  4.  
  5.             // normalize html tag e.g.: <I> => <i>
  6.             var s = HtmlUtil.FixUpperTags(input);
  7.  
  8.             // unbreak line e.g: foo\r\nbar => foo bar
  9.             s = s.Replace(Environment.NewLine, singleWhiteSpace);
  10.  
  11.             // ensure line was broke
  12.             if (input.Length != s.Length)
  13.             {
  14.                 // todo: remove!
  15.                 s = s.Replace("</i> <i>", singleWhiteSpace);
  16.                 s = s.Replace("</b> <b>", singleWhiteSpace);
  17.                 s = s.Replace("</u> <u>", singleWhiteSpace);
  18.  
  19.                 var closingTag = string.Empty;
  20.                
  21.                 var l = 0;
  22.                 for (int r = 0; r < s.Length; r++)
  23.                 {
  24.                     if (s[r] == '<')
  25.                     {
  26.                         l = r;
  27.                     }
  28.                     else if (s[r] == '>' && s[l] == '<' && s[l + 1] == '/') // closing tag
  29.                     {
  30.                         closingTag = s.Substring(l, r - l + 1);
  31.                         l = r + 1;
  32.                     }
  33.                     else if (s[r] == '>' && s[l] == '<' && closingTag.Length > 0) // opening tag (closing tag was found)
  34.                     {
  35.                         var openTag = s.Substring(l, r - l + 1); // todo: use span when in .net >= 6
  36.                         // todo: check if open-tag is pair with closing-tag
  37.                         //  - true: remove
  38.                         //  - false: continue
  39.  
  40.                         if (openTag.IsPairWith(closingTag))
  41.                         {
  42.                             // todo: store the indexes that will be removed (in reverse)
  43.                             //  - store close-tag index + len
  44.                             //  - store open-tag index + len
  45.                             closingTag = string.Empty;
  46.                         }
  47.                         // else: continue looking for matching pair
  48.                     }
  49.                     else if (s[r] != ' ')
  50.                     {
  51.                         // reset closing tag | char found that is not whitespace or start tag (start tag are handled above)
  52.                         closingTag = string.Empty;
  53.                     }
  54.                 }
  55.  
  56.                 s = s.Replace("> ", ">");
  57.                 return s.Replace(" </", "</").FixExtraSpaces().Trim();
  58.             }
  59.  
  60.             return input;
  61.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement