code: private String transformRecursive(String original, State state) {
  
      String value = original;
      if (this.parent != null) {
        value = this.parent.transformRecursive(original, state);
        if (state.stop) {
          return value;
        }
      }
      for (StringTransformerRule rule : this.rules) {
        String transformed = rule.transform(value);
        if ((transformed != value) && (rule.isStopOnMatch())) {
          state.stop = true;
          return transformed;
        }
        value = transformed;
      }
      return value;
    }
docs: This method implements {@link #transform(String)} recursively.
  
  @param original is the original value.
  @param state is the {@link State} used to indicate if a {@link StringTransformerRule rule} causes the chain to
  {@link State#stop}.
  @return the transformed result.