diff --git a/README.md b/README.md
index 44458b0..5459994 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,42 @@
-This library contains getters for useful semantic symbols. Because `cmd.exe` on
-Windows can't display Unicode, it also provides a mode where the symbols are
-replaced with plain-ASCII equivalents.
+This library contains getters for useful Unicode glyphs as well as plain ASCII
+alternatives. It's intended to be used in command-line applications that may run
+on Windows and libraries that may be used by those applications.
+
+We recommend that you import this library with the prefix "glyph". For example:
+
+```dart
+import 'package:term_glyph/term_glyph.dart' as glyph;
+
+/// Formats [items] into a bulleted list, with one item per line.
+String bulletedList(List<String> items) =>
+    items.map((item) => "${glyph.bullet} $item").join("\n");
+```
+
+## ASCII Mode
+
+The default Windows `cmd.exe` shell is unable to display Unicode characters, so
+this package is able to transparently switch its glyphs to ASCII alternatives by
+setting [the `ascii` attribute][ascii]. When this attribute is `true`, all
+glyphs use ASCII characters instead. It currently defaults to `false`, although
+in the future it may default to `true` for applications running on the Dart VM
+on Windows. For example:
+
+[ascii]: https://www.dartdocs.org/documentation/term_glyph/latest/term_glyph/ascii.html
+
+```dart
+import 'dart:io';
+
+import 'package:term_glyph/term_glyph.dart' as glyph;
+
+void main() {
+  glyph.ascii = Platform.isWindows;
+
+  // Prints "Unicode => ASCII" on Windows, "Unicode ━▶ ASCII" everywhere else.
+  print("Unicode ${glyph.rightArrow} ASCII");
+}
+```
+
+All ASCII glyphs are guaranteed to be the same number of characters as the
+corresponding Unicode glyphs, so that they line up properly when printed on a
+terminal. The specific ASCII text for a given Unicode glyph may change over
+time; this is not considered a breaking change.
diff --git a/data.csv b/data.csv
new file mode 100644
index 0000000..92a72f7
--- /dev/null
+++ b/data.csv
@@ -0,0 +1,85 @@
+# Miscellaneous
+bullet,•,*,A bullet point.
+
+# Arrows
+leftArrow,←,<,"A left-pointing arrow.
+
+Note that the Unicode arrow glyphs may overlap with adjacent characters in some
+terminal fonts, and should generally be surrounding by spaces."
+rightArrow,→,>,"A right-pointing arrow.
+
+Note that the Unicode arrow glyphs may overlap with adjacent characters in some
+terminal fonts, and should generally be surrounding by spaces."
+upArrow,↑,^,An upwards-pointing arrow.
+downArrow,↓,v,A downwards-pointing arrow.
+longLeftArrow,◀━,<=,A two-character left-pointing arrow.
+longRightArrow,━▶,=>,A two-character right-pointing arrow.
+
+# Box drawing characters
+
+## Normal
+horizontalLine,─,-,A horizontal line that can be used to draw a box.
+verticalLine,│,|,A vertical line that can be used to draw a box.
+topLeftCorner,┌,",",The upper left-hand corner of a box.
+topRightCorner,┐,",",The upper right-hand corner of a box.
+bottomLeftCorner,└,',The lower left-hand corner of a box.
+bottomRightCorner,┘,',The lower right-hand corner of a box.
+cross,┼,+,An intersection of vertical and horizontal box lines.
+teeUp,┴,+,A horizontal box line with a vertical line going up from the middle.
+teeDown,┬,+,A horizontal box line with a vertical line going down from the middle.
+teeLeft,┤,+,A vertical box line with a horizontal line going left from the middle.
+teeRight,├,+,A vertical box line with a horizontal line going right from the middle.
+upEnd,╵,',The top half of a vertical box line.
+downEnd,╷,",",The bottom half of a vertical box line.
+leftEnd,╴,-,The left half of a horizontal box line.
+rightEnd,╶,-,The right half of a horizontal box line.
+
+## Bold
+horizontalLineBold,━,=,A bold horizontal line that can be used to draw a box.
+verticalLineBold,┃,|,A bold vertical line that can be used to draw a box.
+topLeftCornerBold,┏,",",The bold upper left-hand corner of a box.
+topRightCornerBold,┓,",",The bold upper right-hand corner of a box.
+bottomLeftCornerBold,┗,',The bold lower left-hand corner of a box.
+bottomRightCornerBold,┛,',The bold lower right-hand corner of a box.
+crossBold,╋,+,An intersection of bold vertical and horizontal box lines.
+teeUpBold,┻,+,A bold horizontal box line with a vertical line going up from the middle.
+teeDownBold,┳,+,A bold horizontal box line with a vertical line going down from the middle.
+teeLeftBold,┫,+,A bold vertical box line with a horizontal line going left from the middle.
+teeRightBold,┣,+,A bold vertical box line with a horizontal line going right from the middle.
+upEndBold,╹,',The top half of a bold vertical box line.
+downEndBold,╻,",",The bottom half of a bold vertical box line.
+leftEndBold,╸,-,The left half of a bold horizontal box line.
+rightEndBold,╺,-,The right half of a bold horizontal box line.
+
+## Double
+horizontalLineDouble,═,=,A double horizontal line that can be used to draw a box.
+verticalLineDouble,║,|,A double vertical line that can be used to draw a box.
+topLeftCornerDouble,╔,",",The double upper left-hand corner of a box.
+topRightCornerDouble,╗,",",The double upper right-hand corner of a box.
+bottomLeftCornerDouble,╚,"""",The double lower left-hand corner of a box.
+bottomRightCornerDouble,╝,"""",The double lower right-hand corner of a box.
+crossDouble,╬,+,An intersection of double vertical and horizontal box lines.
+teeUpDouble,╩,+,A double horizontal box line with a vertical line going up from the middle.
+teeDownDouble,╦,+,A double horizontal box line with a vertical line going down from the middle.
+teeLeftDouble,╣,+,A double vertical box line with a horizontal line going left from the middle.
+teeRightDouble,╠,+,A double vertical box line with a horizontal line going right from the middle.
+
+## Dashed
+
+### Double
+horizontalLineDoubleDash,╌,-,A dashed horizontal line that can be used to draw a box.
+horizontalLineDoubleDashBold,╍,-,A bold dashed horizontal line that can be used to draw a box.
+verticalLineDoubleDash,╎,|,A dashed vertical line that can be used to draw a box.
+verticalLineDoubleDashBold,╏,|,A bold dashed vertical line that can be used to draw a box.
+
+### Triple
+horizontalLineTripleDash,┄,-,A dashed horizontal line that can be used to draw a box.
+horizontalLineTripleDashBold,┅,-,A bold dashed horizontal line that can be used to draw a box.
+verticalLineTripleDash,┆,|,A dashed vertical line that can be used to draw a box.
+verticalLineTripleDashBold,┇,|,A bold dashed vertical line that can be used to draw a box.
+
+### Quadruple
+horizontalLineQuadrupleDash,┈,-,A dashed horizontal line that can be used to draw a box.
+horizontalLineQuadrupleDashBold,┉,-,A bold dashed horizontal line that can be used to draw a box.
+verticalLineQuadrupleDash,┊,|,A dashed vertical line that can be used to draw a box.
+verticalLineQuadrupleDashBold,┋,|,A bold dashed vertical line that can be used to draw a box.
diff --git a/lib/src/generated.dart b/lib/src/generated.dart
new file mode 100644
index 0000000..e1b83d1
--- /dev/null
+++ b/lib/src/generated.dart
@@ -0,0 +1,564 @@
+// Copyright (c) 2017, 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.
+
+/// Whether the glyph getters return plain ASCII, as opposed to Unicode
+/// characters or sequences.
+///
+/// Defaults to `false`.
+bool get ascii => _ascii;
+var _ascii = false;
+set ascii(bool value) {
+  _ascii = value;
+  if (value) {
+    _bullet = "*";
+    _leftArrow = "<";
+    _rightArrow = ">";
+    _upArrow = "^";
+    _downArrow = "v";
+    _longLeftArrow = "<=";
+    _longRightArrow = "=>";
+    _horizontalLine = "-";
+    _verticalLine = "|";
+    _topLeftCorner = ",";
+    _topRightCorner = ",";
+    _bottomLeftCorner = "'";
+    _bottomRightCorner = "'";
+    _cross = "+";
+    _teeUp = "+";
+    _teeDown = "+";
+    _teeLeft = "+";
+    _teeRight = "+";
+    _upEnd = "'";
+    _downEnd = ",";
+    _leftEnd = "-";
+    _rightEnd = "-";
+    _horizontalLineBold = "=";
+    _verticalLineBold = "|";
+    _topLeftCornerBold = ",";
+    _topRightCornerBold = ",";
+    _bottomLeftCornerBold = "'";
+    _bottomRightCornerBold = "'";
+    _crossBold = "+";
+    _teeUpBold = "+";
+    _teeDownBold = "+";
+    _teeLeftBold = "+";
+    _teeRightBold = "+";
+    _upEndBold = "'";
+    _downEndBold = ",";
+    _leftEndBold = "-";
+    _rightEndBold = "-";
+    _horizontalLineDouble = "=";
+    _verticalLineDouble = "|";
+    _topLeftCornerDouble = ",";
+    _topRightCornerDouble = ",";
+    _bottomLeftCornerDouble = '"';
+    _bottomRightCornerDouble = '"';
+    _crossDouble = "+";
+    _teeUpDouble = "+";
+    _teeDownDouble = "+";
+    _teeLeftDouble = "+";
+    _teeRightDouble = "+";
+    _horizontalLineDoubleDash = "-";
+    _horizontalLineDoubleDashBold = "-";
+    _verticalLineDoubleDash = "|";
+    _verticalLineDoubleDashBold = "|";
+    _horizontalLineTripleDash = "-";
+    _horizontalLineTripleDashBold = "-";
+    _verticalLineTripleDash = "|";
+    _verticalLineTripleDashBold = "|";
+    _horizontalLineQuadrupleDash = "-";
+    _horizontalLineQuadrupleDashBold = "-";
+    _verticalLineQuadrupleDash = "|";
+    _verticalLineQuadrupleDashBold = "|";
+  } else {
+    _bullet = "•";
+    _leftArrow = "←";
+    _rightArrow = "→";
+    _upArrow = "↑";
+    _downArrow = "↓";
+    _longLeftArrow = "◀━";
+    _longRightArrow = "━▶";
+    _horizontalLine = "─";
+    _verticalLine = "│";
+    _topLeftCorner = "┌";
+    _topRightCorner = "┐";
+    _bottomLeftCorner = "└";
+    _bottomRightCorner = "┘";
+    _cross = "┼";
+    _teeUp = "┴";
+    _teeDown = "┬";
+    _teeLeft = "┤";
+    _teeRight = "├";
+    _upEnd = "╵";
+    _downEnd = "╷";
+    _leftEnd = "╴";
+    _rightEnd = "╶";
+    _horizontalLineBold = "━";
+    _verticalLineBold = "┃";
+    _topLeftCornerBold = "┏";
+    _topRightCornerBold = "┓";
+    _bottomLeftCornerBold = "┗";
+    _bottomRightCornerBold = "┛";
+    _crossBold = "╋";
+    _teeUpBold = "┻";
+    _teeDownBold = "┳";
+    _teeLeftBold = "┫";
+    _teeRightBold = "┣";
+    _upEndBold = "╹";
+    _downEndBold = "╻";
+    _leftEndBold = "╸";
+    _rightEndBold = "╺";
+    _horizontalLineDouble = "═";
+    _verticalLineDouble = "║";
+    _topLeftCornerDouble = "╔";
+    _topRightCornerDouble = "╗";
+    _bottomLeftCornerDouble = "╚";
+    _bottomRightCornerDouble = "╝";
+    _crossDouble = "╬";
+    _teeUpDouble = "╩";
+    _teeDownDouble = "╦";
+    _teeLeftDouble = "╣";
+    _teeRightDouble = "╠";
+    _horizontalLineDoubleDash = "╌";
+    _horizontalLineDoubleDashBold = "╍";
+    _verticalLineDoubleDash = "╎";
+    _verticalLineDoubleDashBold = "╏";
+    _horizontalLineTripleDash = "┄";
+    _horizontalLineTripleDashBold = "┅";
+    _verticalLineTripleDash = "┆";
+    _verticalLineTripleDashBold = "┇";
+    _horizontalLineQuadrupleDash = "┈";
+    _horizontalLineQuadrupleDashBold = "┉";
+    _verticalLineQuadrupleDash = "┊";
+    _verticalLineQuadrupleDashBold = "┋";
+  }
+}
+
+/// A bullet point.
+///
+/// If [ascii] is `false`, this is "•". If it's `true`, this is
+/// "*" instead.
+String get bullet => _bullet;
+var _bullet = "•";
+
+/// A left-pointing arrow.
+///
+/// Note that the Unicode arrow glyphs may overlap with adjacent characters in some
+/// terminal fonts, and should generally be surrounding by spaces.
+///
+/// If [ascii] is `false`, this is "←". If it's `true`, this is
+/// "<" instead.
+String get leftArrow => _leftArrow;
+var _leftArrow = "←";
+
+/// A right-pointing arrow.
+///
+/// Note that the Unicode arrow glyphs may overlap with adjacent characters in some
+/// terminal fonts, and should generally be surrounding by spaces.
+///
+/// If [ascii] is `false`, this is "→". If it's `true`, this is
+/// ">" instead.
+String get rightArrow => _rightArrow;
+var _rightArrow = "→";
+
+/// An upwards-pointing arrow.
+///
+/// If [ascii] is `false`, this is "↑". If it's `true`, this is
+/// "^" instead.
+String get upArrow => _upArrow;
+var _upArrow = "↑";
+
+/// A downwards-pointing arrow.
+///
+/// If [ascii] is `false`, this is "↓". If it's `true`, this is
+/// "v" instead.
+String get downArrow => _downArrow;
+var _downArrow = "↓";
+
+/// A two-character left-pointing arrow.
+///
+/// If [ascii] is `false`, this is "◀━". If it's `true`, this is
+/// "<=" instead.
+String get longLeftArrow => _longLeftArrow;
+var _longLeftArrow = "◀━";
+
+/// A two-character right-pointing arrow.
+///
+/// If [ascii] is `false`, this is "━▶". If it's `true`, this is
+/// "=>" instead.
+String get longRightArrow => _longRightArrow;
+var _longRightArrow = "━▶";
+
+/// A horizontal line that can be used to draw a box.
+///
+/// If [ascii] is `false`, this is "─". If it's `true`, this is
+/// "-" instead.
+String get horizontalLine => _horizontalLine;
+var _horizontalLine = "─";
+
+/// A vertical line that can be used to draw a box.
+///
+/// If [ascii] is `false`, this is "│". If it's `true`, this is
+/// "|" instead.
+String get verticalLine => _verticalLine;
+var _verticalLine = "│";
+
+/// The upper left-hand corner of a box.
+///
+/// If [ascii] is `false`, this is "┌". If it's `true`, this is
+/// "," instead.
+String get topLeftCorner => _topLeftCorner;
+var _topLeftCorner = "┌";
+
+/// The upper right-hand corner of a box.
+///
+/// If [ascii] is `false`, this is "┐". If it's `true`, this is
+/// "," instead.
+String get topRightCorner => _topRightCorner;
+var _topRightCorner = "┐";
+
+/// The lower left-hand corner of a box.
+///
+/// If [ascii] is `false`, this is "└". If it's `true`, this is
+/// "'" instead.
+String get bottomLeftCorner => _bottomLeftCorner;
+var _bottomLeftCorner = "└";
+
+/// The lower right-hand corner of a box.
+///
+/// If [ascii] is `false`, this is "┘". If it's `true`, this is
+/// "'" instead.
+String get bottomRightCorner => _bottomRightCorner;
+var _bottomRightCorner = "┘";
+
+/// An intersection of vertical and horizontal box lines.
+///
+/// If [ascii] is `false`, this is "┼". If it's `true`, this is
+/// "+" instead.
+String get cross => _cross;
+var _cross = "┼";
+
+/// A horizontal box line with a vertical line going up from the middle.
+///
+/// If [ascii] is `false`, this is "┴". If it's `true`, this is
+/// "+" instead.
+String get teeUp => _teeUp;
+var _teeUp = "┴";
+
+/// A horizontal box line with a vertical line going down from the middle.
+///
+/// If [ascii] is `false`, this is "┬". If it's `true`, this is
+/// "+" instead.
+String get teeDown => _teeDown;
+var _teeDown = "┬";
+
+/// A vertical box line with a horizontal line going left from the middle.
+///
+/// If [ascii] is `false`, this is "┤". If it's `true`, this is
+/// "+" instead.
+String get teeLeft => _teeLeft;
+var _teeLeft = "┤";
+
+/// A vertical box line with a horizontal line going right from the middle.
+///
+/// If [ascii] is `false`, this is "├". If it's `true`, this is
+/// "+" instead.
+String get teeRight => _teeRight;
+var _teeRight = "├";
+
+/// The top half of a vertical box line.
+///
+/// If [ascii] is `false`, this is "╵". If it's `true`, this is
+/// "'" instead.
+String get upEnd => _upEnd;
+var _upEnd = "╵";
+
+/// The bottom half of a vertical box line.
+///
+/// If [ascii] is `false`, this is "╷". If it's `true`, this is
+/// "," instead.
+String get downEnd => _downEnd;
+var _downEnd = "╷";
+
+/// The left half of a horizontal box line.
+///
+/// If [ascii] is `false`, this is "╴". If it's `true`, this is
+/// "-" instead.
+String get leftEnd => _leftEnd;
+var _leftEnd = "╴";
+
+/// The right half of a horizontal box line.
+///
+/// If [ascii] is `false`, this is "╶". If it's `true`, this is
+/// "-" instead.
+String get rightEnd => _rightEnd;
+var _rightEnd = "╶";
+
+/// A bold horizontal line that can be used to draw a box.
+///
+/// If [ascii] is `false`, this is "━". If it's `true`, this is
+/// "=" instead.
+String get horizontalLineBold => _horizontalLineBold;
+var _horizontalLineBold = "━";
+
+/// A bold vertical line that can be used to draw a box.
+///
+/// If [ascii] is `false`, this is "┃". If it's `true`, this is
+/// "|" instead.
+String get verticalLineBold => _verticalLineBold;
+var _verticalLineBold = "┃";
+
+/// The bold upper left-hand corner of a box.
+///
+/// If [ascii] is `false`, this is "┏". If it's `true`, this is
+/// "," instead.
+String get topLeftCornerBold => _topLeftCornerBold;
+var _topLeftCornerBold = "┏";
+
+/// The bold upper right-hand corner of a box.
+///
+/// If [ascii] is `false`, this is "┓". If it's `true`, this is
+/// "," instead.
+String get topRightCornerBold => _topRightCornerBold;
+var _topRightCornerBold = "┓";
+
+/// The bold lower left-hand corner of a box.
+///
+/// If [ascii] is `false`, this is "┗". If it's `true`, this is
+/// "'" instead.
+String get bottomLeftCornerBold => _bottomLeftCornerBold;
+var _bottomLeftCornerBold = "┗";
+
+/// The bold lower right-hand corner of a box.
+///
+/// If [ascii] is `false`, this is "┛". If it's `true`, this is
+/// "'" instead.
+String get bottomRightCornerBold => _bottomRightCornerBold;
+var _bottomRightCornerBold = "┛";
+
+/// An intersection of bold vertical and horizontal box lines.
+///
+/// If [ascii] is `false`, this is "╋". If it's `true`, this is
+/// "+" instead.
+String get crossBold => _crossBold;
+var _crossBold = "╋";
+
+/// A bold horizontal box line with a vertical line going up from the middle.
+///
+/// If [ascii] is `false`, this is "┻". If it's `true`, this is
+/// "+" instead.
+String get teeUpBold => _teeUpBold;
+var _teeUpBold = "┻";
+
+/// A bold horizontal box line with a vertical line going down from the middle.
+///
+/// If [ascii] is `false`, this is "┳". If it's `true`, this is
+/// "+" instead.
+String get teeDownBold => _teeDownBold;
+var _teeDownBold = "┳";
+
+/// A bold vertical box line with a horizontal line going left from the middle.
+///
+/// If [ascii] is `false`, this is "┫". If it's `true`, this is
+/// "+" instead.
+String get teeLeftBold => _teeLeftBold;
+var _teeLeftBold = "┫";
+
+/// A bold vertical box line with a horizontal line going right from the middle.
+///
+/// If [ascii] is `false`, this is "┣". If it's `true`, this is
+/// "+" instead.
+String get teeRightBold => _teeRightBold;
+var _teeRightBold = "┣";
+
+/// The top half of a bold vertical box line.
+///
+/// If [ascii] is `false`, this is "╹". If it's `true`, this is
+/// "'" instead.
+String get upEndBold => _upEndBold;
+var _upEndBold = "╹";
+
+/// The bottom half of a bold vertical box line.
+///
+/// If [ascii] is `false`, this is "╻". If it's `true`, this is
+/// "," instead.
+String get downEndBold => _downEndBold;
+var _downEndBold = "╻";
+
+/// The left half of a bold horizontal box line.
+///
+/// If [ascii] is `false`, this is "╸". If it's `true`, this is
+/// "-" instead.
+String get leftEndBold => _leftEndBold;
+var _leftEndBold = "╸";
+
+/// The right half of a bold horizontal box line.
+///
+/// If [ascii] is `false`, this is "╺". If it's `true`, this is
+/// "-" instead.
+String get rightEndBold => _rightEndBold;
+var _rightEndBold = "╺";
+
+/// A double horizontal line that can be used to draw a box.
+///
+/// If [ascii] is `false`, this is "═". If it's `true`, this is
+/// "=" instead.
+String get horizontalLineDouble => _horizontalLineDouble;
+var _horizontalLineDouble = "═";
+
+/// A double vertical line that can be used to draw a box.
+///
+/// If [ascii] is `false`, this is "║". If it's `true`, this is
+/// "|" instead.
+String get verticalLineDouble => _verticalLineDouble;
+var _verticalLineDouble = "║";
+
+/// The double upper left-hand corner of a box.
+///
+/// If [ascii] is `false`, this is "╔". If it's `true`, this is
+/// "," instead.
+String get topLeftCornerDouble => _topLeftCornerDouble;
+var _topLeftCornerDouble = "╔";
+
+/// The double upper right-hand corner of a box.
+///
+/// If [ascii] is `false`, this is "╗". If it's `true`, this is
+/// "," instead.
+String get topRightCornerDouble => _topRightCornerDouble;
+var _topRightCornerDouble = "╗";
+
+/// The double lower left-hand corner of a box.
+///
+/// If [ascii] is `false`, this is "╚". If it's `true`, this is
+/// """ instead.
+String get bottomLeftCornerDouble => _bottomLeftCornerDouble;
+var _bottomLeftCornerDouble = "╚";
+
+/// The double lower right-hand corner of a box.
+///
+/// If [ascii] is `false`, this is "╝". If it's `true`, this is
+/// """ instead.
+String get bottomRightCornerDouble => _bottomRightCornerDouble;
+var _bottomRightCornerDouble = "╝";
+
+/// An intersection of double vertical and horizontal box lines.
+///
+/// If [ascii] is `false`, this is "╬". If it's `true`, this is
+/// "+" instead.
+String get crossDouble => _crossDouble;
+var _crossDouble = "╬";
+
+/// A double horizontal box line with a vertical line going up from the middle.
+///
+/// If [ascii] is `false`, this is "╩". If it's `true`, this is
+/// "+" instead.
+String get teeUpDouble => _teeUpDouble;
+var _teeUpDouble = "╩";
+
+/// A double horizontal box line with a vertical line going down from the middle.
+///
+/// If [ascii] is `false`, this is "╦". If it's `true`, this is
+/// "+" instead.
+String get teeDownDouble => _teeDownDouble;
+var _teeDownDouble = "╦";
+
+/// A double vertical box line with a horizontal line going left from the middle.
+///
+/// If [ascii] is `false`, this is "╣". If it's `true`, this is
+/// "+" instead.
+String get teeLeftDouble => _teeLeftDouble;
+var _teeLeftDouble = "╣";
+
+/// A double vertical box line with a horizontal line going right from the middle.
+///
+/// If [ascii] is `false`, this is "╠". If it's `true`, this is
+/// "+" instead.
+String get teeRightDouble => _teeRightDouble;
+var _teeRightDouble = "╠";
+
+/// A dashed horizontal line that can be used to draw a box.
+///
+/// If [ascii] is `false`, this is "╌". If it's `true`, this is
+/// "-" instead.
+String get horizontalLineDoubleDash => _horizontalLineDoubleDash;
+var _horizontalLineDoubleDash = "╌";
+
+/// A bold dashed horizontal line that can be used to draw a box.
+///
+/// If [ascii] is `false`, this is "╍". If it's `true`, this is
+/// "-" instead.
+String get horizontalLineDoubleDashBold => _horizontalLineDoubleDashBold;
+var _horizontalLineDoubleDashBold = "╍";
+
+/// A dashed vertical line that can be used to draw a box.
+///
+/// If [ascii] is `false`, this is "╎". If it's `true`, this is
+/// "|" instead.
+String get verticalLineDoubleDash => _verticalLineDoubleDash;
+var _verticalLineDoubleDash = "╎";
+
+/// A bold dashed vertical line that can be used to draw a box.
+///
+/// If [ascii] is `false`, this is "╏". If it's `true`, this is
+/// "|" instead.
+String get verticalLineDoubleDashBold => _verticalLineDoubleDashBold;
+var _verticalLineDoubleDashBold = "╏";
+
+/// A dashed horizontal line that can be used to draw a box.
+///
+/// If [ascii] is `false`, this is "┄". If it's `true`, this is
+/// "-" instead.
+String get horizontalLineTripleDash => _horizontalLineTripleDash;
+var _horizontalLineTripleDash = "┄";
+
+/// A bold dashed horizontal line that can be used to draw a box.
+///
+/// If [ascii] is `false`, this is "┅". If it's `true`, this is
+/// "-" instead.
+String get horizontalLineTripleDashBold => _horizontalLineTripleDashBold;
+var _horizontalLineTripleDashBold = "┅";
+
+/// A dashed vertical line that can be used to draw a box.
+///
+/// If [ascii] is `false`, this is "┆". If it's `true`, this is
+/// "|" instead.
+String get verticalLineTripleDash => _verticalLineTripleDash;
+var _verticalLineTripleDash = "┆";
+
+/// A bold dashed vertical line that can be used to draw a box.
+///
+/// If [ascii] is `false`, this is "┇". If it's `true`, this is
+/// "|" instead.
+String get verticalLineTripleDashBold => _verticalLineTripleDashBold;
+var _verticalLineTripleDashBold = "┇";
+
+/// A dashed horizontal line that can be used to draw a box.
+///
+/// If [ascii] is `false`, this is "┈". If it's `true`, this is
+/// "-" instead.
+String get horizontalLineQuadrupleDash => _horizontalLineQuadrupleDash;
+var _horizontalLineQuadrupleDash = "┈";
+
+/// A bold dashed horizontal line that can be used to draw a box.
+///
+/// If [ascii] is `false`, this is "┉". If it's `true`, this is
+/// "-" instead.
+String get horizontalLineQuadrupleDashBold => _horizontalLineQuadrupleDashBold;
+var _horizontalLineQuadrupleDashBold = "┉";
+
+/// A dashed vertical line that can be used to draw a box.
+///
+/// If [ascii] is `false`, this is "┊". If it's `true`, this is
+/// "|" instead.
+String get verticalLineQuadrupleDash => _verticalLineQuadrupleDash;
+var _verticalLineQuadrupleDash = "┊";
+
+/// A bold dashed vertical line that can be used to draw a box.
+///
+/// If [ascii] is `false`, this is "┋". If it's `true`, this is
+/// "|" instead.
+String get verticalLineQuadrupleDashBold => _verticalLineQuadrupleDashBold;
+var _verticalLineQuadrupleDashBold = "┋";
diff --git a/lib/term_glyph.dart b/lib/term_glyph.dart
new file mode 100644
index 0000000..8582175
--- /dev/null
+++ b/lib/term_glyph.dart
@@ -0,0 +1,12 @@
+// Copyright (c) 2017, 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.
+
+export 'src/generated.dart';
+
+import 'src/generated.dart';
+
+/// Returns [glyph] if Unicode glyph are allowed, and [alternative] if they
+/// aren't.
+String glyphOrAscii(String glyph, String alternative) =>
+    ascii ? alternative : glyph;
diff --git a/pubspec.yaml b/pubspec.yaml
index 275c2bf..4ba1efb 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,8 +1,13 @@
-name: symbol
-version: 1.0.0-dev
-description: Useful symbols and Windows-safe equivalents.
+name: term_glyph
+version: 1.0.0
+description: Useful glyphs and Windows-safe equivalents.
 author: Dart Team <misc@dartlang.org>
