void SaveBraceInfo(Span span, int leftLength, int rightLength, CodeBracesRangeFlags flags) { if (span.Length < leftLength + rightLength) { return; } bracesInfo.Add(new CodeBracesRange(new TextSpan(span.Start, leftLength), new TextSpan(span.End - rightLength, rightLength), flags)); }
static StructureVisualizerDataBlockKind GetBlockKind(CodeBracesRangeFlags flags) { switch (flags.ToBlockKind()) { case CodeBracesRangeFlags.BlockKind_Namespace: return(StructureVisualizerDataBlockKind.Namespace); case CodeBracesRangeFlags.BlockKind_Type: return(StructureVisualizerDataBlockKind.Type); case CodeBracesRangeFlags.BlockKind_ValueType: return(StructureVisualizerDataBlockKind.ValueType); case CodeBracesRangeFlags.BlockKind_Interface: return(StructureVisualizerDataBlockKind.Interface); case CodeBracesRangeFlags.BlockKind_Method: return(StructureVisualizerDataBlockKind.Method); case CodeBracesRangeFlags.BlockKind_Accessor: return(StructureVisualizerDataBlockKind.Accessor); case CodeBracesRangeFlags.BlockKind_AnonymousMethod: return(StructureVisualizerDataBlockKind.AnonymousMethod); case CodeBracesRangeFlags.BlockKind_Constructor: return(StructureVisualizerDataBlockKind.Constructor); case CodeBracesRangeFlags.BlockKind_Destructor: return(StructureVisualizerDataBlockKind.Destructor); case CodeBracesRangeFlags.BlockKind_Operator: return(StructureVisualizerDataBlockKind.Operator); case CodeBracesRangeFlags.BlockKind_Conditional: return(StructureVisualizerDataBlockKind.Conditional); case CodeBracesRangeFlags.BlockKind_Loop: return(StructureVisualizerDataBlockKind.Loop); case CodeBracesRangeFlags.BlockKind_Property: return(StructureVisualizerDataBlockKind.Property); case CodeBracesRangeFlags.BlockKind_Event: return(StructureVisualizerDataBlockKind.Event); case CodeBracesRangeFlags.BlockKind_Try: return(StructureVisualizerDataBlockKind.Try); case CodeBracesRangeFlags.BlockKind_Catch: return(StructureVisualizerDataBlockKind.Catch); case CodeBracesRangeFlags.BlockKind_Filter: return(StructureVisualizerDataBlockKind.Filter); case CodeBracesRangeFlags.BlockKind_Finally: return(StructureVisualizerDataBlockKind.Finally); case CodeBracesRangeFlags.BlockKind_Fault: return(StructureVisualizerDataBlockKind.Fault); case CodeBracesRangeFlags.BlockKind_Lock: return(StructureVisualizerDataBlockKind.Lock); case CodeBracesRangeFlags.BlockKind_Using: return(StructureVisualizerDataBlockKind.Using); case CodeBracesRangeFlags.BlockKind_Fixed: return(StructureVisualizerDataBlockKind.Fixed); case CodeBracesRangeFlags.BlockKind_Case: return(StructureVisualizerDataBlockKind.Case); case CodeBracesRangeFlags.BlockKind_Other: return(StructureVisualizerDataBlockKind.Other); default: Debug.Fail($"Unknown block kind: {flags.ToBlockKind()}"); return(StructureVisualizerDataBlockKind.None); } }
void EndKeywordBlock(IDecompilerOutput output, BraceInfo info, CodeBracesRangeFlags flags, bool addLineSeparator = false) { output.DecreaseIndent(); var end = output.NextPosition; output.Write("}", BoxedTextColor.Punctuation); output.AddBracePair(new TextSpan(info.Start, 1), new TextSpan(end, 1), flags); if (addLineSeparator) { output.AddLineSeparator(end); } output.WriteLine(); }
public XmlParser(string text, bool isXaml) { this.text = text ?? throw new ArgumentNullException(nameof(text)); xamlAttributeParser = isXaml ? new XamlAttributeParser(this) : null; blockFlags = isXaml ? CodeBracesRangeFlags.XamlBlockBraces : CodeBracesRangeFlags.XmlBlockBraces; references = new List <ReferenceInfo>(); bracesInfo = new List <CodeBracesRange>(); xmlNamespaceReferences = new List <XmlNamespaceReference>(); subStringDict = new Dictionary <SubString, string>(EqualityComparer <SubString> .Default); lineSeparators = new List <int>(); xmlNamespaces = new XmlNamespaces(); xmlNamespaces.Initialize(null); }
static StructureVisualizerDataBlockKind GetBlockKind(CodeBracesRangeFlags flags) { switch (flags.ToBlockKind()) { case CodeBracesRangeFlags.BlockKind_None: return(StructureVisualizerDataBlockKind.None); case CodeBracesRangeFlags.BlockKind_Namespace: return(StructureVisualizerDataBlockKind.Namespace); case CodeBracesRangeFlags.BlockKind_Type: return(StructureVisualizerDataBlockKind.Type); case CodeBracesRangeFlags.BlockKind_Method: return(StructureVisualizerDataBlockKind.Method); case CodeBracesRangeFlags.BlockKind_Conditional: return(StructureVisualizerDataBlockKind.Conditional); case CodeBracesRangeFlags.BlockKind_Loop: return(StructureVisualizerDataBlockKind.Loop); case CodeBracesRangeFlags.BlockKind_Property: return(StructureVisualizerDataBlockKind.Property); case CodeBracesRangeFlags.BlockKind_Event: return(StructureVisualizerDataBlockKind.Event); case CodeBracesRangeFlags.BlockKind_Try: return(StructureVisualizerDataBlockKind.Try); case CodeBracesRangeFlags.BlockKind_Catch: return(StructureVisualizerDataBlockKind.Catch); case CodeBracesRangeFlags.BlockKind_Filter: return(StructureVisualizerDataBlockKind.Filter); case CodeBracesRangeFlags.BlockKind_Finally: return(StructureVisualizerDataBlockKind.Finally); case CodeBracesRangeFlags.BlockKind_Fault: return(StructureVisualizerDataBlockKind.Fault); case CodeBracesRangeFlags.BlockKind_Other: return(StructureVisualizerDataBlockKind.Other); default: Debug.Fail($"Unknown block kind: {flags.ToBlockKind()}"); return(StructureVisualizerDataBlockKind.None); } }
/// <summary> /// Adds a <see cref="CodeBracesRange"/> /// </summary> /// <param name="output">Output</param> /// <param name="start">Start span</param> /// <param name="end">End span</param> /// <param name="flags">Flags</param> public static void AddBracePair(this IDecompilerOutput output, TextSpan start, TextSpan end, CodeBracesRangeFlags flags) => output.AddCustomData(PredefinedCustomDataIds.CodeBracesRange, new CodeBracesRange(start, end, flags));
protected virtual void WriteCommaSeparatedListInBrackets(IEnumerable<Expression> list, CodeBracesRangeFlags flags) { var braceHelper = BraceHelper.LeftBracket(this, flags); if (list.Any()) { Space(policy.SpacesWithinBrackets); WriteCommaSeparatedList(list); Space(policy.SpacesWithinBrackets); } braceHelper.RightBracket(); }
/// <summary> /// Returns true if it's a block /// </summary> /// <param name="flags">Flags</param> /// <returns></returns> public static bool IsBlock(this CodeBracesRangeFlags flags) => (flags & BlockKindMask) != CodeBracesRangeFlags.BlockKind_None;
/// <summary> /// Constructor /// </summary> /// <param name="left">Span of left brace</param> /// <param name="right">Span of right brace</param> /// <param name="flags">Flags</param> public CodeBracesRange(TextSpan left, TextSpan right, CodeBracesRangeFlags flags) { Left = left; Right = right; Flags = flags; }
protected virtual void WriteCommaSeparatedListInParenthesis(IEnumerable<AstNode> list, bool spaceWithin, CodeBracesRangeFlags flags) { var braceHelper = BraceHelper.LeftParen(this, flags); if (list.Any()) { Space(spaceWithin); WriteCommaSeparatedList(list); Space(spaceWithin); } braceHelper.RightParen(); }
public void AddBracePair(int leftStart, int leftEnd, int rightStart, int rightEnd, CodeBracesRangeFlags flags) => output.AddBracePair(TextSpan.FromBounds(leftStart, leftEnd), TextSpan.FromBounds(rightStart, rightEnd), flags);
protected virtual void PrintInitializerElements(AstNodeCollection<Expression> elements, CodeBracesRangeFlags flags) { BraceStyle style; if (policy.ArrayInitializerWrapping == Wrapping.WrapAlways) { style = BraceStyle.NextLine; } else { style = BraceStyle.EndOfLine; } var braceHelper = OpenBrace(style, flags); bool isFirst = true; AstNode last = null; int count = 0; foreach (AstNode node in elements) { if (count-- <= 0) { cancellationToken.ThrowIfCancellationRequested(); count = CANCEL_CHECK_LOOP_COUNT; } if (isFirst) { isFirst = false; } else { Comma(node, noSpaceAfterComma: true); NewLine(); } last = node; node.AcceptVisitor(this); } if (last != null) OptionalComma(last.NextSibling); NewLine(); CloseBrace(style, braceHelper, false); }
public virtual void WriteTypeParameters(IEnumerable<TypeParameterDeclaration> typeParameters, CodeBracesRangeFlags flags) { if (typeParameters.Any()) { var braceHelper = BraceHelper.LeftChevron(this, flags); WriteCommaSeparatedList(typeParameters); braceHelper.RightChevron(); } }
protected virtual void WriteTypeArguments(IEnumerable<AstType> typeArguments, CodeBracesRangeFlags flags) { if (typeArguments.Any()) { var braceHelper = BraceHelper.LeftChevron(this, flags); WriteCommaSeparatedList(typeArguments); braceHelper.RightChevron(); } }
BraceHelper(CSharpOutputVisitor owner, CodeBracesRangeFlags flags) { this.owner = owner; this.leftStart = owner.writer.GetLocation() ?? 0; this.leftEnd = 0; this.flags = flags; }
BraceHelper OpenBrace(BraceStyle style, CodeBracesRangeFlags flags, out int? start, out int? end) { BraceHelper braceHelper; switch (style) { case BraceStyle.DoNotChange: case BraceStyle.EndOfLine: case BraceStyle.BannerStyle: if (!isAtStartOfLine) writer.Space(); start = writer.GetLocation(); braceHelper = BraceHelper.LeftBrace(this, flags); end = writer.GetLocation(); break; case BraceStyle.EndOfLineWithoutSpace: start = writer.GetLocation(); braceHelper = BraceHelper.LeftBrace(this, flags); end = writer.GetLocation(); break; case BraceStyle.NextLine: if (!isAtStartOfLine) NewLine(); start = writer.GetLocation(); braceHelper = BraceHelper.LeftBrace(this, flags); end = writer.GetLocation(); break; case BraceStyle.NextLineShifted: NewLine(); writer.Indent(); start = writer.GetLocation(); braceHelper = BraceHelper.LeftBrace(this, flags); end = writer.GetLocation(); NewLine(); return braceHelper; case BraceStyle.NextLineShifted2: NewLine(); writer.Indent(); start = writer.GetLocation(); braceHelper = BraceHelper.LeftBrace(this, flags); end = writer.GetLocation(); break; default: throw new ArgumentOutOfRangeException (); } writer.Indent(); NewLine(); return braceHelper; }
BraceHelper OpenBrace(BraceStyle style, CodeBracesRangeFlags flags) { int? start, end; return OpenBrace(style, flags, out start, out end); }
public void AddBlock(int start, int end, CodeBracesRangeFlags flags) => output.AddBracePair(new TextSpan(start, 0), new TextSpan(end, 0), flags);
public static BraceHelper LeftBrace(CSharpOutputVisitor owner, CodeBracesRangeFlags flags) { var bh = new BraceHelper(owner, flags); owner.WriteToken(Roles.LBrace, BoxedTextColor.Punctuation); bh.leftEnd = owner.writer.GetLocation() ?? 0; return bh; }
void SaveBraceInfo(Span left, Span right, CodeBracesRangeFlags flags) => bracesInfo.Add(new CodeBracesRange(new TextSpan(left.Start, left.Length), new TextSpan(right.Start, right.Length), flags));
/// <summary> /// Extracts the block kind /// </summary> /// <param name="flags">Flags</param> /// <returns></returns> public static CodeBracesRangeFlags ToBlockKind(this CodeBracesRangeFlags flags) => flags & BlockKindMask;
public virtual void AddBracePair(int leftStart, int leftEnd, int rightStart, int rightEnd, CodeBracesRangeFlags flags) { }
protected virtual void WriteCommaSeparatedListInBrackets(IEnumerable<ParameterDeclaration> list, bool spaceWithin, CodeBracesRangeFlags flags) { var braceHelper = BraceHelper.LeftBracket(this, flags); if (list.Any()) { Space(spaceWithin); WriteCommaSeparatedList(list); Space(spaceWithin); } braceHelper.RightBracket(); }
public override void AddBracePair(int leftStart, int leftEnd, int rightStart, int rightEnd, CodeBracesRangeFlags flags) { decoratedWriter.AddBracePair(leftStart, leftEnd, rightStart, rightEnd, flags); }