code: protected String resolveVariable(final String variableName, final StrBuilder buf, final int startPos, final int endPos) {
          final StrLookup<?> resolver = getVariableResolver();
          if (resolver == null) {
              return null;
          }
          return resolver.lookup(variableName);
      }
docs: Internal method that resolves the value of a variable.
  <p>
  Most users of this class do not need to call this method. This method is
  called automatically by the substitution process.
  <p>
  Writers of subclasses can override this method if they need to alter
  how each substitution occurs. The method is passed the variable's name
  and must return the corresponding value. This implementation uses the
  {@link #getVariableResolver()} with the variable's name as the key.
  
  @param variableName  the name of the variable, not null
  @param buf  the buffer where the substitution is occurring, not null
  @param startPos  the start position of the variable including the prefix, valid
  @param endPos  the end position of the variable including the suffix, valid
  @return the variable's value or <b>null</b> if the variable is unknown