docs: public String filter(String input, FilterContext context) {
      //Logger.debug("FilterPipe.filter: context = "+context);
      String output = input;
      Iterator filterIterator = activeFilters.iterator();
      RenderContext renderContext = context.getRenderContext();
  
      // Apply every filter in activeFilters to input string
      while (filterIterator.hasNext()) {
        Filter f = (Filter) filterIterator.next();
        if (! inactiveFilters.contains(f)) {
        try {
          // assume all filters non cacheable
          if (f instanceof CacheFilter) {
            renderContext.setCacheable(true);
          } else {
            renderContext.setCacheable(false);
          }
          String tmp = f.filter(output, context);
          if (output.equals(tmp)) {
            renderContext.setCacheable(true);
          }
          if (null == tmp) {
            log.warn("FilterPipe.filter: error while filtering: " + f);
          } else {
            output = tmp;
          }
          renderContext.commitCache();
        } catch (Exception e) {
          log.warn("Filtering exception: " + f, e);
        }
      }
      }
      return output;
    }