protected void handleSpecialSubstitution(String replace,String replaceWith,int startPos,String description){
  super.handleSpecialSubstitution(replace,replaceWith,startPos,description);
  if (replace.equals("<dictionary>")) {
    if (replaceWith.charAt(0) == '(') {
      error("Dictionary group can't be enclosed in (",startPos,description);
    }
    dictionaryExpression=replaceWith;
    dictionaryChars=CharSet.parseString(replaceWith);
  }
}

protected void handleSpecialSubstitution ( String replace , String replaceWith , int startPos , String description ) { super . handleSpecialSubstitution ( replace , replaceWith , startPos , description ) ; if ( replace . equals ( "<dictionary>" ) ) { if ( replaceWith . charAt ( 0 ) == '(' ) { error ( "Dictionary group can't be enclosed in (" , startPos , description ) ; } dictionaryExpression = replaceWith ; dictionaryChars = CharSet . parseString ( replaceWith ) ; } }
we override handlespecialsubstitution ( ) to add logic to handle the < dictionary > tag . if we see a substitution named " < dictionary > " , parse the substitution expression and store the result in dictionarychars .
