private static IList<DelimiterCapableBlock> GetBlocksOnLine(DelimiterCapableBlock firstBlockOnLine) { IList<DelimiterCapableBlock> blocksOnLine = new List<DelimiterCapableBlock>(); /* we always want to add the first block :-P */ blocksOnLine.Add(firstBlockOnLine); /* iterate through every block after our first block until they are * not on the same line. the idea is to get every delimiter capable block * that ends on the same line.*/ LanguageElement siblingElement = firstBlockOnLine.NextCodeSibling; while (siblingElement != null) { if (siblingElement.EndLine != firstBlockOnLine.EndLine) break; if (siblingElement is DelimiterCapableBlock) { DelimiterCapableBlock siblingBlock = siblingElement as DelimiterCapableBlock; if (siblingBlock.HasDelimitedBlock) { blocksOnLine.Add(siblingBlock); } } /* now assign the next element to the next code sibling. this prevents infinite looping.*/ siblingElement = siblingElement.NextCodeSibling; } return blocksOnLine; }
public virtual SourcePoint PaintPrefix(DelimiterCapableBlock block, DecorateLanguageElementEventArgs args, SourcePoint startPointToPaint) { SourcePoint result = startPointToPaint; if (Settings.Enabled && MeetsLengthRquirement(block)) { args.AddForegroundAdornment( new BlockPrefixDocumentAdornment(startPointToPaint, Settings)); result = startPointToPaint.OffsetPoint(0, Settings.PrefixText.Length + 1); } return result; }
public override SourcePoint PaintBlock(DelimiterCapableBlock block, DecorateLanguageElementEventArgs args, SourcePoint startPointToPaint, bool multipleBlocksOnLine) { SourcePoint result = startPointToPaint; if (Settings.Enabled && MeetsLengthRquirement(block)) { string customMetaString = String.Format("{0} '{1}'", Settings.BlockTypeName, (block as Struct).Name); args.AddForegroundAdornment( new BlockMetaDataDocumentAdornment(startPointToPaint, Settings, customMetaString)); result.OffsetPoint(0, customMetaString.Length); } return result; }
public override SourcePoint PaintBlock(DelimiterCapableBlock block, DecorateLanguageElementEventArgs args, SourcePoint startPointToPaint, bool multipleBlocksOnLine) { SourcePoint result = startPointToPaint; if (Settings.Enabled && MeetsLengthRquirement(block)) { StringBuilder customMetaBuilder = new StringBuilder(); customMetaBuilder.Append(String.Format("{0} '{1}'", Settings.BlockTypeName, (block as Class).Name)); GenericBlock.AppendGenericTypes(block as AccessSpecifiedElement, customMetaBuilder); GenericBlock.AppendGenericTemplate(block as AccessSpecifiedElement, customMetaBuilder); args.AddForegroundAdornment( new BlockMetaDataDocumentAdornment(startPointToPaint, Settings, customMetaBuilder.ToString())); result = startPointToPaint.OffsetPoint(0, customMetaBuilder.Length); } return result; }
public override SourcePoint PaintBlock(DelimiterCapableBlock block, DecorateLanguageElementEventArgs args, SourcePoint startPointToPaint, bool multipleBlocksOnLine) { SourcePoint result = startPointToPaint; if (Settings.Enabled && MeetsLengthRquirement(block)) { StringBuilder customMetaBuilder = new StringBuilder(); customMetaBuilder.Append(String.Format("{0} '{1}'", Settings.BlockTypeName, (block as Class).Name)); GenericBlock.AppendGenericTypes(block as AccessSpecifiedElement, customMetaBuilder); GenericBlock.AppendGenericTemplate(block as AccessSpecifiedElement, customMetaBuilder); args.AddForegroundAdornment( new BlockMetaDataDocumentAdornment(startPointToPaint, Settings, customMetaBuilder.ToString())); result = startPointToPaint.OffsetPoint(0, customMetaBuilder.Length); } return(result); }
public virtual SourcePoint PaintBlock(DelimiterCapableBlock block, DecorateLanguageElementEventArgs args, SourcePoint startPointToPaint, bool multipleBlocksOnLine) { SourcePoint result = startPointToPaint; if (Settings.Enabled && MeetsLengthRquirement(block)) { StringBuilder metaDataBuilder = new StringBuilder(); metaDataBuilder.Append(Settings.BlockTypeName); if(Settings.ShowDetailedBlockMetaData) { DetailedBlockMetaData.AppendDetailedBlockMetaData(block,multipleBlocksOnLine,metaDataBuilder); } args.AddForegroundAdornment( new BlockMetaDataDocumentAdornment(startPointToPaint, Settings, metaDataBuilder.ToString())); result = new SourcePoint(block.EndLine, startPointToPaint.Offset + Settings.BlockTypeName.Length); } return result; }
public virtual SourcePoint PaintBlock(DelimiterCapableBlock block, DecorateLanguageElementEventArgs args, SourcePoint startPointToPaint, bool multipleBlocksOnLine) { SourcePoint result = startPointToPaint; if (Settings.Enabled && MeetsLengthRquirement(block)) { StringBuilder metaDataBuilder = new StringBuilder(); metaDataBuilder.Append(Settings.BlockTypeName); if (Settings.ShowDetailedBlockMetaData) { DetailedBlockMetaData.AppendDetailedBlockMetaData(block, multipleBlocksOnLine, metaDataBuilder); } args.AddForegroundAdornment(new BlockMetaDataDocumentAdornment(startPointToPaint, Settings, metaDataBuilder.ToString())); result = new SourcePoint(block.EndLine, startPointToPaint.Offset + Settings.BlockTypeName.Length); } return(result); }
public void AppendDetailedBlockMetaData(DelimiterCapableBlock block, bool multipleBlocksOnLine, StringBuilder metaDataBuilder) { if (!multipleBlocksOnLine && block.DetailNodeCount > 0) { LanguageElement firstDetailElement = block.DetailNodes[0] as LanguageElement; LanguageElement lastDetailElement = block.DetailNodes[block.DetailNodes.Count - 1] as LanguageElement; if (firstDetailElement != null && lastDetailElement != null) { string detailText = CodeRush.TextViews.Active.TextDocument.GetText( firstDetailElement.StartLine, firstDetailElement.StartOffset, lastDetailElement.EndLine, lastDetailElement.EndOffset); metaDataBuilder.Append(Words.OpenParen); metaDataBuilder.Append(detailText); metaDataBuilder.Append(Words.CloseParen); } } }
protected bool MeetsLengthRquirement(DelimiterCapableBlock block) { return(block.EndLine - block.StartLine >= Settings.MinimumBlockSize); }
private static SourceRange InsertChildAtEndOfParent(LanguageElement Child, DelimiterCapableBlock Parent, TextDocument textDocument) { SourceRange NSRange = Parent.GetFullBlockRange(); SourcePoint InsertPoint = new SourcePoint(NSRange.End.Line, 1); return textDocument.InsertText(InsertPoint, CodeRush.Language.GenerateElement(Child)); }
protected bool MeetsLengthRquirement(DelimiterCapableBlock block) { return block.EndLine - block.StartLine >= Settings.MinimumBlockSize; }