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;
 }