public TextSymbolizerBuilder reset() {
   fill.reset(); // TODO: default fill for text?
   halo.unset(); // no default halo
   label = null;
   geometry = null;
   placement.reset();
   options.clear();
   uom = null;
   unset = false;
   return this;
 }
 public TextSymbolizerBuilder reset(TextSymbolizer symbolizer) {
   fill.reset(symbolizer.getFill());
   halo.reset(symbolizer.getHalo());
   label = symbolizer.getLabel();
   geometry = symbolizer.getGeometryPropertyName();
   LabelPlacement otherPlacement = symbolizer.getLabelPlacement();
   if (symbolizer.getLabelPlacement() instanceof PointPlacement) {
     PointPlacementBuilder builder = new PointPlacementBuilder(this);
     builder.reset((PointPlacement) otherPlacement);
     placement = builder;
   } else if (symbolizer.getLabelPlacement() instanceof LabelPlacement) {
     LinePlacementBuilder builder = new LinePlacementBuilder(this);
     builder.reset((LinePlacement) otherPlacement);
     placement = builder;
   } else {
     throw new IllegalArgumentException("Unrecognized label placement: " + otherPlacement);
   }
   unset = false;
   return this;
 }