Advertisement
ivandrofly

Fix whitespace

Apr 1st, 2024
1,033
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.89 KB | None | 0 0
  1. private readonly string[] _commonTags = { "<i>", "<b>", "<u>", "<font " };
  2.  
  3.         private string FixDigitOrLetterAdjacentToTag(string text)
  4.         {
  5.             // foo<i>bar => foo <i>bar | foo<i><b>bar => foo <i><b>bar
  6.             foreach (var commonTag in _commonTags)
  7.             {
  8.                 var firstTagIndex = text.IndexOf(commonTag, StringComparison.Ordinal);
  9.                 if (firstTagIndex < 1)
  10.                 {
  11.                     continue;
  12.                 }
  13.  
  14.                 // add chars you want to match e.g: ], )
  15.                 if (char.IsLetterOrDigit(text[firstTagIndex - 1]) && IsLetterOrDigitAfterTag(text, firstTagIndex + commonTag.Length))
  16.                 {
  17.                     text = text.Insert(firstTagIndex, " ");
  18.                 }
  19.             }
  20.  
  21.             return text;
  22.  
  23.             bool IsLetterOrDigitAfterTag(string s, int index)
  24.             {
  25.                 if (index == s.Length)
  26.                 {
  27.                     return false;
  28.                 }
  29.  
  30.                 var ch = s[index];
  31.                 if (char.IsLetterOrDigit(ch))
  32.                 {
  33.                     return true;
  34.                 }
  35.                
  36.                 foreach (var tag in _commonTags)
  37.                 {
  38.                     // we are expecting the tag + 1 char/letter
  39.                     if (index + tag.Length + 1 >= s.Length)
  40.                     {
  41.                         continue;
  42.                     }
  43.                    
  44.                     var tagIndex = text.IndexOf(tag, index, StringComparison.Ordinal);
  45.                     if (tagIndex != index)
  46.                     {
  47.                         continue;
  48.                     }
  49.  
  50.                     return IsLetterOrDigitAfterTag(text, tagIndex + tag.Length);
  51.                 }
  52.  
  53.                 return false;
  54.             }
  55.         }
  56.  
  57.  
  58. // https://github.com/SubtitleEdit/subtitleedit/issues/5110
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement