Commit a1ea012383bc9a3628e12a8f962dd0e6e4d7d4f3

Golmote 2015-01-07T20:37:24

Add support for some nesting, give priority to Markdown over Markup, fixed example

diff --git a/components/prism-markdown.js b/components/prism-markdown.js
index f58bcc5..89ec0c2 100644
--- a/components/prism-markdown.js
+++ b/components/prism-markdown.js
@@ -1,4 +1,5 @@
-Prism.languages.markdown = Prism.languages.extend('markup', {
+Prism.languages.markdown = Prism.languages.extend('markup', {});
+Prism.languages.insertBefore('markdown', 'prolog', {
 	'blockquote': {
 		// > ...
 		pattern: /(^|\n)>(?:[\t ]*>)*/,
@@ -77,6 +78,28 @@ Prism.languages.markdown = Prism.languages.extend('markup', {
 		},
 		alias: 'url'
 	},
+	'bold': {
+		// **strong**
+		// __strong__
+
+		// Allow only one line break
+		pattern: /(^|[^\\])(\*\*|__)(?:\n(?!\n)|.)+?\2/,
+		lookbehind: true,
+		inside: {
+			'punctuation': /^\*\*|^__|\*\*\s*$|__\s*$/
+		}
+	},
+	'italic': {
+		// *em*
+		// _em_
+
+		// Allow only one line break
+		pattern: /(^|[^\\])(?:\*(?:\n(?!\n)|.)+?\*|_(?:\n(?!\n)|.)+?_)/,
+		lookbehind: true,
+		inside: {
+			'punctuation': /^[*_]|[*_]$/
+		}
+	},
 	'url': {
 		// [example](http://example.com "Optional title")
 		// [example] [id]
@@ -90,31 +113,10 @@ Prism.languages.markdown = Prism.languages.extend('markup', {
 				pattern: /"(?:[^"]|\\")*"(?=\)$)/
 			}
 		}
-	},
-	'bold': [
-		{
-			// **strong**
-			// __strong__
+	}
+});
 
-			// Allow only one line break
-			pattern: /(^|[^\\])(\*\*|__)(?:\n(?!\n)|.)+?\2/,
-			lookbehind: true,
-			inside: {
-				'punctuation': /^\*\*|^__|\*\*\s*$|__\s*$/
-			}
-		}
-	],
-	'italic': [
-		{
-			// *em*
-			// _em_
-
-			// Allow only one line break
-			pattern: /(^|[^\\])(?:\*(?:\n(?!\n)|.)+?\*|_(?:\n(?!\n)|.)+?_)/,
-			lookbehind: true,
-			inside: {
-				'punctuation': /^[*_]|[*_]$/
-			}
-		}
-	]
-});
\ No newline at end of file
+Prism.languages.markdown['bold'].inside['url'] = Prism.languages.markdown['url'];
+Prism.languages.markdown['italic'].inside['url'] = Prism.languages.markdown['url'];
+Prism.languages.markdown['bold'].inside['italic'] = Prism.languages.markdown['italic'];
+Prism.languages.markdown['italic'].inside['bold'] = Prism.languages.markdown['bold'];
\ No newline at end of file
diff --git a/components/prism-markdown.min.js b/components/prism-markdown.min.js
index c0ea219..6842938 100644
--- a/components/prism-markdown.min.js
+++ b/components/prism-markdown.min.js
@@ -1 +1 @@
-Prism.languages.markdown=Prism.languages.extend("markup",{blockquote:{pattern:/(^|\n)>(?:[\t ]*>)*/,lookbehind:!0,alias:"punctuation"},code:[{pattern:/(^|\n)(?: {4}|\t).+/,lookbehind:!0,alias:"keyword"},{pattern:/``.+?``|`[^`\n]+`/,alias:"keyword"}],title:[{pattern:/\w+.*\n(?:==+|--+)/,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/((?:^|\n)\s*)#+.+/,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/((?:^|\n)\s*)([*-])([\t ]*\2){2,}(?=\s*(?:\n|$))/,lookbehind:!0,alias:"punctuation"},list:{pattern:/((?:^|\n)\s*)(?:[*+-]|\d+\.)(?=[\t ].)/,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:[^>]|\\>)+>)(?:[\t ]+(?:"(?:[^"]|\\")*"|'(?:[^']|\\')*'|\((?:[^)]|\\\))*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:[^"]|\\")*"|'(?:[^']|\\')*'|\((?:[^)]|\\\))*\))$/,punctuation:/[[\]\(\)<>:]/},alias:"url"},url:{pattern:/!?\[[^\]]+\](?:\([^\s)]+(?:[\t ]+"(?:[^"]|\\")*")?\)| ?\[[^\]\n]*\])/,inside:{variable:{pattern:/(!?\[)[^\]]+(?=\]$)/,lookbehind:!0},string:{pattern:/"(?:[^"]|\\")*"(?=\)$)/}}},bold:[{pattern:/(^|[^\\])(\*\*|__)(?:\n(?!\n)|.)+?\2/,lookbehind:!0,inside:{punctuation:/^\*\*|^__|\*\*\s*$|__\s*$/}}],italic:[{pattern:/(^|[^\\])(?:\*(?:\n(?!\n)|.)+?\*|_(?:\n(?!\n)|.)+?_)/,lookbehind:!0,inside:{punctuation:/^[*_]|[*_]$/}}]});
\ No newline at end of file
+Prism.languages.markdown=Prism.languages.extend("markup",{}),Prism.languages.insertBefore("markdown","prolog",{blockquote:{pattern:/(^|\n)>(?:[\t ]*>)*/,lookbehind:!0,alias:"punctuation"},code:[{pattern:/(^|\n)(?: {4}|\t).+/,lookbehind:!0,alias:"keyword"},{pattern:/``.+?``|`[^`\n]+`/,alias:"keyword"}],title:[{pattern:/\w+.*\n(?:==+|--+)/,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/((?:^|\n)\s*)#+.+/,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/((?:^|\n)\s*)([*-])([\t ]*\2){2,}(?=\s*(?:\n|$))/,lookbehind:!0,alias:"punctuation"},list:{pattern:/((?:^|\n)\s*)(?:[*+-]|\d+\.)(?=[\t ].)/,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:[^>]|\\>)+>)(?:[\t ]+(?:"(?:[^"]|\\")*"|'(?:[^']|\\')*'|\((?:[^)]|\\\))*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:[^"]|\\")*"|'(?:[^']|\\')*'|\((?:[^)]|\\\))*\))$/,punctuation:/[[\]\(\)<>:]/},alias:"url"},bold:{pattern:/(^|[^\\])(\*\*|__)(?:\n(?!\n)|.)+?\2/,lookbehind:!0,inside:{punctuation:/^\*\*|^__|\*\*\s*$|__\s*$/}},italic:{pattern:/(^|[^\\])(?:\*(?:\n(?!\n)|.)+?\*|_(?:\n(?!\n)|.)+?_)/,lookbehind:!0,inside:{punctuation:/^[*_]|[*_]$/}},url:{pattern:/!?\[[^\]]+\](?:\([^\s)]+(?:[\t ]+"(?:[^"]|\\")*")?\)| ?\[[^\]\n]*\])/,inside:{variable:{pattern:/(!?\[)[^\]]+(?=\]$)/,lookbehind:!0},string:{pattern:/"(?:[^"]|\\")*"(?=\)$)/}}}}),Prism.languages.markdown.bold.inside.url=Prism.languages.markdown.url,Prism.languages.markdown.italic.inside.url=Prism.languages.markdown.url,Prism.languages.markdown.bold.inside.italic=Prism.languages.markdown.italic,Prism.languages.markdown.italic.inside.bold=Prism.languages.markdown.bold;
\ No newline at end of file
diff --git a/examples/prism-markdown.html b/examples/prism-markdown.html
index 409df27..b000aef 100644
--- a/examples/prism-markdown.html
+++ b/examples/prism-markdown.html
@@ -56,7 +56,7 @@ is not allowed__
 </code></pre>
 
 <h2>Code</h2>
-<pre><code>Inline code between backticks `some_code()`
+<pre><code>Inline code between backticks `&lt;p>Paragraph&lt;/p>`
 
     some_code(); /* Indented
     with four spaces */
@@ -78,17 +78,16 @@ is not allowed__
 	If a failure is listed here, it doesn’t mean it will never be fixed. This is more of a “known bugs” list, just with a certain type of bug.
 </p>
 
-<h3>Nested elements are not supported</h3>
-<pre><code>_ **bold** inside italic _
+<h3>Nesting of elements is not fully supported</h3>
+<pre><code>_ **bold** inside italic does not work _
 
-__ *italic* inside bold __
+__ *italic* inside bold does work __
 
-__ [Bold link?](http://example.com) __
+_ [Italic link does work](http://example.com) _
+__ [Bold link does work](http://example.com) __
 
-[Link in *italic*](http://example.com)</code></pre>
+[Link partially *italic* does not work](http://example.com)
+[Link partially **bold** does not work](http://example.com)</code></pre>
 
-<h3>HTML inside code blocks is not highlighted as code</h3>
-<pre><code>Some `&lt;html>`
-
-    Block of &lt;strong>HTML&lt;/strong>
-    which is &lt;em>not&lt;/em> highlighted as code.</code></pre>
\ No newline at end of file
+<h3>Markdown-like HTML attribute</h3>
+<pre><code>&lt;p class="_test_">&lt;/p></code></pre>
\ No newline at end of file