Beispiel #1
0
        /// <summary>
        /// tries to close region
        /// </summary>
        /// <param name="parser">parser</param>
        /// <returns>whether region was closed</returns>
        protected override bool TryComplete(TextRegion r, SnapshotParser parser)
        {
            ClassificationSpan span  = parser.CurrentSpan;
            SnapshotPoint      point = parser.CurrentPoint;

            if (span != null)
            {
                string text = span.Span.GetText();
                if (span.ClassificationType.Classification == "punctuation")
                {
                    char c = point.GetChar();
                    //text can be "};", not just "}"
                    if (r.RegionType == TextRegionType.Block && c == '}' ||
                        r.RegionType == TextRegionType.Array && c == ']')
                    {
                        r.EndPoint = span.Span.Start + 1;
                    }
                }
                else if (span.ClassificationType.Classification == "comment" && r.RegionType == TextRegionType.Region)
                {
                    Match m = RegionEndRegex.Match(text);
                    if (m.Success)
                    {
                        r.EndPoint = span.Span.End;
                    }
                }
            }
            return(r.Complete);
        }
		/// <summary>
		/// tries to close region
		/// </summary>
		/// <param name="parser">parser</param>
		/// <returns>whether region was closed</returns>
		protected override bool TryComplete(TextRegion r, SnapshotParser parser)
		{
			ClassificationSpan span = parser.CurrentSpan;
            SnapshotPoint point = parser.CurrentPoint;
            if (span != null)
            {
                string text = span.Span.GetText();
                if (span.ClassificationType.Classification == "punctuation")
                {
                    char c = point.GetChar();
                    //text can be "};", not just "}"
				    if (r.RegionType == TextRegionType.Block && c == '}'
					    || r.RegionType == TextRegionType.Array && c == ']')
				    {
					    r.EndPoint = span.Span.Start + 1;
				    }
                }            
				else if (span.ClassificationType.Classification == "comment" && r.RegionType == TextRegionType.Region)
				{					
					Match m = RegionEndRegex.Match(text);
					if (m.Success)
						r.EndPoint = span.Span.End;					
				}
			}
			return r.Complete;
		}
Beispiel #3
0
        /// <summary>
        /// parses input buffer, searches for region start
        /// </summary>
        /// <param name="parser"></param>
        /// <returns>created region or null</returns>
        public override TextRegion TryCreateRegion(SnapshotParser parser)
        {
            ClassificationSpan span  = parser.CurrentSpan;
            SnapshotPoint      point = parser.CurrentPoint;

            if (span != null)
            {
                switch (span.ClassificationType.Classification)
                {
                case "punctuation":
                    char c = point.GetChar();
                    switch (c)
                    {
                    case '{':
                        return(new TextRegion(span.Span.Start, TextRegionType.Block));

                    case '[':
                        return(new TextRegion(span.Span.Start, TextRegionType.Array));
                    }
                    break;

                case "comment":
                    return(ParseComment(parser, RegionStartRegex, RegionEndRegex));
                }
            }
            return(null);
        }
Beispiel #4
0
 protected TextRegion ParseComment(SnapshotParser parser)
 {
     SnapshotPoint point = parser.CurrentPoint;
     ClassificationSpan span = parser.CurrentSpan;
     return new TextRegion(point, TextRegionType.Comment) {
         EndPoint = span.Span.End
     };
 }
Beispiel #5
0
 protected override void ProcessCurrentToken(SnapshotParser p)
 {
     base.ProcessCurrentToken(p);
     ClassificationSpan span = p.CurrentSpan;
     //function keyword was found
     if (span != null && span.ClassificationType.Classification == "keyword" && span.Span.GetText() == "function") {
         FunctionOccured = true;
     }
 }
Beispiel #6
0
        protected TextRegion ParseComment(SnapshotParser parser)
        {
            SnapshotPoint      point = parser.CurrentPoint;
            ClassificationSpan span  = parser.CurrentSpan;

            return(new TextRegion(point, TextRegionType.Comment)
            {
                EndPoint = span.Span.End
            });
        }
Beispiel #7
0
        protected override void ProcessCurrentToken(SnapshotParser p)
        {
            base.ProcessCurrentToken(p);
            ClassificationSpan span = p.CurrentSpan;

            //function keyword was found
            if (span != null && span.ClassificationType.Classification == "keyword" && span.Span.GetText() == "function")
            {
                FunctionOccured = true;
            }
        }
