Add write() and writeCharCode() to Logger (#42)

Add write() and writeCharCode() methods to Logger
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 941b33f..398fd73 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,13 +1,22 @@
+## 0.2.0
+
+- Add `Logger.write` and `Logger.writeCharCode` methods which write without
+  printing a trailing newline.
+
 ## 0.1.4
+
 - Add `Ansi.reversed` getter.
 
 ## 0.1.3+2
+
 - Update Dart SDK constraint to < 3.0.0.
 
 ## 0.1.3+1
+
 - Update Dart SDK to 2.0.0-dev.
 
 ## 0.1.3
+
 - In verbose mode, instead of printing the diff from the last log message,
   print the total time since the tool started
 - Change to not buffer the last log message sent in verbose logging mode
diff --git a/lib/cli_logging.dart b/lib/cli_logging.dart
index 8b57bf0..562971b 100644
--- a/lib/cli_logging.dart
+++ b/lib/cli_logging.dart
@@ -86,6 +86,12 @@
   /// Print trace output.
   void trace(String message);
 
+  /// Print text to stdout, without a trailing newline.
+  void write(String message);
+
+  /// Print a character code to stdout, without a trailing newline.
+  void writeCharCode(int charCode);
+
   /// Start an indeterminate progress display.
   Progress progress(String message);
 
@@ -122,27 +128,39 @@
   Progress _currentProgress;
 
   void stderr(String message) {
-    if (_currentProgress != null) {
-      Progress progress = _currentProgress;
-      _currentProgress = null;
-      progress.cancel();
-    }
+    _cancelProgress();
 
     io.stderr.writeln(message);
   }
 
   void stdout(String message) {
-    if (_currentProgress != null) {
-      Progress progress = _currentProgress;
-      _currentProgress = null;
-      progress.cancel();
-    }
+    _cancelProgress();
 
     print(message);
   }
 
   void trace(String message) {}
 
+  void write(String message) {
+    _cancelProgress();
+
+    io.stdout.write(message);
+  }
+
+  void writeCharCode(int charCode) {
+    _cancelProgress();
+
+    io.stdout.writeCharCode(charCode);
+  }
+
+  void _cancelProgress() {
+    if (_currentProgress != null) {
+      Progress progress = _currentProgress;
+      _currentProgress = null;
+      progress.cancel();
+    }
+  }
+
   Progress progress(String message) {
     if (_currentProgress != null) {
       Progress progress = _currentProgress;
@@ -260,6 +278,14 @@
     io.stdout.writeln('${_createPrefix()}${ansi.gray}$message${ansi.none}');
   }
 
+  void write(String message) {
+    io.stdout.write(message);
+  }
+
+  void writeCharCode(int charCode) {
+    io.stdout.writeCharCode(charCode);
+  }
+
   Progress progress(String message) => new SimpleProgress(this, message);
 
   @Deprecated('This method will be removed in the future')
diff --git a/pubspec.yaml b/pubspec.yaml
index 29b3e5f..e127a9b 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: cli_util
-version: 0.1.4
+version: 0.2.0
 author: Dart Team <misc@dartlang.org>
 description: A library to help in building Dart command-line apps.
 homepage: https://github.com/dart-lang/cli_util