private void SetMetaData(TmMatch match, TranslationUnit unit, SearchSettings settings)
        {
            // Only concordance search method returns segments with attributes.
            // That's why concordance search for already found segment is used here.
            TmMatch matchToCopyFrom = settings.Mode == SearchMode.ConcordanceSearch ?
                                      match :
                                      RetrieveSimilarMatchWithConcordanceSearch(match, settings);

            foreach (TuAttributeField attr in matchToCopyFrom.TranslationUnitFields.Attributes)
            {
                if (attr.Values.Count == 0)
                {
                    continue;
                }

                FieldValue field;

                if (attr.Values.Count == 1)
                {
                    field = new SingleStringFieldValue(attr.Name, attr.Values[1]);
                }
                else
                {
                    field = new MultipleStringFieldValue(attr.Name, TuAttributeValuesToList(attr.Values));
                }

                unit.FieldValues.Add(field);
            }

            SetSystemFieldsValues(matchToCopyFrom, unit);
        }
        private TmMatch RetrieveSimilarMatchWithConcordanceSearch(TmMatch match, SearchSettings settings)
        {
            var segmentText = match.GetSource(settings.IsConcordanceSearch);

            // concordance search don't return any results with too little value of MaxResults
            // That's why it isn't set up to use it's default value 20.
            Trados.Interop.TMAccess.SearchResult tradosSegments = this.TranslationProvider.TradosProvider.ConcordanceSearch(
                segmentText, settings.MinScore);

            return(tradosSegments.TmMatches.Count > 0 ? tradosSegments.TmMatches[1] : match);
        }
 public static string GetSource(this TmMatch tm, bool isConcordance)
 {
     return(!isConcordance
                ? tm.GetSource()
                : tm.TtxTranslationUnit.Children[0].Children[1].Children[0].Children[0].Children[0].Text);
 }