public Character GetCharacterToSelectForCurrentBlock(IEnumerable <Character> currentCharacters)
        {
            if (CurrentBlock.CharacterIs(CurrentBookId, CharacterVerseData.StandardCharacter.Narrator))
            {
                return(Character.Narrator);
            }
            if (CurrentBlock.CharacterIsUnclear)
            {
                if (!CurrentBlock.ContainsVerseNumber)
                {
                    var charactersForCurrentVerse = GetUniqueCharacterVerseObjectsForCurrentReference();
                    // ENHANCE: Some "Quotations" in the control file may represent text that is typically rendered as
                    // indirect speech (and should therefore be marked as Indirect|Quotation). We really don't want to
                    // include these, but in practice it probably won't matter much.
                    charactersForCurrentVerse.RemoveWhere(c => !c.IsExpected && c.QuoteType != QuoteType.Quotation);
                    if (charactersForCurrentVerse.Distinct(m_characterEqualityComparer).Count() != 2)
                    {
                        return(null);
                    }
                    var userConfirmedBlock = CurrentBook.GetBlocksForVerse(CurrentBlock.ChapterNumber, CurrentBlock.InitialStartVerseNumber).OnlyOrDefault(b => b.UserConfirmed);
                    if (userConfirmedBlock == null)
                    {
                        return(null);
                    }

                    charactersForCurrentVerse.RemoveWhere(c => c.Character == userConfirmedBlock.CharacterId);

                    if (charactersForCurrentVerse.Count != 1)
                    {
                        return(null);
                    }

                    return(currentCharacters.FirstOrDefault(item => item.LocalizedCharacterId == charactersForCurrentVerse.Single().LocalizedCharacter));
                }
            }
            return(currentCharacters.FirstOrDefault(item => item.CharacterId == CurrentBlock.CharacterId));
        }