public TonalityMarkingOutputResult4Blogs Processing(TonalityMarkingInputParams4Blogs inputParams)
        {
            //1.
            var bps = new BlogsProcessingStructure(inputParams);

            //2.
            ProcessingRecurrent(bps);

            //3.
            var result = new TonalityMarkingOutputResult4Blogs
                         (
                bps.Tuples,
                RuleBase.GetOperateRulesNamesDebugInfoOutput()
                         );

            return(result);
        }
        private void ProcessingRecurrent(BlogsProcessingStructure bps, int level = 0)
        {
            var posts = ((level == 0)
                        ? bps.InputParams4Blogs.InputXml.GetMultiNodes(bps.Xpath4SelectPosts)
                        : bps.InputParams4Blogs.InputXml.XPathSelectElements(bps.Xpath4SelectPosts)).ToArray();

            foreach (var post in posts)
            {
                //1.
                var body = post.GetSingleNode(BlogsConsts.BODY).Value;
                if (body.IsEmptyOrNull())
                {
                    continue;
                }

                bps.TMInputParamsWithInquiriesSynonyms.InputText = body;

                var continueProcessing = true;
                var tmResult           = _TonalityMarking.ExecuteTonalityMarking(bps.TMInputParamsWithInquiriesSynonyms);
                if (tmResult.InquiryAllocateStatus == InquiryAllocateStatus.NotAllocated)
                {
                    if (level == 0)
                    {
                        continue;
                    }

                    bps.TMInputParamsWithoutInquiriesSynonyms.InputText = tmResult.OutputXml;

                    tmResult = _TonalityMarking.ExecuteTonalityMarking(bps.TMInputParamsWithoutInquiriesSynonyms);
                    if (tmResult.InquiryAllocateStatus == InquiryAllocateStatus.NotAllocated)
                    {
                        continue;
                    }
                    continueProcessing = false;
                }

                //2.
                var outputXml = default(string);
                switch (bps.InputParams4Blogs.OutputBlogsFormat)
                {
                case OutputBlogsFormat.LinguisticXml:
                    outputXml = tmResult.OutputXml;
                    break;

                case OutputBlogsFormat.Offsets:
                    var offsetsProcessor = new OffsetsProcessor(/*body*/);
                    var offsets          = offsetsProcessor.CreateOffsetsString(tmResult.GetOutputXDocument().Root);
                    outputXml = offsets;
                    break;

                default: throw (new ArgumentException(bps.InputParams4Blogs.OutputBlogsFormat.ToString()));
                }

                //3.
                var id = post.GetSingleNode(BlogsConsts.ID).Value;
                //var parent = post.GetSingleNode( BlogsConsts.PARENT ).Value;
                //var level  = post.GetSingleNode( BlogsConsts.LEVEL  ).Value;

                var tuple = new TonalityMarkingTuple4Blogs
                            (
                    id,
                    outputXml,
                    bps.InputParams4Blogs.OutputBlogsFormat,
                    tmResult.AuthorTonalityMarkingTuple.Positive,
                    tmResult.AuthorTonalityMarkingTuple.Negative,
                    tmResult.AuthorTonalityMarkingTuple.Objects //GetOutputXmlXDocument().ExtractObjects()
                            );
                bps.Tuples.Add(tuple);

                //4.
                if (continueProcessing)
                {
                    bps.Xpath4SelectPosts = BlogsConsts.POSTS_FORMAT_XPATH.FormatEx(level + 1, id);
                    ProcessingRecurrent(bps, level + 1);
                }
            }
        }