From 26105034da4fcce7ac883c899d781f016559310d Mon Sep 17 00:00:00 2001 From: ruki Date: Thu, 8 Nov 2018 00:38:48 +0800 Subject: switch to vuepress --- .../plugins/autolinker/prism-autolinker.css | 3 + .../prismjs/plugins/autolinker/prism-autolinker.js | 81 +++ .../plugins/autolinker/prism-autolinker.min.js | 1 + .../prismjs/plugins/autoloader/prism-autoloader.js | 209 ++++++ .../plugins/autoloader/prism-autoloader.min.js | 1 + .../plugins/command-line/prism-command-line.css | 33 + .../plugins/command-line/prism-command-line.js | 139 ++++ .../plugins/command-line/prism-command-line.min.js | 1 + .../copy-to-clipboard/prism-copy-to-clipboard.js | 75 +++ .../prism-copy-to-clipboard.min.js | 1 + .../plugins/custom-class/prism-custom-class.js | 31 + .../plugins/custom-class/prism-custom-class.min.js | 1 + .../data-uri-highlight/prism-data-uri-highlight.js | 98 +++ .../prism-data-uri-highlight.min.js | 1 + .../plugins/file-highlight/prism-file-highlight.js | 90 +++ .../file-highlight/prism-file-highlight.min.js | 1 + .../highlight-keywords/prism-highlight-keywords.js | 17 + .../prism-highlight-keywords.min.js | 1 + .../jsonp-highlight/prism-jsonp-highlight.js | 151 +++++ .../jsonp-highlight/prism-jsonp-highlight.min.js | 1 + .../plugins/keep-markup/prism-keep-markup.js | 99 +++ .../plugins/keep-markup/prism-keep-markup.min.js | 1 + .../line-highlight/prism-line-highlight.css | 49 ++ .../plugins/line-highlight/prism-line-highlight.js | 181 ++++++ .../line-highlight/prism-line-highlight.min.js | 1 + .../plugins/line-numbers/prism-line-numbers.css | 41 ++ .../plugins/line-numbers/prism-line-numbers.js | 159 +++++ .../plugins/line-numbers/prism-line-numbers.min.js | 1 + .../prism-normalize-whitespace.js | 190 ++++++ .../prism-normalize-whitespace.min.js | 1 + .../plugins/previewers/prism-previewers.css | 242 +++++++ .../prismjs/plugins/previewers/prism-previewers.js | 715 +++++++++++++++++++++ .../plugins/previewers/prism-previewers.min.js | 1 + .../prism-remove-initial-line-feed.js | 21 + .../prism-remove-initial-line-feed.min.js | 1 + .../show-invisibles/prism-show-invisibles.css | 33 + .../show-invisibles/prism-show-invisibles.js | 21 + .../show-invisibles/prism-show-invisibles.min.js | 1 + .../plugins/show-language/prism-show-language.js | 31 + .../show-language/prism-show-language.min.js | 1 + .../prismjs/plugins/toolbar/prism-toolbar.css | 58 ++ .../prismjs/plugins/toolbar/prism-toolbar.js | 137 ++++ .../prismjs/plugins/toolbar/prism-toolbar.min.js | 1 + .../unescaped-markup/prism-unescaped-markup.css | 10 + .../unescaped-markup/prism-unescaped-markup.js | 44 ++ .../unescaped-markup/prism-unescaped-markup.min.js | 1 + node_modules/prismjs/plugins/wpd/prism-wpd.css | 11 + node_modules/prismjs/plugins/wpd/prism-wpd.js | 169 +++++ node_modules/prismjs/plugins/wpd/prism-wpd.min.js | 1 + 49 files changed, 3158 insertions(+) create mode 100644 node_modules/prismjs/plugins/autolinker/prism-autolinker.css create mode 100644 node_modules/prismjs/plugins/autolinker/prism-autolinker.js create mode 100644 node_modules/prismjs/plugins/autolinker/prism-autolinker.min.js create mode 100644 node_modules/prismjs/plugins/autoloader/prism-autoloader.js create mode 100644 node_modules/prismjs/plugins/autoloader/prism-autoloader.min.js create mode 100644 node_modules/prismjs/plugins/command-line/prism-command-line.css create mode 100644 node_modules/prismjs/plugins/command-line/prism-command-line.js create mode 100644 node_modules/prismjs/plugins/command-line/prism-command-line.min.js create mode 100644 node_modules/prismjs/plugins/copy-to-clipboard/prism-copy-to-clipboard.js create mode 100644 node_modules/prismjs/plugins/copy-to-clipboard/prism-copy-to-clipboard.min.js create mode 100644 node_modules/prismjs/plugins/custom-class/prism-custom-class.js create mode 100644 node_modules/prismjs/plugins/custom-class/prism-custom-class.min.js create mode 100644 node_modules/prismjs/plugins/data-uri-highlight/prism-data-uri-highlight.js create mode 100644 node_modules/prismjs/plugins/data-uri-highlight/prism-data-uri-highlight.min.js create mode 100644 node_modules/prismjs/plugins/file-highlight/prism-file-highlight.js create mode 100644 node_modules/prismjs/plugins/file-highlight/prism-file-highlight.min.js create mode 100644 node_modules/prismjs/plugins/highlight-keywords/prism-highlight-keywords.js create mode 100644 node_modules/prismjs/plugins/highlight-keywords/prism-highlight-keywords.min.js create mode 100644 node_modules/prismjs/plugins/jsonp-highlight/prism-jsonp-highlight.js create mode 100644 node_modules/prismjs/plugins/jsonp-highlight/prism-jsonp-highlight.min.js create mode 100644 node_modules/prismjs/plugins/keep-markup/prism-keep-markup.js create mode 100644 node_modules/prismjs/plugins/keep-markup/prism-keep-markup.min.js create mode 100644 node_modules/prismjs/plugins/line-highlight/prism-line-highlight.css create mode 100644 node_modules/prismjs/plugins/line-highlight/prism-line-highlight.js create mode 100644 node_modules/prismjs/plugins/line-highlight/prism-line-highlight.min.js create mode 100644 node_modules/prismjs/plugins/line-numbers/prism-line-numbers.css create mode 100644 node_modules/prismjs/plugins/line-numbers/prism-line-numbers.js create mode 100644 node_modules/prismjs/plugins/line-numbers/prism-line-numbers.min.js create mode 100644 node_modules/prismjs/plugins/normalize-whitespace/prism-normalize-whitespace.js create mode 100644 node_modules/prismjs/plugins/normalize-whitespace/prism-normalize-whitespace.min.js create mode 100644 node_modules/prismjs/plugins/previewers/prism-previewers.css create mode 100644 node_modules/prismjs/plugins/previewers/prism-previewers.js create mode 100644 node_modules/prismjs/plugins/previewers/prism-previewers.min.js create mode 100644 node_modules/prismjs/plugins/remove-initial-line-feed/prism-remove-initial-line-feed.js create mode 100644 node_modules/prismjs/plugins/remove-initial-line-feed/prism-remove-initial-line-feed.min.js create mode 100644 node_modules/prismjs/plugins/show-invisibles/prism-show-invisibles.css create mode 100644 node_modules/prismjs/plugins/show-invisibles/prism-show-invisibles.js create mode 100644 node_modules/prismjs/plugins/show-invisibles/prism-show-invisibles.min.js create mode 100644 node_modules/prismjs/plugins/show-language/prism-show-language.js create mode 100644 node_modules/prismjs/plugins/show-language/prism-show-language.min.js create mode 100644 node_modules/prismjs/plugins/toolbar/prism-toolbar.css create mode 100644 node_modules/prismjs/plugins/toolbar/prism-toolbar.js create mode 100644 node_modules/prismjs/plugins/toolbar/prism-toolbar.min.js create mode 100644 node_modules/prismjs/plugins/unescaped-markup/prism-unescaped-markup.css create mode 100644 node_modules/prismjs/plugins/unescaped-markup/prism-unescaped-markup.js create mode 100644 node_modules/prismjs/plugins/unescaped-markup/prism-unescaped-markup.min.js create mode 100644 node_modules/prismjs/plugins/wpd/prism-wpd.css create mode 100644 node_modules/prismjs/plugins/wpd/prism-wpd.js create mode 100644 node_modules/prismjs/plugins/wpd/prism-wpd.min.js (limited to 'node_modules/prismjs/plugins') diff --git a/node_modules/prismjs/plugins/autolinker/prism-autolinker.css b/node_modules/prismjs/plugins/autolinker/prism-autolinker.css new file mode 100644 index 00000000..b5f76309 --- /dev/null +++ b/node_modules/prismjs/plugins/autolinker/prism-autolinker.css @@ -0,0 +1,3 @@ +.token a { + color: inherit; +} \ No newline at end of file diff --git a/node_modules/prismjs/plugins/autolinker/prism-autolinker.js b/node_modules/prismjs/plugins/autolinker/prism-autolinker.js new file mode 100644 index 00000000..3913c98a --- /dev/null +++ b/node_modules/prismjs/plugins/autolinker/prism-autolinker.js @@ -0,0 +1,81 @@ +(function(){ + +if ( + typeof self !== 'undefined' && !self.Prism || + typeof global !== 'undefined' && !global.Prism +) { + return; +} + +var url = /\b([a-z]{3,7}:\/\/|tel:)[\w\-+%~/.:=&]+(?:\?[\w\-+%~/.:#=?&!$'()*,;]*)?(?:#[\w\-+%~/.:#=?&!$'()*,;]*)?/, + email = /\b\S+@[\w.]+[a-z]{2}/, + linkMd = /\[([^\]]+)]\(([^)]+)\)/, + + // Tokens that may contain URLs and emails + candidates = ['comment', 'url', 'attr-value', 'string']; + +Prism.plugins.autolinker = { + processGrammar: function (grammar) { + // Abort if grammar has already been processed + if (!grammar || grammar['url-link']) { + return; + } + Prism.languages.DFS(grammar, function (key, def, type) { + if (candidates.indexOf(type) > -1 && Prism.util.type(def) !== 'Array') { + if (!def.pattern) { + def = this[key] = { + pattern: def + }; + } + + def.inside = def.inside || {}; + + if (type == 'comment') { + def.inside['md-link'] = linkMd; + } + if (type == 'attr-value') { + Prism.languages.insertBefore('inside', 'punctuation', { 'url-link': url }, def); + } + else { + def.inside['url-link'] = url; + } + + def.inside['email-link'] = email; + } + }); + grammar['url-link'] = url; + grammar['email-link'] = email; + } +}; + +Prism.hooks.add('before-highlight', function(env) { + Prism.plugins.autolinker.processGrammar(env.grammar); +}); + +Prism.hooks.add('wrap', function(env) { + if (/-link$/.test(env.type)) { + env.tag = 'a'; + + var href = env.content; + + if (env.type == 'email-link' && href.indexOf('mailto:') != 0) { + href = 'mailto:' + href; + } + else if (env.type == 'md-link') { + // Markdown + var match = env.content.match(linkMd); + + href = match[2]; + env.content = match[1]; + } + + env.attributes.href = href; + } + + // Silently catch any error thrown by decodeURIComponent (#1186) + try { + env.content = decodeURIComponent(env.content); + } catch(e) {} +}); + +})(); diff --git a/node_modules/prismjs/plugins/autolinker/prism-autolinker.min.js b/node_modules/prismjs/plugins/autolinker/prism-autolinker.min.js new file mode 100644 index 00000000..9fdced95 --- /dev/null +++ b/node_modules/prismjs/plugins/autolinker/prism-autolinker.min.js @@ -0,0 +1 @@ +!function(){if(("undefined"==typeof self||self.Prism)&&("undefined"==typeof global||global.Prism)){var i=/\b([a-z]{3,7}:\/\/|tel:)[\w\-+%~\/.:=&]+(?:\?[\w\-+%~\/.:#=?&!$'()*,;]*)?(?:#[\w\-+%~\/.:#=?&!$'()*,;]*)?/,n=/\b\S+@[\w.]+[a-z]{2}/,e=/\[([^\]]+)]\(([^)]+)\)/,t=["comment","url","attr-value","string"];Prism.plugins.autolinker={processGrammar:function(r){r&&!r["url-link"]&&(Prism.languages.DFS(r,function(r,a,l){t.indexOf(l)>-1&&"Array"!==Prism.util.type(a)&&(a.pattern||(a=this[r]={pattern:a}),a.inside=a.inside||{},"comment"==l&&(a.inside["md-link"]=e),"attr-value"==l?Prism.languages.insertBefore("inside","punctuation",{"url-link":i},a):a.inside["url-link"]=i,a.inside["email-link"]=n)}),r["url-link"]=i,r["email-link"]=n)}},Prism.hooks.add("before-highlight",function(i){Prism.plugins.autolinker.processGrammar(i.grammar)}),Prism.hooks.add("wrap",function(i){if(/-link$/.test(i.type)){i.tag="a";var n=i.content;if("email-link"==i.type&&0!=n.indexOf("mailto:"))n="mailto:"+n;else if("md-link"==i.type){var t=i.content.match(e);n=t[2],i.content=t[1]}i.attributes.href=n}try{i.content=decodeURIComponent(i.content)}catch(r){}})}}(); \ No newline at end of file diff --git a/node_modules/prismjs/plugins/autoloader/prism-autoloader.js b/node_modules/prismjs/plugins/autoloader/prism-autoloader.js new file mode 100644 index 00000000..7cbf2953 --- /dev/null +++ b/node_modules/prismjs/plugins/autoloader/prism-autoloader.js @@ -0,0 +1,209 @@ +(function () { + if (typeof self === 'undefined' || !self.Prism || !self.document || !document.createElement) { + return; + } + + // The dependencies map is built automatically with gulp + var lang_dependencies = /*languages_placeholder[*/{"javascript":"clike","actionscript":"javascript","arduino":"cpp","aspnet":["markup","csharp"],"bison":"c","c":"clike","csharp":"clike","cpp":"c","coffeescript":"javascript","crystal":"ruby","css-extras":"css","d":"clike","dart":"clike","django":"markup","erb":["ruby","markup-templating"],"fsharp":"clike","flow":"javascript","glsl":"clike","go":"clike","groovy":"clike","haml":"ruby","handlebars":"markup-templating","haxe":"clike","java":"clike","jolie":"clike","kotlin":"clike","less":"css","markdown":"markup","markup-templating":"markup","n4js":"javascript","nginx":"clike","objectivec":"c","opencl":"cpp","parser":"markup","php":["clike","markup-templating"],"php-extras":"php","plsql":"sql","processing":"clike","protobuf":"clike","pug":"javascript","qore":"clike","jsx":["markup","javascript"],"tsx":["jsx","typescript"],"reason":"clike","ruby":"clike","sass":"css","scss":"css","scala":"java","smarty":"markup-templating","soy":"markup-templating","swift":"clike","tap":"yaml","textile":"markup","tt2":["clike","markup-templating"],"twig":"markup","typescript":"javascript","vbnet":"basic","velocity":"markup","wiki":"markup","xeora":"markup","xquery":"markup"}/*]*/; + + var lang_data = {}; + + var ignored_language = 'none'; + + var script = document.getElementsByTagName('script'); + script = script[script.length - 1]; + var languages_path = 'components/'; + if(script.hasAttribute('data-autoloader-path')) { + var path = script.getAttribute('data-autoloader-path').trim(); + if(path.length > 0 && !/^[a-z]+:\/\//i.test(script.src)) { + languages_path = path.replace(/\/?$/, '/'); + } + } else if (/[\w-]+\.js$/.test(script.src)) { + languages_path = script.src.replace(/[\w-]+\.js$/, 'components/'); + } + var config = Prism.plugins.autoloader = { + languages_path: languages_path, + use_minified: true + }; + + /** + * Lazy loads an external script + * @param {string} src + * @param {function=} success + * @param {function=} error + */ + var script = function (src, success, error) { + var s = document.createElement('script'); + s.src = src; + s.async = true; + s.onload = function() { + document.body.removeChild(s); + success && success(); + }; + s.onerror = function() { + document.body.removeChild(s); + error && error(); + }; + document.body.appendChild(s); + }; + + /** + * Returns the path to a grammar, using the language_path and use_minified config keys. + * @param {string} lang + * @returns {string} + */ + var getLanguagePath = function (lang) { + return config.languages_path + + 'prism-' + lang + + (config.use_minified ? '.min' : '') + '.js' + }; + + /** + * Tries to load a grammar and + * highlight again the given element once loaded. + * @param {string} lang + * @param {HTMLElement} elt + */ + var registerElement = function (lang, elt) { + var data = lang_data[lang]; + if (!data) { + data = lang_data[lang] = {}; + } + + // Look for additional dependencies defined on the or
 tags
+		var deps = elt.getAttribute('data-dependencies');
+		if (!deps && elt.parentNode && elt.parentNode.tagName.toLowerCase() === 'pre') {
+			deps = elt.parentNode.getAttribute('data-dependencies');
+		}
+
+		if (deps) {
+			deps = deps.split(/\s*,\s*/g);
+		} else {
+			deps = [];
+		}
+
+		loadLanguages(deps, function () {
+			loadLanguage(lang, function () {
+				Prism.highlightElement(elt);
+			});
+		});
+	};
+
+	/**
+	 * Sequentially loads an array of grammars.
+	 * @param {string[]|string} langs
+	 * @param {function=} success
+	 * @param {function=} error
+	 */
+	var loadLanguages = function (langs, success, error) {
+		if (typeof langs === 'string') {
+			langs = [langs];
+		}
+		var i = 0;
+		var l = langs.length;
+		var f = function () {
+			if (i < l) {
+				loadLanguage(langs[i], function () {
+					i++;
+					f();
+				}, function () {
+					error && error(langs[i]);
+				});
+			} else if (i === l) {
+				success && success(langs);
+			}
+		};
+		f();
+	};
+
+	/**
+	 * Load a grammar with its dependencies
+	 * @param {string} lang
+	 * @param {function=} success
+	 * @param {function=} error
+	 */
+	var loadLanguage = function (lang, success, error) {
+		var load = function () {
+			var force = false;
+			// Do we want to force reload the grammar?
+			if (lang.indexOf('!') >= 0) {
+				force = true;
+				lang = lang.replace('!', '');
+			}
+
+			var data = lang_data[lang];
+			if (!data) {
+				data = lang_data[lang] = {};
+			}
+			if (success) {
+				if (!data.success_callbacks) {
+					data.success_callbacks = [];
+				}
+				data.success_callbacks.push(success);
+			}
+			if (error) {
+				if (!data.error_callbacks) {
+					data.error_callbacks = [];
+				}
+				data.error_callbacks.push(error);
+			}
+
+			if (!force && Prism.languages[lang]) {
+				languageSuccess(lang);
+			} else if (!force && data.error) {
+				languageError(lang);
+			} else if (force || !data.loading) {
+				data.loading = true;
+				var src = getLanguagePath(lang);
+				script(src, function () {
+					data.loading = false;
+					languageSuccess(lang);
+
+				}, function () {
+					data.loading = false;
+					data.error = true;
+					languageError(lang);
+				});
+			}
+		};
+		var dependencies = lang_dependencies[lang];
+		if(dependencies && dependencies.length) {
+			loadLanguages(dependencies, load);
+		} else {
+			load();
+		}
+	};
+
+	/**
+	 * Runs all success callbacks for this language.
+	 * @param {string} lang
+	 */
+	var languageSuccess = function (lang) {
+		if (lang_data[lang] && lang_data[lang].success_callbacks && lang_data[lang].success_callbacks.length) {
+			lang_data[lang].success_callbacks.forEach(function (f) {
+				f(lang);
+			});
+		}
+	};
+
+	/**
+	 * Runs all error callbacks for this language.
+	 * @param {string} lang
+	 */
+	var languageError = function (lang) {
+		if (lang_data[lang] && lang_data[lang].error_callbacks && lang_data[lang].error_callbacks.length) {
+			lang_data[lang].error_callbacks.forEach(function (f) {
+				f(lang);
+			});
+		}
+	};
+
+	Prism.hooks.add('complete', function (env) {
+		if (env.element && env.language && !env.grammar) {
+			if (env.language !== ignored_language) {
+				registerElement(env.language, env.element);
+			}
+		}
+	});
+
+}());
\ No newline at end of file
diff --git a/node_modules/prismjs/plugins/autoloader/prism-autoloader.min.js b/node_modules/prismjs/plugins/autoloader/prism-autoloader.min.js
new file mode 100644
index 00000000..9e3cc251
--- /dev/null
+++ b/node_modules/prismjs/plugins/autoloader/prism-autoloader.min.js
@@ -0,0 +1 @@
+!function(){if("undefined"!=typeof self&&self.Prism&&self.document&&document.createElement){var e={javascript:"clike",actionscript:"javascript",arduino:"cpp",aspnet:["markup","csharp"],bison:"c",c:"clike",csharp:"clike",cpp:"c",coffeescript:"javascript",crystal:"ruby","css-extras":"css",d:"clike",dart:"clike",django:"markup",erb:["ruby","markup-templating"],fsharp:"clike",flow:"javascript",glsl:"clike",go:"clike",groovy:"clike",haml:"ruby",handlebars:"markup-templating",haxe:"clike",java:"clike",jolie:"clike",kotlin:"clike",less:"css",markdown:"markup","markup-templating":"markup",n4js:"javascript",nginx:"clike",objectivec:"c",opencl:"cpp",parser:"markup",php:["clike","markup-templating"],"php-extras":"php",plsql:"sql",processing:"clike",protobuf:"clike",pug:"javascript",qore:"clike",jsx:["markup","javascript"],tsx:["jsx","typescript"],reason:"clike",ruby:"clike",sass:"css",scss:"css",scala:"java",smarty:"markup-templating",soy:"markup-templating",swift:"clike",tap:"yaml",textile:"markup",tt2:["clike","markup-templating"],twig:"markup",typescript:"javascript",vbnet:"basic",velocity:"markup",wiki:"markup",xeora:"markup",xquery:"markup"},a={},c="none",t=document.getElementsByTagName("script");t=t[t.length-1];var r="components/";if(t.hasAttribute("data-autoloader-path")){var s=t.getAttribute("data-autoloader-path").trim();s.length>0&&!/^[a-z]+:\/\//i.test(t.src)&&(r=s.replace(/\/?$/,"/"))}else/[\w-]+\.js$/.test(t.src)&&(r=t.src.replace(/[\w-]+\.js$/,"components/"));var i=Prism.plugins.autoloader={languages_path:r,use_minified:!0},t=function(e,a,c){var t=document.createElement("script");t.src=e,t.async=!0,t.onload=function(){document.body.removeChild(t),a&&a()},t.onerror=function(){document.body.removeChild(t),c&&c()},document.body.appendChild(t)},n=function(e){return i.languages_path+"prism-"+e+(i.use_minified?".min":"")+".js"},l=function(e,c){var t=a[e];t||(t=a[e]={});var r=c.getAttribute("data-dependencies");!r&&c.parentNode&&"pre"===c.parentNode.tagName.toLowerCase()&&(r=c.parentNode.getAttribute("data-dependencies")),r=r?r.split(/\s*,\s*/g):[],o(r,function(){p(e,function(){Prism.highlightElement(c)})})},o=function(e,a,c){"string"==typeof e&&(e=[e]);var t=0,r=e.length,s=function(){r>t?p(e[t],function(){t++,s()},function(){c&&c(e[t])}):t===r&&a&&a(e)};s()},p=function(c,r,s){var i=function(){var e=!1;c.indexOf("!")>=0&&(e=!0,c=c.replace("!",""));var i=a[c];if(i||(i=a[c]={}),r&&(i.success_callbacks||(i.success_callbacks=[]),i.success_callbacks.push(r)),s&&(i.error_callbacks||(i.error_callbacks=[]),i.error_callbacks.push(s)),!e&&Prism.languages[c])u(c);else if(!e&&i.error)m(c);else if(e||!i.loading){i.loading=!0;var l=n(c);t(l,function(){i.loading=!1,u(c)},function(){i.loading=!1,i.error=!0,m(c)})}},l=e[c];l&&l.length?o(l,i):i()},u=function(e){a[e]&&a[e].success_callbacks&&a[e].success_callbacks.length&&a[e].success_callbacks.forEach(function(a){a(e)})},m=function(e){a[e]&&a[e].error_callbacks&&a[e].error_callbacks.length&&a[e].error_callbacks.forEach(function(a){a(e)})};Prism.hooks.add("complete",function(e){e.element&&e.language&&!e.grammar&&e.language!==c&&l(e.language,e.element)})}}();
\ No newline at end of file
diff --git a/node_modules/prismjs/plugins/command-line/prism-command-line.css b/node_modules/prismjs/plugins/command-line/prism-command-line.css
new file mode 100644
index 00000000..153a8707
--- /dev/null
+++ b/node_modules/prismjs/plugins/command-line/prism-command-line.css
@@ -0,0 +1,33 @@
+.command-line-prompt {
+	border-right: 1px solid #999;
+	display: block;
+	float: left;
+	font-size: 100%;
+	letter-spacing: -1px;
+	margin-right: 1em;
+	pointer-events: none;
+
+	-webkit-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
+}
+
+.command-line-prompt > span:before {
+	color: #999;
+	content: ' ';
+	display: block;
+	padding-right: 0.8em;
+}
+
+.command-line-prompt > span[data-user]:before {
+	content: "[" attr(data-user) "@" attr(data-host) "] $";
+}
+
+.command-line-prompt > span[data-user="root"]:before {
+	content: "[" attr(data-user) "@" attr(data-host) "] #";
+}
+
+.command-line-prompt > span[data-prompt]:before {
+	content: attr(data-prompt);
+}
diff --git a/node_modules/prismjs/plugins/command-line/prism-command-line.js b/node_modules/prismjs/plugins/command-line/prism-command-line.js
new file mode 100644
index 00000000..b8595d72
--- /dev/null
+++ b/node_modules/prismjs/plugins/command-line/prism-command-line.js
@@ -0,0 +1,139 @@
+(function() {
+
+if (typeof self === 'undefined' || !self.Prism || !self.document) {
+	return;
+}
+
+var clsReg = /\s*\bcommand-line\b\s*/;
+
+Prism.hooks.add('before-highlight', function (env) {
+	env.vars = env.vars || {};
+	env.vars['command-line'] = env.vars['command-line'] || {};
+
+	if (env.vars['command-line'].complete || !env.code) {
+		env.vars['command-line'].complete = true;
+		return;
+	}
+
+	// Works only for  wrapped inside 
 (not inline).
+	var pre = env.element.parentNode;
+	if (!pre || !/pre/i.test(pre.nodeName) || // Abort only if neither the 
 nor the  have the class
+		(!clsReg.test(pre.className) && !clsReg.test(env.element.className))) {
+		env.vars['command-line'].complete = true;
+		return;
+	}
+
+	if (env.element.querySelector('.command-line-prompt')) { // Abort if prompt already exists.
+		env.vars['command-line'].complete = true;
+		return;
+	}
+
+	var codeLines = env.code.split('\n');
+	env.vars['command-line'].numberOfLines = codeLines.length;
+	env.vars['command-line'].outputLines = [];
+
+	var outputSections = pre.getAttribute('data-output');
+	var outputFilter = pre.getAttribute('data-filter-output');
+	if (outputSections || outputSections === '') { // The user specified the output lines. -- cwells
+		outputSections = outputSections.split(',');
+		for (var i = 0; i < outputSections.length; i++) { // Parse the output sections into start/end ranges. -- cwells
+			var range = outputSections[i].split('-');
+			var outputStart = parseInt(range[0], 10);
+			var outputEnd = (range.length === 2 ? parseInt(range[1], 10) : outputStart);
+
+			if (!isNaN(outputStart) && !isNaN(outputEnd)) {
+				if (outputStart < 1) {
+					outputStart = 1;
+				}
+				if (outputEnd > codeLines.length) {
+					outputEnd = codeLines.length;
+				}
+				// Convert start and end to 0-based to simplify the arrays. -- cwells
+				outputStart--;
+				outputEnd--;
+				// Save the output line in an array and clear it in the code so it's not highlighted. -- cwells
+				for (var j = outputStart; j <= outputEnd; j++) {
+					env.vars['command-line'].outputLines[j] = codeLines[j];
+					codeLines[j] = '';
+				}
+			}
+		}
+	} else if (outputFilter) { // Treat lines beginning with this string as output. -- cwells
+		for (var i = 0; i < codeLines.length; i++) {
+			if (codeLines[i].indexOf(outputFilter) === 0) { // This line is output. -- cwells
+				env.vars['command-line'].outputLines[i] = codeLines[i].slice(outputFilter.length);
+				codeLines[i] = '';
+			}
+		}
+	}
+
+	env.code = codeLines.join('\n');
+});
+
+Prism.hooks.add('before-insert', function (env) {
+	env.vars = env.vars || {};
+	env.vars['command-line'] = env.vars['command-line'] || {};
+	if (env.vars['command-line'].complete) {
+		return;
+	}
+
+	// Reinsert the output lines into the highlighted code. -- cwells
+	var codeLines = env.highlightedCode.split('\n');
+	for (var i = 0; i < env.vars['command-line'].outputLines.length; i++) {
+		if (env.vars['command-line'].outputLines.hasOwnProperty(i)) {
+			codeLines[i] = env.vars['command-line'].outputLines[i];
+		}
+	}
+	env.highlightedCode = codeLines.join('\n');
+});
+
+Prism.hooks.add('complete', function (env) {
+	env.vars = env.vars || {};
+	env.vars['command-line'] = env.vars['command-line'] || {};
+	if (env.vars['command-line'].complete) {
+		return;
+	}
+
+	var pre = env.element.parentNode;
+	if (clsReg.test(env.element.className)) { // Remove the class "command-line" from the 
+		env.element.className = env.element.className.replace(clsReg, ' ');
+	}
+	if (!clsReg.test(pre.className)) { // Add the class "command-line" to the 
+		pre.className += ' command-line';
+	}
+
+	var getAttribute = function(key, defaultValue) {
+		return (pre.getAttribute(key) || defaultValue).replace(/"/g, '"');
+	};
+
+	// Create the "rows" that will become the command-line prompts. -- cwells
+	var promptLines = new Array(env.vars['command-line'].numberOfLines + 1);
+	var promptText = getAttribute('data-prompt', '');
+	if (promptText !== '') {
+		promptLines = promptLines.join('');
+	} else {
+		var user = getAttribute('data-user', 'user');
+		var host = getAttribute('data-host', 'localhost');
+		promptLines = promptLines.join('');
+	}
+
+	// Create the wrapper element. -- cwells
+	var prompt = document.createElement('span');
+	prompt.className = 'command-line-prompt';
+	prompt.innerHTML = promptLines;
+
+	// Remove the prompt from the output lines. -- cwells
+	for (var i = 0; i < env.vars['command-line'].outputLines.length; i++) {
+		if (env.vars['command-line'].outputLines.hasOwnProperty(i)) {
+			var node = prompt.children[i];
+			node.removeAttribute('data-user');
+			node.removeAttribute('data-host');
+			node.removeAttribute('data-prompt');
+		}
+	}
+
+	env.element.insertBefore(prompt, env.element.firstChild);
+	env.vars['command-line'].complete = true;
+});
+
+}());
diff --git a/node_modules/prismjs/plugins/command-line/prism-command-line.min.js b/node_modules/prismjs/plugins/command-line/prism-command-line.min.js
new file mode 100644
index 00000000..159f4094
--- /dev/null
+++ b/node_modules/prismjs/plugins/command-line/prism-command-line.min.js
@@ -0,0 +1 @@
+!function(){if("undefined"!=typeof self&&self.Prism&&self.document){var e=/\s*\bcommand-line\b\s*/;Prism.hooks.add("before-highlight",function(a){if(a.vars=a.vars||{},a.vars["command-line"]=a.vars["command-line"]||{},a.vars["command-line"].complete||!a.code)return a.vars["command-line"].complete=!0,void 0;var n=a.element.parentNode;if(!n||!/pre/i.test(n.nodeName)||!e.test(n.className)&&!e.test(a.element.className))return a.vars["command-line"].complete=!0,void 0;if(a.element.querySelector(".command-line-prompt"))return a.vars["command-line"].complete=!0,void 0;var t=a.code.split("\n");a.vars["command-line"].numberOfLines=t.length,a.vars["command-line"].outputLines=[];var r=n.getAttribute("data-output"),s=n.getAttribute("data-filter-output");if(r||""===r){r=r.split(",");for(var o=0;oi&&(i=1),l>t.length&&(l=t.length),i--,l--;for(var d=i;l>=d;d++)a.vars["command-line"].outputLines[d]=t[d],t[d]=""}}}else if(s)for(var o=0;o');else{var o=t("data-user","user"),m=t("data-host","localhost");r=r.join('')}var i=document.createElement("span");i.className="command-line-prompt",i.innerHTML=r;for(var l=0;l -1 && Prism.util.type(def) !== 'Array') {
+					if (!def.pattern) {
+						def = this[key] = {
+							pattern: def
+						};
+					}
+
+					def.inside = def.inside || {};
+
+					if (type == 'attr-value') {
+						Prism.languages.insertBefore('inside', def.inside['url-link'] ? 'url-link' : 'punctuation', {
+							'data-uri': dataURI
+						}, def);
+					}
+					else {
+						if (def.inside['url-link']) {
+							Prism.languages.insertBefore('inside', 'url-link', {
+								'data-uri': dataURI
+							}, def);
+						} else {
+							def.inside['data-uri'] = dataURI;
+						}
+					}
+				}
+			});
+			grammar['data-uri'] = dataURI;
+		}
+	};
+
+	Prism.hooks.add('before-highlight', function (env) {
+		// Prepare the needed grammars for this code block
+		if (dataURI.pattern.test(env.code)) {
+			for (var p in dataURI.inside) {
+				if (dataURI.inside.hasOwnProperty(p)) {
+					if (!dataURI.inside[p].inside && dataURI.inside[p].pattern.test(env.code)) {
+						var lang = p.match(/^language-(.+)/)[1];
+						if (Prism.languages[lang]) {
+							dataURI.inside[p].inside = {
+								rest: autoLinkerProcess(Prism.languages[lang])
+							};
+						}
+					}
+				}
+			}
+		}
+
+		Prism.plugins.dataURIHighlight.processGrammar(env.grammar);
+	});
+}());
\ No newline at end of file
diff --git a/node_modules/prismjs/plugins/data-uri-highlight/prism-data-uri-highlight.min.js b/node_modules/prismjs/plugins/data-uri-highlight/prism-data-uri-highlight.min.js
new file mode 100644
index 00000000..479828d9
--- /dev/null
+++ b/node_modules/prismjs/plugins/data-uri-highlight/prism-data-uri-highlight.min.js
@@ -0,0 +1 @@
+!function(){if(("undefined"==typeof self||self.Prism)&&("undefined"==typeof global||global.Prism)){var i=function(i){return Prism.plugins.autolinker&&Prism.plugins.autolinker.processGrammar(i),i},a={pattern:/(.)\bdata:[^\/]+\/[^,]+,(?:(?!\1)[\s\S]|\\\1)+(?=\1)/,lookbehind:!0,inside:{"language-css":{pattern:/(data:[^\/]+\/(?:[^+,]+\+)?css,)[\s\S]+/,lookbehind:!0},"language-javascript":{pattern:/(data:[^\/]+\/(?:[^+,]+\+)?javascript,)[\s\S]+/,lookbehind:!0},"language-json":{pattern:/(data:[^\/]+\/(?:[^+,]+\+)?json,)[\s\S]+/,lookbehind:!0},"language-markup":{pattern:/(data:[^\/]+\/(?:[^+,]+\+)?(?:html|xml),)[\s\S]+/,lookbehind:!0}}},n=["url","attr-value","string"];Prism.plugins.dataURIHighlight={processGrammar:function(i){i&&!i["data-uri"]&&(Prism.languages.DFS(i,function(i,e,r){n.indexOf(r)>-1&&"Array"!==Prism.util.type(e)&&(e.pattern||(e=this[i]={pattern:e}),e.inside=e.inside||{},"attr-value"==r?Prism.languages.insertBefore("inside",e.inside["url-link"]?"url-link":"punctuation",{"data-uri":a},e):e.inside["url-link"]?Prism.languages.insertBefore("inside","url-link",{"data-uri":a},e):e.inside["data-uri"]=a)}),i["data-uri"]=a)}},Prism.hooks.add("before-highlight",function(n){if(a.pattern.test(n.code))for(var e in a.inside)if(a.inside.hasOwnProperty(e)&&!a.inside[e].inside&&a.inside[e].pattern.test(n.code)){var r=e.match(/^language-(.+)/)[1];Prism.languages[r]&&(a.inside[e].inside={rest:i(Prism.languages[r])})}Prism.plugins.dataURIHighlight.processGrammar(n.grammar)})}}();
\ No newline at end of file
diff --git a/node_modules/prismjs/plugins/file-highlight/prism-file-highlight.js b/node_modules/prismjs/plugins/file-highlight/prism-file-highlight.js
new file mode 100644
index 00000000..6dee6c4c
--- /dev/null
+++ b/node_modules/prismjs/plugins/file-highlight/prism-file-highlight.js
@@ -0,0 +1,90 @@
+(function () {
+	if (typeof self === 'undefined' || !self.Prism || !self.document || !document.querySelector) {
+		return;
+	}
+
+	self.Prism.fileHighlight = function() {
+
+		var Extensions = {
+			'js': 'javascript',
+			'py': 'python',
+			'rb': 'ruby',
+			'ps1': 'powershell',
+			'psm1': 'powershell',
+			'sh': 'bash',
+			'bat': 'batch',
+			'h': 'c',
+			'tex': 'latex'
+		};
+
+		Array.prototype.slice.call(document.querySelectorAll('pre[data-src]')).forEach(function (pre) {
+			var src = pre.getAttribute('data-src');
+
+			var language, parent = pre;
+			var lang = /\blang(?:uage)?-([\w-]+)\b/i;
+			while (parent && !lang.test(parent.className)) {
+				parent = parent.parentNode;
+			}
+
+			if (parent) {
+				language = (pre.className.match(lang) || [, ''])[1];
+			}
+
+			if (!language) {
+				var extension = (src.match(/\.(\w+)$/) || [, ''])[1];
+				language = Extensions[extension] || extension;
+			}
+
+			var code = document.createElement('code');
+			code.className = 'language-' + language;
+
+			pre.textContent = '';
+
+			code.textContent = 'Loading…';
+
+			pre.appendChild(code);
+
+			var xhr = new XMLHttpRequest();
+
+			xhr.open('GET', src, true);
+
+			xhr.onreadystatechange = function () {
+				if (xhr.readyState == 4) {
+
+					if (xhr.status < 400 && xhr.responseText) {
+						code.textContent = xhr.responseText;
+
+						Prism.highlightElement(code);
+					}
+					else if (xhr.status >= 400) {
+						code.textContent = '✖ Error ' + xhr.status + ' while fetching file: ' + xhr.statusText;
+					}
+					else {
+						code.textContent = '✖ Error: File does not exist or is empty';
+					}
+				}
+			};
+
+			xhr.send(null);
+		});
+
+		if (Prism.plugins.toolbar) {
+			Prism.plugins.toolbar.registerButton('download-file', function (env) {
+				var pre = env.element.parentNode;
+				if (!pre || !/pre/i.test(pre.nodeName) || !pre.hasAttribute('data-src') || !pre.hasAttribute('data-download-link')) {
+					return;
+				}
+				var src = pre.getAttribute('data-src');
+				var a = document.createElement('a');
+				a.textContent = pre.getAttribute('data-download-link-label') || 'Download';
+				a.setAttribute('download', '');
+				a.href = src;
+				return a;
+			});
+		}
+
+	};
+
+	document.addEventListener('DOMContentLoaded', self.Prism.fileHighlight);
+
+})();
\ No newline at end of file
diff --git a/node_modules/prismjs/plugins/file-highlight/prism-file-highlight.min.js b/node_modules/prismjs/plugins/file-highlight/prism-file-highlight.min.js
new file mode 100644
index 00000000..301fa878
--- /dev/null
+++ b/node_modules/prismjs/plugins/file-highlight/prism-file-highlight.min.js
@@ -0,0 +1 @@
+!function(){"undefined"!=typeof self&&self.Prism&&self.document&&document.querySelector&&(self.Prism.fileHighlight=function(){var t={js:"javascript",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell",sh:"bash",bat:"batch",h:"c",tex:"latex"};Array.prototype.slice.call(document.querySelectorAll("pre[data-src]")).forEach(function(e){for(var a,n=e.getAttribute("data-src"),r=e,o=/\blang(?:uage)?-([\w-]+)\b/i;r&&!o.test(r.className);)r=r.parentNode;if(r&&(a=(e.className.match(o)||[,""])[1]),!a){var s=(n.match(/\.(\w+)$/)||[,""])[1];a=t[s]||s}var l=document.createElement("code");l.className="language-"+a,e.textContent="",l.textContent="Loading…",e.appendChild(l);var i=new XMLHttpRequest;i.open("GET",n,!0),i.onreadystatechange=function(){4==i.readyState&&(i.status<400&&i.responseText?(l.textContent=i.responseText,Prism.highlightElement(l)):l.textContent=i.status>=400?"✖ Error "+i.status+" while fetching file: "+i.statusText:"✖ Error: File does not exist or is empty")},i.send(null)}),Prism.plugins.toolbar&&Prism.plugins.toolbar.registerButton("download-file",function(t){var e=t.element.parentNode;if(e&&/pre/i.test(e.nodeName)&&e.hasAttribute("data-src")&&e.hasAttribute("data-download-link")){var a=e.getAttribute("data-src"),n=document.createElement("a");return n.textContent=e.getAttribute("data-download-link-label")||"Download",n.setAttribute("download",""),n.href=a,n}})},document.addEventListener("DOMContentLoaded",self.Prism.fileHighlight))}();
\ No newline at end of file
diff --git a/node_modules/prismjs/plugins/highlight-keywords/prism-highlight-keywords.js b/node_modules/prismjs/plugins/highlight-keywords/prism-highlight-keywords.js
new file mode 100644
index 00000000..32b28122
--- /dev/null
+++ b/node_modules/prismjs/plugins/highlight-keywords/prism-highlight-keywords.js
@@ -0,0 +1,17 @@
+(function(){
+
+if (
+	typeof self !== 'undefined' && !self.Prism ||
+	typeof global !== 'undefined' && !global.Prism
+) {
+	return;
+}
+
+Prism.hooks.add('wrap', function(env) {
+	if (env.type !== "keyword") {
+		return;
+	}
+	env.classes.push('keyword-' + env.content);
+});
+
+})();
diff --git a/node_modules/prismjs/plugins/highlight-keywords/prism-highlight-keywords.min.js b/node_modules/prismjs/plugins/highlight-keywords/prism-highlight-keywords.min.js
new file mode 100644
index 00000000..c4326fea
--- /dev/null
+++ b/node_modules/prismjs/plugins/highlight-keywords/prism-highlight-keywords.min.js
@@ -0,0 +1 @@
+!function(){"undefined"!=typeof self&&!self.Prism||"undefined"!=typeof global&&!global.Prism||Prism.hooks.add("wrap",function(e){"keyword"===e.type&&e.classes.push("keyword-"+e.content)})}();
\ No newline at end of file
diff --git a/node_modules/prismjs/plugins/jsonp-highlight/prism-jsonp-highlight.js b/node_modules/prismjs/plugins/jsonp-highlight/prism-jsonp-highlight.js
new file mode 100644
index 00000000..4ce5ca50
--- /dev/null
+++ b/node_modules/prismjs/plugins/jsonp-highlight/prism-jsonp-highlight.js
@@ -0,0 +1,151 @@
+(function() {
+	if ( !self.Prism || !self.document || !document.querySelectorAll || ![].filter) return;
+
+	var adapters = [];
+	function registerAdapter(adapter) {
+		if (typeof adapter === "function" && !getAdapter(adapter)) {
+			adapters.push(adapter);
+		}
+	}
+	function getAdapter(adapter) {
+		if (typeof adapter === "function") {
+			return adapters.filter(function(fn) { return fn.valueOf() === adapter.valueOf()})[0];
+		}
+		else if (typeof adapter === "string" && adapter.length > 0) {
+			return adapters.filter(function(fn) { return fn.name === adapter})[0];
+		}
+		return null;
+	}
+	function removeAdapter(adapter) {
+		if (typeof adapter === "string")
+			adapter = getAdapter(adapter);
+		if (typeof adapter === "function") {
+			var index = adapters.indexOf(adapter);
+			if (index >=0) {
+				adapters.splice(index,1);
+			}
+		}
+	}
+
+	Prism.plugins.jsonphighlight = {
+		registerAdapter: registerAdapter,
+		removeAdapter: removeAdapter,
+		highlight: highlight
+	};
+	registerAdapter(function github(rsp, el) {
+		if ( rsp && rsp.meta && rsp.data ) {
+			if ( rsp.meta.status && rsp.meta.status >= 400 ) {
+				return "Error: " + ( rsp.data.message || rsp.meta.status );
+			}
+			else if ( typeof(rsp.data.content) === "string" ) {
+				return typeof(atob) === "function"
+					? atob(rsp.data.content.replace(/\s/g, ""))
+					: "Your browser cannot decode base64";
+			}
+		}
+		return null;
+	});
+	registerAdapter(function gist(rsp, el) {
+		if ( rsp && rsp.meta && rsp.data && rsp.data.files ) {
+			if ( rsp.meta.status && rsp.meta.status >= 400 ) {
+				return "Error: " + ( rsp.data.message || rsp.meta.status );
+			}
+			else {
+				var filename = el.getAttribute("data-filename");
+				if (filename == null) {
+					// Maybe in the future we can somehow render all files
+					// But the standard "),t.textContent=e.code,n.appendChild(t),e.element.parentNode.replaceChild(n,e.element),e.element=t,void 0}var n=e.element.parentNode;!e.code&&n&&"pre"==n.nodeName.toLowerCase()&&e.element.childNodes.length&&"#comment"==e.element.childNodes[0].nodeName&&(e.element.textContent=e.code=e.element.childNodes[0].textContent)}))}();
\ No newline at end of file
diff --git a/node_modules/prismjs/plugins/wpd/prism-wpd.css b/node_modules/prismjs/plugins/wpd/prism-wpd.css
new file mode 100644
index 00000000..43b7165a
--- /dev/null
+++ b/node_modules/prismjs/plugins/wpd/prism-wpd.css
@@ -0,0 +1,11 @@
+code[class*="language-"] a[href],
+pre[class*="language-"] a[href] {
+	cursor: help;
+	text-decoration: none;
+}
+
+code[class*="language-"] a[href]:hover,
+pre[class*="language-"] a[href]:hover {
+	cursor: help;
+	text-decoration: underline;
+}
\ No newline at end of file
diff --git a/node_modules/prismjs/plugins/wpd/prism-wpd.js b/node_modules/prismjs/plugins/wpd/prism-wpd.js
new file mode 100644
index 00000000..dc147d4f
--- /dev/null
+++ b/node_modules/prismjs/plugins/wpd/prism-wpd.js
@@ -0,0 +1,169 @@
+(function(){
+
+if (
+	typeof self !== 'undefined' && !self.Prism ||
+	typeof global !== 'undefined' && !global.Prism
+) {
+	return;
+}
+
+if (Prism.languages.css) {
+	// check whether the selector is an advanced pattern before extending it
+	if (Prism.languages.css.selector.pattern)
+	{
+		Prism.languages.css.selector.inside['pseudo-class'] = /:[\w-]+/;
+		Prism.languages.css.selector.inside['pseudo-element'] = /::[\w-]+/;
+	}
+	else
+	{
+		Prism.languages.css.selector = {
+			pattern: Prism.languages.css.selector,
+			inside: {
+				'pseudo-class': /:[\w-]+/,
+				'pseudo-element': /::[\w-]+/
+			}
+		};
+	}
+}
+
+if (Prism.languages.markup) {
+	Prism.languages.markup.tag.inside.tag.inside['tag-id'] = /[\w-]+/;
+	
+	var Tags = {
+		HTML: {
+			'a': 1, 'abbr': 1, 'acronym': 1, 'b': 1, 'basefont': 1, 'bdo': 1, 'big': 1, 'blink': 1, 'cite': 1, 'code': 1, 'dfn': 1, 'em': 1, 'kbd': 1,  'i': 1, 
+			'rp': 1, 'rt': 1, 'ruby': 1, 's': 1, 'samp': 1, 'small': 1, 'spacer': 1, 'strike': 1, 'strong': 1, 'sub': 1, 'sup': 1, 'time': 1, 'tt': 1,  'u': 1, 
+			'var': 1, 'wbr': 1, 'noframes': 1, 'summary': 1, 'command': 1, 'dt': 1, 'dd': 1, 'figure': 1, 'figcaption': 1, 'center': 1, 'section': 1, 'nav': 1,
+			'article': 1, 'aside': 1, 'hgroup': 1, 'header': 1, 'footer': 1, 'address': 1, 'noscript': 1, 'isIndex': 1, 'main': 1, 'mark': 1, 'marquee': 1,
+			'meter': 1, 'menu': 1
+		},
+		SVG: {
+			'animateColor': 1, 'animateMotion': 1, 'animateTransform': 1, 'glyph': 1, 'feBlend': 1, 'feColorMatrix': 1, 'feComponentTransfer': 1, 
+			'feFuncR': 1, 'feFuncG': 1, 'feFuncB': 1, 'feFuncA': 1, 'feComposite': 1, 'feConvolveMatrix': 1, 'feDiffuseLighting': 1, 'feDisplacementMap': 1, 
+			'feFlood': 1, 'feGaussianBlur': 1, 'feImage': 1, 'feMerge': 1, 'feMergeNode': 1, 'feMorphology': 1, 'feOffset': 1, 'feSpecularLighting': 1, 
+			'feTile': 1, 'feTurbulence': 1, 'feDistantLight': 1, 'fePointLight': 1, 'feSpotLight': 1, 'linearGradient': 1, 'radialGradient': 1, 'altGlyph': 1, 
+			'textPath': 1, 'tref': 1, 'altglyph': 1, 'textpath': 1, 'altglyphdef': 1, 'altglyphitem': 1, 'clipPath': 1, 'color-profile': 1, 'cursor': 1,
+			'font-face': 1, 'font-face-format': 1, 'font-face-name': 1, 'font-face-src': 1, 'font-face-uri': 1, 'foreignObject': 1, 'glyphRef': 1,
+			'hkern': 1, 'vkern': 1
+		},
+		MathML: {}
+	}
+}
+
+var language;
+
+Prism.hooks.add('wrap', function(env) {
+	if ((env.type == 'tag-id'
+		|| (env.type == 'property' && env.content.indexOf('-') != 0)
+		|| (env.type == 'rule'&& env.content.indexOf('@-') != 0)
+		|| (env.type == 'pseudo-class'&& env.content.indexOf(':-') != 0) 
+		|| (env.type == 'pseudo-element'&& env.content.indexOf('::-') != 0) 
+        || (env.type == 'attr-name' && env.content.indexOf('data-') != 0)
+		) && env.content.indexOf('<') === -1
+	) {
+		if (env.language == 'css'
+			|| env.language == 'scss'
+			|| env.language == 'markup'
+		) {
+			var href = 'https://webplatform.github.io/docs/';
+			var content = env.content;
+
+			if (env.language == 'css' || env.language == 'scss') {
+				href += 'css/';
+
+				if (env.type == 'property') {
+					href += 'properties/';
+				}
+				else if (env.type == 'rule') {
+					href += 'atrules/';
+					content = content.substring(1);
+				}
+				else if (env.type == 'pseudo-class') {
+					href += 'selectors/pseudo-classes/';
+					content = content.substring(1);
+				}
+				else if (env.type == 'pseudo-element') {
+					href += 'selectors/pseudo-elements/';
+					content = content.substring(2);
+				}
+			}
+			else if (env.language == 'markup') {
+				if (env.type == 'tag-id') {
+					// Check language
+					language = getLanguage(env.content) || language;
+
+					if (language) {
+						href += language + '/elements/';
+					}
+					else {
+						return; // Abort
+					}
+				}
+				else if (env.type == 'attr-name') {
+					if (language) {
+						href += language + '/attributes/';
+					}
+					else {
+						return; // Abort
+					}
+				}
+			}
+
+			href += content;
+			env.tag = 'a';
+			env.attributes.href = href;
+			env.attributes.target = '_blank';
+		}
+	}
+});
+
+function getLanguage(tag) {
+	var tagL = tag.toLowerCase();
+	
+	if (Tags.HTML[tagL]) {
+		return 'html';
+	}
+	else if (Tags.SVG[tag]) {
+		return 'svg';
+	}
+	else if (Tags.MathML[tag]) {
+		return 'mathml';
+	}
+	
+	// Not in dictionary, perform check
+	if (Tags.HTML[tagL] !== 0 && typeof document !== 'undefined') {
+		var htmlInterface = (document.createElement(tag).toString().match(/\[object HTML(.+)Element\]/) || [])[1];
+		
+		if (htmlInterface && htmlInterface != 'Unknown') {
+			Tags.HTML[tagL] = 1;
+			return 'html';
+		}
+	}
+	
+	Tags.HTML[tagL] = 0;
+	
+	if (Tags.SVG[tag] !== 0 && typeof document !== 'undefined') {
+		var svgInterface = (document.createElementNS('http://www.w3.org/2000/svg', tag).toString().match(/\[object SVG(.+)Element\]/) || [])[1];
+		
+		if (svgInterface && svgInterface != 'Unknown') {
+			Tags.SVG[tag] = 1;
+			return 'svg';
+		}
+	}
+	
+	Tags.SVG[tag] = 0;
+	
+	// Lame way to detect MathML, but browsers don’t expose interface names there :(
+	if (Tags.MathML[tag] !== 0) {
+		if (tag.indexOf('m') === 0) {
+			Tags.MathML[tag] = 1;
+			return 'mathml';
+		}
+	}
+	
+	Tags.MathML[tag] = 0;
+	
+	return null;
+}
+
+})();
\ No newline at end of file
diff --git a/node_modules/prismjs/plugins/wpd/prism-wpd.min.js b/node_modules/prismjs/plugins/wpd/prism-wpd.min.js
new file mode 100644
index 00000000..86bad362
--- /dev/null
+++ b/node_modules/prismjs/plugins/wpd/prism-wpd.min.js
@@ -0,0 +1 @@
+!function(){function e(e){var n=e.toLowerCase();if(t.HTML[n])return"html";if(t.SVG[e])return"svg";if(t.MathML[e])return"mathml";if(0!==t.HTML[n]&&"undefined"!=typeof document){var a=(document.createElement(e).toString().match(/\[object HTML(.+)Element\]/)||[])[1];if(a&&"Unknown"!=a)return t.HTML[n]=1,"html"}if(t.HTML[n]=0,0!==t.SVG[e]&&"undefined"!=typeof document){var s=(document.createElementNS("http://www.w3.org/2000/svg",e).toString().match(/\[object SVG(.+)Element\]/)||[])[1];if(s&&"Unknown"!=s)return t.SVG[e]=1,"svg"}return t.SVG[e]=0,0!==t.MathML[e]&&0===e.indexOf("m")?(t.MathML[e]=1,"mathml"):(t.MathML[e]=0,null)}if(("undefined"==typeof self||self.Prism)&&("undefined"==typeof global||global.Prism)){if(Prism.languages.css&&(Prism.languages.css.selector.pattern?(Prism.languages.css.selector.inside["pseudo-class"]=/:[\w-]+/,Prism.languages.css.selector.inside["pseudo-element"]=/::[\w-]+/):Prism.languages.css.selector={pattern:Prism.languages.css.selector,inside:{"pseudo-class":/:[\w-]+/,"pseudo-element":/::[\w-]+/}}),Prism.languages.markup){Prism.languages.markup.tag.inside.tag.inside["tag-id"]=/[\w-]+/;var t={HTML:{a:1,abbr:1,acronym:1,b:1,basefont:1,bdo:1,big:1,blink:1,cite:1,code:1,dfn:1,em:1,kbd:1,i:1,rp:1,rt:1,ruby:1,s:1,samp:1,small:1,spacer:1,strike:1,strong:1,sub:1,sup:1,time:1,tt:1,u:1,"var":1,wbr:1,noframes:1,summary:1,command:1,dt:1,dd:1,figure:1,figcaption:1,center:1,section:1,nav:1,article:1,aside:1,hgroup:1,header:1,footer:1,address:1,noscript:1,isIndex:1,main:1,mark:1,marquee:1,meter:1,menu:1},SVG:{animateColor:1,animateMotion:1,animateTransform:1,glyph:1,feBlend:1,feColorMatrix:1,feComponentTransfer:1,feFuncR:1,feFuncG:1,feFuncB:1,feFuncA:1,feComposite:1,feConvolveMatrix:1,feDiffuseLighting:1,feDisplacementMap:1,feFlood:1,feGaussianBlur:1,feImage:1,feMerge:1,feMergeNode:1,feMorphology:1,feOffset:1,feSpecularLighting:1,feTile:1,feTurbulence:1,feDistantLight:1,fePointLight:1,feSpotLight:1,linearGradient:1,radialGradient:1,altGlyph:1,textPath:1,tref:1,altglyph:1,textpath:1,altglyphdef:1,altglyphitem:1,clipPath:1,"color-profile":1,cursor:1,"font-face":1,"font-face-format":1,"font-face-name":1,"font-face-src":1,"font-face-uri":1,foreignObject:1,glyphRef:1,hkern:1,vkern:1},MathML:{}}}var n;Prism.hooks.add("wrap",function(t){if(("tag-id"==t.type||"property"==t.type&&0!=t.content.indexOf("-")||"rule"==t.type&&0!=t.content.indexOf("@-")||"pseudo-class"==t.type&&0!=t.content.indexOf(":-")||"pseudo-element"==t.type&&0!=t.content.indexOf("::-")||"attr-name"==t.type&&0!=t.content.indexOf("data-"))&&-1===t.content.indexOf("<")&&("css"==t.language||"scss"==t.language||"markup"==t.language)){var a="https://webplatform.github.io/docs/",s=t.content;if("css"==t.language||"scss"==t.language)a+="css/","property"==t.type?a+="properties/":"rule"==t.type?(a+="atrules/",s=s.substring(1)):"pseudo-class"==t.type?(a+="selectors/pseudo-classes/",s=s.substring(1)):"pseudo-element"==t.type&&(a+="selectors/pseudo-elements/",s=s.substring(2));else if("markup"==t.language)if("tag-id"==t.type){if(n=e(t.content)||n,!n)return;a+=n+"/elements/"}else if("attr-name"==t.type){if(!n)return;a+=n+"/attributes/"}a+=s,t.tag="a",t.attributes.href=a,t.attributes.target="_blank"}})}}();
\ No newline at end of file
-- 
cgit v1.2.3