anchor.diff:  }
   
   /// A linear decoration to draw near the text
  -enum TextDecoration {
  +class TextDecoration {
  +  const TextDecoration._(this._mask);
  +
  +  /// Constructs a decoration that paints the union of all the given decorations.
  +  factory TextDecoration.combine(List<TextDecoration> decorations) {
  +    int mask = 0;
  +    for (TextDecoration decoration in decorations)
  +      mask |= decoration._mask;
  +    return new TextDecoration._(mask);
  +  }
  +
  +  final int _mask;
  +
  +  /// Whether this decoration will paint at least as much decoration as the given decoration.
  +  bool contains(TextDecoration other) {
  +    return (_mask | other._mask) == _mask;
  +  }
  +
     /// Do not draw a decoration
  -  none,
  +  static const TextDecoration none = const TextDecoration._(0x0);
   
     /// Draw a line underneath each line of text
  -  underline,
  +  static const TextDecoration underline = const TextDecoration._(0x1);
   
     /// Draw a line above each line of text
  -  overline,
  +  static const TextDecoration overline = const TextDecoration._(0x2);
   
     /// Draw a line through each line of text
  -  lineThrough
  +  static const TextDecoration lineThrough = const TextDecoration._(0x4);
  +
  +  bool operator ==(dynamic other) {
  +    if (identical(this, other))
  +      return true;
  +    if (other is! TextDecoration)
  +      return false;
  +    final TextDecoration typedOther = other;
  +    return _mask == typedOther._mask;
  +  }
  +
  +  int get hashCode => _mask.hashCode;
  +
  +  String toString() {
  +    if (_mask == 0)
  +      return 'TextDecoration.none';
  +    List<String> values = <String>[];
  +    if (_mask & underline._mask != 0)
  +      values.add('underline');
  +    if (_mask & overline._mask != 0)
  +      values.add('overline');
  +    if (_mask & lineThrough._mask != 0)
  +      values.add('lineThrough');
  +    if (values.length == 1)
  +      return 'TextDecoration.${values[0]}';
  +    return 'TextDecoration.combine([${values.join(", ")}])';
  +  }
   }
   
   /// The style in which to draw a text decoration
  
positive.code: }
  
  /// The thickness of the glyphs used to draw the text
  enum FontWeight {
    /// Thin, the least thick
    w100,
  
    /// Extra-light
    w200,
  
    /// Light
    w300,
  
    /// Normal / regular / plain
    w400,
  
    /// Medium
    w500,
  
    /// Semi-bold
    w600,
  
    /// Bold
    w700,
  
    /// Extra-bold
    w800,
  
    /// Black, the most thick
    w900
  }
  
  /// Whether to align text horizontally
  
negative.code: class TextStyle {
    TextStyle({
      Color color,
      TextDecoration decoration,
      Color decorationColor,
      TextDecorationStyle decorationStyle,
      FontWeight fontWeight,
  