public static JSDocItems GetItems(JSDocSplitSet set) { var results = new JSDocItems(); var sb = new StringBuilder(); var key = string.Empty; var lines = GetLines(set.Text); foreach (var line in lines) { if (line.StartsWith("@")) { if (!string.IsNullOrWhiteSpace(key) || !string.IsNullOrWhiteSpace(sb.ToString())) { results.List.Add(new KeyValuePair <string, string>(key, sb.ToString().Trim())); } sb.Clear(); var index = line.IndexOf(' '); if (index > -1) { key = line.Substring(1, index - 1); sb.Append(line.Substring(index + 1) + ' '); } else { // issue: if an @indicator is alone on a line, followed by the actual text, this will miss it. key = line.Substring(1).Trim(); results.List.Add(new KeyValuePair <string, string>(key, sb.ToString().Trim())); key = string.Empty; } } else { sb.Append(line + ' '); } } if (!string.IsNullOrWhiteSpace(key) || sb.Length > 0) { results.List.Add(new KeyValuePair <string, string>(key, sb.ToString().Trim())); } results.PreviousLine = set.PreviousLine; results.NextLine = set.NextLine; return(results); }
public static JSDocNode Parse(JSDocSplitSet set, bool includeComments) { var items = JSDocHelper.GetItems(set); var result = JSDocNode.GetSpecificType(items); if (includeComments) { result.Snippet = set.Text; } result.Parse(items); return(result); }
public static JSDocSplitSet[] SpecialSplit(string text, string left, string right) { var list = new List <JSDocSplitSet>(); var indexLeft = -1; indexLeft = text.IndexOf(left, indexLeft + 1); while (indexLeft > -1) { var indexRight = text.IndexOf(right, indexLeft + left.Length); if (indexRight > -1) { var result = new JSDocSplitSet(); if (indexLeft > 0) { var before = JSDocHelper.PreviousLine(text, indexLeft); if (before.ToLowerInvariant().Contains("function")) { result.PreviousLine = before; } } if (indexRight > -1) { var after = JSDocHelper.NextLine(text, indexRight); if (after.ToLowerInvariant().Contains("function")) { result.NextLine = after; } } result.Text = text.Substring(indexLeft + left.Length, indexRight - indexLeft - left.Length); list.Add(result); indexLeft = indexRight; } indexLeft = text.IndexOf(left, indexLeft + 1); } return(list.ToArray()); }