// used for KWIC highlighting
  final Pattern[] buildHighlightTerms(ArrayList<SearchClause> searchClauses) {

    ArrayList<Pattern> hilites = new ArrayList<Pattern>();
    Iterator<SearchClause> stit = searchClauses.iterator();
    while (stit.hasNext()) {

      try {
        SearchClause searchClause = stit.next();
        String transformedString = searchClause.buildTransformedString();
        if (transformedString == null) {
          continue;
        }
        if ("".equals(transformedString)) {
          continue;
        }
        if (searchClause.getAllClauseRoles().contains(ClauseRole.REGEX)) {
          String trimmedRegex = trimRegex(transformedString);
          Pattern[] regexPatterns = matchRegexToDocument(trimmedRegex);
          hilites.addAll(Arrays.asList(regexPatterns));

        } else if (searchClause.parseForSearchType() == StringSearchFacet.SearchType.PROXIMITY) {
          transformedString = transformedString.replaceAll("(\\d+)w", "");
          tempRegex = "Prox";
          hilites.addAll(Arrays.asList(util.getPhraseHighlightPatterns(transformedString)));

        } else if (searchClause.parseForSearchType() == StringSearchFacet.SearchType.SUBSTRING) {
          Pattern[] patterns = util.getSubstringHighlightPatterns(transformedString);
          for (int i = 0; i < patterns.length; i++) {

            tempRegex += "###  ";
            tempRegex += patterns[i].toString();
            tempRegex += " ###";
          }
          hilites.addAll(Arrays.asList(patterns));

        } else {
          tempRegex = "Other";
          Pattern[] patterns = util.getPhraseHighlightPatterns(transformedString);
          hilites.addAll(Arrays.asList(patterns));
        }

      } catch (Exception e) {
      }
    }
    Pattern[] patterns = new Pattern[hilites.size()];
    return hilites.toArray(patterns);
  }