anchor.diff:        = new BlacklistingTextInputFormatter(new RegExp(r'\n'));
   }
   
  -/// A [TextInputFormatter] that allows only the insertion of whitelisted 
  +/// A [TextInputFormatter] that allows only the insertion of whitelisted
   /// characters patterns.
  -/// 
  +///
   /// Since this formatter only removes characters from the text, it attempts to
   /// preserve the existing [TextEditingValue.selection] to values it would now
   /// fall at with the removed characters.
  -/// 
  +///
   /// See also:
  -///  
  -///  * [TextInputFormatter].
  -///  * [BlacklistingTextInputFormatter].
  +///
  +///  * [BlacklistingTextInputFormatter], which uses a blacklist instead of a
  +///    whitelist.
   class WhitelistingTextInputFormatter extends TextInputFormatter {
  -  WhitelistingTextInputFormatter(this.whitelistedPattern) : 
  +  /// Creates a formatter that allows only the insertion of whitelisted characters patterns.
  +  ///
  +  /// The [blacklistedPattern] must not be null.
  +  WhitelistingTextInputFormatter(this.whitelistedPattern) :
       assert(whitelistedPattern != null);
   
     /// A [Pattern] to extract all instances of allowed characters.
  -  /// 
  +  ///
     /// [RegExp] with multiple groups is not supported.
     final Pattern whitelistedPattern;
   
  
positive.code:     TextEditingValue newValue,
    ) {
      return _selectionAwareTextManipulation(
        newValue, 
        (String substring) {
          return whitelistedPattern
              .allMatches(substring)
  
negative.code: ///    characters.
  abstract class TextInputFormatter {
    /// Called when text is being typed or cut/copy/pasted in the [EditableText].
    ///
    /// You can override the resulting text based on the previous text value and
    /// the incoming new text value.
    ///
    /// When formatters are chained, `oldValue` reflects the initial value of
    /// [TextEditingValue] at the beginning of the chain.
    TextEditingValue formatEditUpdate(
      TextEditingValue oldValue,
      TextEditingValue newValue
    );
  
  