Advertisement
ivandrofly

Fix invalid italic tags

Feb 19th, 2025
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.15 KB | None | 0 0
  1. private static readonly string[] BeginTagVariations = { "< i >", "< i>", "<i >", "< I >", "< I>", "<I >", "<i<", "<I<", "<I>" };
  2.  
  3.         private static readonly string[] EndTagVariations =
  4.         {
  5.             "< / i >", "< /i>", "</ i>", "< /i >", "</i >", "</ i >",
  6.             "< / i>", "</I>", "< / I >", "< /I>", "</ I>", "< /I >", "</I >", "</ I >", "< / I>", "</i<", "</I<", "</I>"
  7.         };
  8.  
  9.         /// <summary>
  10.         /// Fix invalid or improperly formatted italic tags in the input HTML string.
  11.         /// </summary>
  12.         /// <param name="input">The input HTML string to process.</param>
  13.         /// <returns>A string with corrected italic tags.</returns>
  14.         public static string FixInvalidItalicTags(string input)
  15.         {
  16.             var text = input;
  17.  
  18.             var preTags = string.Empty;
  19.             if (text.StartsWith("{\\", StringComparison.Ordinal))
  20.             {
  21.                 var endIdx = text.IndexOf('}', 2);
  22.                 if (endIdx > 2)
  23.                 {
  24.                     preTags = text.Substring(0, endIdx + 1);
  25.                     text = text.Remove(0, endIdx + 1);
  26.                 }
  27.             }
  28.  
  29.             const string beginTag = "<i>";
  30.             const string endTag = "</i>";
  31.            
  32.             int r = text.Length - 1;
  33.             for (int l = text.Length - 1; l >= 0; l--)
  34.             {
  35.                 if (text[l] == '>' || text[l] == '<')
  36.                 {
  37.                     r = l;
  38.                 }
  39.                 else if ((text[l] == '<' && text[r] == '>') || (text[r] == '<' && text[l] == '<'))
  40.                 {
  41.                     var tag = text.Substring(l, r - l + 1);
  42.                     if (BeginTagVariations.Contains(tag))
  43.                     {
  44.                         text = text.Remove(l, tag.Length);
  45.                         text = text.Insert(l, beginTag);
  46.                     }
  47.                     else if (EndTagVariations.Contains(tag))
  48.                     {
  49.                         text = text.Remove(l, tag.Length);
  50.                         text = text.Insert(l, endTag);
  51.                     }
  52.  
  53.                     r = l - 1;
  54.                 }
  55.             }
Tags: SubtitleEdit
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement