Merge pull request dart-lang/markdown#150 from srawlins/fix-table-align

Fix table align
diff --git a/pkgs/markdown/CHANGELOG.md b/pkgs/markdown/CHANGELOG.md
index 5dabafe..32fe122 100644
--- a/pkgs/markdown/CHANGELOG.md
+++ b/pkgs/markdown/CHANGELOG.md
@@ -4,6 +4,7 @@
 
 ## 0.11.2
 
+* Fix reference code links inside blockquotes.
 * Add src/util.dart to exports.
 
 ## 0.11.1
diff --git a/pkgs/markdown/lib/src/block_parser.dart b/pkgs/markdown/lib/src/block_parser.dart
index 6d9924d..280411f 100644
--- a/pkgs/markdown/lib/src/block_parser.dart
+++ b/pkgs/markdown/lib/src/block_parser.dart
@@ -49,7 +49,8 @@
     new RegExp(r'^([ ]{0,3})(\d{1,9})([\.)])(([ \t])([ \t]*)(.*))?$');
 
 /// A line of hyphens separated by at least one pipe.
-final _tablePattern = new RegExp(r'^[ ]{0,3}\|?(:?\-+:?\|)+(:?\-+:?)?$');
+final _tablePattern =
+    new RegExp(r'^[ ]{0,3}\|?( *:?\-+:? *\|)+( *:?\-+:? *)?$');
 
 /// Maintains the internal state needed to parse a series of lines into blocks
 /// of Markdown suitable for further inline parsing.
@@ -763,6 +764,8 @@
 /// Parses tables.
 class TableSyntax extends BlockSyntax {
   static final _pipePattern = new RegExp(r'\s*\|\s*');
+  static final _openingPipe = new RegExp(r'^\|\s*');
+  static final _closingPipe = new RegExp(r'\s*\|$');
 
   bool get canEndBlock => false;
 
@@ -796,10 +799,9 @@
   }
 
   List<String> parseAlignments(String line) {
-    line = line
-        .replaceFirst(new RegExp(r'^\|'), '')
-        .replaceFirst(new RegExp(r'\|$'), '');
+    line = line.replaceFirst(_openingPipe, '').replaceFirst(_closingPipe, '');
     return line.split('|').map((column) {
+      column = column.trim();
       if (column.startsWith(':') && column.endsWith(':')) return 'center';
       if (column.startsWith(':')) return 'left';
       if (column.endsWith(':')) return 'right';
@@ -809,8 +811,8 @@
 
   Node parseRow(BlockParser parser, List<String> alignments, String cellType) {
     var line = parser.current
-        .replaceFirst(new RegExp(r'^\|\s*'), '')
-        .replaceFirst(new RegExp(r'\s*\|$'), '');
+        .replaceFirst(_openingPipe, '')
+        .replaceFirst(_closingPipe, '');
     var cells = line.split(_pipePattern);
     parser.advance();
     var row = <Element>[];
diff --git a/pkgs/markdown/test/extensions/tables.unit b/pkgs/markdown/test/extensions/tables.unit
index c1d6934..c3fa911 100644
--- a/pkgs/markdown/test/extensions/tables.unit
+++ b/pkgs/markdown/test/extensions/tables.unit
@@ -20,6 +20,13 @@
 
 <<<
 <table><thead><tr><th>head</th><th>cells</th></tr></thead><tbody><tr><td>body</td><td>cells</td></tr></tbody></table>
+>>> rows wrapped in pipes, whitespace alignment row
+| head | cells |
+|  --  |  ---  |
+| body | cells |
+
+<<<
+<table><thead><tr><th>head</th><th>cells</th></tr></thead><tbody><tr><td>body</td><td>cells</td></tr></tbody></table>
 >>> cells with inline syntax
 head `code` | _cells_
 ------------|--------
@@ -61,3 +68,11 @@
 
 <<<
 <table><thead><tr><th style="text-align: left;">head</th><th style="text-align: center;">cells</th><th style="text-align: right;">here</th></tr></thead><tbody><tr><td style="text-align: left;">body</td><td style="text-align: center;">cells</td><td style="text-align: right;">here</td></tr><tr><td style="text-align: left;">too</td><td style="text-align: center;">many</td><td style="text-align: right;">cells</td><td>here</td></tr></tbody></table>
+>>> left, center, and right alignment, with whitespace
+head | cells | here
+ :-- | :---: | ---:
+body | cells | here
+too | many | cells | here
+
+<<<
+<table><thead><tr><th style="text-align: left;">head</th><th style="text-align: center;">cells</th><th style="text-align: right;">here</th></tr></thead><tbody><tr><td style="text-align: left;">body</td><td style="text-align: center;">cells</td><td style="text-align: right;">here</td></tr><tr><td style="text-align: left;">too</td><td style="text-align: center;">many</td><td style="text-align: right;">cells</td><td>here</td></tr></tbody></table>