Advertisement
d_brezoev

FTML100

Jan 11th, 2014
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.61 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Text.RegularExpressions;
  7. using System.IO;
  8.  
  9. namespace FTML
  10. {
  11.     class FTML
  12.     {
  13.         static string ReverseOneLineString(string str)
  14.         {
  15.             StringBuilder output = new StringBuilder();
  16.             for (int i = str.Length - 1; i >= 0; i--)
  17.             {
  18.                 output.Append(str[i]);
  19.             }
  20.  
  21.             return output.ToString();
  22.         }
  23.         static StringBuilder Reverse(StringBuilder str)
  24.         {
  25.             if (str.ToString().Contains(Environment.NewLine.ToString()))
  26.             {
  27.                 StringBuilder result = new StringBuilder();
  28.                 string[] substrings = str.ToString().Split(new string[] { Environment.NewLine.ToString() }, StringSplitOptions.RemoveEmptyEntries);
  29.                 for (int i = substrings.Length - 1; i >= 0; i--)
  30.                 {
  31.                     result.Append(ReverseOneLineString(substrings[i]));
  32.                     if (i > 0)
  33.                     {
  34.                         result.Append(Environment.NewLine.ToString());
  35.                     }
  36.                 }
  37.  
  38.                 return result;
  39.             }
  40.             else
  41.             {
  42.                 return new StringBuilder( ReverseOneLineString(str.ToString()));
  43.             }
  44.         }
  45.         static StringBuilder Delete(StringBuilder str)
  46.         {
  47.             return new StringBuilder("");
  48.         }
  49.         static StringBuilder Toggle(StringBuilder str)
  50.         {
  51.            
  52.             string s = str.ToString();
  53.             StringBuilder result = new StringBuilder(str.Length);
  54.             for (int i = 0; i < s.Length; i++)
  55.             {
  56.                 if (char.IsUpper(s[i]))
  57.                 {
  58.                     result.Append(s[i].ToString().ToLower());
  59.                 }
  60.                 else
  61.                 {
  62.                     result.Append(s[i].ToString().ToUpper());
  63.                 }
  64.             }
  65.             return result;
  66.         }
  67.         static StringBuilder ToUpper(StringBuilder str)
  68.         {                        
  69.             string s = str.ToString().ToUpper();
  70.             return new StringBuilder(s);
  71.         }
  72.         static StringBuilder ToLower(StringBuilder str)
  73.         {                        
  74.             string s = str.ToString().ToLower();
  75.             return new StringBuilder(s);
  76.         }
  77.         static void Main(string[] args)
  78.         {
  79.             string pattern = @"(?<currentTag>[<]\w+[>])(?<content>[^<]*)(?<closingTag>[<]{1}[//]{1}\w+[>]{1})";
  80.             int n = int.Parse(Console.ReadLine());
  81.             StringBuilder text = new StringBuilder();
  82.             for (int i = 0; i < n; i++)
  83.             {
  84.                 text.AppendLine(Console.ReadLine());
  85.             }
  86.             //for (int i = 0; i < n; i++)
  87.             {
  88.                
  89.                 Match match = Regex.Match(text.ToString(), pattern);
  90.                 while (match.Success)
  91.                 {
  92.                     StringBuilder replacement = new StringBuilder();
  93.                     if (match.Groups["currentTag"].ToString() == "<rev>")
  94.                     {
  95.                         replacement = Reverse(new StringBuilder(match.Groups["content"].ToString()));
  96.                     }
  97.                     else if (match.Groups["currentTag"].ToString() == "<upper>")
  98.                     {
  99.                         replacement = ToUpper(new StringBuilder(match.Groups["content"].ToString()));
  100.                     }
  101.                     else if (match.Groups["currentTag"].ToString() == "<lower>")
  102.                     {
  103.                         replacement = ToLower(new StringBuilder(match.Groups["content"].ToString()));
  104.                     }
  105.                     else if (match.Groups["currentTag"].ToString() == "<toggle>")
  106.                     {
  107.                         replacement = Toggle(new StringBuilder(match.Groups["content"].ToString()));
  108.                     }
  109.                     else if (match.Groups["currentTag"].ToString() == "<del>")
  110.                     {
  111.                         replacement = Delete(new StringBuilder(match.Groups["content"].ToString()));
  112.                     }
  113.                     text.Replace(match.Groups["currentTag"].ToString() + match.Groups["content"].ToString() + match.Groups["closingTag"].ToString(), replacement.ToString());
  114.                     match = Regex.Match(text.ToString(), pattern);
  115.                     //match = match.NextMatch();
  116.                 }              
  117.             }          
  118.             Console.WriteLine(text);
  119.         }
  120.     }
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement