Fix over-eager word syntax
diff --git a/pkgs/markdown/lib/src/document.dart b/pkgs/markdown/lib/src/document.dart
index 2b9216d..8720ff0 100644
--- a/pkgs/markdown/lib/src/document.dart
+++ b/pkgs/markdown/lib/src/document.dart
@@ -20,13 +20,13 @@
       ExtensionSet extensionSet,
       this.linkResolver,
       this.imageLinkResolver}) {
-    extensionSet ??= ExtensionSet.commonMark;
+    this.extensionSet = extensionSet ?? ExtensionSet.commonMark;
     this.blockSyntaxes = new Set()
       ..addAll(blockSyntaxes ?? [])
-      ..addAll(extensionSet.blockSyntaxes);
+      ..addAll(this.extensionSet.blockSyntaxes);
     this.inlineSyntaxes = new Set()
       ..addAll(inlineSyntaxes ?? [])
-      ..addAll(extensionSet.inlineSyntaxes);
+      ..addAll(this.extensionSet.inlineSyntaxes);
   }
 
   /// Parses [lines] for reference links, adding them to [refLinks] and
diff --git a/pkgs/markdown/lib/src/inline_parser.dart b/pkgs/markdown/lib/src/inline_parser.dart
index bdcb4a3..a008ca8 100644
--- a/pkgs/markdown/lib/src/inline_parser.dart
+++ b/pkgs/markdown/lib/src/inline_parser.dart
@@ -13,17 +13,6 @@
 class InlineParser {
   static final List<InlineSyntax> _defaultSyntaxes =
       new List<InlineSyntax>.unmodifiable(<InlineSyntax>[
-    // This first RegExp matches plain text to accelerate parsing. It's written
-    // so that it does not match any prefix of any following syntaxes. Most
-    // Markdown is plain text, so it's faster to match one RegExp per 'word'
-    // rather than fail to match all the following RegExps at each non-syntax
-    // character position.
-
-    // TODO(amouravski): this regex will glom up any custom syntaxes unless
-    // they're at the beginning.
-    new TextSyntax(r'[ \tA-Za-z0-9]*[A-Za-z0-9]'),
-
-    // The real syntaxes.
     new AutolinkSyntax(),
     new LinkSyntax(),
     new ImageLinkSyntax(),
@@ -75,6 +64,22 @@
   InlineParser(this.source, this.document) : _stack = <TagState>[] {
     // User specified syntaxes are the first syntaxes to be evaluated.
     syntaxes.addAll(document.inlineSyntaxes);
+
+    var documentHasCustomInlineSyntaxes = document.inlineSyntaxes
+        .any((s) => !document.extensionSet.inlineSyntaxes.contains(s));
+
+    // This first RegExp matches plain text to accelerate parsing. It's written
+    // so that it does not match any prefix of any following syntaxes. Most
+    // Markdown is plain text, so it's faster to match one RegExp per 'word'
+    // rather than fail to match all the following RegExps at each non-syntax
+    // character position.
+    if (documentHasCustomInlineSyntaxes) {
+      // We should be less aggressive in blowing past "words".
+      syntaxes.add(new TextSyntax(r'[A-Za-z0-9]+\b'));
+    } else {
+      syntaxes.add(new TextSyntax(r'[ \tA-Za-z0-9]*[A-Za-z0-9]'));
+    }
+
     syntaxes.addAll(_defaultSyntaxes);
 
     // Custom link resolvers go after the generic text syntax.
@@ -414,7 +419,7 @@
   CodeSyntax() : super(_pattern);
 
   bool tryMatch(InlineParser parser) {
-    if (parser.pos > 0 && parser.source[parser.pos-1] == '`') {
+    if (parser.pos > 0 && parser.source[parser.pos - 1] == '`') {
       // Not really a match! We can't just sneak past one backtick to try the
       // next character. An example of this situation would be:
       //