diff --git a/preview/.gitignore b/preview/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..f59ec20aabf5842d237244ece8c81ab184faeac1
--- /dev/null
+++ b/preview/.gitignore
@@ -0,0 +1 @@
+*
\ No newline at end of file
diff --git a/preview/docs/_data/mkdocs_template.yaml b/preview/docs/_data/mkdocs_template.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..8435f4ffb408616ddb2259b2ee6575de83ac73c9
--- /dev/null
+++ b/preview/docs/_data/mkdocs_template.yaml
@@ -0,0 +1,49 @@
+# Repo information
+# ===========================================================================
+# First key MUST be the "slug" of the repo based on the remote, i.e. if remote
+# is git@git.domain.tld:username/repo_name.git, then the key will be
+# `repo_name`.
+mkdocs_template:
+
+  # An explicit name for the repo that will be shown on the documentation
+  # page.
+  name: "Mkdocs Template"
+
+  #logo: assets/img/meta/mkdocs_template_logo.png
+
+  # (OPTIONATL) An extension of the explicit name with the namespace in which
+  # the repo is. For instance, using above remote, the entry will be
+  # `Username / Repo Name`.
+  # This entry is not used in the configuration of mkdocs.
+  git_name_with_namespace: "My Programs / Mkdocs Template"
+
+  # The complete path of the repo from the git_platform["url"]. For instance,
+  # using, above remote, the entry will be `username/repo_name.git`
+  git_slug_with_namespace: "rdeville.public/my_programs/mkdocs_template"
+
+  # If the repo documentation is part of a bigger repo, then provide the
+  # path of the rendered documentation. If the documentation is not part of
+  # another repo, leave it empty.
+  url_slug_with_namespace: "my_programs/mkdocs_template"
+
+  # (OPTIONAL) Path, relative to `docs_dir` mkdocs config, to the logo of the
+  # repo. If not specified, path will automatically be set to
+  # `assets/img/meta/reop_name_logo.png`
+  #logo: "assets/img/meta/repo_template_logo.png"
+  # Description of the repo, will be used to setup the mkdocs description.
+  desc: >-
+    Mkdocs Templates scaffolding project to host documentation configuration
+    and themes to manage homogenous documentation accros multiple projects.
+
+  # (OPTIONAL) If you plan to use `mkdocstring` plugins to render python
+  # source code, you will need to provide the path where your source files
+  # are relative to the root of the repo.
+  src_path:
+    - "templates/docs/_data/plugins.py"
+    - "user_config/docs/_data/plugins.py"
+
+  # List of informations about the main maintainers that will be automatically
+  # added to the license file in `docs/about/license.md`
+  maintainers:
+    - name: "Romain Deville"
+      mail: "dev@romaindeville.fr"
\ No newline at end of file
diff --git a/preview/docs/_data/vars.yaml b/preview/docs/_data/vars.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..73bf21779dff38d42e11da04f2141aa05a71dde6
--- /dev/null
+++ b/preview/docs/_data/vars.yaml
@@ -0,0 +1,97 @@
+### BEGIN MKDOCS TEMPLATE ###
+### WARNING, DO NOT UPDATE CONTENT BETWEEN MKDOCS TEMPLATE TAG !###
+### Modified content will be overwritten when updating.###
+
+# Extra Data Information & Customization
+# ===========================================================================
+# Dictionnary storing variables to be used as "Jinja2" variables within
+# markdown files and _data/plugins.py
+
+# Mkdocs.yaml
+# ---------------------------------------------------------------------------
+# Here you can overwrite main key you could find in mkdocs.yaml
+
+# The name of your site, if not specified, will be the entry `name` of the repo in
+# `_data/repo_name.yaml`
+#site_name: "Your Site Name"
+
+# The site description of your site, if not specified will be the description
+# of the repo in `_data/repo_name.yaml`
+#site_desc: "A short description"
+
+# The url of your site, if not specified, then the site_url will be build from
+# the key `site_base_url` below and the `url_slug_with_namespace` in
+# `_data/repo_name.yaml`. If `site_base_url` is not specified, then value of
+# `site_url` will not be overwritten.
+#site_url: "https://my_site.tld"
+
+# The name or company which old the copyright. No need to specify any date
+# as it will be built based on the first commit of your repo. If not specify,
+# then no copyright will be shown on the footer of the documentation.
+#copyright: "Firstname Lastname"
+
+# Name of your repo, if not specified, will be the key `mkdocs_repo_name` in
+# `_data/repo_name.yaml` If value is EXACTLY "!!git_platform", then the value
+# will be `git_platform["name"]` (see below).
+#repo_name: "My Repo Name"
+
+# URL to the source code of your repo. If not specified, will be build from
+# `git_platform["url"]` (see below) and `repo_name["git_slug_with_namespace"]`
+# in `_data/repo_name.yaml`.
+#repo_url: "https://mygit.tld/namespace/repo_name
+
+# You can override every entry of the `theme` key in `mkdocs.yaml`, here.
+# Usefull to override templated mkdocs.
+#
+# REMARK, ONLY FOR MATERIAL-MKDOCS THEME
+#   If `theme["logo"]` is not specified, i.e. path to the logo image, then it
+#   will be set to the value of the key `repo_name["logo"]` in
+#   `_data/repo_name.yaml` if specified.
+#
+#   If `theme["favicon"]` is not specified, i.e. path to the favicon image,
+#   then it will be set to the value of the key `repo_name["logo"]` in
+#   `_data/repo_name.yaml` if specified.
+#
+#   If `theme["icon"]["repo"]` is not specified, i.e. icon "path" (see
+#   https://squidfunk.github.io/mkdocs-material/reference/icons-emojis/) that
+#   will be shown on the top rigt corner in front off the repo name, then it
+#   will be set to the value of the key `git_platform["icon"]` (see below).
+#theme:
+#  logo: "path/to/logo.svg"
+#  icon:
+#    repo:  fontawesome/brands/gitlab
+#  favicon: "path/to/favicon.svg"
+
+# Main repo configuration
+# ---------------------------------------------------------------------------
+# Here you can specify variable about your main repo documentation
+
+# The base url of your site, e.g. if you are using multiple nested
+# documentation build with monorepo, you might want to share the same base URL
+# for all your repo, then build link from the repo["url_slug_with_namespace"].
+#site_url: "https://my_site.tld"
+
+
+# Git platform
+# ---------------------------------------------------------------------------
+# In this REQUIRED section you will be able to specify some information for you
+# git platform hosting your repo. This section will be used to automatically
+# setup configuration for mkdocs such as `repo_url`, theme["icon"]["repo"] etc.
+
+# Main dict entry
+git_platform:
+  # The logo of the git platform you use. Not used in mkdocs configuration but
+  # can be used in markdown documentation file.
+  logo: " "
+  # Icon "path" (see
+  # https://squidfunk.github.io/mkdocs-material/reference/icons-emojis/) that
+  # will be shown on the top rigt corner in front off the repo name if not
+  # specified in `theme["icon"]["repo"]`.
+  icon: "fontawesome/brands/gitlab"
+  # Name of the platform you use.
+  name: "Framagit"
+  # URL of the platform you use, to be able to set `repo_url` for mkdocs
+  # configuration.
+  url: "https://framagit.org/"
+
+### END MKDOCS TEMPLATE ###
diff --git a/preview/docs/example.md b/preview/docs/example.md
new file mode 100644
index 0000000000000000000000000000000000000000..e1b78a0bab46e5e1097e140f18932eb6ad4c157e
--- /dev/null
+++ b/preview/docs/example.md
@@ -0,0 +1,72 @@
+---
+toc:
+  toc_depth: 3
+---
+
+# Examples
+
+!!! important "Informations"
+    Most of this content was directly take from [Pymdown
+    Extension](https://facelessuser.github.io/pymdown-extensions/).
+
+    This page aims to provide user example content for:
+
+      - Basic markdown
+      - Markdown Extension
+      - Pymdown Extension
+
+    To help seeing every possible thing to do to customize CSS.
+
+    Link to documentation of pymdown extension is provided with the title of
+    each section.
+
+{% include "docs/preview_example/markdown.md" %}
+
+{% include "docs/preview_example/arithmatex.md" %}
+
+{% include "docs/preview_example/betterem.md" %}
+
+{% include "docs/preview_example/caret.md" %}
+
+{% include "docs/preview_example/critic.md" %}
+
+{% include "docs/preview_example/details.md" %}
+
+{% include "docs/preview_example/emoji.md" %}
+
+{% include "docs/preview_example/escapeall.md" %}
+
+{% include "docs/preview_example/inlinehilite.md" %}
+
+{% include "docs/preview_example/keys.md" %}
+
+{% include "docs/preview_example/magick.md" %}
+
+{% include "docs/preview_example/mark.md" %}
+
+{% include "docs/preview_example/progressbar.md" %}
+
+{% include "docs/preview_example/saneheader.md" %}
+
+{% include "docs/preview_example/smartsymbols.md" %}
+
+{% include "docs/preview_example/striphtml.md" %}
+
+{% include "docs/preview_example/superfences.md" %}
+
+{% include "docs/preview_example/tabbed.md" %}
+
+{% include "docs/preview_example/tasklist.md" %}
+
+{% include "docs/preview_example/tilde.md" %}
+
+{% include "docs/preview_example/code_sample.md" %}
+
+## Videos Test
+
+<div id="html5-videos" align="center">
+  <video controls>
+    <source src="http://techslides.com/demos/sample-videos/small.webm" type="video/webm">
+    Your browser does not support HTML5 video.
+  </video>
+</div>
diff --git a/preview/docs/preview_example/arithmatex.md b/preview/docs/preview_example/arithmatex.md
new file mode 100644
index 0000000000000000000000000000000000000000..e5c50447ee9785f037866f6c494dd5c827fc48fe
--- /dev/null
+++ b/preview/docs/preview_example/arithmatex.md
@@ -0,0 +1,90 @@
+## [Arithmatex](https://facelessuser.github.io/pymdown-extensions/extensions/arithmatex/)
+
+??? info "Arithmatex"
+
+    ### Overview
+
+    Arithmatex is an extension that preserves LaTeX math equations during the
+    Markdown conversion process so that they can be used with libraries like
+    MathJax.
+
+    Arithmatex searches for the patterns `#!tex $...$` and `#!tex \(...\)` for
+    inline math, and `#!tex $$...$$`, `#!tex \[...\]`, and `#!tex
+    \begin{}...\end{}` for block math. By default, all formats are enabled, but
+    each format can individually be disabled if desired.
+
+
+    ### Examples
+
+    !!! example "Inline Examples"
+
+        === "Output"
+            $p(x|y) = \frac{p(y|x)p(x)}{p(y)}$, \(p(x|y) = \frac{p(y|x)p(x)}{p(y)}\).
+
+        === "Markdown"
+            ```tex
+            $p(x|y) = \frac{p(y|x)p(x)}{p(y)}$, \(p(x|y) = \frac{p(y|x)p(x)}{p(y)}\).
+            ```
+
+    !!! example "Block Examples"
+
+        === "Output"
+            $$
+            E(\mathbf{v}, \mathbf{h}) = -\sum_{i,j}w_{ij}v_i h_j - \sum_i b_i v_i - \sum_j c_j h_j
+            $$
+
+            \[3 < 4\]
+
+            \begin{align}
+                p(v_i=1|\mathbf{h}) & = \sigma\left(\sum_j w_{ij}h_j + b_i\right) \\
+                p(h_j=1|\mathbf{v}) & = \sigma\left(\sum_i w_{ij}v_i + c_j\right)
+            \end{align}
+
+        === "Markdown"
+            ```tex
+            $$
+            E(\mathbf{v}, \mathbf{h}) = -\sum_{i,j}w_{ij}v_i h_j - \sum_i b_i v_i - \sum_j c_j h_j
+            $$
+
+            \[3 < 4\]
+
+            \begin{align}
+                p(v_i=1|\mathbf{h}) & = \sigma\left(\sum_j w_{ij}h_j + b_i\right) \\
+                p(h_j=1|\mathbf{v}) & = \sigma\left(\sum_i w_{ij}v_i + c_j\right)
+            \end{align}
+            ```
+
+    ### Alternative Math Blocks
+
+    !!! example "Inline Math"
+
+        === "Output"
+            `#!math p(x|y) = \frac{p(y|x)p(x)}{p(y)}`
+
+        === "Markdown"
+            ```
+            `#!math p(x|y) = \frac{p(y|x)p(x)}{p(y)}`
+            ```
+
+
+    !!! example "Math Fences"
+
+        === "Output"
+            ```math
+            \begin{align}
+                p(v_i=1|\mathbf{h}) & = \sigma\left(\sum_j w_{ij}h_j + b_i\right) \\
+                p(h_j=1|\mathbf{v}) & = \sigma\left(\sum_i w_{ij}v_i + c_j\right)
+            \end{align}
+            ```
+
+        === "Markdown"
+            ````
+            ```math
+            \begin{align}
+                p(v_i=1|\mathbf{h}) & = \sigma\left(\sum_j w_{ij}h_j + b_i\right) \\
+                p(h_j=1|\mathbf{v}) & = \sigma\left(\sum_i w_{ij}v_i + c_j\right)
+            \end{align}
+            ```
+            ````
+
+    #### Subset h3 example
diff --git a/preview/docs/preview_example/betterem.md b/preview/docs/preview_example/betterem.md
new file mode 100644
index 0000000000000000000000000000000000000000..94bc834e796a9635d8b84af2401d2d88d89c3314
--- /dev/null
+++ b/preview/docs/preview_example/betterem.md
@@ -0,0 +1,127 @@
+## [BetterEm](https://facelessuser.github.io/pymdown-extensions/extensions/betterem/)
+
+??? info "BetterEM"
+
+    ### Examples
+
+    !!! Note "Note"
+        For all examples on this page, underscores are __smart__ and asterisks are not.
+
+    BetterEm requires that non-whitespace characters follow the opening
+    token(s) and precede the closing token(s).
+
+    !!! example "Whitespace Example"
+
+        === "Output"
+            This * won't emphasize *
+
+            This *will emphasize*
+
+        === "Markdown"
+
+            ```
+            * Won't highlight *
+
+            *Will highlight*
+            ```
+
+    BetterEm allows for a more natural nested token feel.
+
+    !!! example "Nested Token Example"
+
+        === "Output"
+            ***I'm italic and bold* I am just bold.**
+
+            ***I'm bold and italic!** I am just italic.*
+
+        === "Markdown"
+
+            ```
+            ***I'm italic and bold* I am just bold.**
+
+            ***I'm bold and italic!** I am just italic.*
+            ```
+
+    BetterEm will ensure smart mode doesn't terminate in scenarios where there
+    are a large amount of consecutive tokens inside.
+
+    !!! example "Consecutive Token Example"
+
+        === "Output"
+            ___A lot of underscores____________is okay___
+
+            ___A lot of underscores____________is okay___
+
+        === "Markdown"
+            ```
+            ___A lot of underscores____________is okay___
+
+            ___A lot of underscores____________is okay___
+            ```
+
+    BetterEm will also ensure that smart mode breaks proper when an inner like
+    token signifies an end.
+
+    !!! example "Smart Break Example"
+
+        === "Output"
+            __This will all be bold __because of the placement of the center underscores.__
+
+            __This will all be bold __ because of the placement of the center asterisks.__
+
+            __This will NOT all be bold__ because of the placement of the center underscores.__
+
+            __This will all be bold_ because the token count is less than that of the surrounding.__
+
+        === "Markdown"
+            ```
+            __This will all be bold __because of the placement of the center underscores.__
+
+            __This will all be bold __ because of the placement of the center underscores.__
+
+            __This will NOT all be bold__ because of the placement of the center underscores.__
+
+            __This will all be bold_ because of the token is less than that of the surrounding.__
+            ```
+
+
+    BetterEm will allow non-smart emphasis to contain "floating" like tokens.
+
+    !!! example "Floating Token Example"
+
+        === "Output"
+             *All will * be italic*
+
+             *All will *be italic*
+
+             *All will not* be italic*
+
+             *All will not ** be italic*
+
+             **All will * be bold**
+
+             **All will *be bold**
+
+             **All will not*** be bold**
+
+             **All will not ***be bold**
+
+        === "Markdown"
+            ```
+            *All will * be italic*
+
+            *All will *be italic*
+
+            *All will not* be italic*
+
+            *All will not ** be italic*
+
+            **All will * be bold**
+
+            **All will *be bold**
+
+            **All will not*** be bold**
+
+            **All will not *** be bold**
+            ```
+
diff --git a/preview/docs/preview_example/caret.md b/preview/docs/preview_example/caret.md
new file mode 100644
index 0000000000000000000000000000000000000000..d89c4fc2ad68b1e23cbd4336d817b866363beb4f
--- /dev/null
+++ b/preview/docs/preview_example/caret.md
@@ -0,0 +1,39 @@
+## [Caret](https://facelessuser.github.io/pymdown-extensions/extensions/caret/)
+
+??? info "Caret"
+
+    ### Example Insert
+
+    To wrap content in an **insert** tag, simply surround the text with double
+    `^`. You can also enable `smart_insert` in the options. Smart
+    behavior of **insert** models that of BetterEm.
+
+    !!! example "Insert Example"
+
+        === "Output"
+            ^^Insert me^^
+
+        === "Markdown"
+            ```
+            ^^Insert me^^
+            ```
+
+    ### Example Superscript
+
+    To denote a superscript, you can surround the desired content in single
+    `^`.  It uses Pandoc style logic, so if your superscript needs to have
+    spaces, you must escape the spaces.
+
+    !!! example "Superscript Example"
+
+        === "Output"
+            H^2^0
+
+            text^a\ superscript^
+
+        === "Markdown"
+            ```
+            H^2^0
+
+            text^a\ superscript^
+            ```
diff --git a/preview/docs/preview_example/code_sample.md b/preview/docs/preview_example/code_sample.md
new file mode 100644
index 0000000000000000000000000000000000000000..f0cb5befefa3ab700e710f65b97340f5a6a3edfb
--- /dev/null
+++ b/preview/docs/preview_example/code_sample.md
@@ -0,0 +1,44 @@
+## Code samples
+
+??? info "Code Sample"
+
+    === "Python"
+
+        ```python3
+{% filter indent(width=8) %}
+{% include "docs/preview_example/code_sample/python_sample.py" %}
+{% endfilter %}
+        ```
+
+    === "Java"
+
+        ```java
+{% filter indent(width=8) %}
+{% include "docs/preview_example/code_sample/java_sample.java" %}
+{% endfilter %}
+        ```
+
+    === "HTML"
+
+        ```html
+{% filter indent(width=8) %}
+{% include "docs/preview_example/code_sample/html_sample.html" %}
+{% endfilter %}
+        ```
+
+    === "CSS"
+
+        ```css
+{% filter indent(width=8) %}
+{% include "docs/preview_example/code_sample/css_sample.css" %}
+{% endfilter %}
+        ```
+
+    === "Javascript"
+
+        ```javascript
+{% filter indent(width=8) %}
+{% include "docs/preview_example/code_sample/javascript_sample.js" %}
+{% endfilter %}
+        ```
+
diff --git a/preview/docs/preview_example/code_sample/css_sample.css b/preview/docs/preview_example/code_sample/css_sample.css
new file mode 100644
index 0000000000000000000000000000000000000000..7b3de0a43772b51d7a020504d38dbb5a2d6cb0d3
--- /dev/null
+++ b/preview/docs/preview_example/code_sample/css_sample.css
@@ -0,0 +1,112 @@
+@font-face {
+  font-family: 'lg';
+  src:
+    url("../fonts/lg.ttf?22t19m") format("truetype"),
+    url("../fonts/lg.woff?22t19m") format("woff"),
+    url("../fonts/lg.svg?22t19m#lg") format("svg");
+  font-weight: normal;
+  font-style: normal;
+  font-display: block;
+}
+
+.lg-icon {
+  /* use !important to prevent issues with browser extensions that change fonts */
+  font-family: 'lg' !important;
+  speak: never;
+  font-style: normal;
+  font-weight: normal;
+  font-variant: normal;
+  text-transform: none;
+  line-height: 1;
+  /* Better Font Rendering =========== */
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.lg-actions .lg-next,
+.lg-actions .lg-prev {
+  background-color: rgba(0, 0, 0, 0.45);
+  border-radius: 2px;
+  color: #999;
+  cursor: pointer;
+  display: block;
+  font-size: 22px;
+  margin-top: -10px;
+  padding: 8px 10px 9px;
+  position: absolute;
+  top: 50%;
+  z-index: 1080;
+  outline: none;
+  border: none;
+  background-color: transparent;
+}
+
+@-webkit-keyframes lg-right-end {
+  0% {
+    left: 0;
+  }
+  50% {
+    left: -30px;
+  }
+  100% {
+    left: 0;
+  }
+}
+
+.lg-outer.lg-right-end .lg-object {
+  -webkit-animation: lg-right-end 0.3s;
+  -o-animation: lg-right-end 0.3s;
+  animation: lg-right-end 0.3s;
+  position: relative;
+}
+
+.lg-toolbar .lg-icon {
+  color: #999;
+  cursor: pointer;
+  float: right;
+  font-size: 24px;
+  height: 47px;
+  line-height: 27px;
+  padding: 10px 0;
+  text-align: center;
+  width: 50px;
+  text-decoration: none !important;
+  outline: medium none;
+  background: none;
+  border: none;
+  box-shadow: none;
+  -webkit-transition: color 0.2s linear;
+  -o-transition: color 0.2s linear;
+  transition: color 0.2s linear;
+}
+
+.lg-toolbar .lg-close:after {
+  content: "\e070";
+}
+
+.lg-toolbar,
+.lg-prev,
+.lg-next {
+  opacity: 1;
+  -webkit-transition:
+    -webkit-transform 0.35s cubic-bezier(0, 0, 0.25, 1) 0s,
+    opacity 0.35s cubic-bezier(0, 0, 0.25, 1) 0s,
+    color 0.2s linear;
+  -moz-transition: -moz-transform 0.35s cubic-bezier(0, 0, 0.25, 1) 0s,
+    opacity 0.35s cubic-bezier(0, 0, 0.25, 1) 0s,
+    color 0.2s linear;
+  -o-transition:
+    -o-transform 0.35s cubic-bezier(0, 0, 0.25, 1) 0s,
+    opacity 0.35s cubic-bezier(0, 0, 0.25, 1) 0s,
+    color 0.2s linear;
+  transition:
+    transform 0.35s cubic-bezier(0, 0, 0.25, 1) 0s,
+    opacity 0.35s cubic-bezier(0, 0, 0.25, 1) 0s,
+    color 0.2s linear;
+}
+
+body:not(.lg-from-hash) .lg-outer.lg-start-zoom .lg-item.lg-complete .lg-object {
+  -webkit-transform: scale3d(1, 1, 1);
+  transform: scale3d(1, 1, 1);
+  opacity: 1;
+}
diff --git a/preview/docs/preview_example/code_sample/html_sample.html b/preview/docs/preview_example/code_sample/html_sample.html
new file mode 100644
index 0000000000000000000000000000000000000000..5e8c666b635d1b2f86ec93a2b5f6de8244e391b7
--- /dev/null
+++ b/preview/docs/preview_example/code_sample/html_sample.html
@@ -0,0 +1,660 @@
+<!-- a -->
+<a>Link without href</a>
+<a class="button">Link without href: Button</a>
+<a href="#">Link without href</a>
+<a class="button" href="#">Link without href: Button</a>
+
+<!-- abbr -->
+<abbr title="Abbreviation">abbr</abbr>
+
+<!-- address -->
+<address>
+You can contact author at <a href="http://www.somedomain.com/contact">www.somedomain.com</a>.<br>
+If you see any bugs, please <a href="mailto:webmaster@somedomain.com">contact webmaster</a>.<br>
+You may also want to visit us:<br>
+Mozilla Foundation<br>
+1981 Landings Drive<br>
+Building K<br>
+Mountain View, CA 94043-0801<br>
+USA
+</address>
+
+<!-- area -->
+<map name="primary">
+  <area shape="circle" coords="200,250,25" href="http://google.com" />
+  <area shape="default" nohref />
+</map>
+
+<!-- article -->
+<article>
+  <h4>A really awesome article</h4>
+  <p>Lots of awesome text.</p>
+</article>
+
+<!-- aside -->
+<article>
+  <p>
+    The Disney movie <em>The Little Mermaid</em> was
+    first released to theatres in 1989.
+  </p>
+  <aside>
+    The movie earned $87 million during its initial release.
+  </aside>
+  <p>
+    More info about the movie...
+  </p>
+</article>
+
+
+<!-- audio -->
+<audio src="http://developer.mozilla.org/@api/deki/files/2926/=AudioTest_(1).ogg" autoplay>
+  Your browser does not support the <code>audio</code> element.
+</audio>
+
+<audio src="foo.ogg">
+  <track kind="captions" src="foo.en.vtt" srclang="en" label="English">
+  <track kind="captions" src="foo.sv.vtt" srclang="sv" label="Svenska">
+</audio>
+
+<audio controls="controls">
+  Your browser does not support the <code>audio</code> element.
+  <source src="foo.wav" type="audio/wav">
+</audio>
+
+<!-- b -->
+<b>Bold</b>
+
+<!-- bdi -->
+<bdi>ARABIC_PLACEHOLDER</bdi>
+
+<!-- bdo -->
+<bdo dir="rtl">This text will go right to left.</bdo>
+
+<!-- blockquote -->
+<blockquote cite="http://developer.mozilla.org">
+  <p>This is a quotation taken from the Mozilla Developer Center.</p>
+</blockquote>
+
+<!-- button -->
+<button>Button</button>
+
+<!-- canvas -->
+<canvas id="canvas" width="300" height="300">
+  Sorry, your browser doesn't support the &lt;canvas&gt; element.
+</canvas>
+
+<!-- cite -->
+<cite>[ISO-0000]</cite>
+
+<!-- code -->
+<code>Code Block</code>
+
+<!-- data -->
+<data value="12345">Data</data>
+
+<!-- datalist -->
+<input list="browsers" />
+<datalist id="browsers">
+  <option value="Chrome">
+  <option value="Firefox">
+  <option value="Internet Explorer">
+  <option value="Opera">
+  <option value="Safari">
+</datalist>
+
+<!-- del -->
+<del>This text has been deleted</del>
+
+<!-- details -->
+<details>
+  <summary>Some details</summary>
+  <p>More info about the details.</p>
+</details>
+
+
+<!-- dfn, dt, dd, dl -->
+<dl>
+  <dt>
+    <dfn>
+      <abbr title="World-Wide Web">WWW</abbr>
+    </dfn>
+  </dt>
+  <dd>The World-Wide Web (WWW) is a system of interlinked hypertext documents accessed on <a href="#def-internet">the Internet</a>.</dd>
+</dl>
+
+<!-- dialog -->
+<dialog open>
+  <p>Greetings, one and all!</p>
+</dialog>
+
+<dialog id="favDialog">
+  <form method="dialog">
+    <section>
+      <p><label for="favAnimal">Favorite animal:</label>
+      <select id="favAnimal" name="favAnimal">
+        <option></option>
+        <option>Brine shrimp</option>
+        <option>Red panda</option>
+        <option>Spider monkey</option>
+      </select></p>
+    </section>
+    <menu>
+      <button id="cancel" type="reset">Cancel</button>
+      <button type="submit">Confirm</button>
+    </menu>
+  </form>
+</dialog>
+
+<menu>
+  <button id="updateDetails">Update details</button>
+</menu>
+
+<!-- em -->
+<em>Emphasis</em>
+
+<!-- embed -->
+<embed type="video/quicktime" src="movie.mov" width="640" height="480"></embed>
+
+<!-- fieldset -->
+<form action="test.php" method="post">
+  <fieldset>
+    <legend>Title</legend>
+    <input type="radio" name="radio" id="radio"> <label for="radio">Click me</label>
+  </fieldset>
+</form>
+
+<!-- figure, figcaption -->
+<figure>
+	<img src="https://developer.cdn.mozilla.net/media/img/mdn-logo-sm.png" alt="An awesome picture">
+</figure>
+<p></p>
+<figure>
+	<img src="https://developer.cdn.mozilla.net/media/img/mdn-logo-sm.png" alt="An awesome picture">
+	<figcaption>Caption for the awesome picture</figcaption>
+</figure>
+
+<!-- footer -->
+<footer>
+  Some copyright info or perhaps some author info for an &lt;article&gt;?
+</footer>
+
+<!-- form -->
+<form action="">
+  <label for="GET-name">Name:</label>
+  <input id="GET-name" type="text" name="name">
+  <input type="submit" value="Save">
+</form>
+<form action="" method="post">
+  <label for="POST-name">Name:</label>
+  <input id="POST-name" type="text" name="name">
+  <input type="submit" value="Save">
+</form>
+<form action="" method="post">
+  <fieldset>
+    <legend>Title</legend>
+    <input type="radio" name="radio" id="radio"> <label for="radio">Click me</label>
+  </fieldset>
+</form>
+
+<!-- headings -->
+<h1>Heading level 1</h1>
+<h2>Heading level 2</h2>
+<h3>Heading level 3</h3>
+<h4>Heading level 4</h4>
+<h5>Heading level 5</h5>
+<h6>Heading level 6</h6>
+
+<h1>Heading elements</h1>
+<h2>Summary</h2>
+<p>Some text here...</p>
+
+<h2>Examples</h2>
+<h3>Example 1</h3>
+<p>Some text here...</p>
+
+<h3>Example 2</h3>
+<p>Some text here...</p>
+
+<h2>See also</h2>
+<p>Some text here...</p>
+
+<!-- header -->
+<header>
+  Header
+</header>
+
+<!-- hr -->
+<hr>
+
+<!-- i -->
+<i>Italic</i>
+
+<!-- iframe -->
+<base target="_blank" />
+<iframe width="400" height="215" frameborder="0" scrolling="no" marginheight="0" marginwidth="0"
+   src="https://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=es-419&amp;geocode=&amp;q=buenos+aires&amp;sll=37.0625,-95.677068&amp;sspn=38.638819,80.859375&amp;t=h&amp;ie=UTF8&amp;hq=&amp;hnear=Buenos+Aires,+Argentina&amp;z=11&amp;ll=-34.603723,-58.381593&amp;output=embed">
+</iframe><br />
+<small>
+    <a href="https://maps.google.com/maps?f=q&amp;source=embed&amp;hl=es-419&amp;geocode=&amp;q=buenos+aires&amp;sll=37.0625,-95.677068&amp;sspn=38.638819,80.859375&amp;t=h&amp;ie=UTF8&amp;hq=&amp;hnear=Buenos+Aires,+Argentina&amp;z=11&amp;ll=-34.603723,-58.381593"
+       style="color:#0000FF;text-align:left">
+        See bigger map
+    </a>
+</small>
+
+<!-- img -->
+<img src="mdn-logo-sm.png" alt="MD Logo" />
+<a href="https://developer.mozilla.org/"><img src="mdn-logo-sm.png" alt="MDN Logo" /> </a>
+<img src="mdn-logo-sm.png" alt="MD Logo" srcset="mdn-logo-HD.png 2x, mdn-logo-small.png 15w, mdn-banner-HD.png 100w 2x" />
+
+<!-- input -->
+<input type="email" x-moz-errormessage="Please specify a valid email address.">
+<form action="getform.php" method="get">
+    First name: <input type="text" name="first_name" /><br />
+     Last name: <input type="text" name="last_name" /><br />
+        E-mail: <input type="email" name="user_email" /><br />
+<input type="submit" value="Submit" />
+</form>
+
+<input value="defalut" type="text" mozactionhint="next" name="sometext" />
+<input value="defalut" type="button">
+<input value="defalut" type="tel">
+<input value="defalut" type="text">
+<input value="defalut" type="time">
+<input value="defalut" type="search">
+<input value="defalut" type="week">
+<input value="defalut" type="url">
+<input value="defalut" type="submit">
+<input value="defalut" type="reset">
+<input value="defalut" type="range">
+<input value="defalut" type="radio">
+<input value="defalut" type="password">
+<input value="defalut" type="month">
+<input value="defalut" type="image">
+<input value="defalut" type="date">
+<input value="defalut" type="datetime">
+<input value="defalut" type="datetime-local">
+<input value="defalut" type="color">
+<input value="defalut" type="checkbox">
+<input value="defalut" type="file">
+<input value="defalut">
+
+<!-- ins -->
+<ins>This text has been inserted</ins>
+
+<!-- kbd -->
+<p>Type the following in the Run dialog: <kbd>cmd</kbd><br />Then click the OK button.</p>
+
+<p>Save the document by pressing <kbd><kbd>Ctrl</kbd>+<kbd>S</kbd></kbd></p>
+
+<!-- keygen -->
+<keygen name="name" challenge="challenge string" keytype="type" keyparams="pqg-params">
+
+<!-- label -->
+<label>Click me</label><input type="text" id="User" name="Name" />
+
+<!-- li, ol, ul -->
+<ol>
+    <li>first item</li>
+    <li>second item</li>
+    <li>third item</li>
+</ol>
+
+<ul>
+    <li>first item</li>
+    <li>second item</li>
+    <li>third item</li>
+</ul>
+
+<ul>
+    <li><ul>
+            <li><ul>
+                    <li><ul>
+                            <li><ul>
+                                    <li>first item</li>
+                                    <li>second item</li>
+                                    <li>third item</li>
+                                </ul></li>
+                            <li>second item</li>
+                            <li>third item</li>
+                        </ul></li>
+                    <li>second item</li>
+                    <li>third item</li>
+                </ul></li>
+            <li>second item</li>
+            <li>third item</li>
+        </ul></li>
+    <li>second item</li>
+    <li>third item</li>
+</ul>
+
+<ol>
+    <li><ol>
+            <li><ol>
+                    <li><ol>
+                            <li><ol>
+                                    <li><ol>
+                                            <li>first</li>
+                                            <li>second item</li>
+                                            <li>third item</li>
+                                        </ol></li>
+                                    <li>second item</li>
+                                    <li>third item</li>
+                                </ol></li>
+                            <li>second item</li>
+                            <li>third item</li>
+                        </ol></li>
+                    <li>second item</li>
+                    <li>third item</li>
+                </ol></li>
+            <li>second item</li>
+            <li>third item</li>
+        </ol></li>
+    <li>second item</li>
+    <li>third item</li>
+</ol>
+
+<!-- main -->
+<main>
+  <h1>Apples</h1>
+  <p>The apple is the pomaceous fruit of the apple tree.</p>
+
+  <article>
+    <h2>Red Delicious</h2>
+    <p>These bright red apples are the most common found in many
+    supermarkets.</p>
+    <p>... </p>
+    <p>... </p>
+  </article>
+
+  <article>
+    <h2>Granny Smith</h2>
+    <p>These juicy, green apples make a great filling for
+    apple pies.</p>
+    <p>... </p>
+    <p>... </p>
+  </article>
+
+</main>
+
+<!-- mark -->
+<p>The &lt;mark&gt; element is used to <mark>highlight</mark> text</p>
+
+<!-- menu -->
+<menu>
+  <li>
+    <button type="menu" value="File" menu="file-menu"></button>
+    <menu type="popup" id="file-menu">
+      <menuitem label="New..." onclick="newFile()"></menuitem>
+      <menuitem label="Save..." onclick="saveFile()"></menuitem>
+    </menu>
+  </li>
+  <li>
+    <button type="menu" value="Edit" menu="edit-menu"></button>
+    <menu type="popup" id="edit-menu">
+      <menuitem label="Cut..." onclick="cutEdit()"></menuitem>
+      <menuitem label="Copy..." onclick="copyEdit()"></menuitem>
+      <menuitem label="Paste..." onclick="pasteEdit()"></menuitem>
+    </menu>
+  </li>
+</menu>
+
+<!-- menuitem -->
+<menuitem type="command" label="Save" icon="icons/save.png" onclick="save()">
+
+<!-- meter -->
+<p>Heat the oven to <meter min="200" max="500" value="350">350 degrees</meter>.</p>
+<p>He got a <meter low="69" high="80" max="100" value="84">B</meter> on the exam.</p>
+
+<!-- nav -->
+<nav>
+  <ul>
+    <li><a href="#">Home</a></li>
+    <li><a href="#">About</a></li>
+    <li><a href="#">Contact</a></li>
+  </ul>
+</nav>
+
+<!-- object -->
+<object data="move.swf" type="application/x-shockwave-flash"></object>
+<object data="move.swf" type="application/x-shockwave-flash">
+  <param name="foo" value="bar">
+</object>
+
+<!-- optgroup -->
+<select>
+  <optgroup label="Group 1">
+    <option>Option 1.1</option>
+  </optgroup>
+  <optgroup label="Group 2">
+    <option>Option 2.1</option>
+    <option>Option 2.2</option>
+  </optgroup>
+  <optgroup label="Group 3" disabled>
+    <option>Option 3.1</option>
+    <option>Option 3.2</option>
+    <option>Option 3.3</option>
+  </optgroup>
+</select>
+
+<!-- output -->
+<form oninput="result.value=parseInt(a.value)+parseInt(b.value)">
+    <input type="range" name="b" value="50" /> +
+    <input type="number" name="a" value="10" /> =
+    <output name="result"></output>
+</form>
+
+<!-- pre -->
+<pre>
+body {
+  color:red;
+}
+</pre>
+
+<!-- progress -->
+<progress value="70" max="100">70 %</progress>
+
+
+<!-- q -->
+<p>Everytime Kenny is killed, Stan will announce
+   <q cite="http://en.wikipedia.org/wiki/Kenny_McCormick#Cultural_impact">
+     Oh my God, you/they killed Kenny!
+   </q>.
+</p>
+
+<!-- ruby -->
+<ruby>
+  æ¼¢ <rp>(</rp><rt>Kan</rt><rp>)</rp>
+  å­— <rp>(</rp><rt>ji</rt><rp>)</rp>
+</ruby>
+
+<ruby>
+  æ¼¢ <rt>Kan</rt>
+  å­— <rt>ji</rt>
+</ruby>
+
+<!-- s -->
+<s>Today's Special: Salmon</s>
+
+<!-- samp -->
+<p>Regular text. <samp>This is sample text.</samp> Regular text.</p>
+
+<!-- section -->
+<section>
+  <h1>Heading</h1>
+  <p>Bunch of awesome content</p>
+</section>
+
+<!-- select -->
+<select name="select">
+  <option value="value1">Value 1</option>
+  <option value="value2" selected>Value 2</option>
+  <option value="value3">Value 3</option>
+</select>
+
+<select name="select">
+  <optgroup label="one">
+    <option value="value1">Value 1</option>
+    <option value="value2" selected>Value 2</option>
+    <option value="value3">Value 3</option>
+  </optgroup>
+  <option value="value3">Value 3</option>
+  <optgroup label="two">
+      <option value="value1">Value 1</option>
+      <option value="value2" selected>Value 2</option>
+      <option value="value3">Value 3</option>
+    </optgroup>
+</select>
+
+<!-- sub -->
+<p>The chemical formula of water is H<sub>2</sub>O</p>
+
+<!-- sup -->
+<p>This text is <sup>superscripted</sup></p>
+
+<!-- table -->
+<p>Simple table with header</p>
+<table>
+  <tr>
+    <th>First name</th>
+    <th>Last name</th>
+  </tr>
+  <tr>
+    <td>John</td>
+    <td>Doe</td>
+  </tr>
+  <tr>
+    <td>Jane</td>
+    <td>Doe</td>
+  </tr>
+</table>
+
+<p>Table with thead, tfoot, and tbody</p>
+<table>
+  <thead>
+    <tr>
+      <th>Header content 1</th>
+      <th>Header content 2</th>
+    </tr>
+  </thead>
+  <tfoot>
+    <tr>
+      <td>Footer content 1</td>
+      <td>Footer content 2</td>
+    </tr>
+  </tfoot>
+  <tbody>
+    <tr>
+      <td>Body content 1</td>
+      <td>Body content 2</td>
+    </tr>
+  </tbody>
+</table>
+
+<p>Table with colgroup</p>
+<table>
+  <colgroup span="4" class="columns"></colgroup>
+  <tr>
+    <th>Countries</th>
+    <th>Capitals</th>
+    <th>Population</th>
+    <th>Language</th>
+  </tr>
+  <tr>
+    <td>USA</td>
+    <td>Washington D.C.</td>
+    <td>309 million</td>
+    <td>English</td>
+  </tr>
+  <tr>
+    <td>Sweden</td>
+    <td>Stockholm</td>
+    <td>9 million</td>
+    <td>Swedish</td>
+  </tr>
+</table>
+
+<p>Table with colgroup and col</p>
+<table>
+  <colgroup>
+    <col class="column1">
+    <col class="columns2plus3" span="2">
+  </colgroup>
+  <tr>
+    <th>Lime</th>
+    <th>Lemon</th>
+    <th>Orange</th>
+  </tr>
+  <tr>
+    <td>Green</td>
+    <td>Yellow</td>
+    <td>Orange</td>
+  </tr>
+</table>
+
+<p>Simple table with caption</p>
+<table>
+  <caption>Awesome caption</caption>
+  <tr>
+    <td>Awesome data</td>
+  </tr>
+</table>
+
+<!-- template -->
+<table id="producttable">
+  <thead>
+    <tr>
+      <td>UPC_Code</td>
+      <td>Product_Name</td>
+    </tr>
+  </thead>
+  <tbody>
+    <!-- existing data could optionally be included here -->
+  </tbody>
+</table>
+
+<template id="productrow">
+  <tr>
+    <td class="record"></td>
+    <td></td>
+  </tr>
+</template>
+
+<!-- textarea -->
+<textarea name="textarea" rows="10" cols="50">Write something here</textarea>
+
+<!-- time -->
+<p>The concert starts at <time>20:00</time>.</p>
+<p>The concert took place on <time datetime="2001-05-15 19:00">May 15</time>.</p>
+
+<!-- track -->
+<video controls>
+   <source src="sample.ogv" type="video/ogv">
+   <track kind="captions" src="sampleCaptions.srt" srclang="en">
+   <track kind="descriptions" src="sampleDesciptions.srt" srclang="en">
+   <track kind="chapters" src="sampleChapters.srt" srclang="en">
+   <track kind="subtitles" src="sampleSubtitles_de.srt" srclang="de">
+   <track kind="subtitles" src="sampleSubtitles_en.srt" srclang="en">
+   <track kind="subtitles" src="sampleSubtitles_ja.srt" srclang="ja">
+   <track kind="subtitles" src="sampleSubtitles_oz.srt" srclang="oz">
+   <track kind="metadata" src="keyStage1.srt" srclang="en" label="Key Stage 1">
+   <track kind="metadata" src="keyStage2.srt" srclang="en" label="Key Stage 2">
+   <track kind="metadata" src="keyStage3.srt" srclang="en" label="Key Stage 3">
+</video>
+
+<!-- var -->
+<p> A simple equation: <var>x</var> = <var>y</var> + 2 </p>
+
+<!-- video -->
+<video src="videofile.ogg" autoplay poster="posterimage.jpg">
+  Sorry, your browser doesn't support embedded videos,
+  but don't worry, you can <a href="videofile.ogg">download it</a>
+  and watch it with your favorite video player!
+</video>
+<video src="foo.ogg">
+  <track kind="subtitles" src="foo.en.vtt" srclang="en" label="English">
+  <track kind="subtitles" src="foo.sv.vtt" srclang="sv" label="Svenska">
+</video>
+
+<!-- wbr -->
+<p>http://this<wbr>.is<wbr>.a<wbr>.really<wbr>.long<wbr>.example<wbr>.com/With<wbr>/deeper<wbr>/level<wbr>/pages<wbr>/deeper<wbr>/level<wbr>/pages<wbr>/deeper<wbr>/level<wbr>/pages<wbr>/deeper<wbr>/level<wbr>/pages<wbr>/deeper<wbr>/level<wbr>/pages</p>
+```
\ No newline at end of file
diff --git a/preview/docs/preview_example/code_sample/java_sample.java b/preview/docs/preview_example/code_sample/java_sample.java
new file mode 100644
index 0000000000000000000000000000000000000000..46db36dfe5bb7a4be0cacea315a8cf8b8425b921
--- /dev/null
+++ b/preview/docs/preview_example/code_sample/java_sample.java
@@ -0,0 +1,27 @@
+// generic methods
+public <T> List<T> fromArrayToList(T[] a) {
+  return Arrays.stream(a).collect(Collectors.toList());
+}
+
+public static <T, G> List<G> fromArrayToList(T[] a, Function<T, G> mapperFunction) {
+  return Arrays.stream(a)
+    .map(mapperFunction)
+    .collect(Collectors.toList());
+}
+
+// bounded generics
+public <T extends Number> List<T> fromArrayToList(T[] a) {
+    ...
+}
+
+//multiple bounds
+<T extends Number & Comparable>
+
+// upper bound wildcards
+public static void paintAllBuildings(List<? extends Building> buildings) {
+    ...
+}
+
+// lower bound wildcard
+<? super T>
+
diff --git a/preview/docs/preview_example/code_sample/javascript_sample.js b/preview/docs/preview_example/code_sample/javascript_sample.js
new file mode 100644
index 0000000000000000000000000000000000000000..e1d051a04293d51fec448e6ec400e4abee87cd51
--- /dev/null
+++ b/preview/docs/preview_example/code_sample/javascript_sample.js
@@ -0,0 +1,67 @@
+import React, { PropTypes, Component } from 'react';
+import { connect } from 'react-redux';
+
+// Import Components
+import PostList from '../../components/PostList';
+import PostCreateWidget from '../../components/PostCreateWidget/PostCreateWidget';
+
+// Import Actions
+import { addPostRequest, fetchPosts, deletePostRequest } from '../../PostActions';
+import { toggleAddPost } from '../../../App/AppActions';
+
+// Import Selectors
+import { getShowAddPost } from '../../../App/AppReducer';
+import { getPosts } from '../../PostReducer';
+
+class PostListPage extends Component {
+  componentDidMount() {
+    this.props.dispatch(fetchPosts());
+  }
+
+  handleDeletePost = post => {
+    if (confirm('Do you want to delete this post')) { // eslint-disable-line
+      this.props.dispatch(deletePostRequest(post));
+    }
+  };
+
+  handleAddPost = (name, title, content) => {
+    this.props.dispatch(toggleAddPost());
+    this.props.dispatch(addPostRequest({ name, title, content }));
+  };
+
+  render() {
+    return (
+      <div>
+        <PostCreateWidget addPost={this.handleAddPost} showAddPost={this.props.showAddPost} />
+        <PostList handleDeletePost={this.handleDeletePost} posts={this.props.posts} />
+      </div>
+    );
+  }
+}
+
+// Actions required to provide data for this component to render in sever side.
+PostListPage.need = [() => { return fetchPosts(); }];
+
+// Retrieve data from store as props
+function mapStateToProps(state) {
+  return {
+    showAddPost: getShowAddPost(state),
+    posts: getPosts(state),
+  };
+}
+
+PostListPage.propTypes = {
+  posts: PropTypes.arrayOf(PropTypes.shape({
+    name: PropTypes.string.isRequired,
+    title: PropTypes.string.isRequired,
+    content: PropTypes.string.isRequired,
+  })).isRequired,
+  showAddPost: PropTypes.bool.isRequired,
+  dispatch: PropTypes.func.isRequired,
+};
+
+PostListPage.contextTypes = {
+  router: React.PropTypes.object,
+};
+
+export default connect(mapStateToProps)(PostListPage);
diff --git a/preview/docs/preview_example/code_sample/python_sample.py b/preview/docs/preview_example/code_sample/python_sample.py
new file mode 100644
index 0000000000000000000000000000000000000000..d79153dd8bee8dacf4707aa48e4a7a739c6ac4eb
--- /dev/null
+++ b/preview/docs/preview_example/code_sample/python_sample.py
@@ -0,0 +1,251 @@
+# -*- coding: utf-8 -*-
+"""
+Created on Mon Feb 26 14:29:11 2018
+
+https://domain.tld
+
+@author: Christian Bender
+@license: MIT-license
+
+This module contains some useful classes and functions for dealing
+with linear algebra in python.
+
+Overview:
+
+- class Vector
+- function zeroVector(dimension)
+- function unitBasisVector(dimension,pos)
+- function axpy(scalar,vector1,vector2)
+- function randomVector(N,a,b)
+"""
+
+import math
+import random
+
+
+class Vector(object):
+    """
+    This class represents a vector of arbitray size.
+    You need to give the vector components.
+
+    Overview about the methods:
+
+    constructor(components : list) : init the vector
+    set(components : list) : changes the vector components.
+    __str__() : toString method
+    component(i : int): gets the i-th component (start by 0)
+    size() : gets the size of the vector (number of components)
+    euclidLength() : returns the eulidean length of the vector.
+    operator + : vector addition
+    operator - : vector subtraction
+    operator * : scalar multiplication and dot product
+    copy() : copies this vector and returns it.
+    changeComponent(pos,value) : changes the specified component.
+    TODO: compare-operator
+    """
+
+    def __init__(self, components):
+        """
+        input: components or nothing
+        simple constructor for init the vector
+        """
+        self.__components = components
+
+    def set(self, components):
+        """
+        input: new components
+        changes the components of the vector.
+        replace the components with newer one.
+        """
+        if len(components) > 0:
+            self.__components = components
+        else:
+            raise Exception("please give any vector")
+
+    def __str__(self):
+        """
+        returns a string representation of the vector
+        """
+        ans = "("
+        length = len(self.__components)
+        for i in range(length):
+            if i != length - 1:
+                ans += str(self.__components[i]) + ","
+            else:
+                ans += str(self.__components[i]) + ")"
+        if len(ans) == 1:
+            ans += ")"
+        return ans
+
+    def component(self, i):
+        """
+        input: index (start at 0)
+        output: the i-th component of the vector.
+        """
+        if i < len(self.__components) and i >= 0:
+            return self.__components[i]
+        else:
+            raise Exception("index out of range")
+
+    def size(self):
+        """
+        returns the size of the vector
+        """
+        return len(self.__components)
+
+    def eulidLength(self):
+        """
+        returns the eulidean length of the vector
+        """
+        summe = 0
+        for c in self.__components:
+            summe += c ** 2
+        return math.sqrt(summe)
+
+    def __add__(self, other):
+        """
+        input: other vector
+        assumes: other vector has the same size
+        returns a new vector that represents the sum.
+        """
+        size = self.size()
+        result = []
+        if size == other.size():
+            for i in range(size):
+                result.append(self.__components[i] + other.component(i))
+        else:
+            raise Exception("must have the same size")
+        return Vector(result)
+
+    def __sub__(self, other):
+        """
+        input: other vector
+        assumes: other vector has the same size
+        returns a new vector that represents the differenz.
+        """
+        size = self.size()
+        result = []
+        if size == other.size():
+            for i in range(size):
+                result.append(self.__components[i] - other.component(i))
+        else:  # error case
+            raise Exception("must have the same size")
+        return Vector(result)
+
+    def __mul__(self, other):
+        """
+        mul implements the scalar multiplication
+        and the dot-product
+        """
+        ans = []
+        if isinstance(other, float) or isinstance(other, int):
+            for c in self.__components:
+                ans.append(c * other)
+        elif isinstance(other, Vector) and (self.size() == other.size()):
+            size = self.size()
+            summe = 0
+            for i in range(size):
+                summe += self.__components[i] * other.component(i)
+            return summe
+        else:  # error case
+            raise Exception("invalide operand!")
+        return Vector(ans)
+
+    def copy(self):
+        """
+        copies this vector and returns it.
+        """
+        components = [x for x in self.__components]
+        return Vector(components)
+
+    def changeComponent(self, pos, value):
+        """
+        input: an index (pos) and a value
+        changes the specified component (pos) with the
+        'value'
+        """
+        # precondition
+        assert pos >= 0 and pos < len(self.__components)
+        self.__components[pos] = value
+
+    def norm(self):
+        """
+        normalizes this vector and returns it.
+        """
+        eLength = self.eulidLength()
+        quotient = 1.0 / eLength
+        for i in range(len(self.__components)):
+            self.__components[i] = self.__components[i] * quotient
+        return self
+
+    def __eq__(self, other):
+        """
+        returns true if the vectors are equal otherwise false.
+        """
+        ans = True
+        SIZE = self.size()
+        if SIZE == other.size():
+            for i in range(SIZE):
+                if self.__components[i] != other.component(i):
+                    ans = False
+                    break
+        else:
+            ans = False
+        return ans
+
+
+def zeroVector(dimension):
+    """
+    returns a zero-vector of size 'dimension'
+    """
+    # precondition
+    assert isinstance(dimension, int)
+    ans = []
+    for i in range(dimension):
+        ans.append(0)
+    return Vector(ans)
+
+
+def unitBasisVector(dimension, pos):
+    """
+    returns a unit basis vector with a One
+    at index 'pos' (indexing at 0)
+    """
+    # precondition
+    assert isinstance(dimension, int) and (isinstance(pos, int))
+    ans = []
+    for i in range(dimension):
+        if i != pos:
+            ans.append(0)
+        else:
+            ans.append(1)
+    return Vector(ans)
+
+
+def axpy(scalar, x, y):
+    """
+    input: a 'scalar' and two vectors 'x' and 'y'
+    output: a vector
+    computes the axpy operation
+    """
+    # precondition
+    assert (
+        isinstance(x, Vector)
+        and (isinstance(y, Vector))
+        and (isinstance(scalar, int) or isinstance(scalar, float))
+    )
+    return x * scalar + y
+
+
+def randomVector(N, a, b):
+    """
+    input: size (N) of the vector.
+           random range (a,b)
+    output: returns a random vector of size N, with
+            random integer components between 'a' and 'b'.
+    """
+    ans = zeroVector(N)
+    random.seed(None)
+    for i in range(N):
+        ans.changeComponent(i, random.randint(a, b))
+    return ans
diff --git a/preview/docs/preview_example/critic.md b/preview/docs/preview_example/critic.md
new file mode 100644
index 0000000000000000000000000000000000000000..233852100ff09e843cf81b184736d5bb5d4319c8
--- /dev/null
+++ b/preview/docs/preview_example/critic.md
@@ -0,0 +1,42 @@
+## [Critic](https://facelessuser.github.io/pymdown-extensions/extensions/critic/)
+
+??? info "Critic"
+
+    ### Examples
+
+    !!! example "Critic Markup Preview Example"
+
+        === "Output"
+            Here is some {--*incorrect*--} Markdown.  I am adding this{++
+            here++}.  Here is some more {--text that I am removing--}text.  And
+            here is even more {++text that I am ++}adding.{~~
+
+            ~>  ~~}Paragraph was deleted and replaced with some spaces.{~~  ~>
+
+            ~~}Spaces were removed and a paragraph was added.
+
+            And here is a comment on {==some text==}{>>This works quite well. I
+            just wanted to comment on it.<<}. Substitutions {~~is~>are~~}
+            great!
+
+            General block handling.
+
+            {--
+
+            * test remove
+            * test remove
+            * test remove
+                * test remove
+            * test remove
+
+            --}
+
+            {++
+
+            * test add
+            * test add
+            * test add
+                * test add
+            * test add
+
+            ++}
diff --git a/preview/docs/preview_example/details.md b/preview/docs/preview_example/details.md
new file mode 100644
index 0000000000000000000000000000000000000000..98e1e5b3c8742080ad5d5bb67050f677e5f5827f
--- /dev/null
+++ b/preview/docs/preview_example/details.md
@@ -0,0 +1,58 @@
+## [Details](https://facelessuser.github.io/pymdown-extensions/extensions/details/)
+
+??? info "Details"
+
+    ### Supported types
+
+    Following is a list of type qualifiers provided by Material for MkDocs,
+    whereas the default type, and thus fallback for unknown type qualifiers, is
+    `note`:
+
+    !!! note
+
+        Content.
+
+    !!! abstract
+
+        Content.
+
+    !!! info
+
+        Content.
+
+    !!! tip
+
+        Content.
+
+    !!! success
+
+        Content.
+
+    !!! question
+
+        Content.
+
+    !!! warning
+
+        Content.
+
+    !!! failure
+
+        Content.
+
+    !!! danger
+
+        Content.
+
+    !!! bug
+
+        Content.
+
+    !!! example
+
+        Content.
+
+    !!! quote
+
+
+
diff --git a/preview/docs/preview_example/emoji.md b/preview/docs/preview_example/emoji.md
new file mode 100644
index 0000000000000000000000000000000000000000..eb8d04cc478027d25e9455ee3a450ff322625495
--- /dev/null
+++ b/preview/docs/preview_example/emoji.md
@@ -0,0 +1,221 @@
+## [Emoji](https://facelessuser.github.io/pymdown-extensions/extensions/emoji/)
+
+??? info "Emoji"
+
+    ### All Emoji from [emoji-cheat-sheet](https://www.webfx.com/tools/emoji-cheat-sheet/)
+
+    === "People"
+
+        :bowtie: :smile: :simple_smile: :laughing: :blush: :smiley: :relaxed:
+        :smirk: :heart_eyes: :kissing_heart: :kissing_closed_eyes: :flushed:
+        :relieved: :satisfied: :grin: :wink: :stuck_out_tongue_winking_eye:
+        :stuck_out_tongue_closed_eyes: :grinning: :kissing:
+        :kissing_smiling_eyes: :stuck_out_tongue: :sleeping: :worried:
+        :frowning: :anguished: :open_mouth: :grimacing: :confused: :hushed:
+        :expressionless: :unamused: :sweat_smile: :sweat:
+        :disappointed_relieved: :weary: :pensive: :disappointed: :confounded:
+        :fearful: :cold_sweat: :persevere: :cry: :sob: :joy: :astonished:
+        :scream: :neckbeard: :tired_face: :angry: :rage: :triumph: :sleepy:
+        :yum: :mask: :sunglasses: :dizzy_face: :imp: :smiling_imp:
+        :neutral_face: :no_mouth: :innocent: :alien: :yellow_heart:
+        :blue_heart: :purple_heart: :heart: :green_heart: :broken_heart:
+        :heartbeat: :heartpulse: :two_hearts: :revolving_hearts: :cupid:
+        :sparkling_heart: :sparkles: :star: :star2: :dizzy: :boom: :collision:
+        :anger: :exclamation: :question: :grey_exclamation: :grey_question:
+        :zzz: :dash: :sweat_drops: :notes: :musical_note: :fire: :hankey:
+        :poop: :shit: :+1: :thumbsup: :-1: :thumbsdown: :ok_hand: :punch:
+        :facepunch: :fist: :v: :wave: :hand: :raised_hand: :open_hands:
+        :point_up: :point_down: :point_left: :point_right: :raised_hands:
+        :pray: :point_up_2: :clap: :muscle: :metal: :fu: :runner: :running:
+        :couple: :family: :two_men_holding_hands: :two_women_holding_hands:
+        :dancer: :dancers: :ok_woman: :no_good: :information_desk_person:
+        :raising_hand: :bride_with_veil: :person_with_pouting_face:
+        :person_frowning: :bow: :couplekiss: :couple_with_heart: :massage:
+        :haircut: :nail_care: :boy: :girl: :woman: :man: :baby: :older_woman:
+        :older_man: :person_with_blond_hair: :man_with_gua_pi_mao:
+        :man_with_turban: :construction_worker: :cop: :angel: :princess:
+        :smiley_cat: :smile_cat: :heart_eyes_cat: :kissing_cat: :smirk_cat:
+        :scream_cat: :crying_cat_face: :joy_cat: :pouting_cat: :japanese_ogre:
+        :japanese_goblin: :see_no_evil: :hear_no_evil: :speak_no_evil:
+        :guardsman: :skull: :feet: :lips: :kiss: :droplet: :ear: :eyes: :nose:
+        :tongue: :love_letter: :bust_in_silhouette: :busts_in_silhouette:
+        :speech_balloon: :thought_balloon: :feelsgood: :finnadie: :goberserk:
+        :godmode: :hurtrealbad: :rage1: :rage2: :rage3: :rage4: :suspect:
+        :trollface:
+
+    === "Nature"
+
+        :sunny: :umbrella: :cloud: :snowflake: :snowman: :zap: :cyclone:
+        :foggy: :ocean: :cat: :dog: :mouse: :hamster: :rabbit: :wolf: :frog:
+        :tiger: :koala: :bear: :pig: :pig_nose: :cow: :boar: :monkey_face:
+        :monkey: :horse: :racehorse: :camel: :sheep: :elephant: :panda_face:
+        :snake: :bird: :baby_chick: :hatched_chick: :hatching_chick: :chicken:
+        :penguin: :turtle: :bug: :honeybee: :ant: :beetle: :snail: :octopus:
+        :tropical_fish: :fish: :whale: :whale2: :dolphin: :cow2: :ram: :rat:
+        :water_buffalo: :tiger2: :rabbit2: :dragon: :goat: :rooster: :dog2:
+        :pig2: :mouse2: :ox: :dragon_face: :blowfish: :crocodile:
+        :dromedary_camel: :leopard: :cat2: :poodle: :paw_prints: :bouquet:
+        :cherry_blossom: :tulip: :four_leaf_clover: :rose: :sunflower:
+        :hibiscus: :maple_leaf: :leaves: :fallen_leaf: :herb: :mushroom:
+        :cactus: :palm_tree: :evergreen_tree: :deciduous_tree: :chestnut:
+        :seedling: :blossom: :ear_of_rice: :shell: :globe_with_meridians:
+        :sun_with_face: :full_moon_with_face: :new_moon_with_face: :new_moon:
+        :waxing_crescent_moon: :first_quarter_moon: :waxing_gibbous_moon:
+        :full_moon: :waning_gibbous_moon: :last_quarter_moon:
+        :waning_crescent_moon: :last_quarter_moon_with_face:
+        :first_quarter_moon_with_face: :crescent_moon: :earth_africa:
+        :earth_americas: :earth_asia: :volcano: :milky_way: :partly_sunny:
+        :octocat: :squirrel:
+
+    === "Objects"
+
+        :bamboo: :gift_heart: :dolls: :school_satchel: :mortar_board: :flags:
+        :fireworks: :sparkler: :wind_chime: :rice_scene: :jack_o_lantern:
+        :ghost: :santa: :christmas_tree: :gift: :bell: :no_bell:
+        :tanabata_tree: :tada: :confetti_ball: :balloon: :crystal_ball: :cd:
+        :dvd: :floppy_disk: :camera: :video_camera: :movie_camera: :computer:
+        :tv: :iphone: :phone: :telephone: :telephone_receiver: :pager: :fax:
+        :minidisc: :vhs: :sound: :speaker: :mute: :loudspeaker: :mega:
+        :hourglass: :hourglass_flowing_sand: :alarm_clock: :watch: :radio:
+        :satellite: :loop: :mag: :mag_right: :unlock: :lock:
+        :lock_with_ink_pen: :closed_lock_with_key: :key: :bulb: :flashlight:
+        :high_brightness: :low_brightness: :electric_plug: :battery: :calling:
+        :email: :mailbox: :postbox: :bath: :bathtub: :shower: :toilet: :wrench:
+        :nut_and_bolt: :hammer: :seat: :moneybag: :yen: :dollar: :pound: :euro:
+        :credit_card: :money_with_wings: :e-mail: :inbox_tray: :outbox_tray:
+        :envelope: :incoming_envelope: :postal_horn: :mailbox_closed:
+        :mailbox_with_mail: :mailbox_with_no_mail: :package: :door: :smoking:
+        :bomb: :gun: :hocho: :pill: :syringe: :page_facing_up: :page_with_curl:
+        :bookmark_tabs: :bar_chart: :chart_with_upwards_trend:
+        :chart_with_downwards_trend: :scroll: :clipboard: :calendar: :date:
+        :card_index: :file_folder: :open_file_folder: :scissors: :pushpin:
+        :paperclip: :black_nib: :pencil2: :straight_ruler: :triangular_ruler:
+        :closed_book: :green_book: :blue_book: :orange_book: :notebook:
+        :notebook_with_decorative_cover: :ledger: :books: :bookmark:
+        :name_badge: :microscope: :telescope: :newspaper: :football:
+        :basketball: :soccer: :baseball: :tennis: :8ball: :rugby_football:
+        :bowling: :golf: :mountain_bicyclist: :bicyclist: :horse_racing:
+        :snowboarder: :swimmer: :surfer: :ski: :spades: :hearts: :clubs:
+        :diamonds: :gem: :ring: :trophy: :musical_score: :musical_keyboard:
+        :violin: :space_invader: :video_game: :black_joker:
+        :flower_playing_cards: :game_die: :dart: :mahjong: :clapper: :memo:
+        :pencil: :book: :art: :microphone: :headphones: :trumpet: :saxophone:
+        :guitar: :shoe: :sandal: :high_heel: :lipstick: :boot: :shirt: :tshirt:
+        :necktie: :womans_clothes: :dress: :running_shirt_with_sash: :jeans:
+        :kimono: :bikini: :ribbon: :tophat: :crown: :womans_hat: :mans_shoe:
+        :closed_umbrella: :briefcase: :handbag: :pouch: :purse: :eyeglasses:
+        :fishing_pole_and_fish: :coffee: :tea: :sake: :baby_bottle: :beer:
+        :beers: :cocktail: :tropical_drink: :wine_glass: :fork_and_knife:
+        :pizza: :hamburger: :fries: :poultry_leg: :meat_on_bone: :spaghetti:
+        :curry: :fried_shrimp: :bento: :sushi: :fish_cake: :rice_ball:
+        :rice_cracker: :rice: :ramen: :stew: :oden: :dango: :egg: :bread:
+        :doughnut: :custard: :icecream: :ice_cream: :shaved_ice: :birthday:
+        :cake: :cookie: :chocolate_bar: :candy: :lollipop: :honey_pot: :apple:
+        :green_apple: :tangerine: :lemon: :cherries: :grapes: :watermelon:
+        :strawberry: :peach: :melon: :banana: :pear: :pineapple: :sweet_potato:
+        :eggplant: :tomato: :corn:
+
+    === "Places"
+
+        :house: :house_with_garden: :school: :office: :post_office: :hospital:
+        :bank: :convenience_store: :love_hotel: :hotel: :wedding: :church:
+        :department_store: :european_post_office: :city_sunrise: :city_sunset:
+        :japanese_castle: :european_castle: :tent: :factory: :tokyo_tower:
+        :japan: :mount_fuji: :sunrise_over_mountains: :sunrise: :stars:
+        :statue_of_liberty: :bridge_at_night: :carousel_horse: :rainbow:
+        :ferris_wheel: :fountain: :roller_coaster: :ship: :speedboat: :boat:
+        :sailboat: :rowboat: :anchor: :rocket: :airplane: :helicopter:
+        :steam_locomotive: :tram: :mountain_railway: :bike: :aerial_tramway:
+        :suspension_railway: :mountain_cableway: :tractor: :blue_car:
+        :oncoming_automobile: :car: :red_car: :taxi: :oncoming_taxi:
+        :articulated_lorry: :bus: :oncoming_bus: :rotating_light: :police_car:
+        :oncoming_police_car: :fire_engine: :ambulance: :minibus: :truck:
+        :train: :station: :train2: :bullettrain_front: :bullettrain_side:
+        :light_rail: :monorail: :railway_car: :trolleybus: :ticket: :fuelpump:
+        :vertical_traffic_light: :traffic_light: :warning: :construction:
+        :beginner: :atm: :slot_machine: :busstop: :barber: :hotsprings:
+        :checkered_flag: :crossed_flags: :izakaya_lantern: :moyai:
+        :circus_tent: :performing_arts: :round_pushpin:
+        :triangular_flag_on_post: :jp: :kr: :cn: :us: :fr: :es: :it: :ru: :gb:
+        :uk: :de:
+
+    === "Symbols"
+
+        :one: :two: :three: :four: :five: :six: :seven: :eight: :nine:
+        :keycap_ten: :1234: :zero: :hash: :symbols: :arrow_backward:
+        :arrow_down: :arrow_forward: :arrow_left: :capital_abcd: :abcd: :abc:
+        :arrow_lower_left: :arrow_lower_right: :arrow_right: :arrow_up:
+        :arrow_upper_left: :arrow_upper_right: :arrow_double_down:
+        :arrow_double_up: :arrow_down_small: :arrow_heading_down:
+        :arrow_heading_up: :leftwards_arrow_with_hook: :arrow_right_hook:
+        :left_right_arrow: :arrow_up_down: :arrow_up_small: :arrows_clockwise:
+        :arrows_counterclockwise: :rewind: :fast_forward: :information_source:
+        :ok: :twisted_rightwards_arrows: :repeat: :repeat_one: :new: :top: :up:
+        :cool: :free: :ng: :cinema: :koko: :signal_strength: :u5272: :u5408:
+        :u55b6: :u6307: :u6708: :u6709: :u6e80: :u7121: :u7533: :u7a7a: :u7981:
+        :sa: :restroom: :mens: :womens: :baby_symbol: :no_smoking: :parking:
+        :wheelchair: :metro: :baggage_claim: :accept: :wc: :potable_water:
+        :put_litter_in_its_place: :secret: :congratulations: :m:
+        :passport_control: :left_luggage: :customs: :ideograph_advantage: :cl:
+        :sos: :id: :no_entry_sign: :underage: :no_mobile_phones:
+        :do_not_litter: :non-potable_water: :no_bicycles: :no_pedestrians:
+        :children_crossing: :no_entry: :eight_spoked_asterisk: :sparkle:
+        :eight_pointed_black_star: :heart_decoration: :vs: :vibration_mode:
+        :mobile_phone_off: :chart: :currency_exchange: :aries: :taurus:
+        :gemini: :cancer: :leo: :virgo: :libra: :scorpius: :sagittarius:
+        :capricorn: :aquarius: :pisces: :ophiuchus: :six_pointed_star:
+        :negative_squared_cross_mark: :a: :b: :ab: :o2:
+        :diamond_shape_with_a_dot_inside: :recycle: :end: :back: :on: :soon:
+        :clock1: :clock130: :clock10: :clock1030: :clock11: :clock1130:
+        :clock12: :clock1230: :clock2: :clock230: :clock3: :clock330: :clock4:
+        :clock430: :clock5: :clock530: :clock6: :clock630: :clock7: :clock730:
+        :clock8: :clock830: :clock9: :clock930: :heavy_dollar_sign: :copyright:
+        :registered: :tm: :x: :heavy_exclamation_mark: :bangbang: :interrobang:
+        :o: :heavy_multiplication_x: :heavy_plus_sign: :heavy_minus_sign:
+        :heavy_division_sign: :white_flower: :100: :heavy_check_mark:
+        :ballot_box_with_check: :radio_button: :link: :curly_loop: :wavy_dash:
+        :part_alternation_mark: :trident: :black_small_square:
+        :white_small_square: :black_medium_small_square:
+        :white_medium_small_square: :black_medium_square: :white_medium_square:
+        :black_large_square: :white_large_square: :white_check_mark:
+        :black_square_button: :white_square_button: :black_circle:
+        :white_circle: :red_circle: :large_blue_circle: :large_blue_diamond:
+        :large_orange_diamond: :small_blue_diamond: :small_orange_diamond:
+        :small_red_triangle: :small_red_triangle_down: :shipit:
+
+
+    ===! "Twemoji"
+
+        !!! info "Twemoji Specific Emoji"
+            Twemoji provides some non-standard emoji. We've made them available
+            following the naming patterns that EmojiOne follows as we are using
+            their short name index.
+
+            The emoji are either some that only Twemoji supports, rarely
+            supported by others, or emoji that have tone and/or gender
+            modifiers that aren't supported in the Unicode specifications.
+            We've also provided appropriate aliases for consistency with other
+            like emoji.
+
+            :pirate_flag: :shibuya:
+
+            :skier_tone1: :skier_tone2: :skier_tone3: :skier_tone4:
+            :skier_tone5:
+
+            :woman_levitate: :woman_levitate_tone1: :woman_levitate_tone2:
+            :woman_levitate_tone3: :woman_levitate_tone4:
+            :woman_levitate_tone5:
+
+            :woman_in_business_suit_levitating_tone1:
+            :woman_in_business_suit_levitating_tone2:
+            :woman_in_business_suit_levitating_tone3:
+            :woman_in_business_suit_levitating_tone4:
+            :woman_in_business_suit_levitating_tone5:
+
+            :woman_in_tuxedo: :woman_in_tuxedo_tone1: :woman_in_tuxedo_tone2:
+            :woman_in_tuxedo_tone3: :woman_in_tuxedo_tone4:
+            :woman_in_tuxedo_tone5:
+
+            :transgender_sign: :transgender_flag:
+
+
diff --git a/preview/docs/preview_example/escapeall.md b/preview/docs/preview_example/escapeall.md
new file mode 100644
index 0000000000000000000000000000000000000000..7e3a551b615f4f8e7eee2838ef1c2cb430b5b610
--- /dev/null
+++ b/preview/docs/preview_example/escapeall.md
@@ -0,0 +1,26 @@
+## [EscapeAll](https://facelessuser.github.io/pymdown-extensions/extensions/escapeall)
+
+??? info "EscapeAll"
+
+    ### Examples
+
+    If you ever have to stop and try to remember, *Can I escape this char?* or
+    *Will a backslash escape this?*, you are not alone.  EscapeAll makes `\`
+    escape everything making such questions moot.  Now instead of questioning
+    or looking up what can be escaped, you can expect that `\` will escape the
+    character following it.  So if you need a literal `\`, just escape it:
+    `\\`.  Keep in mind this will not escape things in code blocks of any kind.
+
+    !!! example "Escape Example"
+
+        === "Output"
+            \W\e\ \c\a\n\ \e\s\c\a\p\e
+            \e\v\e\r\y\t\h\i\n\g\!\ \
+            \❤\😄
+
+        === "Markdown"
+            ```
+            \W\e\ \c\a\n\ \e\s\c\a\p\e
+            \e\v\e\r\y\t\h\i\n\g\!\ \
+            \❤\😄
+            ```
diff --git a/preview/docs/preview_example/inlinehilite.md b/preview/docs/preview_example/inlinehilite.md
new file mode 100644
index 0000000000000000000000000000000000000000..5ef760f29cd3ab89bc3898c779e67237cd8e30e0
--- /dev/null
+++ b/preview/docs/preview_example/inlinehilite.md
@@ -0,0 +1,21 @@
+## [InlineHilite](https://facelessuser.github.io/pymdown-extensions/extensions/inlinehilite)
+
+??? info "InlineHilite"
+
+    ### Examples
+
+    Like SuperFences, InlineHilite now provides a support for custom inline
+    blocks.
+
+    !!! example "Inline Math"
+        For more indepth information on how to reproduce the example above,
+        check out Arithmatex Documentation.
+
+
+        === "Output"
+            `#!math p(x|y) = \frac{p(y|x)p(x)}{p(y)}`
+
+        === "Markdown"
+            ```
+            `#!math p(x|y) = \frac{p(y|x)p(x)}{p(y)}`
+            ```
diff --git a/preview/docs/preview_example/keys.md b/preview/docs/preview_example/keys.md
new file mode 100644
index 0000000000000000000000000000000000000000..3926fc970ab95d52d37f3edb061d04801b4f0a4f
--- /dev/null
+++ b/preview/docs/preview_example/keys.md
@@ -0,0 +1,278 @@
+## [Keys](https://facelessuser.github.io/pymdown-extensions/extensions/keys)
+
+??? info "Keys"
+
+    ### Examples
+
+    === "Alphanumeric and Space Keys"
+
+        <div align="center">
+
+        Name    | Display   | Aliases
+        ------- | --------- | -------
+        `0`     | ++0++     |
+        `1`     | ++1++     |
+        `2`     | ++2++     |
+        `3`     | ++3++     |
+        `4`     | ++4++     |
+        `5`     | ++5++     |
+        `6`     | ++6++     |
+        `7`     | ++7++     |
+        `8`     | ++8++     |
+        `9`     | ++9++     |
+        `a`     | ++a++     |
+        `b`     | ++b++     |
+        `c`     | ++c++     |
+        `d`     | ++d++     |
+        `e`     | ++e++     |
+        `f`     | ++f++     |
+        `g`     | ++g++     |
+        `h`     | ++h++     |
+        `i`     | ++i++     |
+        `j`     | ++j++     |
+        `k`     | ++k++     |
+        `l`     | ++l++     |
+        `m`     | ++m++     |
+        `n`     | ++n++     |
+        `o`     | ++o++     |
+        `p`     | ++p++     |
+        `q`     | ++q++     |
+        `r`     | ++r++     |
+        `s`     | ++s++     |
+        `t`     | ++t++     |
+        `u`     | ++u++     |
+        `v`     | ++v++     |
+        `w`     | ++w++     |
+        `x`     | ++x++     |
+        `y`     | ++y++     |
+        `z`     | ++z++     |
+        `space` | ++space++ | `spc`
+
+        </div>
+
+    === "Punctuation Keys"
+
+        <div align="center">
+
+        Name            | Display           | Aliases
+        --------------- | ----------------- | -------
+        `backslash`     | ++backslash++     |
+        `bar`           | ++bar++           | `pipe`
+        `brace-left`    | ++brace-left++    | `open-brace`
+        `brace-right`   | ++brace-right++   | `close-bracket`
+        `bracket-left`  | ++bracket-left++  | `open-bracket`
+        `bracket-right` | ++bracket-right++ | `close-bracket`
+        `colon`         | ++colon++         |
+        `comma`         | ++comma++         |
+        `double-quote`  | ++double-quote++  | `dblquote`
+        `equal`         | ++equal++         |
+        `exclam`        | ++exclam++        | `exclamation`
+        `grave`         | ++grave++         | `grave-accent`
+        `greater`       | ++greater++       | `greater-than`, `gt`
+        `less`          | ++less++          | `less-than`, `lt`
+        `minus`         | ++minus++         | `hyphen`
+        `period`        | ++period++        |
+        `plus`          | ++plus++          |
+        `question`      | ++question++      | `question-mark`
+        `semicolon`     | ++semicolon++     |
+        `single-quote`  | ++single-quote++  |
+        `slash`         | ++slash++         |
+        `tilde`         | ++tilde++         |
+        `underscore`    | ++underscore++    |
+
+        </div>
+
+    === "Navigation Keys"
+
+        <div align="center">
+
+        Name          | Display         | Aliases
+        ------------- | --------------- | -------
+        `arrow-up`    | ++arrow-up++    | `up`
+        `arrow-down`  | ++arrow-down++  | `down`
+        `arrow-left`  | ++arrow-left++  | `left`
+        `arrow-right` | ++arrow-right++ | `right`
+        `page-up`     | ++page-up++     | `prior`, `page-up`, `pg-up`
+        `page-down`   | ++page-down++   | `next`, `page-dn`, `pg-dn`
+        `home`        | ++home++        |
+        `end`         | ++end++         |
+        `tab`         | ++tab++         | `tabulator`
+
+        </div>
+
+    === "Editing Keys"
+
+        <div align="center">
+
+        Name        | Display       | Aliases
+        ----------- | ------------- | -------
+        `backspace` | ++backspace++ | `back`, `bksp`
+        `delete`    | ++delete++    | `del`
+        `insert`    | ++insert++    | `ins`
+
+        </div>
+
+    === "Action Keys"
+
+        <div align="center">
+
+        Name           | Display          | Aliases
+        -------------- | -----------------| -------
+        `break`        | ++break++        | `cancel`
+        `caps-lock`    | ++caps-lock++    | `capital`, `cplk`
+        `clear`        | ++clear++        | `clr`
+        `eject`        | ++eject++        |
+        `enter`        | ++enter++        | `return`
+        `escape`       | ++escape++       | `esc`
+        `help`         | ++help++         |
+        `print-screen` | ++print-screen++ | `prtsc`
+        `scroll-lock`  | ++scroll-lock++  | `scroll`
+
+        </div>
+
+    === "Numeric Keypad Keys"
+
+        <div align="center">
+
+        Name            | Display           | Aliases
+        --------------- | ----------------- | -------
+        `num0`          | ++num0++          |
+        `num1`          | ++num1++          |
+        `num2`          | ++num2++          |
+        `num3`          | ++num3++          |
+        `num4`          | ++num4++          |
+        `num5`          | ++num5++          |
+        `num6`          | ++num6++          |
+        `num7`          | ++num7++          |
+        `num8`          | ++num8++          |
+        `num9`          | ++num9++          |
+        `num-asterisk`  | ++num-asterisk++  | `multiply`
+        `num-clear`     | ++num-clear++     |
+        `num-delete`    | ++num-delete++    | `num-del`
+        `num-equal`     | ++num-equal++     |
+        `num-lock`      | ++num-lock++      | `numlk`, `numlock`
+        `num-minus`     | ++num-minus++     | `subtract`
+        `num-plus`      | ++num-plus++      | `add`
+        `num-separator` | ++num-separator++ | `decimal`, `separator`
+        `num-slash`     | ++num-slash++     | `divide`
+        `num-enter`     | ++num-enter++     |
+
+        </div>
+
+    === "Modifier keys"
+
+        <div align="center">
+
+        Name            | Display           | Aliases
+        --------------- | ----------------- | -------
+        `alt`           | ++alt++           |
+        `left-alt`      | ++left-alt++      | `lalt`
+        `right-alt`     | ++right-alt++     | `ralt`
+        `alt-graph`     | ++alt-graph++     | `altgr`
+        `command`       | ++command++       | `cmd`
+        `left-command`  | ++left-command++  | `lcommand`, `lcmd`, `left-cmd`
+        `right-command` | ++right-command++ | `rcommand`, `rcmd`, `right-cmd`
+        `control`       | ++control++       | `ctrl`
+        `left-control`  | ++left-control++  | `lcontrol`, `lctrl`, `left-ctrl`
+        `right-control` | ++right-control++ | `rcontrol`, `rctrl`, `right-ctrl`
+        `function`      | ++function++      | `fn`
+        `meta`          | ++meta++          |
+        `left-meta`     | ++left-meta++     | `lmeta`
+        `right-meta`    | ++right-meta++    | `rmeta`
+        `option`        | ++option++        | `opt`
+        `left-option`   | ++left-option++   | `loption`, `lopt`, `left-opt`
+        `right-option`  | ++right-option++  | `roption`, `ropt`, `right-opt`
+        `shift`         | ++shift++         |
+        `left-shift`    | ++left-shift++    | `lshift`
+        `right-shift`   | ++right-shift++   | `rshift`
+        `super`         | ++super++         |
+        `left-super`    | ++left-super++    | `lsuper`
+        `right-super`   | ++right-super++   | `rsuper`
+        `windows`       | ++windows++       | `win`
+        `left-windows`  | ++left-windows++  | `lwindows`, `left-win`, `lwin`
+        `right-windows` | ++right-windows++ | `rwindows`, `right-win`, `rwin`
+
+        </div>
+
+    === "Function keys"
+
+        <div align="center">
+
+        Name  | Display | Aliases
+        ----- | ------- | -------
+        `f1`  | ++f1++  |
+        `f2`  | ++f2++  |
+        `f3`  | ++f3++  |
+        `f4`  | ++f4++  |
+        `f5`  | ++f5++  |
+        `f6`  | ++f6++  |
+        `f7`  | ++f7++  |
+        `f8`  | ++f8++  |
+        `f9`  | ++f9++  |
+        `f10` | ++f10++ |
+        `f11` | ++f11++ |
+        `f12` | ++f12++ |
+        `f13` | ++f13++ |
+        `f14` | ++f14++ |
+        `f15` | ++f15++ |
+        `f16` | ++f16++ |
+        `f17` | ++f17++ |
+        `f18` | ++f18++ |
+        `f19` | ++f19++ |
+        `f20` | ++f20++ |
+        `f21` | ++f21++ |
+        `f22` | ++f22++ |
+        `f23` | ++f23++ |
+        `f24` | ++f24++ |
+
+        </div>
+
+    === "Extra Keys"
+
+        <div align="center">
+
+        Name                | Display               | Aliases
+        ------------------- | --------------------- | -------
+        `backtab`           | ++backtab++           | `bktab`
+        `browser-back`      | ++browser-back++      |
+        `browser-favorites` | ++browser-favorites++ | `favorites`
+        `browser-forward`   | ++browser-forward++   | `forward`
+        `browser-home`      | ++browser-home++      |
+        `browser-refresh`   | ++browser-refresh++   | `refresh`
+        `browser-search`    | ++browser-search++    | `search`
+        `browser-stop`      | ++browser-stop++      |
+        `copy`              | ++copy++              |
+        `context-menu`      | ++context-menu++      | `apps`, `menu`
+        `mail`              | ++mail++              | `launch-mail`
+        `media`             | ++media++             | `launch-media`
+        `media-next-track`  | ++media-next-track++  | `next-track`
+        `media-pause`       | ++media-pause++       | `pause`
+        `media-play`        | ++media-play++        | `play`
+        `media-play-pause`  | ++media-play-pause++  | `play-pause`
+        `media-prev-track`  | ++media-prev-track++  | `prev-track`
+        `media-stop`        | ++media-stop++        | `stop`
+        `print`             | ++print++             |
+        `reset`             | ++reset++             |
+        `select`            | ++select++            |
+        `sleep`             | ++sleep++             |
+        `volume-down`       | ++volume-down++       | `vol-down`
+        `volume-mute`       | ++volume-mute++       | `mute`
+        `volume-up`         | ++volume-up++         | `vol-up`
+        `zoom`              | ++zoom++              |
+
+        </div>
+
+    === "Mouse"
+
+        <div align="center">
+
+        Name            | Display           | Aliases
+        --------------- | ----------------- | -------
+        `left-button`   | ++left-button++   | `lbutton`
+        `middle-button` | ++middle-button++ | `mbutton`
+        `right-button`  | ++right-button++  | `rbutton`
+        `x-button1`     | ++x-button1++     | `xbutton1`
+        `x-button2`     | ++x-button2++     | `xbutton2`
+
+        </div>
+
diff --git a/preview/docs/preview_example/magick.md b/preview/docs/preview_example/magick.md
new file mode 100644
index 0000000000000000000000000000000000000000..7ecaa6ccd01b699426b57bb54648451d3e9321c8
--- /dev/null
+++ b/preview/docs/preview_example/magick.md
@@ -0,0 +1,78 @@
+## [MagicLink](https://facelessuser.github.io/pymdown-extensions/extensions/magiclink)
+
+??? info "MagicLink"
+
+    !!! note "Icons"
+        This documentation implements additional styling with CSS that inserts
+        icons before special links, such as GitHub, logos, bug icons, etc.
+        MagicLink does not inject icons or CSS to insert icons, but it is left
+        to the user to implement (if desired) via the provided [classes](#css).
+        User's are free to reference this documentation's source to learn how.
+
+
+    ### Auto-Linking
+
+    MagicLink supports auto-linking HTTP, FTP and email links. You can specify
+    these links in raw text and they should get auto-linked. There are some
+    limitations placed on MagicLink to keep it from aggressively auto-linking
+    text that is not part of links. If you have a link that cannot be detected,
+    you can always use the old style angle bracketed link format: `#!md
+    <https://www.link.com>`.
+
+    !!! example "Auto-Linking Example"
+
+        === "Output"
+            - Just paste links directly in the document like this: https://google.com.
+            - Or even an email address: fake.email@email.com.
+
+        === "Markdown"
+            ```
+            - Just paste links directly in the document like this: https://google.com.
+            - Or even an email address: fake.email@email.com.
+            ```
+
+    ### Repository Link Shortener
+
+    MagicLink can also recognize issue, pull request, commit, and compare
+    links, and render them in the same output format as the repository
+    shortcut links feature.
+
+    If we specify long form URLs from external providers, they will be
+    shortened appropriately.
+
+    !!! example "External Provider Example"
+
+        === "Output"
+            - https://github.com/facelessuser
+            - https://github.com/facelessuser/pymdown-extensions
+            - https://gitlab.com/pycqa/flake8/issues/385
+            - https://bitbucket.org/mrabarnett/mrab-regex/issues/260/extremely-slow-matching-using-ignorecase
+
+        === "Markdown"
+            ```
+            - https://github.com/facelessuser
+            - https://github.com/facelessuser/pymdown-extensions
+            - https://gitlab.com/pycqa/flake8/issues/385
+            - https://bitbucket.org/mrabarnett/mrab-regex/issues/260/extremely-slow-matching-using-ignorecase
+            ```
+
+    When specifying links that reference the configured `provider`, `user`, and
+    `repo`, some links will be shortened differently in light of that context.
+
+    !!! example "Internal Provider Example"
+
+        === "Output"
+            - https://github.com/facelessuser/pymdown-extensions/issues/1
+            - https://github.com/facelessuser/pymdown-extensions/pull/13
+            - https://github.com/facelessuser/pymdown-extensions/commit/3f6b07a8eeaa9d606115758d90f55fec565d4e2a
+            - https://github.com/facelessuser/pymdown-extensions/compare/e2ed7e0b3973f3f9eb7a26b8ef7ae514eebfe0d2...90b6fb8711e75732f987982cc024e9bb0111beac
+            - https://github.com/facelessuser/Rummage/commit/181c06d1f11fa29961b334e90606ed1f1ec7a7cc
+
+        === "Markdown"
+            ```
+            - https://github.com/facelessuser/pymdown-extensions/issues/1
+            - https://github.com/facelessuser/pymdown-extensions/pull/13
+            - https://github.com/facelessuser/pymdown-extensions/commit/3f6b07a8eeaa9d606115758d90f55fec565d4e2a
+            - https://github.com/facelessuser/pymdown-extensions/compare/e2ed7e0b3973f3f9eb7a26b8ef7ae514eebfe0d2...90b6fb8711e75732f987982cc024e9bb0111beac
+            - https://github.com/facelessuser/Rummage/commit/181c06d1f11fa29961b334e90606ed1f1ec7a7cc
+            ```
diff --git a/preview/docs/preview_example/mark.md b/preview/docs/preview_example/mark.md
new file mode 100644
index 0000000000000000000000000000000000000000..eb6d561234782a248f7beb8acc454f077db02ff1
--- /dev/null
+++ b/preview/docs/preview_example/mark.md
@@ -0,0 +1,27 @@
+## [Mark](https://facelessuser.github.io/pymdown-extensions/extensions/mark)
+
+??? info "Mark"
+
+    ### Examples
+
+    Mark adds the ability to insert `#!html <mark></mark>` tags.  The syntax
+    requires the text to be surrounded by double equal signs. It can optionally
+    be configured to use smart logic. Syntax behavior for smart and non-smart
+    variants of **mark** models that of BetterEm.
+
+    To Mark some text, simply surround the text with double `=`.
+
+    !!! example "Mark Example"
+
+        === "Output"
+            ==mark me==
+
+            ==smart==mark==
+
+        === "Markdown"
+            ```
+            ==mark me==
+
+            ==smart==mark==
+            ```
+
diff --git a/preview/docs/preview_example/markdown.md b/preview/docs/preview_example/markdown.md
new file mode 100644
index 0000000000000000000000000000000000000000..f75b788c3684f6e7cecf5f14245cb57d86cbd905
--- /dev/null
+++ b/preview/docs/preview_example/markdown.md
@@ -0,0 +1,382 @@
+## Basic Markdown
+
+??? info "Basic Markdown"
+
+    ### Basic Markdown
+
+    #### Headings
+
+    === "Output"
+
+        ## h2 Heading
+        ### h3 Heading
+        #### h4 Heading
+        ##### h5 Heading
+        ###### h6 Heading
+
+    === "Markdown"
+
+        ````markdown
+        ## h2 Heading
+        #### h3 Heading
+        ##### h4 Heading
+        ###### h5 Heading
+        ####### h6 Heading
+        ````
+
+    #### Horizontal Rules
+
+    === "Output"
+
+        ___
+
+        ---
+
+        ***
+
+    === "Markdown"
+
+        ````markdown
+        ___
+
+        ---
+
+        ***
+        ````
+
+
+    #### Typographic replacements
+
+    === "Output"
+
+        (c) (C) (r) (R) (tm) (TM) (p) (P) +-
+
+        test.. test... test..... test?..... test!....
+
+        !!!!!! ???? ,,  -- ---
+
+        "Smartypants, double quotes" and 'single quotes'
+
+    === "Markdown"
+        ````markdown
+
+        (c) (C) (r) (R) (tm) (TM) (p) (P) +-
+
+        test.. test... test..... test?..... test!....
+
+        !!!!!! ???? ,,  -- ---
+
+        "Smartypants, double quotes" and 'single quotes'
+
+        ````
+
+    #### Emphasis
+
+    === "Output"
+
+        **This is bold text**
+
+        __This is bold text__
+
+        *This is italic text*
+
+        _This is italic text_
+
+        ~~Strikethrough~~
+
+    === "Markdown"
+        ````markdown
+
+        **This is bold text**
+
+        __This is bold text__
+
+        *This is italic text*
+
+        _This is italic text_
+
+        ~~Strikethrough~~
+
+        ````
+
+    #### Blockquotes
+
+    === "Output"
+
+        > Blockquotes can also be nested...
+        >> ...by using additional greater-than signs right next to each other...
+        > > > ...or with spaces between arrows.
+
+    === "Markdown"
+        ````markdown
+
+        > Blockquotes can also be nested...
+        >> ...by using additional greater-than signs right next to each other...
+        > > > ...or with spaces between arrows.
+        ````
+
+
+    #### Lists
+
+    === "Output"
+
+        Unordered
+
+        + Create a list by starting a line with `+`, `-`, or `*`
+        + Sub-lists are made by indenting 2 spaces:
+          - Marker character change forces new list start:
+            * Ac tristique libero volutpat at
+            + Facilisis in pretium nisl aliquet
+            - Nulla volutpat aliquam velit
+        + Very easy!
+
+        Ordered
+
+        1. Lorem ipsum dolor sit amet
+        2. Consectetur adipiscing elit
+        3. Integer molestie lorem at massa
+
+
+        1. You can use sequential numbers...
+        1. ...or keep all the numbers as `1.`
+
+        Start numbering with offset:
+
+        57. foo
+        1. bar
+
+    === "Markdown"
+        ````markdown
+
+        Unordered
+
+        + Create a list by starting a line with `+`, `-`, or `*`
+        + Sub-lists are made by indenting 2 spaces:
+          - Marker character change forces new list start:
+            * Ac tristique libero volutpat at
+            + Facilisis in pretium nisl aliquet
+            - Nulla volutpat aliquam velit
+        + Very easy!
+
+        Ordered
+
+        1. Lorem ipsum dolor sit amet
+        2. Consectetur adipiscing elit
+        3. Integer molestie lorem at massa
+
+
+        1. You can use sequential numbers...
+        1. ...or keep all the numbers as `1.`
+
+        Start numbering with offset:
+
+        57. foo
+        1. bar
+        ````
+
+
+    #### Code
+
+    === "Output"
+
+        Inline `code`
+
+        Indented code
+
+            // Some comments
+            line 1 of code
+            line 2 of code
+            line 3 of code
+
+
+        Block code "fences"
+
+        ```
+        Sample text here...
+        ```
+
+        Syntax highlighting
+
+        ```js
+        var foo = function (bar) {
+          return bar++;
+        };
+
+        console.log(foo(5));
+        ```
+
+    === "Markdown"
+        ````markdown
+
+        Inline `code`
+
+        Indented code
+
+            // Some comments
+            line 1 of code
+            line 2 of code
+            line 3 of code
+
+
+        Block code "fences"
+
+        ```
+        Sample text here...
+        ```
+
+        Syntax highlighting
+
+        ```js
+        var foo = function (bar) {
+          return bar++;
+        };
+
+        console.log(foo(5));
+        ```
+        ````
+
+    #### Tables
+
+    === "Output"
+
+        | Option  | Description                                                               |
+        | ------  | -----------                                                               |
+        | data    | path to data files to supply the data that will be passed into templates. |
+        | engine  | engine to be used for processing templates. Handlebars is the default.    |
+        | ext     | extension to be used for dest files.                                      |
+
+        Right aligned columns
+
+        | Option  | Description                                                               |
+        | ------: | -----------:                                                              |
+        | data    | path to data files to supply the data that will be passed into templates. |
+        | engine  | engine to be used for processing templates. Handlebars is the default.    |
+        | ext     | extension to be used for dest files.                                      |
+
+
+    === "Markdown"
+        ````markdown
+
+        | Option  | Description                                                               |
+        | ------  | -----------                                                               |
+        | data    | path to data files to supply the data that will be passed into templates. |
+        | engine  | engine to be used for processing templates. Handlebars is the default.    |
+        | ext     | extension to be used for dest files.                                      |
+
+        Right aligned columns
+
+        | Option  | Description                                                               |
+        | ------: | -----------:                                                              |
+        | data    | path to data files to supply the data that will be passed into templates. |
+        | engine  | engine to be used for processing templates. Handlebars is the default.    |
+        | ext     | extension to be used for dest files.                                      |
+
+        ````
+
+    #### Links
+
+    === "Output"
+
+        [link text](http://dev.nodeca.com)
+
+        [link with title](http://nodeca.github.io/pica/demo/ "title text!")
+
+        Autoconverted link https://github.com/nodeca/pica (enable linkify to see)
+
+    === "Markdown"
+
+        ````markdown
+
+        [link text](http://dev.nodeca.com)
+
+        [link with title](http://nodeca.github.io/pica/demo/ "title text!")
+
+        Autoconverted link https://github.com/nodeca/pica (enable linkify to see)
+
+        ````
+
+
+    #### Images
+
+    === "Output"
+
+        Like links, Images also have a footnote style syntax
+
+        ![Alt text][id]
+
+        With a reference later in the document defining the URL location:
+
+        [id]: https://octodex.github.com/images/stormtroopocat.jpg "The Stormtroopocat"
+
+    === "Markdown"
+        ````markdown
+
+        Like links, Images also have a footnote style syntax
+
+        ![Alt text][id]
+
+        With a reference later in the document defining the URL location:
+
+        [id]: https://octodex.github.com/images/stormtroopocat.jpg "The Stormtroopocat"
+
+        ````
+
+??? info "Markdown Extension"
+
+    ### Markdown Extension
+
+    #### Footnotes
+
+    === "Output"
+
+        Footnote 1 link[^first].
+
+        Footnote 2 link[^second].
+
+        Inline footnote^[Text of inline footnote] definition.
+
+        Duplicated footnote reference[^second].
+
+        [^first]: Footnote **can have markup**
+
+            and multiple paragraphs.
+
+        [^second]: Footnote text.
+
+    === "Markdown"
+        ````markdown
+
+        Footnote 1 link[^first].
+
+        Footnote 2 link[^second].
+
+        Inline footnote^[Text of inline footnote] definition.
+
+        Duplicated footnote reference[^second].
+
+        [^first]: Footnote **can have markup**
+
+            and multiple paragraphs.
+
+        [^second]: Footnote text.
+        ````
+
+
+    #### Abbreviations
+
+    === "Output"
+        This is HTML abbreviation example.
+
+        It converts "HTML", but keep intact partial entries like "xxxHTMLyyy" and so on.
+
+        *[HTML]: Hyper Text Markup Language
+
+    === "Markdown"
+        ````markdown
+        This is HTML abbreviation example.
+
+        It converts "HTML", but keep intact partial entries like "xxxHTMLyyy" and so on.
+
+        *[HTML]: Hyper Text Markup Language
+
+        ````
diff --git a/preview/docs/preview_example/progressbar.md b/preview/docs/preview_example/progressbar.md
new file mode 100644
index 0000000000000000000000000000000000000000..10700ac33b81dbe26774f3f915705e672a5c4a82
--- /dev/null
+++ b/preview/docs/preview_example/progressbar.md
@@ -0,0 +1,73 @@
+## [ProgressBar](https://facelessuser.github.io/pymdown-extensions/extensions/progressbar)
+
+
+??? info "ProgressBar"
+
+    ### Overview
+
+    ProgressBar is an extension that adds support for progress/status bars.  It
+    can take percentages or fractions, and it can optionally generate classes
+    for percentages at specific value levels.  It also works with Python
+    Markdown's built in `attr_list` extension.
+
+    The basic syntax for progress bars is: `[= <percentage or fraction>
+    "optional single or double quoted title"]`.  The opening `[` can be
+    followed by one or more `=` characters. After the `=` char(s) the
+    percentage is specified as either a fraction or percentage and can
+    optionally be followed by a title surrounded in either double quotes or
+    single quotes.
+
+    !!! example "Progress Bar Example"
+
+        === "Output"
+            [=0% "0%"]
+            [=5% "5%"]
+            [=25% "25%"]
+            [=45% "45%"]
+            [=65% "65%"]
+            [=85% "85%"]
+            [=100% "100%"]
+
+        === "Markdown"
+            ```
+            [=0% "0%"]
+            [=5% "5%"]
+            [=25% "25%"]
+            [=45% "45%"]
+            [=65% "65%"]
+            [=85% "85%"]
+            [=100% "100%"]
+            ```
+
+    Though progress bars are rendered as block items, it accepts `attr_list`'s
+    inline format. `markdown.extensions.attr_list` must be enabled for the
+    following to work.
+
+    !!! example "Progress Bar with Attributes"
+
+        === "Output"
+            [=85% "85%"]{: .candystripe}
+            [=100% "100%"]{: .candystripe .candystripe-animate}
+
+            [=0%]{: .thin}
+            [=5%]{: .thin}
+            [=25%]{: .thin}
+            [=45%]{: .thin}
+            [=65%]{: .thin}
+            [=85%]{: .thin}
+            [=100%]{: .thin}
+
+        === "Markdown"
+            ```
+            [=85% "85%"]{: .candystripe}
+            [=100% "100%"]{: .candystripe .candystripe-animate}
+
+            [=0%]{: .thin}
+            [=5%]{: .thin}
+            [=25%]{: .thin}
+            [=45%]{: .thin}
+            [=65%]{: .thin}
+            [=85%]{: .thin}
+            [=100%]{: .thin}
+            ```
+
diff --git a/preview/docs/preview_example/saneheader.md b/preview/docs/preview_example/saneheader.md
new file mode 100644
index 0000000000000000000000000000000000000000..3b70aec8db5a1e10c37142f36b4b443f10df68e6
--- /dev/null
+++ b/preview/docs/preview_example/saneheader.md
@@ -0,0 +1,26 @@
+## [SaneHeaders](https://facelessuser.github.io/pymdown-extensions/extensions/saneheaders)
+
+??? info "SaneHeaders"
+    ### Examples
+
+
+    The syntax when using SaneHeaders is exactly like Python Markdown's default
+    logic with the only exception being that SaneHeaders will not treat hashes
+    at the beginning of a line as a header if they do not have space after
+    them.
+
+    In Python Markdown, both of these are treated as headers:
+
+    ```
+    ## Header
+
+    ##Also a Header
+    ```
+
+    With SaneHeaders, only the first is a header:
+
+    ```
+    ## Header
+
+    ##Not a Header
+    ```
diff --git a/preview/docs/preview_example/smartsymbols.md b/preview/docs/preview_example/smartsymbols.md
new file mode 100644
index 0000000000000000000000000000000000000000..196615844cdcba8baf39aca388e04ca5769da479
--- /dev/null
+++ b/preview/docs/preview_example/smartsymbols.md
@@ -0,0 +1,24 @@
+## [SmartSymbols](https://facelessuser.github.io/pymdown-extensions/extensions/smartsymbols)
+
+??? info "SmartSymbols"
+    ### Examples
+
+    SmartSymbols adds syntax for creating special characters such as
+    trademarks, arrows, fractions, etc.  It basically allows for more
+    "smarty-pants" like replacements.  It is meant to be used along side Python
+    Markdown's `smarty` extension not to replace.
+
+    Markdown       | Result
+    -------------- |--------
+    `(tm)`         | (tm)
+    `(c)`          | (c)
+    `(r)`          | (r)
+    `c/o`          | c/o
+    `+/-`          | +/-
+    `-->`          | -->
+    `<--`          | <--
+    `<-->`         | <-->
+    `=/=`          | =/=
+    `1/4, etc.`    | 1/4, etc.
+    `1st 2nd etc.` |1st 2nd etc.
+
diff --git a/preview/docs/preview_example/striphtml.md b/preview/docs/preview_example/striphtml.md
new file mode 100644
index 0000000000000000000000000000000000000000..34e4fecebdd2ea8f611256abe9dfa0ae7071596f
--- /dev/null
+++ b/preview/docs/preview_example/striphtml.md
@@ -0,0 +1,26 @@
+## [StripHTML](https://facelessuser.github.io/pymdown-extensions/extensions/striphtml)
+
+??? info "StripHTML"
+
+    ### Examples
+
+    StripHTML (formally known as PlainHTML) is a simple extension that is run
+    at the end of post-processing.  It searches the final output stripping out
+    unwanted comments and/or tag attributes. Though it does its best to be
+    loaded at the very end of the process, it helps to include this one last
+    when loading up your extensions.
+
+    !!! example "Strip Comment"
+
+        === "HTML"
+            ```html
+            <p>Here is a <strong>test</strong>.</p>
+            ```
+
+        === "Markdown"
+            ```
+            <!-- We are only allowing strip_comments and strip_js_on_attributes
+                 in this example. -->
+            Here is a <strong onclick="myFunction();">test</strong>.
+            ```
+
diff --git a/preview/docs/preview_example/superfences.md b/preview/docs/preview_example/superfences.md
new file mode 100644
index 0000000000000000000000000000000000000000..e82262ad87884b5ba89dc0904750861fa9f7c310
--- /dev/null
+++ b/preview/docs/preview_example/superfences.md
@@ -0,0 +1,198 @@
+## [SuperFences](https://facelessuser.github.io/pymdown-extensions/extensions/superfences)
+
+??? info "SuperFences"
+
+    ### Preserve Tabs
+
+    !!! example "Tabs in Content"
+
+        === "Output"
+            ```
+            ============================================================
+            T	Tp	Sp	D	Dp	S	D7	T
+            ------------------------------------------------------------
+            A	F#m	Bm	E	C#m	D	E7	A
+            A#	Gm	Cm	F	Dm	D#	F7	A#
+            Bâ™­	Gm	Cm	F	Dm	Eâ™­m	F7	Bâ™­
+            ```
+
+        === "Markdown"
+            ````
+            ```
+            ============================================================
+            T	Tp	Sp	D	Dp	S	D7	T
+            ------------------------------------------------------------
+            A	F#m	Bm	E	C#m	D	E7	A
+            A#	Gm	Cm	F	Dm	D#	F7	A#
+            Bâ™­	Gm	Cm	F	Dm	Eâ™­m	F7	Bâ™­
+            ```
+            ````
+
+    ### Code Highlighting
+
+    !!! example "Highlight Example"
+
+        === "Output"
+            ```py3
+            import foo.bar
+            ```
+
+        === "Markdown"
+            ````
+            ```py3
+            import foo.bar
+            ```
+            ````
+
+    ### Showing Line Numbers
+
+    !!! example "Line Number Example"
+
+        === "Output"
+            ``` {linenums="1"}
+            import foo.bar
+            ```
+
+        === "Markdown"
+            ````
+            ``` {linenums="1"}
+            import foo.bar
+            ```
+            ````
+
+    !!! example "Nth Line Example"
+
+        === "Output"
+            ``` {linenums="2 2"}
+            """Some file."""
+            import foo.bar
+            import boo.baz
+            import foo.bar.baz
+            ```
+
+        === "Markdown"
+            ````
+            ``` {linenums="2 2"}
+            """Some file."""
+            import foo.bar
+            import boo.baz
+            import foo.bar.baz
+            ```
+            ````
+
+    !!! example "Special Line Example"
+
+        === "Output"
+            ``` {linenums="1 1 2"}
+            """Some file."""
+            import foo.bar
+            import boo.baz
+            import foo.bar.baz
+            ```
+
+        === "Markdown"
+            ````
+            ``` {linenums="1 1 2"}
+            """Some file."""
+            import foo.bar
+            import boo.baz
+            import foo.bar.baz
+            ```
+            ````
+
+    ### Highlighting Lines
+
+
+    !!! example "Highlight Lines Example"
+
+        === "Output"
+            ```{.py3 hl_lines="1 3"}
+            """Some file."""
+            import foo.bar
+            import boo.baz
+            import foo.bar.baz
+            ```
+
+        === "Markdown"
+            ````
+            ```{.py3 hl_lines="1 3"}
+            """Some file."""
+            import foo.bar
+            import boo.baz
+            import foo.bar.baz
+            ```
+            ````
+
+    !!! example "Highlight Lines with Line Numbers Example"
+
+        === "Output"
+            ```{.py3 hl_lines="1 3" linenums="2"}
+            """Some file."""
+            import foo.bar
+            import boo.baz
+            import foo.bar.baz
+            ```
+
+        === "Markdown"
+            ````
+            ```{.py3 hl_lines="1 3" linenums="2"}
+            """Some file."""
+            import foo.bar
+            import boo.baz
+            import foo.bar.baz
+            ```
+            ````
+
+    !!! example "Highlight Ranges"
+
+        === "Output"
+            ```{.py3 hl_lines="1-2 5 7-8"}
+            import foo
+            import boo.baz
+            import foo.bar.baz
+
+            class Foo:
+               def __init__(self):
+                   self.foo = None
+                   self.bar = None
+                   self.baz = None
+            ```
+
+        === "Markdown"
+            ````
+            ```{.py3 hl_lines="1-2 5 7-8"}
+            import foo
+            import boo.baz
+            import foo.bar.baz
+
+            class Foo:
+               def __init__(self):
+                   self.foo = None
+                   self.bar = None
+                   self.baz = None
+            ```
+            ````
+
+    ### Custom Fences
+
+    !!! example "Flow Chart Example"
+
+        === "Output"
+            ```mermaid
+            graph TD
+                A[Hard] -->|Text| B(Round)
+                B --> C{Decision}
+                C -->|One| D[Result 1]
+                C -->|Two| E[Result 2]
+            ```
+
+        === "Markdown"
+            ````
+            ```mermaid
+            graph TD
+                A[Hard] -->|Text| B(Round)
+                B --> C{Decision}
+                C -->|One| D[Result 1]
+                C -->|Two| E[Result 2]
+            ```
+            ````
diff --git a/preview/docs/preview_example/tabbed.md b/preview/docs/preview_example/tabbed.md
new file mode 100644
index 0000000000000000000000000000000000000000..932fe990db9408d682f2a83a7535cd7220425459
--- /dev/null
+++ b/preview/docs/preview_example/tabbed.md
@@ -0,0 +1,86 @@
+## [Tabbed](https://facelessuser.github.io/pymdown-extensions/extensions/tabbed)
+
+??? info "Tabbed"
+
+    ### Examples
+
+    Tabs start with `===` to signify a tab followed by a quoted title.
+    Consecutive tabs are grouped into a tab set.
+
+    !!! example "Example Tabs"
+
+        === "Output"
+            === "Tab 1"
+                Markdown **content**.
+
+                Multiple paragraphs.
+
+            === "Tab 2"
+                More Markdown **content**.
+
+                - list item a
+                - list item b
+
+        === "Markdown"
+            ```
+            === "Tab 1"
+                Markdown **content**.
+
+                Multiple paragraphs.
+
+            === "Tab 2"
+                More Markdown **content**.
+
+                - list item a
+                - list item b
+            ```
+
+    In the rare case that you want to follow two separate tab sets right after
+    each other, you can explicitly mark the start of a new tab set with `!`.
+
+
+    !!! example "Example Tab Breaks"
+
+        === "Output"
+            === "Tab 1"
+                Markdown **content**.
+
+                Multiple paragraphs.
+
+            === "Tab 2"
+                More Markdown **content**.
+
+                - list item a
+                - list item b
+
+            ===! "Tab A"
+                Different tab set.
+
+            === "Tab B"
+                ```
+                More content.
+                ```
+
+        === "Markdown"
+
+            ```
+            === "Tab 1"
+                Markdown **content**.
+
+                Multiple paragraphs.
+
+            === "Tab 2"
+                More Markdown **content**.
+
+                - list item a
+                - list item b
+
+            ===! "Tab A"
+                Different tab set.
+
+            === "Tab B"
+                ```
+                More content.
+                ```
+            ```
+
diff --git a/preview/docs/preview_example/tasklist.md b/preview/docs/preview_example/tasklist.md
new file mode 100644
index 0000000000000000000000000000000000000000..bbcdec4b18550df0c69b88ec27a310b1534ecad7
--- /dev/null
+++ b/preview/docs/preview_example/tasklist.md
@@ -0,0 +1,43 @@
+## [Tasklist](https://facelessuser.github.io/pymdown-extensions/extensions/tasklist)
+
+??? info "Tasklist"
+    ### Overview
+
+    The Tasklist extension adds GFM style task lists.  They follow the same
+    syntax as GFM. Simply start each list item with a square bracket pair
+    containing either a space (an unchecked item) or a `x` (a checked item).
+
+    !!! example "Task List Example"
+
+        All task lists in this documentation are generated with [`custom_checkbox`](#options) enabled.
+
+        === "Output"
+            Task List
+
+            - [X] item 1
+                * [X] item A
+                * [ ] item B
+                    more text
+                    + [x] item a
+                    + [ ] item b
+                    + [x] item c
+                * [X] item C
+            - [ ] item 2
+            - [ ] item 3
+
+
+        === "Markdown"
+            ```
+            Task List
+
+            - [X] item 1
+                * [X] item A
+                * [ ] item B
+                    more text
+                    + [x] item a
+                    + [ ] item b
+                    + [x] item c
+                * [X] item C
+            - [ ] item 2
+            - [ ] item 3
+            ```
diff --git a/preview/docs/preview_example/tilde.md b/preview/docs/preview_example/tilde.md
new file mode 100644
index 0000000000000000000000000000000000000000..c54c92e39205cd26f909f62881b93345cae57948
--- /dev/null
+++ b/preview/docs/preview_example/tilde.md
@@ -0,0 +1,32 @@
+## [Tilde](https://facelessuser.github.io/pymdown-extensions/extensions/tilde)
+
+??? info "Tilde"
+
+    ### Delete
+
+    !!! example "Delete Example"
+
+        === "Output"
+            ~~Delete me~~
+
+        === "Markdown"
+            ```
+            ~~Delete me~~
+            ```
+
+    ### Subscript
+
+    !!! example "Subscript Example"
+
+        === "Output"
+            CH~3~CH~2~OH
+
+            text~a\ subscript~
+
+        === "Markdown"
+            ```
+            CH~3~CH~2~OH
+
+            text~a\ subscript~
+            ```
+