anchor.diff:                ),
               ),
             ),
  +        ],
  +      ),
  +    );
  +  }
  +}
  +
  +class Bidi extends StatefulWidget {
  +  const Bidi({ Key key }) : super(key: key);
  +
  +  @override
  +  _BidiState createState() => new _BidiState();
  +}
  +
  +class _BidiState extends State<Bidi> {
  +  @override
  +  Widget build(BuildContext context) {
  +    return new Container(
  +      color: Colors.black,
  +      child: new ListView(
  +        padding: const EdgeInsets.symmetric(vertical: 40.0, horizontal: 20.0),
  +        children: <Widget>[
  +          new RichText(
  +            text: new TextSpan(
  +              children: <TextSpan>[
  +                new TextSpan(text: 'abc', style: new TextStyle(fontWeight: FontWeight.w100, fontSize: 40.0, color: Colors.blue.shade100)),
  +                new TextSpan(text: 'ghi', style: new TextStyle(fontWeight: FontWeight.w400, fontSize: 40.0, color: Colors.blue.shade500)),
  +                new TextSpan(text: 'mno', style: new TextStyle(fontWeight: FontWeight.w900, fontSize: 40.0, color: Colors.blue.shade900)),
  +                new TextSpan(text: 'LKJ', style: new TextStyle(fontWeight: FontWeight.w500, fontSize: 40.0, color: Colors.blue.shade700)),
  +                new TextSpan(text: 'FED', style: new TextStyle(fontWeight: FontWeight.w300, fontSize: 40.0, color: Colors.blue.shade300)),
  +              ],
  +            ),
  +            textAlign: TextAlign.center,
  +            textDirection: TextDirection.ltr,
  +          ),
  +          new RichText(
  +            text: new TextSpan(
  +              children: <TextSpan>[
  +                new TextSpan(text: '${Unicode.LRO}abc', style: new TextStyle(fontWeight: FontWeight.w100, fontSize: 40.0, color: Colors.blue.shade100)),
  +                new TextSpan(text: '${Unicode.RLO}DEF', style: new TextStyle(fontWeight: FontWeight.w300, fontSize: 40.0, color: Colors.blue.shade300)),
  +                new TextSpan(text: '${Unicode.LRO}ghi', style: new TextStyle(fontWeight: FontWeight.w400, fontSize: 40.0, color: Colors.blue.shade500)),
  +                new TextSpan(text: '${Unicode.RLO}JKL', style: new TextStyle(fontWeight: FontWeight.w500, fontSize: 40.0, color: Colors.blue.shade700)),
  +                new TextSpan(text: '${Unicode.LRO}mno', style: new TextStyle(fontWeight: FontWeight.w900, fontSize: 40.0, color: Colors.blue.shade900)),
  +              ],
  +            ),
  +            textAlign: TextAlign.center,
  +            textDirection: TextDirection.ltr,
  +          ),
  +          const SizedBox(height: 40.0),
  +          new RichText(
  +            text: new TextSpan(
  +              children: <TextSpan>[
  +                new TextSpan(text: '${Unicode.LRO}abc${Unicode.RLO}D', style: new TextStyle(fontWeight: FontWeight.w100, fontSize: 40.0, color: Colors.orange.shade100)),
  +                new TextSpan(text: 'EF${Unicode.LRO}gh', style: new TextStyle(fontWeight: FontWeight.w500, fontSize: 50.0, color: Colors.orange.shade500)),
  +                new TextSpan(text: 'i${Unicode.RLO}JKL${Unicode.LRO}mno', style: new TextStyle(fontWeight: FontWeight.w900, fontSize: 60.0, color: Colors.orange.shade900)),
  +              ],
  +            ),
  +            textAlign: TextAlign.center,
  +            textDirection: TextDirection.ltr,
  +          ),
  +          new RichText(
  +            text: new TextSpan(
  +              children: <TextSpan>[
  +                new TextSpan(text: 'abc', style: new TextStyle(fontWeight: FontWeight.w100, fontSize: 40.0, color: Colors.orange.shade100)),
  +                new TextSpan(text: 'gh', style: new TextStyle(fontWeight: FontWeight.w500, fontSize: 50.0, color: Colors.orange.shade500)),
  +                new TextSpan(text: 'imno', style: new TextStyle(fontWeight: FontWeight.w900, fontSize: 60.0, color: Colors.orange.shade900)),
  +                new TextSpan(text: 'LKJ', style: new TextStyle(fontWeight: FontWeight.w900, fontSize: 60.0, color: Colors.orange.shade900)),
  +                new TextSpan(text: 'FE', style: new TextStyle(fontWeight: FontWeight.w500, fontSize: 50.0, color: Colors.orange.shade500)),
  +                new TextSpan(text: 'D', style: new TextStyle(fontWeight: FontWeight.w100, fontSize: 40.0, color: Colors.orange.shade100)),
  +              ],
  +            ),
  +            textAlign: TextAlign.center,
  +            textDirection: TextDirection.ltr,
  +          ),
  +          const SizedBox(height: 40.0),
  +          const Text('The pairs of lines above should match exactly.', textAlign: TextAlign.center, style: const TextStyle(inherit: false, fontSize: 14.0, color: Colors.white)),
           ],
         ),
       );
  
positive.code:               children: <Widget>[
                  new FlatButton(
                    child: const Text('Test Underlines'),
                    color: Colors.cyan.shade200,
                    textColor: Colors.white,
                    onPressed: () { Navigator.of(context).pushNamed('underlines'); },
                  ),
                  new FlatButton(
                    child: const Text('Test Font Fallback'),
                    color: Colors.pink.shade700,
                    textColor: Colors.white,
                    onPressed: () { Navigator.of(context).pushNamed('fallback'); },
                  ),
                  new FlatButton(
                    child: const Text('TextSpan Fuzzer'),
                    color: Colors.yellow,
                    textColor: Colors.black,
                    onPressed: () { Navigator.of(context).pushNamed('fuzzer'); },
                  ),
                  new FlatButton(
                    child: const Text('Diacritics Fuzzer'),
                    color: Colors.black,
                    textColor: Colors.white,
                    onPressed: () { Navigator.of(context).pushNamed('zalgo'); },
                  ),
                  new FlatButton(
                    child: const Text('Painting Fuzzer'),
                    color: Colors.blueGrey.shade200,
                    textColor: Colors.black,
                    onPressed: () { Navigator.of(context).pushNamed('painting'); },
                  ),
  
negative.code:     routes: <String, WidgetBuilder>{
        'underlines': (BuildContext context) => const Underlines(),
        'fallback': (BuildContext context) => const Fallback(),
        'bidi': (BuildContext context) => const Bidi(),
        'fuzzer': (BuildContext context) => new Fuzzer(seed: seed),
        'zalgo': (BuildContext context) => new Zalgo(seed: seed),
        'painting': (BuildContext context) => new Painting(seed: seed),
  