SpecInput.xaml.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. using System;
  2. using System.IO;
  3. using System.Windows;
  4. using System.Drawing;
  5. using FastColoredTextBoxNS;
  6. using System.Windows.Input;
  7. using System.Collections.Generic;
  8. using System.Text.RegularExpressions;
  9. using System.Web.Script.Serialization;
  10. namespace MPE
  11. {
  12. public partial class SpecInput : Window
  13. {
  14. FastColoredTextBox field;
  15. Dictionary<string, string> all = new Dictionary<string, string>();
  16. string specInputFile, specInputDir = DataHelper.workDir;
  17. public SpecInput(FastColoredTextBox field)
  18. {
  19. InitializeComponent();
  20. this.field = field;
  21. text.Text = field.Selection.Text;
  22. specInputFile = specInputDir + "\\specInput.txt";
  23. field.SelectionChanged += Field_SelectionChanged;
  24. if (!Directory.Exists(specInputDir))
  25. {
  26. Directory.CreateDirectory(specInputDir);
  27. File.Create(specInputFile).Close(); return;
  28. }
  29. if (File.Exists(specInputFile))
  30. {
  31. string[] lines = File.ReadAllLines(specInputFile);
  32. if (lines.Length == 0) return;
  33. try
  34. {
  35. Dictionary<string, string> specInputJSONFile = new JavaScriptSerializer().Deserialize<Dictionary<string, string>>((lines[0]));
  36. Dictionary<string, string>.KeyCollection kc = specInputJSONFile.Keys;
  37. Dictionary<string, string>.KeyCollection.Enumerator en = kc.GetEnumerator();
  38. for (int i = 0; i < kc.Count; i++)
  39. {
  40. if (!en.MoveNext()) return;
  41. string name = en.Current; specInputJSONFile.TryGetValue(name, out string text);
  42. all.Add(name, text);
  43. oldInsert.Items.Add(name);
  44. }
  45. }
  46. catch (Exception) { return; }
  47. }
  48. else File.Create(specInputFile).Close();
  49. }
  50. void OldInsert_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) { if (oldInsert.SelectedIndex != -1) text.Text = all[(string)oldInsert.SelectedItem]; }
  51. void Add_Click(object sender, RoutedEventArgs e)
  52. {
  53. if (this.text.Text.Length == 0) { MessageBox.Show("Выделите текст в редакторе"); return; }
  54. if (name_input.Text.Length == 0) { MessageBox.Show("Задайте имя для вставки"); return; }
  55. string name = name_input.Text, text = this.text.Text;
  56. if (!all.ContainsKey(name))
  57. {
  58. all.Add(name, text);
  59. oldInsert.Items.Add(name);
  60. Save();
  61. }
  62. else MessageBox.Show("Вставка с таким именем уже есть!");
  63. }
  64. void Dell_Click(object sender, RoutedEventArgs e)
  65. { if (oldInsert.SelectedIndex != -1) { all.Remove((string)oldInsert.SelectedItem); oldInsert.Items.Remove(oldInsert.SelectedItem); Save(); } }
  66. void Save()
  67. {
  68. if (!File.Exists(specInputFile)) File.Create(specInputFile).Close();
  69. StreamWriter file = new StreamWriter(specInputFile);
  70. file.WriteLine(new JavaScriptSerializer().Serialize(all)); file.Close();
  71. name_input.Text = "Имя_Номер";
  72. }
  73. void Paste_Click(object sender, RoutedEventArgs e) { isNowPaste = true; field.InsertText(text.Text); isNowPaste = false; }
  74. bool isNowPaste = false;
  75. void Field_SelectionChanged(object sender, EventArgs e)
  76. {
  77. if (!isNowPaste)
  78. if (field.Selection.Length > 0) text.Text = field.Selection.Text;
  79. else if (field.Text.Length > 0) text.Text = field.Text;
  80. }
  81. void getToolTip(object sender, ToolTipNeededEventArgs e) => ToolTips.getToolTip(ref sender, ref e);
  82. readonly TextStyle brackets = new TextStyle(new SolidBrush(ColorTranslator.FromHtml("#D26922")), null, System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Regular), comment = new TextStyle(Brushes.Lime, null, System.Drawing.FontStyle.Regular), command = new TextStyle(new SolidBrush(ColorTranslator.FromHtml("#20B2AA")), null, System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Regular), varable = new TextStyle(new SolidBrush(ColorTranslator.FromHtml("#FF2E2C")), null, System.Drawing.FontStyle.Regular), keywords = new TextStyle(new SolidBrush(ColorTranslator.FromHtml("#EEC900")), null, System.Drawing.FontStyle.Regular);
  83. void TextFormatter_Click(object sender, RoutedEventArgs e)
  84. {// Выравнивание кода
  85. Regex IF_rgx = new Regex(@"^[\t\s]*\[IF\]"), ELSE_rgx = new Regex(@"^[\t\s]*\[ELSE\]"), ENDIF_rgx = new Regex(@"^[\t\s]*\[ENDIF\]"), currentIndent_rgx = new Regex(@"^[\t\s]*");
  86. string indentedText = "", nextLineIndent = "";
  87. foreach (string currentLine in text.Lines)
  88. {
  89. Match currIndent_mtch = currentIndent_rgx.Match(currentLine);
  90. if (IF_rgx.Match(currentLine).Success)
  91. {
  92. indentedText += nextLineIndent + currentLine.Remove(0, currIndent_mtch.Length) + "\n";
  93. nextLineIndent += "\t";
  94. }
  95. else if (ENDIF_rgx.Match(currentLine).Success)
  96. {
  97. indentedText += (nextLineIndent.Length > 0 ? nextLineIndent.Remove(0, 1) : "") + currentLine.Remove(0, currIndent_mtch.Length) + "\n";
  98. if (nextLineIndent.Length > 0) nextLineIndent = nextLineIndent.Remove(0, 1);
  99. }
  100. else if (ELSE_rgx.Match(currentLine).Success)
  101. {
  102. indentedText += (nextLineIndent.Length > 0 ? nextLineIndent.Remove(0, 1) : "") + currentLine.Remove(0, currIndent_mtch.Length) + "\n";
  103. }
  104. else indentedText += nextLineIndent + currentLine.Remove(0, currIndent_mtch.Length) + "\n";
  105. }
  106. text.Text = indentedText.Remove(indentedText.Length - 1, 1);
  107. }
  108. void Text_AutoIndentNeeded(object sender, AutoIndentEventArgs e)
  109. {// Выравнивание кода
  110. string trimedLineTex = e.LineText.Trim();
  111. if (trimedLineTex == "[IF][]" || trimedLineTex == "[IF][][]" || trimedLineTex == "[ELSE]")
  112. {// Делаем отступ для следующей строки если текущая [IF][] || [IF][][] || [ELSE]
  113. e.ShiftNextLines = e.TabLength;
  114. }
  115. else if (trimedLineTex == "[ENDIF]")
  116. {// Сдвигаем текущую и последующие строки влево, если текущая строка [ENDIF]
  117. e.Shift = -e.TabLength; e.ShiftNextLines = -e.TabLength;
  118. }
  119. else if (Regex.IsMatch(e.PrevLineText, @"\b([ENDIF])\b") && !Regex.IsMatch(e.LineText, @"\b[IF]\b"))
  120. {// Сдвигаем вправо, если предыдущая строка содержит [ENDIF] и текущая не содержит [IF]
  121. e.Shift = e.TabLength;
  122. }
  123. }
  124. void Field_TextChanged(object sender, TextChangedEventArgs e)
  125. {// Подсветка синтаксиса
  126. Range rng = text.Range;
  127. rng.ClearStyle(StyleIndex.All);//Очистка всех стилей
  128. rng.SetStyle(comment, @"\{\{.*\}\}", RegexOptions.Multiline);//Комментарии
  129. rng.SetStyle(brackets, @"\[|\]", RegexOptions.Singleline);//Скобки
  130. rng.SetStyle(varable, @"\$\w+", RegexOptions.Multiline);//Переменные
  131. rng.SetStyle(command, @"\[*(DISPLAY_BUFFER|DISPLAY_REQUEST|LOG_DISPLAY|DISPLAY_IMG|DISPLAY_ARRAY_IMG|DISPLAY|PARSE|REG_PARSE|TO_BASE64|FROM_BASE64_TO_FILE|FROM_BASE64|FIND_TEXT|URL_ENCODE|URL_DECODE|HASH|GEN_PASSWORD|IS_NUMERIC|ADD_IN_BUFFER|CLEAR_BUFFER|SPLIT_STR|GET_CHAR|UPP_LOW_STR|STR_REPLACE|COMPARE_WITH_BUFFER|RAND|STR_LEN|SORT_BUFFER|TRIMMED|CLEAR_REQUEST|STR_TO_UTF8|OPERATIONS_WITH_BUFFERS|IF|ELSE|ENDIF|BREAK_POINT|GO_TO_BREAK_POINT|INCLUDE|PLAY_SOUND|EXIT_TASK|REPEAT_TASK|VERSION|SLEEP|SET_MODEL_SETTINGS|SET_INCOM|CBROWSER_COMMAND|EVALUATE_JS|JS| /JS|USE_BUFFER|CLEAR_TEMPLATE_MEMORY|EXEC_SQL|VAR|MUTEX|STATIONARY_CBROWSER_COMMAND|WRITE_IN_FILE|ADD_TO_FILE|READ_FILE_ALL|READ_FILE_LINE|WRITE_BUFFER_IN_FILE|SAVE_CLEAR_REQUEST|DELETE_FILE|COPY_FILE|RENAME_FILE|MOVE_FILE|FILE_EXISTS|CREATE_DIR|DELETE_DIR|RENAME_DIR|FOLDER_EXISTS|FROM_FILE_TO_BASE64|OPEN_URL_IN_LOCAL_BROWSER|RUN_FILE|LOAD_CAPTCHA|SAVE_CAPTCHA|CONVERT_IMG|GET_IMAGE_FROM_ARRAY_IMG|DELL_IMAGE_FORM_ARRAY_IMG|SET_IMAGE_TO_ARRAY_IMG|ARRAY_TO_IMAGE|SPLIT_BLACK_END|SPLIT_CIRCUIT_EX|SPLIT_CIRCUIT|SPLIT_WIDTH|SPLIT_SHADES_EX|SPLIT_SHADES|SPLIT_CIRCUIT_EX|SET_SPLIT_EX_FILTER|COMPARE_IMAGES|GET_IMAGE_INFO|ENTER_CAPTCHA|CLEAR_TRANSPARENT|COLOR_TRESHOLD|CLEAR_INTERFERENCE|CHANGE_COLOR_IF_NOT_THIS_COLOR|CLEAR_GRADIENT|CLEAR_LINES|APPLY_NEGATIVE|SEAL_MICROCRACKS|RGB_COLOR_TRESHOLD|CHANGE_COLOR_ON_COLOR|FIND_PIXEL|ONE_OF_RGB_TO_BLACK|ALIGN_IMG_ARRAY|ALIGN_IMG|CROP_ALL_SIDE|CROP|COPY_IMAGE|CUT_GRID|COMPRESS_SHADES|START_MAKE_MODEL|END_MAKE_MODEL|COMPLETE_MAKE_MODEL|FIND_ARRAY_IMG_IN_MODEL_LIST|RUCAPTCHA|CAPTCHA_PROEVOLITION|TESSERACT|ABBYY_READER|LOGICAL_READER|FIND_IMG_LIST_ON_IMG|RECAPTCHA_READER|XEVIL|GET|POST_MULTIPART|POST|PUT|PASS_CLOUDFLARE|AJAX_GET|AJAX_POST|AJAX_PUT|SET_USER_AGENT|SET_REFERER|SET_HOST|COOKIE_TO_BUFFER|SET_TIMEOUT|REQUEST_TO_UTF|SET_COOKIE|CLEAR_ALL_COOKIES|COPY_COOKIE|SAVE_COOKIE|LOAD_COOKIE|ADD_HEADER|ADD_TEMPORARY_HEADER|DELL_ADDED_HEADER|CLEAR_ADDED_HEADERS|SET_KEEP_ALIVE|USE_PROXY|DELL_PROXY|SET_PHP_GATE|UNSET_PHP_GATE|TOR_NEW_IDENTITY|ON_OFF_PROXY)\]*", RegexOptions.Multiline);//Операторы
  132. rng.SetStyle(keywords, @"HTTPS|HTTP|SOCKS5|REPORT|CONNECT|READ_UNSEEN_LETTER|SPECIAL_CHAR|NUMBER|CHAR|UPPER_CHAR|SET_NULL|ERROR_EXIT|ERROR_REPEAT|ERROR_CONTINUE|VPATH", RegexOptions.Multiline);//Ключевые слова
  133. //$IMG_ARRAY_COUNT
  134. if (e != null)
  135. {
  136. e.ChangedRange.ClearFoldingMarkers();
  137. e.ChangedRange.SetFoldingMarkers(@"\[IF\].*", @".*\[ENDIF\]");
  138. e.ChangedRange.SetFoldingMarkers(@"\[BREAK_POINT\].*", @".*\[GO_TO_BREAK_POINT\]");
  139. }
  140. }
  141. void Name_input_GotFocus(object sender, RoutedEventArgs e) { if (name_input.Text == "Имя_Номер") name_input.Text = ""; }
  142. void Name_input_LostFocus(object sender, RoutedEventArgs e) { if (string.IsNullOrWhiteSpace(name_input.Text)) name_input.Text = "Имя_Номер"; }
  143. void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) => DragMove();
  144. }
  145. }