internal static GetHereStringResult GetHereString(string varIdentifier, string[] lines, int startIndex, HereStringToken hsToken) { var currentLine = lines[startIndex]; var nextLine = lines[startIndex + 1]; var nameStart = currentLine.IndexOf('$') + 1; var nameEnd = currentLine.IndexOf('=') - 1; var name = currentLine .Substring(nameStart, nameEnd - nameStart) .Replace(" ", ""); var hereString = new StringBuilder(); var inContent = false; for (var index = startIndex; index < lines.Length; index++) { currentLine = lines[index]; if (!inContent && !hsToken.BeginIdentifiers.Any(currentLine.Contains)) continue; if (!inContent && hsToken.BeginIdentifiers.Any(currentLine.Substring(currentLine.IndexOf('@')).Equals)) inContent = true; else if (hsToken.EndIdentifiers.Any(currentLine.Trim().Equals)) { return new GetHereStringResult() { Value = new HereString(name, hereString.ToString()), LastLine = index }; } else //inContent hereString.Append(currentLine); } return null; }
internal static List<HereString> GetHereStrings(this ISEFile file, HereStringToken hsToken, string varIdentifier = "") { var hereStrings = new List<HereString>(); var lines = file.Editor.Text.Split(hsToken.LineBreakers, StringSplitOptions.RemoveEmptyEntries); for (var index = 0; index < lines.Length - 1; index++) { var currentLine = lines[index]; var nextLine = lines[index + 1]; //check if current line is the beginning of a HereString if (!currentLine.Contains($"${varIdentifier}") || (!hsToken.BeginIdentifiers.Any(currentLine.Contains) && !hsToken.BeginIdentifiers.Any(nextLine.Contains)) || !hsToken.EndIdentifiers.Any(lines.Skip(index + 1).Contains) && !hsToken.EndIdentifiers.Any(nextLine.Contains)) continue; var hsResult = HereString.GetHereString(varIdentifier, lines, index, hsToken); if (hsResult != null) { hereStrings.Add(hsResult.Value); index = hsResult.LastLine; } } return hereStrings; }