// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// Don't modify this file by hand! It's generated by tool/generate.dart.

import 'glyph_set.dart';

/// A [GlyphSet] that includes only Unicode glyphs.
class UnicodeGlyphSet implements GlyphSet {
  const UnicodeGlyphSet();

  /// Returns [glyph] if `this` supports Unicode glyphs and [alternative]
  /// otherwise.
  @override
  String glyphOrAscii(String glyph, String alternative) => glyph;
  @override
  String get bullet => '•';
  @override
  String get leftArrow => '←';
  @override
  String get rightArrow => '→';
  @override
  String get upArrow => '↑';
  @override
  String get downArrow => '↓';
  @override
  String get longLeftArrow => '◀━';
  @override
  String get longRightArrow => '━▶';
  @override
  String get horizontalLine => '─';
  @override
  String get verticalLine => '│';
  @override
  String get topLeftCorner => '┌';
  @override
  String get topRightCorner => '┐';
  @override
  String get bottomLeftCorner => '└';
  @override
  String get bottomRightCorner => '┘';
  @override
  String get cross => '┼';
  @override
  String get teeUp => '┴';
  @override
  String get teeDown => '┬';
  @override
  String get teeLeft => '┤';
  @override
  String get teeRight => '├';
  @override
  String get upEnd => '╵';
  @override
  String get downEnd => '╷';
  @override
  String get leftEnd => '╴';
  @override
  String get rightEnd => '╶';
  @override
  String get horizontalLineBold => '━';
  @override
  String get verticalLineBold => '┃';
  @override
  String get topLeftCornerBold => '┏';
  @override
  String get topRightCornerBold => '┓';
  @override
  String get bottomLeftCornerBold => '┗';
  @override
  String get bottomRightCornerBold => '┛';
  @override
  String get crossBold => '╋';
  @override
  String get teeUpBold => '┻';
  @override
  String get teeDownBold => '┳';
  @override
  String get teeLeftBold => '┫';
  @override
  String get teeRightBold => '┣';
  @override
  String get upEndBold => '╹';
  @override
  String get downEndBold => '╻';
  @override
  String get leftEndBold => '╸';
  @override
  String get rightEndBold => '╺';
  @override
  String get horizontalLineDouble => '═';
  @override
  String get verticalLineDouble => '║';
  @override
  String get topLeftCornerDouble => '╔';
  @override
  String get topRightCornerDouble => '╗';
  @override
  String get bottomLeftCornerDouble => '╚';
  @override
  String get bottomRightCornerDouble => '╝';
  @override
  String get crossDouble => '╬';
  @override
  String get teeUpDouble => '╩';
  @override
  String get teeDownDouble => '╦';
  @override
  String get teeLeftDouble => '╣';
  @override
  String get teeRightDouble => '╠';
  @override
  String get horizontalLineDoubleDash => '╌';
  @override
  String get horizontalLineDoubleDashBold => '╍';
  @override
  String get verticalLineDoubleDash => '╎';
  @override
  String get verticalLineDoubleDashBold => '╏';
  @override
  String get horizontalLineTripleDash => '┄';
  @override
  String get horizontalLineTripleDashBold => '┅';
  @override
  String get verticalLineTripleDash => '┆';
  @override
  String get verticalLineTripleDashBold => '┇';
  @override
  String get horizontalLineQuadrupleDash => '┈';
  @override
  String get horizontalLineQuadrupleDashBold => '┉';
  @override
  String get verticalLineQuadrupleDash => '┊';
  @override
  String get verticalLineQuadrupleDashBold => '┋';
}
