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;
        }
Ejemplo n.º 5
0
        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);
                }
            }
        }
Ejemplo n.º 9
0
        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;
 }