public IIntellisenseStringResult Build(string selectedOption, int originalCaret, string originalText, string editorText)
        {
            if (originalText == String.Empty || selectedOption.StartsWith(originalText))
            {
                return(new IntellisenseStringResult(selectedOption, selectedOption.Length));
            }
            try
            {
#pragma warning disable 618
                var rep = IntellisenseStringProvider.doReplace(originalText, originalCaret, selectedOption);
#pragma warning restore 618
                return(new IntellisenseStringResult(rep.Item1, rep.Item2));
            }
            catch (Exception)
            {
                string diff           = originalCaret >= editorText.Length - 1 ? editorText : editorText.Substring(0, originalCaret + 1);
                int    ignore         = originalCaret - Math.Max(diff.LastIndexOf("[[", StringComparison.Ordinal), diff.LastIndexOf("]]", StringComparison.Ordinal) + 1);
                var    len            = originalCaret - ignore;
                var    delimchar      = "";
                var    lastIndexOfAny = diff.LastIndexOfAny(_tokenisers);
                if (len < 0)
                {
                    if (lastIndexOfAny > 0 && !"[]".Contains(diff[lastIndexOfAny].ToString()))
                    {
                        delimchar = diff[lastIndexOfAny].ToString();
                    }
                    ignore = originalCaret - lastIndexOfAny;
                }
                //var x =lastIndexOfAny < 0 && diff.LastIndexOf("[[") < 0 ? 0 : originalCaret - ignore;
                //var y = lastIndexOfAny < 0 && diff.LastIndexOf("]]") < 0 ? 0 : originalCaret - ignore;
                //len = Math.Max(x, y);
                //if(len<=0)
                len = lastIndexOfAny < 0 && diff.LastIndexOfAny("[]".ToCharArray()) < 0 ? 0 : originalCaret - ignore;
                var suffix = originalText.Substring(originalCaret);
                if (suffix.StartsWith("]]"))
                {
                    suffix = suffix.Substring(2);
                }
                var text = originalText.Substring(0, len) + delimchar + selectedOption + suffix;
                var car  = (originalText.Substring(0, len) + selectedOption).Length + delimchar.Length;

                return(new IntellisenseStringResult(text, car));
            }
        }