public static async Task markWholeTag( string tagName, Position pClick, bool isLeftButton, MonacoEditor editor, Dictionary <string, BlazorMonaco.Range> sourceDecorations) { { if (isLeftButton) { KeyValuePair <string, BlazorMonaco.Range> dec = (from d in sourceDecorations where IsPosInRange(pClick, d.Value) select d).FirstOrDefault(); if (string.IsNullOrEmpty(dec.Key)) { //clicking outside a marked tag - clear previous selection in currentRangeID await Helpers.RemoveDecoration(editor, currentRangeId); currentDec = new KeyValuePair <string, BlazorMonaco.Range>(); } else { TextModel sourceModel = await editor.GetModel(); string tag = await sourceModel.GetValueInRange(dec.Value, EndOfLinePreference.CRLF); Position pEnd; if (IsClosedTag(tag)) { pEnd = new Position() { Column = dec.Value.EndColumn, LineNumber = dec.Value.EndLineNumber } } ; else { pEnd = await getEndOfTag(tagName, dec.Value, sourceModel); } BlazorMonaco.Range range = new BlazorMonaco.Range() { StartColumn = dec.Value.StartColumn, StartLineNumber = dec.Value.StartLineNumber, EndColumn = pEnd.Column, EndLineNumber = pEnd.LineNumber }; currentRangeId = await Helpers.ColorRange(editor, range, currentRangeId, enmStatusColor.Current); currentDec = dec; } } } }