public static bool FromAST(string text, int index, Block ast, CompletionList list) { var spanningBlock = AbstractSyntaxTree.SpanningBlock(ast, index); string pre = string.Empty; var data = new List <ICompletionData>(); if (spanningBlock?.Tag == BlockTag.Meta) { pre = FindMetaPretext(text, index); data.AddRange(FromMetaModel(AppViewModel.Instance.Settings.SelectedTemplate.MetaData)); } else { char?marker = IdentifyMarker(text, index, out pre); if (marker == null || marker == FootnoteMarker) { data.AddRange(FromReferences(ast)); } if (marker == null || marker == CitationMarker) { data.AddRange(FromBibliography(ast)); } if (marker == null || marker == HtmlMarker) { data.AddRange(HtmlData()); } if (marker == null || marker == LatexMarker) { data.AddRange(LatexData()); } } data.Sort((a, b) => a.Text.CompareTo(b.Text)); foreach (var item in data) { list.CompletionData.Add(item); } if (!string.IsNullOrWhiteSpace(pre)) { list.IsFiltering = true; list.SelectItem(pre); if (list.IsEmpty()) { return(false); } } return(true); }