internal static PkgdefRegistryKeyDataItemSegment ParseRegistryKeyDataItem(int startIndex, string text) { PreCondition.AssertGreaterThanOrEqualTo(startIndex, 0, nameof(startIndex)); PreCondition.AssertNotNullAndNotEmpty(text, nameof(text)); PreCondition.AssertOneOf(text[0], "@\"", "text[0]"); Action <PkgdefIssue> onIssue = PkgdefDocument.IgnoreIssue; PkgdefTokenizer tokenizer = PkgdefTokenizer.Create(startIndex, text, onIssue); tokenizer.Next(); return(PkgdefDocument.ParseRegistryKeyDataItem(tokenizer, onIssue)); }
/// <summary> /// Parse a PkgdefDocument from the provided characters. /// </summary> /// <param name="iterator">The characters to parse.</param> /// <returns>The parsed PkgdefDocument.</returns> public static PkgdefDocument Parse(Iterator <char> iterator) { PreCondition.AssertNotNull(iterator, nameof(iterator)); List <PkgdefIssue> issues = new List <PkgdefIssue>(); PkgdefTokenizer tokenizer = PkgdefTokenizer.Create(iterator, onIssue: issues.Add); tokenizer.EnsureHasStarted(); List <PkgdefSegment> segments = new List <PkgdefSegment>(); while (tokenizer.HasCurrent()) { segments.Add(PkgdefDocument.ParseSegment(tokenizer, onIssue: issues.Add)); } return(new PkgdefDocument(segments, issues)); }
private static PkgdefSegment ParseSegment(PkgdefTokenizer tokenizer, Action <PkgdefIssue> onIssue) { PreCondition.AssertNotNull(tokenizer, nameof(tokenizer)); PreCondition.AssertTrue(tokenizer.HasCurrent(), "tokenizer.HasCurrent()"); PreCondition.AssertNotNull(onIssue, nameof(onIssue)); PkgdefSegment result; switch (tokenizer.GetCurrent().GetTokenType()) { case PkgdefTokenType.Whitespace: result = PkgdefSegment.Whitespace(tokenizer.GetCurrent().GetStartIndex(), tokenizer.GetCurrent().GetText()); tokenizer.Next(); break; case PkgdefTokenType.NewLine: result = PkgdefSegment.NewLine(tokenizer.GetCurrent().GetStartIndex(), tokenizer.GetCurrent().GetText()); tokenizer.Next(); break; case PkgdefTokenType.ForwardSlash: result = PkgdefDocument.ParseLineComment(tokenizer, onIssue); break; case PkgdefTokenType.LeftSquareBracket: result = PkgdefDocument.ParseRegistryKeyPath(tokenizer, onIssue); break; case PkgdefTokenType.AtSign: case PkgdefTokenType.DoubleQuote: result = PkgdefDocument.ParseRegistryKeyDataItem(tokenizer, onIssue); break; default: result = PkgdefSegment.Unrecognized(tokenizer.GetCurrent().GetStartIndex(), tokenizer.GetCurrent().GetText()); tokenizer.Next(); break; } return(result); }
#pragma warning restore 67 public IList <ClassificationSpan> GetClassificationSpans(SnapshotSpan span) { PreCondition.AssertNotNull(span, nameof(span)); ITextSnapshot textSnapshot = span.Snapshot; ITextBuffer textBuffer = textSnapshot.TextBuffer; ITextVersion textVersion = textSnapshot.Version; int textVersionNumber = textVersion.VersionNumber; if (!this.textSnapshotClassifications.TryGet(textBuffer, textVersionNumber, out IReadOnlyList <ClassificationSpan> classificationSpans)) { PkgdefDocument parsedDocument = PkgdefDocument.Parse(textSnapshot.GetText()); List <ClassificationSpan> spans = new List <ClassificationSpan>(); foreach (PkgdefSegment segment in parsedDocument.GetSegments()) { switch (segment.GetSegmentType()) { case PkgdefSegmentType.LineComment: spans.Add(PkgdefClassifier.CreateClassificationSpan(textSnapshot, segment, this.commentClassificationType)); break; case PkgdefSegmentType.RegistryKeyPath: spans.Add(PkgdefClassifier.CreateClassificationSpan(textSnapshot, segment, this.registryKeyRelativePathClassificationType)); break; case PkgdefSegmentType.RegistryKeyDataItem: PkgdefRegistryKeyDataItemSegment registryKeyDataItemSegment = (PkgdefRegistryKeyDataItemSegment)segment; spans.Add(PkgdefClassifier.CreateClassificationSpan(textSnapshot, registryKeyDataItemSegment.GetNameSegment(), this.registryKeyDataItemNameClassificationType)); break; } } classificationSpans = spans; this.textSnapshotClassifications.Set(textBuffer, textVersionNumber, classificationSpans); } return(classificationSpans .Where((ClassificationSpan classificationSpan) => classificationSpan.Span.IntersectsWith(span.Span)) .ToList()); }
public static PkgdefRegistryKeyDataItemSegment RegistryKeyDataItem(int startIndex, string text) { return(PkgdefDocument.ParseRegistryKeyDataItem(startIndex, text)); }
public static PkgdefRegistryKeyPathSegment RegistryKeyPath(int startIndex, string text) { return(PkgdefDocument.ParseRegistryKeyPath(startIndex, text)); }
/// <summary> /// Parse a PkgdefDocument from the provided text. /// </summary> /// <param name="text">The text to parse.</param> /// <returns>The parsed PkgdefDocument.</returns> public static PkgdefDocument Parse(string text) { PreCondition.AssertNotNull(text, nameof(text)); return(PkgdefDocument.Parse(Iterator.Create(text))); }