public void InsertSnippet() { ScintillaGateway editor = new ScintillaGateway(PluginBase.GetCurrentScintilla()); editor.BeginUndoAction(); Position end = editor.GetLineEndPosition(editor.LineFromPosition(editor.GetSelectionEnd())); Position start = editor.PositionFromLine(editor.LineFromPosition(editor.GetSelectionStart())); int indent = KeepIndent ? editor.GetLineIndentation(editor.LineFromPosition(start)) : 0; string insertText = IndentSnippetBody(SnippetBodyBefore, indent) + IndentSelectedStrings(editor, start, end) + IndentSnippetBody(SnippetBodyAfter, indent); editor.DeleteRange(start, end.Value - start.Value + 1); editor.InsertText(start, insertText); using (TextToFind textToFind = new TextToFind(start.Value, start.Value + insertText.Length, Placeholder)) { Position placeholderPosition = editor.FindText(0, textToFind); editor.SetSelection(placeholderPosition.Value + Placeholder.Length, placeholderPosition.Value); } editor.EndUndoAction(); }
/// <summary> /// Find and capitalize all Markdown Titles in the document. /// </summary> internal static void CapitalizeMDTitles() { // Get scintilla gateway. IntPtr currentScint = PluginBase.GetCurrentScintilla(); ScintillaGateway scintillaGateway = new ScintillaGateway(currentScint); string line; // Get the number of lines in the document. int numLines = scintillaGateway.GetLineCount(); // Traverse through each line. for (int i = 0; i < numLines; i++) { // Set line to the current line. line = scintillaGateway.GetLine(i); // Check each character in the line to see if it begins // with a '#'. for (int j = 0; j < line.Length; j++) { if (line[j] == '#') { // If it begins with '#', select the line and call // the CapitalizeTitle method with these parameters. scintillaGateway.GotoLine(i); scintillaGateway.SetSel(scintillaGateway.PositionFromLine(i), scintillaGateway.GetLineEndPosition(i)); CapitalizeTitle(); break; } // Support for Setext headers. else if ((line[j] == '-' || line[j] == '=') && !IsAlphaNumeric(line)) { // If it begins with '-' or '=', select the previous line and call // the CapitalizeTitle method with these parameters. scintillaGateway.GotoLine(i - 1); scintillaGateway.SetSel(scintillaGateway.PositionFromLine(i - 1), scintillaGateway.GetLineEndPosition(i - 1)); CapitalizeTitle(); break; } } } }
internal static void Process(bool isScript, string script = null, Action <object> setResult = null, bool forceErrorInOutput = false) { Init(); if (!Config.Instance.KeepVariablesBetweenEvaluations) { LastVariables = new Dictionary <string, object>(); } else if (LastVariables != null) { LastVariables .ToList() .FindAll(kvp => kvp.Value is StronglyTypedVariable) .ForEach(kvp => LastVariables.Remove(kvp.Key)); } evaluator.Variables = LastVariables; evaluator.OptionForceIntegerNumbersEvaluationsAsDoubleByDefault = Config.Instance.OptionForceIntegerNumbersEvaluationsAsDoubleByDefault; evaluator.OptionCaseSensitiveEvaluationActive = Config.Instance.CaseSensitive; evaluator.OptionsSyntaxRules.MandatoryLastStatementTerminalPunctuator = false; evaluator.OptionsSyntaxRules.IsNewKeywordForAnonymousExpandoObjectOptional = true; evaluator.OptionsSyntaxRules.AllowSimplifiedCollectionSyntax = true; evaluator.OptionsSyntaxRules.SimplifiedCollectionMode = SimplifiedCollectionMode.List; evaluator.OptionsSyntaxRules.InitializerPropertyValueSeparators = new[] { "=", ":" }; evaluator.OptionsSyntaxRules.InitializerAllowStringForProperties = true; try { if (BNpp.SelectionLength <= 0) { IScintillaGateway scintilla = new ScintillaGateway(PluginBase.GetCurrentScintilla()); int line = scintilla.GetCurrentLineNumber(); int end = scintilla.GetLineEndPosition(line); int start = 0; if (isScript) { // TODO special start script tag } else { int i; for (i = line; i > 0 && scintilla.GetLine(line).TrimStart().StartsWith("."); i--) { ; } start = scintilla.PositionFromLine(i); for (i = line; i < scintilla.GetLineCount() && scintilla.GetLine(line).TrimStart().StartsWith("."); i++) { ; } end = scintilla.GetLineEndPosition(i); } if (setResult == null) { scintilla.SetSel(new Position(start), new Position(end)); } } setResult ??= Config.Instance.CurrentResultOut.SetResult; script ??= BNpp.SelectedText; Config.Instance.LastScripts.Insert(0, script); while (Config.Instance.LastScripts.Count > Config.Instance.NbrOfLastScriptToKeep) { Config.Instance.LastScripts.RemoveAt(Config.Instance.LastScripts.Count - 1); } Config.Instance.LastScripts = Config.Instance.LastScripts.Distinct().ToList(); object result = isScript ? evaluator.ScriptEvaluate(evaluator.RemoveComments(script)) : evaluator.Evaluate(evaluator.RemoveComments(script.TrimEnd(';'))); setResult(result); } catch (Exception exception) { if (Config.Instance.ShowExceptionInMessageBox && !forceErrorInOutput) { MessageBox.Show(exception.Message); } if (Config.Instance.ShowExceptionInOutput || forceErrorInOutput) { setResult(exception); } if (!string.IsNullOrEmpty(CustomEvaluations.Print)) { setResult(CustomEvaluations.Print); } } finally { LastVariables = evaluator.Variables; Config.Instance.Save(); } }
internal static void C7GSPFunction() { //Preparing some variables var scintilla = new ScintillaGateway(PluginBase.GetCurrentScintilla()); //Starting Undo "recording". Next steps can be undo with one undo command scintilla.BeginUndoAction(); //Is there any text selected if (scintilla.GetSelText() != "") { //Calculating selections first line begin Position selStartPos = scintilla.GetSelectionStart(); int startLineNum = scintilla.LineFromPosition(selStartPos); Position startLinePos = scintilla.PositionFromLine(startLineNum); //Calculating selections last line end Position selEndPos = scintilla.GetSelectionEnd(); int endLineNum = scintilla.LineFromPosition(selEndPos); Position endLinePos = scintilla.GetLineEndPosition(endLineNum); //Setting the selection as needed scintilla.SetSel(startLinePos, endLinePos); //Preparing needed variables int ignoreMe = 0; //Gathered information string line = ""; int lineFeedLen = 0; int tt = 0, np = 0, na = 0, gtrc = 0; string ns = ""; string modifiers = ""; //Loopping through the selected lines int i = startLineNum; while (i <= endLineNum) { //Line to the memory line = scintilla.GetLine(i); if (line.Length > 2) { //Checking did we get a fresh GT line (three first chars are int (TT)) if (int.TryParse(line.Substring(0, 3), out ignoreMe)) { //Gathering the basic GT information tt = int.Parse(line.Substring(0, 3)); np = int.Parse(line.Substring(5, 2)); na = int.Parse(line.Substring(9, 3)); ns = line.Substring(14, 16).Replace(" ", string.Empty); gtrc = na = int.Parse(line.Substring(56, 3)); //Move carret to the begin of the line scintilla.SetCurrentPos(scintilla.PositionFromLine(i)); //Delete all from the line scintilla.DelLineRight(); //Add text scintilla.InsertText(scintilla.PositionFromLine(i), "C7GSI:TT=" + tt + ",NP=" + np + ",NA=" + ",NS=" + ns + ",GTRC=" + gtrc + ";"); //Checking next line if it it's not empty if (scintilla.GetLine(i + 1).Length >= 9) { //And the line will contain header which begins with MTT if (scintilla.GetLine(i + 1).Substring(9, 3) == "MTT") { //If yes then take the line under it to the variable modifiers = scintilla.GetLine(i + 2); //If linefeed is CRLF, then two extra characters in the end of line if (scintilla.GetEOLMode() == 0) { lineFeedLen = 2; } else { lineFeedLen = 1; } //Removing lines which not needed anymore scintilla.SetCurrentPos(scintilla.PositionFromLine(i + 1)); scintilla.LineDelete(); scintilla.LineDelete(); endLineNum = endLineNum - 2; //Determining which variables the modifiers line will contain if (modifiers.Length == (12 + lineFeedLen)) { //Insert command to the line scintilla.InsertText(scintilla.PositionFromLine(i + 1), "C7GSC:TT=" + tt + ",NP=" + np + ",NA=" + ",NS=" + ns + ",MTT=" + modifiers.Substring(9, 3).Replace(" ", string.Empty) + ";"); } else if (modifiers.Length == (17 + lineFeedLen)) { if (!string.IsNullOrWhiteSpace(modifiers.Substring(9, 3))) { //Insert command to the line scintilla.InsertText(scintilla.GetCurrentPos(), "C7GSC:TT=" + tt + ",NP=" + np + ",NA=" + ",NS=" + ns + ",MTT=" + modifiers.Substring(9, 3).Replace(" ", string.Empty) + ";"); //Go to end of the current line scintilla.GotoPos(scintilla.GetLineEndPosition(scintilla.LineFromPosition(scintilla.GetCurrentPos()))); //Adding new line scintilla.NewLine(); endLineNum++; } scintilla.InsertText(scintilla.GetCurrentPos(), "C7GSC:TT=" + tt + ",NP=" + np + ",NA=" + ",NS=" + ns + ",MNP=" + modifiers.Substring(14, 3).Replace(" ", string.Empty) + ";"); } else if (modifiers.Length == (22 + lineFeedLen)) { if (!string.IsNullOrWhiteSpace(modifiers.Substring(9, 3))) { scintilla.InsertText(scintilla.GetCurrentPos(), "C7GSC:TT=" + tt + ",NP=" + np + ",NA=" + ",NS=" + ns + ",MTT=" + modifiers.Substring(9, 3).Replace(" ", string.Empty) + ";"); scintilla.GotoPos(scintilla.GetLineEndPosition(scintilla.LineFromPosition(scintilla.GetCurrentPos()))); scintilla.NewLine(); endLineNum++; } if (!string.IsNullOrWhiteSpace(modifiers.Substring(14, 3))) { scintilla.InsertText(scintilla.GetCurrentPos(), "C7GSC:TT=" + tt + ",NP=" + np + ",NA=" + ",NS=" + ns + ",MNP=" + modifiers.Substring(14, 3).Replace(" ", string.Empty) + ";"); scintilla.GotoPos(scintilla.GetLineEndPosition(scintilla.LineFromPosition(scintilla.GetCurrentPos()))); scintilla.NewLine(); endLineNum++; } scintilla.InsertText(scintilla.GetCurrentPos(), "C7GSC:TT=" + tt + ",NP=" + np + ",NA=" + ",NS=" + ns + ",MNA=" + modifiers.Substring(19, 3).Replace(" ", string.Empty) + ";"); } else { if (!string.IsNullOrWhiteSpace(modifiers.Substring(9, 3))) { scintilla.InsertText(scintilla.GetCurrentPos(), "C7GSC:TT=" + tt + ",NP=" + np + ",NA=" + ",NS=" + ns + ",MTT=" + modifiers.Substring(9, 3).Replace(" ", string.Empty) + ";"); scintilla.GotoPos(scintilla.GetLineEndPosition(scintilla.LineFromPosition(scintilla.GetCurrentPos()))); scintilla.NewLine(); endLineNum++; } if (!string.IsNullOrWhiteSpace(modifiers.Substring(14, 3))) { scintilla.InsertText(scintilla.GetCurrentPos(), "C7GSC:TT=" + tt + ",NP=" + np + ",NA=" + ",NS=" + ns + ",MNP=" + modifiers.Substring(14, 3).Replace(" ", string.Empty) + ";"); scintilla.GotoPos(scintilla.GetLineEndPosition(scintilla.LineFromPosition(scintilla.GetCurrentPos()))); scintilla.NewLine(); endLineNum++; } if (!string.IsNullOrWhiteSpace(modifiers.Substring(19, 3))) { scintilla.InsertText(scintilla.GetCurrentPos(), "C7GSC:TT=" + tt + ",NP=" + np + ",NA=" + ",NS=" + ns + ",MNA=" + modifiers.Substring(19, 3).Replace(" ", string.Empty) + ";"); scintilla.GotoPos(scintilla.GetLineEndPosition(scintilla.LineFromPosition(scintilla.GetCurrentPos()))); scintilla.NewLine(); endLineNum++; } scintilla.InsertText(scintilla.GetCurrentPos(), "C7GSC:TT=" + tt + ",NP=" + np + ",NA=" + ",NS=" + ns + ",MNS=" + modifiers.Substring(24, (modifiers.Length - 24 - lineFeedLen)).Replace(" ", string.Empty) + ";"); } } } } } i++; } } scintilla.EndUndoAction(); }