// ********************************************************************************
        /// <summary>
        ///
        /// </summary>
        /// <param name="request"></param>
        /// <param name="result"></param>
        /// <created>UPh,20.03.2016</created>
        /// <changed>UPh,20.03.2016</changed>
        // ********************************************************************************
        internal void HandleProhibitedTerminologyRequest(TermBaseRequest request, List <TerminologyResultArgs> result = null)
        {
            bool bSync = (result != null);


            bool bTargetLanguage = (_TermbaseQuery.LCID2 > 0);


            // Build index if necessary (works on target language)
            if (_Index2.LCID != _TermbaseQuery.LCID2)
            {
                TermListItems items = RetrieveTermList(false, bTargetLanguage);
                if (!bSync && _shouldStop)
                {
                    return;
                }

                // Index from items
                _Index2.BuildIndex(bTargetLanguage ?  _TermbaseQuery.LCID2 : _TermbaseQuery.LCID1, items);
            }


            WordSegments wordSegments = new WordSegments(request.Term);

            int nWords = wordSegments.Count;

            if (nWords == 0)
            {
                return;
            }


            // Start with max term word count (3)

            for (int nTermWords = 3; nTermWords >= 1; nTermWords--)
            {
                for (int iWord0 = 0; iWord0 < nWords - nTermWords + 1; iWord0++)
                {
                    int iWord1 = iWord0 + nTermWords - 1;

                    int from = wordSegments.GetWordStart(iWord0);
                    int to   = wordSegments.GetWordEnd(iWord1);

                    foreach (IndexItem match in _Index2.Matches(request.Term, from, to - from))
                    {
                        HandleProhibitedTerminologyMatch(bTargetLanguage, request.ID, match, from, to - from, result);
                    }
                }
            }
        }
示例#2
0
        // ********************************************************************************
        /// <summary>
        /// Handle request for terminology 
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        /// <created>UPh,25.10.2015</created>
        /// <changed>UPh,17.11.2015</changed>
        // ********************************************************************************
        internal void HandleTerminologyRequest(TermBaseRequest request, List<TerminologyResultArgs> result = null)
        {
            bool bSync = (result != null);

            // Build index if necessary
            if (_Index.LCID != _TermbaseQuery.LCID1)
            {
                TermListItems items = RetrieveTermList(true, false);
                if (!bSync && _shouldStop)
                    return;

                // Index from items
                _Index.BuildIndex(_TermbaseQuery.LCID1, items);
            }

            WordSegments wordSegments = new WordSegments(request.Term);

            int nWords = wordSegments.Count;
            if (nWords == 0)
                return;

            // Start with max term word count (3)

            for (int nTermWords = 3; nTermWords >= 1; nTermWords--)
            {
                for (int iWord0 = 0; iWord0 < nWords - nTermWords + 1; iWord0++)
                {
                    int iWord1 = iWord0 + nTermWords - 1;

                    int from = wordSegments.GetWordStart(iWord0);
                    int to   = wordSegments.GetWordEnd(iWord1);

                    foreach (IndexItem match in _Index.Matches(request.Term, from, to - from))
                    {
                        HandleTerminologyMatch(request.ID, match, from, to - from, result);
                    }
                }
            }
        }