public List <CF> Query <CF>(contentRelationQueryType qType, contentRelationType qRelation, IContentElement qReference, int limit = -1)
        {
            List <CF>          output   = new List <CF>();
            contentElementList elements = Query(qRelation, qReference, limit);

            foreach (IContentElement element in elements)
            {
                switch (qType)
                {
                case contentRelationQueryType.gatherFlags:

                    IContentToken ict = element as IContentToken;
                    if (ict != null)
                    {
                        output.AddRange(ict.flags.getEnumListFromFlags <CF>());                 // output.populateWith(ict.flags);
                    }
                    break;

                case contentRelationQueryType.gatherSentenceFlags:
                    IContentSentence ics = element as IContentSentence;
                    if (ics != null)
                    {
                        output.AddRange(ics.sentenceFlags.getEnumListFromFlags <CF>());                 // output.populateWith(ics.sentenceFlags);
                    }
                    break;

                case contentRelationQueryType.gatherParagraphFlags:
                    IContentParagraph icp = element as IContentParagraph;
                    if (icp != null)
                    {
                        output.AddRange(icp.flags.getEnumListFromFlags <CF>());                 // output.populateWith(icp.flags);
                    }
                    // output.populateWith(icp.flags);
                    break;

                case contentRelationQueryType.gatherBlockTags:
                    IContentBlock icb = element as IContentBlock;
                    if (icb != null)
                    {
                        output.AddRange(icb.flags.getEnumListFromFlags <CF>());                 // output.populateWith(icb.flags);
                    }
                    break;

                case contentRelationQueryType.gatherOrigins:
                    throw new NotImplementedException("gatherOrigin");

                    //IContentToken icto = element as IContentToken;
                    //if (icto != null) output.Add((CF)icto.origin);
                    break;

                default:
                    //output.populateWith(element.flags);
                    break;
                }
            }
            return(output);
        }
        public List <string> Query(contentRelationQueryType qType, contentRelationType qRelation, IContentElement qReference, int limit = -1)
        {
            List <string>      output   = new List <string>();
            contentElementList elements = Query(qRelation, qReference, limit);

            foreach (IContentElement element in elements)
            {
                switch (qType)
                {
                case contentRelationQueryType.gatherContents:
                    output.Add(element.content);
                    break;

                default:
                    break;
                }
            }
            return(output);
        }