-homepage: https://github.com/dart-lang/symbol
+homepage: https://github.com/dart-lang/term_glyph
 
 environment:
   sdk: '>=1.8.0 <2.0.0'
+
+dev_dependencies:
+  csv: '^3.0.0'
+  dart_style: '^0.2.0'
+  test: '^0.12.0'
diff --git a/test/symbol_test.dart b/test/symbol_test.dart
new file mode 100644
index 0000000..e3f94e5
--- /dev/null
+++ b/test/symbol_test.dart
@@ -0,0 +1,41 @@
+// Copyright (c) 2017, 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.
+
+import 'package:test/test.dart';
+
+import 'package:term_glyph/term_glyph.dart' as glyph;
+
+void main() {
+  group("with ascii = false", () {
+    setUpAll(() {
+      glyph.ascii = false;
+    });
+
+    test("glyphs return Unicode versions", () {
+      expect(glyph.topLeftCorner, equals("┌"));
+      expect(glyph.teeUpBold, equals("┻"));
+      expect(glyph.longLeftArrow, equals("◀━"));
+    });
+
+    test("glyphOrAscii returns the first argument", () {
+      expect(glyph.glyphOrAscii("A", "B"), equals("A"));
+    });
+  });
+
+  group("with ascii = true", () {
+    setUpAll(() {
+      glyph.ascii = true;
+    });
+
+    test("glyphs return ASCII versions", () {
+      expect(glyph.topLeftCorner, equals(","));
+      expect(glyph.teeUpBold, equals("+"));
+      expect(glyph.longLeftArrow, equals("<="));
+    });
+
+    test("glyphOrAscii returns the second argument", () {
+      expect(glyph.glyphOrAscii("A", "B"), equals("B"));
+    });
+  });
+}
diff --git a/tool/generate.dart b/tool/generate.dart
new file mode 100644
index 0000000..2e94b4c
--- /dev/null
+++ b/tool/generate.dart
@@ -0,0 +1,67 @@
+// Copyright (c) 2017, 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.
+
+import 'dart:io';
+
+import 'package:csv/csv.dart';
+
+void main() {
+  var csv = new CsvCodec(eol: "\n");
+  var data = csv.decode(new File("data.csv").readAsStringSync());
+
+  // Remove comments and empty lines.
+  data.removeWhere((row) => row.length < 3);
+
+  var file = new File("lib/src/generated.dart").openSync(mode: FileMode.WRITE);
+  file.writeStringSync("""
+    // Copyright (c) 2017, 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.
+
+    /// Whether the glyph getters return plain ASCII, as opposed to Unicode
+    /// characters or sequences.
+    ///
+    /// Defaults to `false`.
+    bool get ascii => _ascii;
+    var _ascii = false;
+    set ascii(bool value) {
+      _ascii = value;
+      if (value) {
+  """);
+
+  for (var glyph in data) {
+    file.writeStringSync("_${glyph[0]} = ${_quote(glyph[2])};");
+  }
+
+  file.writeStringSync("} else {");
+
+  for (var glyph in data) {
+    file.writeStringSync("_${glyph[0]} = ${_quote(glyph[1])};");
+  }
+
+  file.writeStringSync("}}");
+
+  for (var glyph in data) {
+    for (var line in glyph[3].split("\n")) {
+      file.writeStringSync("/// $line\n");
+    }
+
+    file.writeStringSync("""
+      ///
+      /// If [ascii] is `false`, this is "${glyph[1]}". If it's `true`, this is
+      /// "${glyph[2]}" instead.
+      String get ${glyph[0]} => _${glyph[0]};
+      var _${glyph[0]} = ${_quote(glyph[1])};
+    """);
+  }
+
+  var result = Process.runSync(
+      "pub", ["run", "dart_style:format", "-w", "lib/src/generated.dart"]);
+  print(result.stderr);
+  exit(result.exitCode);
+}
+
+String _quote(String input) => input.contains('"') ? "'$input'" : '"$input"';
