diff --git a/LICENSES/MIT.txt b/LICENSES/MIT.txt new file mode 100644 index 000000000..2071b23b0 --- /dev/null +++ b/LICENSES/MIT.txt @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/REUSE.toml b/REUSE.toml index a08260e18..f8289eb16 100644 --- a/REUSE.toml +++ b/REUSE.toml @@ -37,8 +37,44 @@ path = "scripts/cert/js/nodejs/.nvmrc" SPDX-FileCopyrightText = "© 2024 Sebastian Davids " SPDX-License-Identifier = "Apache-2.0" +[[annotations]] +path = "scripts/asciidoc/example-html/src/_includes/*.adoc" +SPDX-FileCopyrightText = "© 2024 Sebastian Davids " +SPDX-License-Identifier = "Apache-2.0" + +[[annotations]] +path = "scripts/asciidoc/example-html/src/docinfo/*.html" +SPDX-FileCopyrightText = "© 2024 Sebastian Davids " +SPDX-License-Identifier = "Apache-2.0" + +[[annotations]] +path = "scripts/asciidoc/example-html/src/css/font-awesome.css" +SPDX-FileCopyrightText = "© 2012 Dave Gandy (http://fontawesome.io)" +SPDX-License-Identifier = "MIT" + +[[annotations]] +path = "scripts/asciidoc/example-html/src/fonts/fontawesome-webfont-4.7.0.woff2" +SPDX-FileCopyrightText = "© 2012 Dave Gandy (http://fontawesome.io)" +SPDX-License-Identifier = "OFL-1.1" + +[[annotations]] +path = "scripts/asciidoc/example-html/src/fonts/source-code-pro-**" +SPDX-FileCopyrightText = "© 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/)" +SPDX-License-Identifier = "OFL-1.1" + +[[annotations]] +path = "scripts/asciidoc/example-html/src/fonts/source-sans-3-**" +SPDX-FileCopyrightText = "© 2010-2020 Adobe (http://www.adobe.com/)" +SPDX-License-Identifier = "OFL-1.1" + +[[annotations]] +path = "scripts/asciidoc/example-html/src/fonts/source-serif-4-**" +SPDX-FileCopyrightText = "© 2014 - 2023 Adobe (http://www.adobe.com/)" +SPDX-License-Identifier = "OFL-1.1" + [[annotations]] path = [ + "scripts/asciidoc/example-html/src/src/csv/data.csv", "scripts/asciidoc/example-pdf/src/src/csv/data.csv", ] SPDX-FileCopyrightText = "© 2024 Sebastian Davids " @@ -46,6 +82,7 @@ SPDX-License-Identifier = "Apache-2.0" [[annotations]] path = [ + "scripts/asciidoc/example-html/src/images/dragonfly.jpg", "scripts/asciidoc/example-pdf/src/images/dragonfly.jpg", ] SPDX-FileCopyrightText = "© 2017 Charles J. Sharp (https://www.sharpphotography.co.uk)" diff --git a/docs/user-guide/modules/ROOT/nav.adoc b/docs/user-guide/modules/ROOT/nav.adoc index ad7fb2f78..69716de33 100644 --- a/docs/user-guide/modules/ROOT/nav.adoc +++ b/docs/user-guide/modules/ROOT/nav.adoc @@ -6,6 +6,7 @@ * xref:index.adoc[] * xref:scripts/scripts.adoc[] ** xref:scripts/asciidoc/asciidoc.adoc[] +*** xref:scripts/asciidoc/asciidoc-html-build.adoc[] *** xref:scripts/asciidoc/asciidoc-pdf-build.adoc[] ** xref:scripts/cert/cert.adoc[] *** Standalone diff --git a/docs/user-guide/modules/ROOT/pages/scripts/asciidoc/asciidoc-html-build.adoc b/docs/user-guide/modules/ROOT/pages/scripts/asciidoc/asciidoc-html-build.adoc new file mode 100644 index 000000000..d303fefde --- /dev/null +++ b/docs/user-guide/modules/ROOT/pages/scripts/asciidoc/asciidoc-html-build.adoc @@ -0,0 +1,211 @@ +// SPDX-FileCopyrightText: © 2024 Sebastian Davids +// SPDX-License-Identifier: Apache-2.0 += asciidoc_html_build +:script_url: https://github.com/sdavids/sdavids-shell-misc/blob/main/scripts/asciidoc/asciidoc_html_build.sh +:main_adoc_url: https://github.com/sdavids/sdavids-shell-misc/blob/main/scripts/asciidoc/example-html/src/main.adoc +:docinfo_url: https://github.com/sdavids/sdavids-shell-misc/blob/main/scripts/asciidoc/example-html/src/docinfo/docinfo.html + +{script_url}[This script^] will typeset the documents of a given source directory into HTML. + +The following parameters are optional: + +`f` :: delete the output directory before typesetting +`n` :: turn caching off +`o` :: the output directory (`$PWD/build` if not given) +`s` :: the source directory (`$PWD/src` if not given) + +[NOTE] +==== +`*.adoc` files inside directories named `_includes` will not be typeset. + +This is useful for https://docs.asciidoctor.org/asciidoc/latest/directives/include/#when-is-an-include-directive-useful[AsciiDoc includes]. +==== + +[NOTE] +==== +This scripts configures Asciidoctor +to not use https://docs.asciidoctor.org/asciidoctor/latest/html-backend/default-stylesheet/#disable-or-modify-the-web-fonts[webfonts], +use https://docs.asciidoctor.org/asciidoctor/latest/html-backend/local-font-awesome/#switch-to-your-local-font-awesome-assets[local FontAwesome assets], +https://docs.asciidoctor.org/asciidoctor/latest/html-backend/manage-images/#embed-images-with-the-data-uri-attribute[embed images], and +https://docs.asciidoctor.org/asciidoctor/latest/html-backend/custom-stylesheet/#stylesdir-and-linkcss[inline CSS]. +==== + +[NOTE] +==== +If you want to use custom fonts, this script assumes that the `woff2` fonts are found in the `/fonts` directory. +==== + +[TIP] +==== +Depending on your use case, you might want to use https://docs.antora.org/antora/latest/[Antora] instead of this script. +==== + +== Usage + +[,shell] +---- +$ tree --noreport -I scripts +. +└── src + └── index.adoc +$ scripts/asciidoc/asciidoc_html_build.sh +$ tree --noreport -I scripts +. +├── build +│ └── index.html <1> +└── src + └── index.adoc + +$ tree --noreport -a /tmp/example +/tmp/example +└── src + ├── _includes + │ └── footer.adoc + ├── a + │ ├── b + │ │ └── sub.adoc + │ └── dir.adoc + ├── css + │ └── font-awesome.css <2> + ├── docinfo + │ └── docinfo.html <3> + ├── fonts + │ └── fontawesome-webfont-4.7.0.woff2 <2> + └── index.adoc +$ cat /tmp/example/src/docinfo/docinfo.html <3> + +$ cat /tmp/example/src/a/b/sub.adoc += 1. sub +:source-highlighter: rouge <4> +:rouge-style: github +:docinfo: shared <3> +:docinfodir: ../../docinfo <3> + +[NOTE] <2> +==== +Test +==== + +[plantuml] <5> +.... +@startuml + +!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Context.puml + +Person(p, "Support") + +System(s, "Test System") + +Rel(p, s, "Uses", "https") + +@enduml +.... + +[,shell,highlight=2..3;5] <4> +.... +A +B +C +D +E +F +G +.... + +includes::../../_includes/footer.adoc[] +$ scripts/asciidoc/asciidoc_html_build.sh -s /tmp/example/src -o /tmp/example/out +$ tree --noreport -a /tmp/example -I src +/tmp/example +└── out <6> + ├── a + │ ├── b + │ │ ├── .asciidoctor <8> + │ │ │ └── diagram + │ │ │ └── diag-plantuml-md5-757a0ec403d52693302a4f18fd7ec102.png.cache + │ │ ├── css + │ │ │ └── font-awesome.css <7> + │ │ ├── diag-plantuml-md5-757a0ec403d52693302a4f18fd7ec102.png <8> + │ │ ├── fonts + │ │ │ └── fontawesome-webfont-4.7.0.woff2 <7> + │ │ └── sub.html + │ ├── css + │ │ └── font-awesome.css <7> + │ ├── dir.html + │ └── fonts + │ └── fontawesome-webfont-4.7.0.woff2 <7> + ├── css + │ └── font-awesome.css <7> + ├── fonts + │ └── fontawesome-webfont-4.7.0.woff2 <7> + └── index.html +$ scripts/asciidoc/asciidoc_html_build.sh -s /tmp/example/src -o /tmp/example/out -f -n +$ tree --noreport -a /tmp/example -I src +/tmp/example +└── out <9> + ├── a + │ ├── b + │ │ ├── css + │ │ │ └── font-awesome.css + │ │ ├── fonts + │ │ │ └── fontawesome-webfont-4.7.0.woff2 + │ │ └── sub.html + │ ├── css + │ │ └── font-awesome.css + │ ├── dir.html + │ └── fonts + │ └── fontawesome-webfont-4.7.0.woff2 + ├── css + │ └── font-awesome.css + ├── fonts + │ └── fontawesome-webfont-4.7.0.woff2 + └── index.html +---- + +<1> the typeset HTML +<2> https://docs.asciidoctor.org/asciidoc/latest/blocks/admonitions/[admonitions] need https://docs.asciidoctor.org/asciidoctor/latest/html-backend/local-font-awesome/[Font Awesome] +<3> https://docs.asciidoctor.org/asciidoc/latest/docinfo[custom styles] +<4> use https://docs.asciidoctor.org/asciidoc/latest/verbatim/highlight-lines/#rouge[Rogue source highlighter] +<5> a document with an https://docs.asciidoctor.org/diagram-extension/latest/diagram_types/plantuml/[PlantUML diagram] +<6> notice there is no `footer.html` in an `_includes` directory +<7> Asciidoctor currently https://github.com/asciidoctor/asciidoctor/issues/4622[does not support a nested set of documents] well +<8> the files of the https://docs.asciidoctor.org/diagram-extension/latest/generate/#diagram_caching[diagram cache] +<9> the output directory has been cleaned (`-f`) and no files for the cache have been created (`-n`) + +[#asciidoc-html-build-example] +== Example + +{main_adoc_url}[main.adoc], +{docinfo_url}[docinfo.html] + +[,console] +---- +$ cd scripts/asciidoc/example-html +$ ../asciidoc_html_build.sh +---- + +=> `build/main.html` + +== Prerequisites + +* xref:developer-guide::dev-environment/dev-installation.adoc#docker[Docker] + +== Related Scripts + +* xref:scripts/asciidoc/asciidoc-pdf-build.adoc[] + +== More Information + +* https://github.com/asciidoctor/docker-asciidoctor[docker-asciidoctor] +* https://asciidoctor.org[Asciidoctor] +* https://docs.asciidoctor.org/asciidoc/latest/[AsciiDoc] +* https://docs.asciidoctor.org/asciidoc/latest/docinfo[Docinfo Files] +* https://docs.asciidoctor.org/asciidoctor/latest/html-backend/default-stylesheet/#disable-or-modify-the-web-fonts[Disable or modify the web fonts] +* https://docs.asciidoctor.org/asciidoctor/latest/html-backend/local-font-awesome/[Use Local Font Awesome] diff --git a/docs/user-guide/modules/ROOT/pages/scripts/asciidoc/asciidoc-pdf-build.adoc b/docs/user-guide/modules/ROOT/pages/scripts/asciidoc/asciidoc-pdf-build.adoc index f21182eed..00bb663b3 100644 --- a/docs/user-guide/modules/ROOT/pages/scripts/asciidoc/asciidoc-pdf-build.adoc +++ b/docs/user-guide/modules/ROOT/pages/scripts/asciidoc/asciidoc-pdf-build.adoc @@ -174,6 +174,7 @@ Typeset PDF: xref:attachment$asciidoc/main.pdf[main.pdf] == Related Scripts +* xref:scripts/asciidoc/asciidoc-html-build.adoc[] * xref:scripts/pdf/pdf-remove-metadata.adoc[] + [,shell] diff --git a/docs/user-guide/modules/ROOT/pages/scripts/asciidoc/asciidoc.adoc b/docs/user-guide/modules/ROOT/pages/scripts/asciidoc/asciidoc.adoc index 7f3063f79..397284b56 100644 --- a/docs/user-guide/modules/ROOT/pages/scripts/asciidoc/asciidoc.adoc +++ b/docs/user-guide/modules/ROOT/pages/scripts/asciidoc/asciidoc.adoc @@ -4,4 +4,5 @@ This section contains scripts related to https://docs.asciidoctor.org/asciidoc/latest/[AsciiDoc]: +xref:scripts/asciidoc/asciidoc-html-build.adoc[]:: typeset the documents of a given directory into HTML xref:scripts/asciidoc/asciidoc-pdf-build.adoc[]:: typeset the documents of a given directory into PDFs diff --git a/scripts/asciidoc/asciidoc_html_build.sh b/scripts/asciidoc/asciidoc_html_build.sh new file mode 100755 index 000000000..42eb0abd6 --- /dev/null +++ b/scripts/asciidoc/asciidoc_html_build.sh @@ -0,0 +1,146 @@ +#!/usr/bin/env bash + +# SPDX-FileCopyrightText: © 2024 Sebastian Davids +# SPDX-License-Identifier: Apache-2.0 + +set -Eeu -o pipefail -o posix + +# https://hub.docker.com/r/asciidoctor/docker-asciidoctor +readonly asciidoctor_version=1.79.0 +readonly asciidoctor_image="asciidoctor/docker-asciidoctor:${asciidoctor_version}" + +# https://stackoverflow.com/a/3915420 +# https://stackoverflow.com/questions/3915040/how-to-obtain-the-absolute-path-of-a-file-via-shell-bash-zsh-sh#comment100267041_3915420 +command -v realpath >/dev/null 2>&1 || realpath() { + if [ -h "$1" ]; then + # shellcheck disable=SC2012 + ls -ld "$1" | awk '{ print $11 }' + else + echo "$( + cd "$(dirname -- "$1")" >/dev/null + pwd -P + )/$(basename -- "$1")" + fi +} + +while getopts ':fno:s:' opt; do + case "${opt}" in + f) + force='true' + ;; + n) + no_cache='true' + ;; + o) + host_build_dir="${OPTARG}" + ;; + s) + host_src_dir="${OPTARG}" + ;; + ?) + echo "Usage: $0 -d [-n]" >&2 + exit 1 + ;; + esac +done + +readonly force="${force:-false}" +readonly no_cache="${no_cache:-false}" + +host_src_dir="${host_src_dir:-$PWD/src}" + +if [ ! -d "${host_src_dir}" ]; then + printf "The source directory '%s' does not exist\n" "${host_src_dir}" >&2 + exit 1 +fi + +host_src_dir="$(realpath "${host_src_dir}")" +readonly host_src_dir + +host_build_dir="${host_build_dir:-$PWD/build}" + +if [ "${force}" = 'true' ] \ + && [ -d "${host_build_dir}" ] \ + && [ "${host_build_dir}" != "$PWD" ] \ + && [ "${host_build_dir}" != '.' ]; then + + rm -rf "${host_build_dir}" +fi + +mkdir -p "${host_build_dir}" + +host_build_dir="$(realpath "${host_build_dir}")" +readonly host_build_dir + +readonly src_dir='/documents' +readonly out_dir='/mnt/out' + +readonly build_dir="/tmp/build" + +cmd="asciidoctor -R ${src_dir} -D ${build_dir}" +cmd+=' -r asciidoctor-diagram' +cmd+=' -a toc' +# https://docs.asciidoctor.org/asciidoctor/latest/html-backend/manage-images/#embed-images-with-the-data-uri-attribute +cmd+=' -a data-uri' +# https://docs.asciidoctor.org/asciidoc/latest/macros/icons-font/#enable-font-based-icons +cmd+=' -a icons=font' +# https://github.com/asciidoctor/asciidoctor/issues/4622 +if [ -d "${host_src_dir}/fonts" ]; then + awesome="$(find "${host_src_dir}/fonts" -type f -name fontawesome-webfont\*.woff2)" + if [ -n "${awesome}" ]; then + # https://docs.asciidoctor.org/asciidoctor/latest/html-backend/local-font-awesome/#switch-to-your-local-font-awesome-assets + cmd+=' -a iconfont-remote!' + fi + unset awesome +fi +# https://docs.asciidoctor.org/asciidoctor/latest/html-backend/custom-stylesheet/#configure-the-styles-directory +cmd+=' -a stylesdir=css' +# https://docs.asciidoctor.org/asciidoctor/latest/html-backend/default-stylesheet/#disable-or-modify-the-web-fonts +cmd+=' -a webfonts!' +if [ "${no_cache}" != 'false' ]; then + # https://docs.asciidoctor.org/diagram-extension/latest/generate/#diagram_caching + cmd+=' -a diagram-nocache-option' +fi +cmd+=" '**/*.adoc'" +if [ "${no_cache}" = 'false' ]; then + cmd+=" && find ${build_dir} -depth -name '_includes' -type d -exec rm -rf {} \; && cp -r -f ${build_dir}/* ${out_dir}" +else + cmd+=" && cd ${build_dir}" + cmd+=" && find . -name '_includes' -prune -o \( -type f -name \*.css -o -name \*.html \) -exec cp --parents {} ${out_dir} \;" +fi +readonly cmd + +mkdir -p "${host_build_dir}" + +docker run \ + --user "$(id -u):$(id -g)" \ + --rm \ + --security-opt='no-new-privileges=true' \ + --cap-drop=all \ + --mount "type=bind,src=${host_src_dir},dst=${src_dir},readonly" \ + --mount "type=bind,src=${host_build_dir},dst=${out_dir}" \ + --env XDG_CACHE_HOME='/tmp' \ + "${asciidoctor_image}" \ + sh -c "${cmd}" + +# https://github.com/asciidoctor/asciidoctor/issues/4622 +if [ -d "${host_src_dir}/fonts" ]; then + fonts="$(find "${host_src_dir}/fonts" -type f -name \*.woff2)" + if [ -n "${fonts}" ]; then + find "${host_build_dir}" -type f -name \*.html -exec sh -c 'mkdir -p "$(dirname "$0")/fonts";' {} \; + echo "${fonts}" | while IFS= read -r f; do + find "${host_build_dir}" -type d -name fonts -exec cp -f "${f}" {} \; + done + fi +fi + +# https://github.com/asciidoctor/asciidoctor/issues/4622 +if [ -d "${host_src_dir}/css" ]; then + css_files="$(find "${host_src_dir}/css" -type f -name \*.css)" + if [ -n "${css_files}" ]; then + find "${host_build_dir}" -type f -name \*.html -exec sh -c 'mkdir -p "$(dirname "$0")/css";' {} \; + echo "${css_files}" | while IFS= read -r f; do + find "${host_build_dir}" -type d -name css -exec cp -f "${f}" {} \; + done + fi +fi diff --git a/scripts/asciidoc/example-html/.editorconfig b/scripts/asciidoc/example-html/.editorconfig new file mode 100644 index 000000000..4d718adcf --- /dev/null +++ b/scripts/asciidoc/example-html/.editorconfig @@ -0,0 +1,11 @@ +# SPDX-FileCopyrightText: © 2024 Sebastian Davids +# SPDX-License-Identifier: Apache-2.0 + +# http://EditorConfig.org + +[*.csv] +max_line_length = off +trim_trailing_whitespace = false + +[*.java] +max_line_length = 100 diff --git a/scripts/asciidoc/example-html/.gitattributes b/scripts/asciidoc/example-html/.gitattributes new file mode 100644 index 000000000..81e3010f8 --- /dev/null +++ b/scripts/asciidoc/example-html/.gitattributes @@ -0,0 +1,9 @@ +# SPDX-FileCopyrightText: © 2024 Sebastian Davids +# SPDX-License-Identifier: Apache-2.0 + +# https://git-scm.com/docs/gitattributes + +*.java diff=java + +*.jpg binary -eol -whitespace +*.woff2 binary -eol -whitespace diff --git a/scripts/asciidoc/example-html/.gitignore b/scripts/asciidoc/example-html/.gitignore new file mode 100644 index 000000000..51c3adf9a --- /dev/null +++ b/scripts/asciidoc/example-html/.gitignore @@ -0,0 +1,7 @@ +# SPDX-FileCopyrightText: © 2024 Sebastian Davids +# SPDX-License-Identifier: Apache-2.0 + +# https://git-scm.com/docs/gitignore + +### Build ### +build/ diff --git a/scripts/asciidoc/example-html/src/_includes/contact.adoc b/scripts/asciidoc/example-html/src/_includes/contact.adoc new file mode 100644 index 000000000..5c66df733 --- /dev/null +++ b/scripts/asciidoc/example-html/src/_includes/contact.adoc @@ -0,0 +1,5 @@ +// keep this blank line for the ID to work + +// +[id=contact-{contact_id}] +{name} <{email}> diff --git a/scripts/asciidoc/example-html/src/css/font-awesome.css b/scripts/asciidoc/example-html/src/css/font-awesome.css new file mode 100644 index 000000000..25fc1b2a0 --- /dev/null +++ b/scripts/asciidoc/example-html/src/css/font-awesome.css @@ -0,0 +1 @@ +@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont-4.7.0.woff2') format('woff2');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} diff --git a/scripts/asciidoc/example-html/src/docinfo/docinfo.html b/scripts/asciidoc/example-html/src/docinfo/docinfo.html new file mode 100644 index 000000000..e3075e1d7 --- /dev/null +++ b/scripts/asciidoc/example-html/src/docinfo/docinfo.html @@ -0,0 +1,87 @@ + + + + + + + + diff --git a/scripts/asciidoc/example-html/src/fonts/fontawesome-webfont-4.7.0.woff2 b/scripts/asciidoc/example-html/src/fonts/fontawesome-webfont-4.7.0.woff2 new file mode 100644 index 000000000..4d13fc604 Binary files /dev/null and b/scripts/asciidoc/example-html/src/fonts/fontawesome-webfont-4.7.0.woff2 differ diff --git a/scripts/asciidoc/example-html/src/fonts/source-code-pro-italic.a80b7c1.woff2 b/scripts/asciidoc/example-html/src/fonts/source-code-pro-italic.a80b7c1.woff2 new file mode 100644 index 000000000..a455e2b9a Binary files /dev/null and b/scripts/asciidoc/example-html/src/fonts/source-code-pro-italic.a80b7c1.woff2 differ diff --git a/scripts/asciidoc/example-html/src/fonts/source-code-pro-regular.25619ee.woff2 b/scripts/asciidoc/example-html/src/fonts/source-code-pro-regular.25619ee.woff2 new file mode 100644 index 000000000..92ec082ae Binary files /dev/null and b/scripts/asciidoc/example-html/src/fonts/source-code-pro-regular.25619ee.woff2 differ diff --git a/scripts/asciidoc/example-html/src/fonts/source-sans-3-italic.d5d5f2f.woff2 b/scripts/asciidoc/example-html/src/fonts/source-sans-3-italic.d5d5f2f.woff2 new file mode 100644 index 000000000..152c9c7e6 Binary files /dev/null and b/scripts/asciidoc/example-html/src/fonts/source-sans-3-italic.d5d5f2f.woff2 differ diff --git a/scripts/asciidoc/example-html/src/fonts/source-sans-3-regular.9a0725d.woff2 b/scripts/asciidoc/example-html/src/fonts/source-sans-3-regular.9a0725d.woff2 new file mode 100644 index 000000000..503bb4662 Binary files /dev/null and b/scripts/asciidoc/example-html/src/fonts/source-sans-3-regular.9a0725d.woff2 differ diff --git a/scripts/asciidoc/example-html/src/fonts/source-serif-4-italic.dd7be7e.woff2 b/scripts/asciidoc/example-html/src/fonts/source-serif-4-italic.dd7be7e.woff2 new file mode 100644 index 000000000..841787e5a Binary files /dev/null and b/scripts/asciidoc/example-html/src/fonts/source-serif-4-italic.dd7be7e.woff2 differ diff --git a/scripts/asciidoc/example-html/src/fonts/source-serif-4-regular.ac74bd5.woff2 b/scripts/asciidoc/example-html/src/fonts/source-serif-4-regular.ac74bd5.woff2 new file mode 100644 index 000000000..79fc4f5b4 Binary files /dev/null and b/scripts/asciidoc/example-html/src/fonts/source-serif-4-regular.ac74bd5.woff2 differ diff --git a/scripts/asciidoc/example-html/src/images/dragonfly.jpg b/scripts/asciidoc/example-html/src/images/dragonfly.jpg new file mode 100644 index 000000000..e0a6e7377 Binary files /dev/null and b/scripts/asciidoc/example-html/src/images/dragonfly.jpg differ diff --git a/scripts/asciidoc/example-html/src/main.adoc b/scripts/asciidoc/example-html/src/main.adoc new file mode 100644 index 000000000..c390c7976 --- /dev/null +++ b/scripts/asciidoc/example-html/src/main.adoc @@ -0,0 +1,639 @@ +// SPDX-FileCopyrightText: © 2024 Sebastian Davids +// SPDX-License-Identifier: Apache-2.0 += AsciiDoc Showcase +Sebastian Davids +// no space here, otherwise the TOC will be placed incorrectly +:description: AsciiDoc Showcase +// https://docs.asciidoctor.org/asciidoc/latest/sections/section-ref/#section-attributes +:sectnums: +:sectanchors: +:sectlinks: +// https://docs.asciidoctor.org/asciidoc/latest/toc/position/ +:toc: macro +:toc-placement!: +// https://docs.asciidoctor.org/asciidoc/latest/macros/links/#hide-uri-scheme +:hide-uri-scheme: +// https://docs.asciidoctor.org/asciidoc/latest/attributes/document-attributes-ref/#source-highlighting-and-formatting-attributes +:source-highlighter: rouge +:rouge-style: github +// https://docs.asciidoctor.org/asciidoc/latest/macros/images-directory/#imagesdir-attribute-syntax +:imagesdir: images +// https://docs.asciidoctor.org/asciidoc/latest/macros/ui-macros/ +:experimental: +// https://docs.asciidoctor.org/asciidoc/latest/docinfo/ +:docinfo: shared +:docinfodir: docinfo + +// https://docs.asciidoctor.org/asciidoc/latest/macros/inter-document-xref/#navigating-between-source-files +ifdef::env-browser[:outfilesuffix: .adoc] + +// https://docs.asciidoctor.org/asciidoc/latest/blocks/admonitions/#using-emoji-for-admonition-icons +ifdef::env-github[] +:outfilesuffix: .adoc +:tip-caption: :bulb: +:note-caption: :information_source: +:important-caption: :heavy_exclamation_mark: +:caution-caption: :fire: +:warning-caption: :warning: +endif::[] + +// https://docs.asciidoctor.org/asciidoc/latest/toc/position/#at-macro +toc::[] + +// https://docs.asciidoctor.org/asciidoc/latest/blocks/assign-id/ +[#source-code] +== Source Code + +=== Inline Source Code + +// https://docs.asciidoctor.org/asciidoc/latest/blocks/admonitions/ +[WARNING] +==== +Copy & Paste Hell! +==== + +// https://docs.asciidoctor.org/asciidoc/latest/verbatim/source-blocks/ +[source,java] +---- +class Main { + void main() { + System.out.println("Hello, World!"); + } +} +---- + +=== Included Source Code + +// https://docs.asciidoctor.org/asciidoc/latest/directives/ifdef-ifndef/ +// https://docs.asciidoctor.org/asciidoctor/latest/reference-safe-mode/ +ifdef::safe-mode-secure[] +This document has been rendered with the `SECURE` https://docs.asciidoctor.org/asciidoctor/latest/safe-modes/#secure[safe mode level]—maybe you are reading this on GitHub? + +In this mode one cannot `include::[]` files. + +// https://docs.asciidoctor.org/asciidoc/latest/macros/links/ +One can only link to files: link:src/java/Main.java[] +endif::[] + +ifndef::safe-mode-secure[] +[TIP] +==== +Why not use the actual sources with highlighting, line numbers, callouts, and skip the file header? +==== + +// https://docs.asciidoctor.org/asciidoc/latest/blocks/add-title/ +// https://docs.asciidoctor.org/asciidoc/latest/verbatim/source-highlighter/#enable-line-numbering +// https://docs.asciidoctor.org/asciidoc/latest/verbatim/highlight-lines/ +// https://docs.asciidoctor.org/asciidoc/latest/directives/include-lines/ +[source,java,linenums,highlight=4..6] +.src/java/Main.java +---- +include::src/java/Main.java[lines=3..-1] +---- + +// https://docs.asciidoctor.org/asciidoc/latest/verbatim/callouts/ +<1> `// tag::main[]` starts a tag named "main" +<2> `// end::main[]` ends the tag + +Just the method defined with the `main` the tag and fix indentation: + +// https://docs.asciidoctor.org/asciidoc/latest/directives/include-with-indent/ +// https://docs.asciidoctor.org/asciidoc/latest/directives/include-tagged-regions/ +[source,java,indent=0] +---- +include::src/java/Main.java[tags=main] +---- +endif::[] + +== Miscellaneous + +=== Software Documentation + +// https://docs.asciidoctor.org/asciidoc/latest/macros/keyboard-macro/#keyboard-macro-syntax +kbd:[Ctrl+Alt+Delete] + +// https://docs.asciidoctor.org/asciidoc/latest/macros/ui-macros/#button-macro-syntax +Press btn:[OK] + +// https://docs.asciidoctor.org/asciidoc/latest/macros/ui-macros/#menu-macro-syntax +Select menu:File[Export > RAW] + +=== Sidebars + +// https://docs.asciidoctor.org/asciidoc/latest/blocks/sidebars/ +.Delete commented lines with sed +**** +IMPORTANT: Unfortunately, Mac und Linux handle `sed -i` differently: + +.Mac +[source,shell] +---- +sed -i '' '/^[@#]/d' "$file" +---- + +.Linux +[source,shell] +---- +sed -i '/^[@#]/d' "$file" +---- +**** + +=== Anchors + +// https://docs.asciidoctor.org/asciidoc/latest/macros/xref/#internal-cross-references +<> + +ifndef::safe-mode-secure[] + +// https://docs.asciidoctor.org/asciidoc/latest/macros/xref/#explicit-link-text +<> + +// https://docs.asciidoctor.org/asciidoc/latest/directives/include-multiple-times-in-same-document/ +xref:contact-chowe[Cameron Howe] + +xref:contact-jmacmillan[Joe MacMillan] +endif::[] + +== Lists + +// https://docs.asciidoctor.org/asciidoc/latest/lists/ordered/#styles +[decimal] +. numbered + +.. bulleted + +* one +* two + +// https://docs.asciidoctor.org/asciidoctor/latest/html-backend/default-stylesheet/ +// https://docs.asciidoctor.org/asciidoc/latest/macros/url-macro/#link-text +.. with colored symbols ++ +// https://docs.asciidoctor.org/asciidoc/latest/lists/unordered/#custom-markers +[unstyled] +// https://docs.asciidoctor.org/asciidoc/latest/text/custom-inline-styles/ +** [.green]#▲# positive +** ▶︎ neutral +** [.red]#▼# negative +ifdef::safe-mode-secure[] ++ +[NOTE] +==== +Due to the `SECURE` safe mode level (GitHub) stylesheets are not processed. + +That is why ▲ and ▼ are not colored. +==== +endif::[] + +// https://docs.asciidoctor.org/asciidoc/latest/lists/separating/#using-a-line-comment +//- + +[arabic] +. separate two consecutive lists with `//-`. +// https://docs.asciidoctor.org/asciidoc/latest/lists/continuation/#list-continuation ++ +more content for the same item ++ +[source,java] +---- +System.out.println("YAY!"); +---- ++ +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer ut odio augue. Nam tristique rhoncus tortor, vitae sollicitudin risus hendrerit. + +. definition lists + +.. Question/Answer ++ +// https://docs.asciidoctor.org/asciidoc/latest/lists/qanda/ +[qanda] +What is the answer?:: +42 + +Computer says?:: +Is it safe?:: +No. + +.. on next line ++ +// https://docs.asciidoctor.org/asciidoc/latest/lists/description/ +e.g.:: for example ++ +[CAUTION] +==== +Do not confuse with <> +==== +[#abbrev-ie] +i.e.:: that is +et al.:: and others + +.. on same line +// https://docs.asciidoctor.org/asciidoc/latest/lists/horizontal/ +[horizontal] +small:: ++ +// https://docs.asciidoctor.org/asciidoc/latest/macros/image-size/ +image::dragonfly.jpg[,100] + +normal:: ++ +image::dragonfly.jpg[,200] + +large:: ++ +image::dragonfly.jpg[] + +ifndef::safe-mode-secure[] +. includes with parameters ++ +[disc] +// https://docs.asciidoctor.org/asciidoc/latest/directives/include-list-item-content/ +* {empty} ++ +-- +// https://docs.asciidoctor.org/asciidoc/latest/directives/include-multiple-times-in-same-document/ +:contact_id: chowe +:name: Cameron Howe +:email: c.howe@mutiny.com + +include::_includes/contact.adoc[] +-- ++ +* {empty} ++ +-- +:contact_id: jmacmillan +:name: Joe MacMillan +:email: j.macmillan@calnect.com + +include::_includes/contact.adoc[] +-- +endif::[] + +== Tables + +=== Simple + +// https://docs.asciidoctor.org/asciidoc/latest/tables/build-a-basic-table/#add-a-header-row-to-the-table +// https://docs.asciidoctor.org/asciidoc/latest/tables/format-cell-content/ +// https://docs.asciidoctor.org/asciidoc/latest/tables/align-by-cell/#horizontal-operators +[%header,cols="1,^1,>2m"] +|=== + +| First +| Last +| Money ($) + +| Homer +| Simpson +|-12.76 + +| Marge +| Simpson +| 4,538.90 + +|=== + +=== Inline CSV + +// https://docs.asciidoctor.org/asciidoc/latest/tables/striping/ +[stripes=odd] +,=== +1,2,3 +4,5,6 +7,8,9 +,=== + +ifndef::safe-mode-secure[] +=== Included CSV + +// https://docs.asciidoctor.org/asciidoc/latest/tables/data-format/#csv-and-tsv +[%header,format=csv] +|=== +include::src/csv/data.csv[] +|=== +endif::[] + +=== Cell Content + +// https://docs.asciidoctor.org/asciidoc/latest/tables/format-cell-content/#cell-styles-and-their-operators +[cols="1,2a"] +|=== +| Col 1 | Col 2 + +// https://docs.asciidoctor.org/asciidoc/latest/tables/align-by-cell/#vertical-operators +.>| Source Code +| + +[source,java] +---- +List collectorCollection = + productList.stream().map(Product::getName).collect(Collectors.toList()); +---- + +.^| List +| + +. one +. two +.. two-one +. three + +.<| Table in Table +| + +[cols="2,1a"] +!=== +! Col1 ! Col2 + +! C11 +! C12 + +!=== + +|=== + +== Diagrams + +ifdef::safe-mode-secure[] +Due to the `SECURE` safe mode level (GitHub) diagrams will not be rendered. + +Use the link:../../../../README.adoc#asciidoc-html-build-example[asciidoc-html-build] script to see them in their full glory. + +endif::[] + +ifndef::safe-mode-secure[] + +[#mindmap] +=== MindMap + +// https://docs.asciidoctor.org/diagram-extension/latest/diagram_types/plantuml/ +[plantuml,diagram-mindmap,svg] +.... +@startmindmap + +* Colors +**[#lightgreen] Green + +left side + +**[#ffbbcc] Rose + +right side + +**[#lightblue] Blue + +@endmindmap +.... + +https://plantuml.com/mindmap-diagram[MindMap] + +=== Class Diagram + +[plantuml,diagram-classes,svg] +.... +@startuml + +hide members +hide circle + +interface Repository <> +abstract AbstractDbRepository +class FileRepository +class SQLiteRepository +class PostgreSQLRepository + +Repository <|-- AbstractDbRepository +Repository <|-- FileRepository +AbstractDbRepository <|-- PostgreSQLRepository +AbstractDbRepository <|-- SQLiteRepository + +@enduml +.... + +https://plantuml.com/class-diagram[Class Diagram] + +=== Sequence Diagram + +[plantuml,diagram-sequence,svg] +.... +@startuml + +skinparam responseMessageBelowArrow true + +autonumber + +Alice -> Bob: Wassup? +... +...5 minutes later... +... +Alice <- Bob: AAK + +@enduml +.... + +https://plantuml.com/sequence-diagram[Sequence Diagram] + +=== Activity Diagram + +[plantuml,diagram-activity,svg] +.... +@startuml + +start +if (condition A) then (yes) + :Text 1; +elseif (condition B) then (yes) + fork + :A; + fork again + :B; + end fork {or} + :Text 2; + end +else (no) + fork + :C; + fork again + :D; + end merge + :Text 3; +endif +:Text 4; +stop + +@enduml +.... + +https://plantuml.com/activity-diagram-beta[Activity Diagram] + +[#c4-diagram] +=== C4 Diagram + +[plantuml,diagram-c4,svg] +---- +@startuml + +!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Context.puml + +HIDE_STEREOTYPE() + +Person(s, "Support") +Person(c, "Customer") + +System(t, "Test System") +System(p, "Prod System") +SystemDb_Ext(i, "Issue Tracker") + +Rel(s, i, "Uses", "https") +Rel(s, t, "Uses", "https") +Rel_L(s, p, "Uses", "https") + +Rel_R(c, p, "Uses", "https") +Rel(c, i, "Uses", "https") + +@enduml +---- + +https://github.com/plantuml-stdlib/C4-PlantUML?tab=readme-ov-file#system-context--system-landscape-diagrams[C4-PlantUML] + +=== Tree Diagram + +[plantuml,diagram-tree,svg] +.... +@startuml + +skinparam Legend { + BackgroundColor transparent + BorderColor transparent +} +legend +Root +|_ 1 + |_ a + |_ b +|_ 2 + |_ a +end legend + +@enduml +.... + +=== Math Diagrams + +[cols=".^1a,.^1a"] +|=== + +| + +[plantuml,diagram-math1,svg] +.... +@startmath +f(t)=(a_0)/2 + sum_(n=1)^ooa_ncos((npit)/L)+sum_(n=1)^oo b_n\ sin((npit)/L) +@endmath +.... + +| + +[plantuml,diagram-math2,svg] +.... +@startmath +[[a,b\],[c,d\]\]((n),(k)) +@endmath +.... + +|=== + +https://plantuml.com/ascii-math[Math Diagram] + +=== Gantt Diagrams + +// https://docs.asciidoctor.org/asciidoc/latest/macros/image-position/#positioning-attributes +[plantuml,diagram-gant1,svg,align="center"] +.... +@startgantt + +hide footbox + +saturday are closed +sunday are closed + +Project starts 2024-09-16 +Print between 2024-09-16 and 2024-10-25 + +[Review 1] as [R1] happens at 2024-09-25 +[Review 2] as [R2] happens on 14 days after [R1]'s end +[Review 3] as [R3] happens on 14 days after [R2]'s end + +@endgantt +.... + +// https://docs.asciidoctor.org/asciidoc/latest/macros/image-size/#width-and-height-attributes +[plantuml,diagram-gant2,svg,align="center",width=560] +.... +@startgantt + +language de + +hide footbox + +saturday are closed +sunday are closed + +Project starts 2024-09-16 +Print between 2024-09-16 and 2024-10-25 + +[Review 1] as [R1] happens at 2024-09-25 +[Review 2] as [R2] happens on 14 days after [R1]'s end +[Review 3] as [R3] happens on 14 days after [R2]'s end + +@endgantt +.... + +[plantuml,diagram-gant3,svg,align="center"] +.... +@startgantt + + + +hide footbox + +[Task1] as [T1] requires 4 days +[T1] is colored in Orange + +then [Task2] as [T2] requires 6 days +[T2] is colored in Orange + +-- Phase 2 -- + +then [Task3] as [T3] requires 10 days +[T3] is colored in Orange + +[Task4] as [T4] requires 5 day + +[T2] -> [T4] + +-- Phase 3 -- + +[Task 6] as [T6] requires 4 days +[T6] is colored in Orange +[T3] -> [T6] + +legend +|= Color |= Task Type | +|<#Orange>| Critical Path | +end legend + +@endgantt +.... + +https://plantuml.com/gantt-diagram[Gantt Diagram] + +endif::[] diff --git a/scripts/asciidoc/example-html/src/src/csv/data.csv b/scripts/asciidoc/example-html/src/src/csv/data.csv new file mode 100644 index 000000000..f11ba0a41 --- /dev/null +++ b/scripts/asciidoc/example-html/src/src/csv/data.csv @@ -0,0 +1,4 @@ +Height,Weight +15,23.4 +17,26.7 +23,45 diff --git a/scripts/asciidoc/example-html/src/src/java/Main.java b/scripts/asciidoc/example-html/src/src/java/Main.java new file mode 100644 index 000000000..b7b42f780 --- /dev/null +++ b/scripts/asciidoc/example-html/src/src/java/Main.java @@ -0,0 +1,10 @@ +// SPDX-FileCopyrightText: © 2024 Sebastian Davids +// SPDX-License-Identifier: Apache-2.0 + +class Main { + // tag::main[] <1> + void main() { + System.out.println("Hello, World!"); + } + // end::main[] <2> +}