Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Text;
- using System.Collections.Generic;
- class FakeTextMarkUpLanguage
- {
- static Dictionary<string, string> tags = new Dictionary<string, string>();
- static StringBuilder global = new StringBuilder();
- static Stack<string> tagove = new Stack<string>();
- const string del = "<del>";
- static void Main()
- {
- tags.Add("<upper>", "</upper>");
- tags.Add("<lower>", "</lower>");
- tags.Add("<toggle>", "</toggle>");
- tags.Add("<del>", "</del>");
- tags.Add("<rev>", "</rev>");
- int n = int.Parse(Console.ReadLine());
- for (int i = 0; i < n; i++)
- {
- string input = Console.ReadLine();
- global.AppendLine(input);
- }
- while (true)
- {
- if (global.ToString().Contains("<") == false) break;
- for (int i = 0; i < global.Length; i++)
- {
- if (global.ToString().IndexOf(del) > global.ToString().IndexOf(tags[del]) ||
- (global.ToString().IndexOf(del) == -1 && global.ToString().IndexOf(tags[del]) != -1))
- {
- int index = global.ToString().IndexOf(tags[del]);
- index+= tags[del].Length;
- string toBeDeleted = global.ToString().Substring(0, index);
- global = new StringBuilder(global.ToString().Replace(toBeDeleted,string.Empty));
- break;
- }
- else if (global[i] == '<')
- {
- string tag = GetTag(i);
- if (tag == del)
- {
- int endClosedDel = global.ToString().IndexOf(tags[del]) + tags[del].Length;
- global.Remove(i, endClosedDel - i);
- break;
- }
- else
- {
- tagove.Push(tag);
- i += tag.Length - 1;
- }
- }
- else
- {
- int openTag = global.ToString().IndexOf('<', i + 1);
- if (global[openTag + 1] == '/')
- {
- ProcessData(i, openTag);
- break;
- }
- }
- }
- }
- Console.WriteLine(global.ToString());
- }
- private static void ProcessData(int start, int end)
- {
- string toBeModified = global.ToString().Substring(start, end - start);
- string currentTag = tagove.Pop();
- switch (currentTag)
- {
- case "<upper>":
- for (int i = start; i < end; i++)
- {
- global[i] = char.ToUpper(global[i]);
- char ch = global[i];
- }
- break;
- case "<lower>":
- for (int i = start; i < end; i++)
- {
- global[i] = char.ToLower(global[i]);
- char ch = global[i];
- }
- break;
- case "<toggle>":
- for (int i = start; i < end; i++)
- {
- if (global[i] >= 65 && global[i] <= 90)
- {
- global[i] = char.ToLower(global[i]);
- char ch = global[i];
- }
- else if (global[i] >= 97 && global[i] <= 122)
- {
- global[i] = char.ToUpper(global[i]);
- char ch = global[i];
- }
- }
- break;
- case "<rev>":
- StringBuilder tmp = new StringBuilder(toBeModified.Length);
- foreach (var item in toBeModified)
- {
- tmp.Append(item);
- }
- for (int i = tmp.Length - 1,j = start; i >= 0; i--,j++)
- {
- global[j] = tmp[i];
- }
- break;
- }
- int startOpenTag = 0;
- for (int i = start; i >= 0; i--)
- {
- if (global[i] == '<')
- {
- startOpenTag = i;
- break;
- }
- }
- global.Remove(end, tags[currentTag].Length);
- //Console.WriteLine(global.ToString());
- global.Remove(startOpenTag, start - startOpenTag);
- //Console.WriteLine(global.ToString());
- }
- private static string GetTag(int start)
- {
- int endOpenTag = global.ToString().IndexOf('>', start + 1);
- string tag = global.ToString().Substring(start, endOpenTag - start + 1 );
- return tag;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement