private ITokenV2[] CreateInner(string s) { var innerRemaining = this.InnerString; var innerTokens = new List <ITokenV2>(); while (innerRemaining.Length > 0) { if (!MarkerTokenV2.AtBeginningOf(innerRemaining)) { var normal = new NormalTokenV2(innerRemaining); innerTokens.Add(normal); innerRemaining = normal.Remaining; } else { var marker = new MarkerTokenV2(innerRemaining); innerTokens.Add(marker); innerRemaining = marker.Remaining; } } return(innerTokens.ToArray()); }
private ITokenV2 CreateNextToken(string s) { if (MarkerTokenV2.AtBeginningOf(s)) { return(new MarkerTokenV2(s)); } return(new NormalTokenV2(s)); }
public NormalTokenV2(string s) { var index = MarkerTokenV2.FirstMarkerIndex(s); if (index == -1) { this.Count = s.Length; this.Remaining = string.Empty; } else { this.Count = index; this.Remaining = s.Substring(index, s.Length - index); } }
public MarkerTokenV2(string s) { if (!MarkerTokenV2.AtBeginningOf(s)) { throw new ArgumentException("Marker must be at the beginning of the string"); } var marker = markerPattern.Match(s); var parts = marker.Value.Replace("(", "").Replace(")", "").Split(new string[] { "x" }, StringSplitOptions.RemoveEmptyEntries); this.Take = Int32.Parse(parts[0]); this.Repeat = Int32.Parse(parts[1]); this.InnerString = s.Substring(marker.Length, this.Take); this.Remaining = s.Substring(marker.Index + marker.Length + this.Take, s.Length - (marker.Index + marker.Length + this.Take)); }