Beispiel #8
0
 /// <summary>
 /// tries to close region
 /// </summary>
 /// <param name="parser">parser</param>
 /// <returns>whether region was closed</returns>
 protected override bool TryComplete(TextRegion r, SnapshotParser parser)
 {
     ClassificationSpan span = parser.CurrentSpan;
     SnapshotPoint point = parser.CurrentPoint;
     if (span != null) {
         if (span.ClassificationType.Classification == "punctuation") {
             char c = point.GetChar();
             //text can be "};", not just "}"
             if (r.RegionType == TextRegionType.Block && c == '}'
                 || r.RegionType == TextRegionType.Array && c == ']') {
                 r.EndPoint = span.Span.Start + 1;
             }
         }
     }
     return r.Complete;
 }
Beispiel #9
0
 protected TextRegion ParseComment(SnapshotParser parser, Regex regionStartRegex, Regex regionEndRegex)
 {
     SnapshotPoint point = parser.CurrentPoint;
     ClassificationSpan span = parser.CurrentSpan;
     Match m = regionStartRegex.Match(span.Span.GetText());
     if (m.Success) {
         return new TextRegion(point, TextRegionType.Region) {
             Name = m.Groups[1].Value
         };
     }
     if (!regionEndRegex.IsMatch(span.Span.GetText())) {
         return new TextRegion(point, TextRegionType.Comment) {
             EndPoint = span.Span.End
         };
     }
     return null;
 }
Beispiel #10
0
        /// <summary>
        /// tries to close region
        /// </summary>
        /// <param name="parser">parser</param>
        /// <returns>whether region was closed</returns>
        protected override bool TryComplete(TextRegion r, SnapshotParser parser)
        {
            ClassificationSpan span  = parser.CurrentSpan;
            SnapshotPoint      point = parser.CurrentPoint;

            if (span != null)
            {
                if (span.ClassificationType.Classification == "punctuation")
                {
                    char c = point.GetChar();
                    //text can be "};", not just "}"
                    if (r.RegionType == TextRegionType.Block && c == '}' ||
                        r.RegionType == TextRegionType.Array && c == ']')
                    {
                        r.EndPoint = span.Span.Start + 1;
                    }
                }
            }
            return(r.Complete);
        }
Beispiel #11
0
 /// <summary>
 /// parses input buffer, searches for region start
 /// </summary>
 /// <param name="parser"></param>
 /// <returns>created region or null</returns>
 public override TextRegion TryCreateRegion(SnapshotParser parser)
 {
     ClassificationSpan span = parser.CurrentSpan;
     SnapshotPoint point = parser.CurrentPoint;
     if (span != null) {
         switch (span.ClassificationType.Classification) {
             case "operator":
                 char c = point.GetChar();
                 switch (c) {
                     case '{':
                         return new TextRegion(span.Span.Start, TextRegionType.Block);
                     case '[':
                         return new TextRegion(span.Span.Start, TextRegionType.Array);
                 }
                 break;
             case "comment":
                 return ParseComment(parser, RegionStartRegex, RegionEndRegex);
         }
     }
     return null;
 }
Beispiel #12
0
        protected TextRegion ParseComment(SnapshotParser parser, Regex regionStartRegex, Regex regionEndRegex)
        {
            SnapshotPoint      point = parser.CurrentPoint;
            ClassificationSpan span  = parser.CurrentSpan;
            Match m = regionStartRegex.Match(span.Span.GetText());

            if (m.Success)
            {
                return(new TextRegion(point, TextRegionType.Region)
                {
                    Name = m.Groups[1].Value
                });
            }
            if (!regionEndRegex.IsMatch(span.Span.GetText()))
            {
                return(new TextRegion(point, TextRegionType.Comment)
                {
                    EndPoint = span.Span.End
                });
            }
            return(null);
        }
Beispiel #13
0
 /// <summary>
 /// parses input buffer, searches for region start
 /// </summary>
 /// <param name="parser"></param>
 /// <returns>created region or null</returns>
 public override TextRegion TryCreateRegion(SnapshotParser parser)
 {
     ClassificationSpan span = parser.CurrentSpan;
     SnapshotPoint point = parser.CurrentPoint;
     if (span != null) {
         switch (span.ClassificationType.Classification) {
             case "punctuation":
                 char c = point.GetChar();
                 switch (c) {
                     case '{':
                         return new TextRegion(span.Span.Start, TextRegionType.Block);
                     case '[':
                         //todo does it make sense in C#?
                         return new TextRegion(span.Span.Start, TextRegionType.Array);
                 }
                 break;
             case "comment":
                 return ParseComment(parser);
         }
     }
     return null;
 }
Beispiel #14
0
 protected override TextRegion  ParseBuffer(SnapshotParser parser, TextRegion parent)
 {
     FunctionOccured = false;
     return(base.ParseBuffer(parser, parent));
 }
		protected override TextRegion  ParseBuffer(SnapshotParser parser, TextRegion parent)
		{
			FunctionOccured = false;
			return base.ParseBuffer(parser, parent);
		}