// ******************************************************************************** /// <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); } } } }
// ******************************************************************************** /// <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); } } } }