docs: @Override
  	public void visit(Rule rule) {
  		Rule copy = null;
  		Filter filterCopy = null;
  
  		if (rule.getFilter() != null) {
  			Filter filter = rule.getFilter();
  			filterCopy = copy(filter);
  		}
  
  		List<Symbolizer> symsCopy = new ArrayList<Symbolizer>();
  		for (Symbolizer sym : rule.symbolizers()) {
  			if (!skipSymbolizer(sym)) {
  				Symbolizer symCopy = copy(sym);
  				symsCopy.add(symCopy);
  			}
  		}
  
  		Graphic[] legendCopy = rule.getLegendGraphic();
  		for (int i = 0; i < legendCopy.length; i++) {
  			legendCopy[i] = copy(legendCopy[i]);
  		}
  
  		Description descCopy = rule.getDescription();
  		descCopy = copy(descCopy);
  
  		copy = sf.createRule();
  		copy.symbolizers().addAll(symsCopy);
  		copy.setDescription(descCopy);
  		copy.setLegendGraphic(legendCopy);
  		copy.setName(rule.getName());
  		copy.setFilter(filterCopy);
  		copy.setElseFilter(rule.isElseFilter());
  		copy.setMaxScaleDenominator(rule.getMaxScaleDenominator());
  		copy.setMinScaleDenominator(rule.getMinScaleDenominator());
  
  		if (STRICT && !copy.equals(rule)) {
  			throw new IllegalStateException(
  					"Was unable to duplicate provided Rule:" + rule);
  		}
  		pages.push(copy);
  	}