123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- using System;
- using System.IO;
- using System.Windows;
- using System.Drawing;
- using FastColoredTextBoxNS;
- using System.Windows.Input;
- using System.Collections.Generic;
- using System.Text.RegularExpressions;
- using System.Web.Script.Serialization;
- namespace MPE
- {
- public partial class SpecInput : Window
- {
- FastColoredTextBox field;
- Dictionary<string, string> all = new Dictionary<string, string>();
- string specInputFile, specInputDir = DataHelper.workDir;
- public SpecInput(FastColoredTextBox field)
- {
- InitializeComponent();
- this.field = field;
- text.Text = field.Selection.Text;
- specInputFile = specInputDir + "\\specInput.txt";
- field.SelectionChanged += Field_SelectionChanged;
- if (!Directory.Exists(specInputDir))
- {
- Directory.CreateDirectory(specInputDir);
- File.Create(specInputFile).Close(); return;
- }
- if (File.Exists(specInputFile))
- {
- string[] lines = File.ReadAllLines(specInputFile);
- if (lines.Length == 0) return;
- try
- {
- Dictionary<string, string> specInputJSONFile = new JavaScriptSerializer().Deserialize<Dictionary<string, string>>((lines[0]));
- Dictionary<string, string>.KeyCollection kc = specInputJSONFile.Keys;
- Dictionary<string, string>.KeyCollection.Enumerator en = kc.GetEnumerator();
- for (int i = 0; i < kc.Count; i++)
- {
- if (!en.MoveNext()) return;
- string name = en.Current; specInputJSONFile.TryGetValue(name, out string text);
- all.Add(name, text);
- oldInsert.Items.Add(name);
- }
- }
- catch (Exception) { return; }
- }
- else File.Create(specInputFile).Close();
- }
- void OldInsert_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) { if (oldInsert.SelectedIndex != -1) text.Text = all[(string)oldInsert.SelectedItem]; }
- void Add_Click(object sender, RoutedEventArgs e)
- {
- if (this.text.Text.Length == 0) { MessageBox.Show("Выделите текст в редакторе"); return; }
- if (name_input.Text.Length == 0) { MessageBox.Show("Задайте имя для вставки"); return; }
- string name = name_input.Text, text = this.text.Text;
- if (!all.ContainsKey(name))
- {
- all.Add(name, text);
- oldInsert.Items.Add(name);
- Save();
- }
- else MessageBox.Show("Вставка с таким именем уже есть!");
- }
- void Dell_Click(object sender, RoutedEventArgs e)
- { if (oldInsert.SelectedIndex != -1) { all.Remove((string)oldInsert.SelectedItem); oldInsert.Items.Remove(oldInsert.SelectedItem); Save(); } }
- void Save()
- {
- if (!File.Exists(specInputFile)) File.Create(specInputFile).Close();
- StreamWriter file = new StreamWriter(specInputFile);
- file.WriteLine(new JavaScriptSerializer().Serialize(all)); file.Close();
- name_input.Text = "Имя_Номер";
- }
- void Paste_Click(object sender, RoutedEventArgs e) { isNowPaste = true; field.InsertText(text.Text); isNowPaste = false; }
- bool isNowPaste = false;
- void Field_SelectionChanged(object sender, EventArgs e)
- {
- if (!isNowPaste)
- if (field.Selection.Length > 0) text.Text = field.Selection.Text;
- else if (field.Text.Length > 0) text.Text = field.Text;
- }
- void getToolTip(object sender, ToolTipNeededEventArgs e) => ToolTips.getToolTip(ref sender, ref e);
- 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);
- void TextFormatter_Click(object sender, RoutedEventArgs e)
- {// Выравнивание кода
- 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]*");
- string indentedText = "", nextLineIndent = "";
- foreach (string currentLine in text.Lines)
- {
- Match currIndent_mtch = currentIndent_rgx.Match(currentLine);
- if (IF_rgx.Match(currentLine).Success)
- {
- indentedText += nextLineIndent + currentLine.Remove(0, currIndent_mtch.Length) + "\n";
- nextLineIndent += "\t";
- }
- else if (ENDIF_rgx.Match(currentLine).Success)
- {
- indentedText += (nextLineIndent.Length > 0 ? nextLineIndent.Remove(0, 1) : "") + currentLine.Remove(0, currIndent_mtch.Length) + "\n";
- if (nextLineIndent.Length > 0) nextLineIndent = nextLineIndent.Remove(0, 1);
- }
- else if (ELSE_rgx.Match(currentLine).Success)
- {
- indentedText += (nextLineIndent.Length > 0 ? nextLineIndent.Remove(0, 1) : "") + currentLine.Remove(0, currIndent_mtch.Length) + "\n";
- }
- else indentedText += nextLineIndent + currentLine.Remove(0, currIndent_mtch.Length) + "\n";
- }
- text.Text = indentedText.Remove(indentedText.Length - 1, 1);
- }
- void Text_AutoIndentNeeded(object sender, AutoIndentEventArgs e)
- {// Выравнивание кода
- string trimedLineTex = e.LineText.Trim();
- if (trimedLineTex == "[IF][]" || trimedLineTex == "[IF][][]" || trimedLineTex == "[ELSE]")
- {// Делаем отступ для следующей строки если текущая [IF][] || [IF][][] || [ELSE]
- e.ShiftNextLines = e.TabLength;
- }
- else if (trimedLineTex == "[ENDIF]")
- {// Сдвигаем текущую и последующие строки влево, если текущая строка [ENDIF]
- e.Shift = -e.TabLength; e.ShiftNextLines = -e.TabLength;
- }
- else if (Regex.IsMatch(e.PrevLineText, @"\b([ENDIF])\b") && !Regex.IsMatch(e.LineText, @"\b[IF]\b"))
- {// Сдвигаем вправо, если предыдущая строка содержит [ENDIF] и текущая не содержит [IF]
- e.Shift = e.TabLength;
- }
- }
- void Field_TextChanged(object sender, TextChangedEventArgs e)
- {// Подсветка синтаксиса
- Range rng = text.Range;
- rng.ClearStyle(StyleIndex.All);//Очистка всех стилей
- rng.SetStyle(comment, @"\{\{.*\}\}", RegexOptions.Multiline);//Комментарии
- rng.SetStyle(brackets, @"\[|\]", RegexOptions.Singleline);//Скобки
- rng.SetStyle(varable, @"\$\w+", RegexOptions.Multiline);//Переменные
- 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);//Операторы
- 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);//Ключевые слова
- //$IMG_ARRAY_COUNT
- if (e != null)
- {
- e.ChangedRange.ClearFoldingMarkers();
- e.ChangedRange.SetFoldingMarkers(@"\[IF\].*", @".*\[ENDIF\]");
- e.ChangedRange.SetFoldingMarkers(@"\[BREAK_POINT\].*", @".*\[GO_TO_BREAK_POINT\]");
- }
- }
- void Name_input_GotFocus(object sender, RoutedEventArgs e) { if (name_input.Text == "Имя_Номер") name_input.Text = ""; }
- void Name_input_LostFocus(object sender, RoutedEventArgs e) { if (string.IsNullOrWhiteSpace(name_input.Text)) name_input.Text = "Имя_Номер"; }
- void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) => DragMove();
- }
- }
|