← all demos
stylesheet(
default-mode="m:docbook",
exclude-result-prefixes="#all",
version="3.0",
xmlns="http://www.w3.org/1999/xhtml",
xmlns:db="http://docbook.org/ns/docbook",
xmlns:ext="http://docbook.org/extensions/xslt",
xmlns:f="http://docbook.org/ns/docbook/functions",
xmlns:fp="http://docbook.org/ns/docbook/functions/private",
xmlns:h="http://www.w3.org/1999/xhtml",
xmlns:ls="http://docbook.org/ns/docbook/l10n/source",
xmlns:m="http://docbook.org/ns/docbook/modes",
xmlns:v="http://docbook.org/ns/docbook/variables",
xmlns:vp="http://docbook.org/ns/docbook/variables/private",
xmlns:xs="http://www.w3.org/2001/XMLSchema",
xmlns:xsl="http://www.w3.org/1999/XSL/Transform")
as-json := map {'method':'json','indent':true()}
as-xml := map {'method':'xml','indent':true()}
mathml-js-roles as string* := tokenize($mathml-js-role, '\s+')
custom-localizations as document-node()? := ()
localization-base-uri := resolve-uri('../locale/', static-base-uri())
chunk as boolean := not(normalize-space($chunk) = '')
section-toc-depth as integer :=
choose:
when $section-toc-depth instance of xs:integer:
<-- max((0, $section-toc-depth))
when $section-toc-depth castable as xs:integer:
<-- max((0, xs:integer($section-toc-depth)))
when string($section-toc-depth) = 'unbounded':
<-- 2147483647 // 0x7fffffff
else:
<-- 0
debug as string* := tokenize($debug, '[,\s]+') ! normalize-space(.)
verbatim-table-style := tokenize($verbatim-table-style, '\s+')
verbatim-line-style := tokenize($verbatim-line-style, '\s+')
verbatim-plain-style as string* := tokenize($verbatim-plain-style, '\s+')
verbatim-space as node() :=
<- substring($verbatim-space || ' ', 1, 1)
verbatim-numbered-elements as string* := tokenize($verbatim-numbered-elements, '\s+')
verbatim-number-minlines := xs:integer($verbatim-number-minlines)
verbatim-number-every-nth := xs:integer($verbatim-number-every-nth)
verbatim-number-first-line := f:is-true($verbatim-number-first-line)
verbatim-callouts as string* := tokenize($verbatim-callouts, '\s+')
verbatim-syntax-highlight-languages := tokenize($verbatim-syntax-highlight-languages, '\s+')
verbatim-syntax-highlight-options := map { }
verbatim-syntax-highlight-pygments-options := map { }
mediaobject-output-base-uri as string? :=
message(
select="'Mediaobject out. base URI:',
if (empty($mediaobject-output-base-uri))
then ()
else if (ends-with($mediaobject-output-base-uri, '/'))
then $mediaobject-output-base-uri
else $mediaobject-output-base-uri || '/'",
use-when="'mediaobject-uris' = $v:debug")
<-- if (empty($mediaobject-output-base-uri))
then ()
else if (ends-with($mediaobject-output-base-uri, '/'))
then $mediaobject-output-base-uri
else $mediaobject-output-base-uri || '/'
mediaobject-exclude-extensions := tokenize($mediaobject-exclude-extensions, '\s+')
mediaobject-accessibility := tokenize($mediaobject-accessibility, '\s+')
table-accessibility := tokenize($table-accessibility, '\s+')
personal-name-styles := ('first-last', 'last-first', 'FAMILY-given')
formal-object-title-placement as map(xs:string,xs:string) := fp:parse-key-value-pairs(
tokenize($formal-object-title-placement, '\s+'))
formalgroup-nested-object-title-placement as map(xs:string,xs:string) := fp:parse-key-value-pairs(
tokenize($formal-object-title-placement, '\s+'))
mediaobject-details-placement as map(xs:string,xs:string) := fp:parse-key-value-pairs(
tokenize($mediaobject-details-placement, '\s+'))
arg-choice-opt-open-str :=
span(class="cmdpunct") = [
arg-choice-opt-close-str :=
span(class="cmdpunct") = ]
arg-choice-req-open-str :=
span(class="cmdpunct") = {
arg-choice-req-close-str :=
span(class="cmdpunct") = }
arg-choice-plain-open-str :=
arg-choice-plain-close-str :=
arg-choice-def-open-str :=
span(class="cmdpunct") = [
arg-choice-def-close-str :=
span(class="cmdpunct") = ]
arg-rep-repeat-str :=
span(class="cmdpunct") = …
arg-rep-norepeat-str :=
arg-rep-def-str :=
arg-or-sep :=
span(class="cmdpunct") = |
user-css-links := tokenize(normalize-space($user-css-links), '\s+')
cos-number-from := tokenize(normalize-space($cos-number-from), '\s+')
chunk-renumber-footnotes as boolean := f:is-true($chunk-renumber-footnotes)
chunk-filter-namespaces as namespace-node()* :=
namespace(name="db", select="'http://docbook.org/ns/docbook'")
chunk-output-base-uri as anyURI? :=
result as anyURI :=
choose:
when not($chunk-output-base-uri) castable as xs:anyURI:
message(
select="'Error: ' || $chunk-output-base-uri || ' is not valid as $chunk-output-base-uri.'")
when true():
<-- resolve-uri($chunk-output-base-uri, ext:cwd())
when $v:chunk:
<-- xs:anyURI($chunk-output-base-uri)
else:
<-- xs:anyURI($chunk-output-base-uri)
if 'chunks' = $v:debug:
message(select="'Chunk output base uri:', f:flatten-path($result)")
<-- f:flatten-path($result)
admonition-icons :=
tip = ☞
note = ⓘ
important = ☝
caution = ⚠
warning = 🛑
danger = ⚡
annotation-close as element() :=
span = ╳
nominal-page-width := f:parse-length($nominal-page-width)
image-nominal-width := f:parse-length($image-nominal-width)
image-nominal-height := f:parse-length($image-nominal-height)
toc-open as element() :=
img(
alt="[toc]",
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAACXBIWXMAABYlAAAWJQFJUiTwAAABDklEQVQ4je2UUW3EMAyGv0wDUAhlkDBIyuAYXCEclEJoGZRBUgYOgzJoGHgPW6o7rWq35+2TIkWW9duW7N+oKuM46jiOGGMAaNsW5xzee5xzn8EvRESXZUFEWNcVAFWl73v6vjcGUIAYIyEEANZ1RUSY55lSCo/HA4BhGGiahtvthnOOtm0BSCnRdd1eVAGNMeoR27aptVattbpt22FOjFGrzjsX1I7q/4q3y4xf8i/4FwT3Pcw5Y4zBWvujfQMopZBzJuf8XbCeVyWEgHOO+/2+x0SEaZpIKSEih0X2Wz6jdlxKuezaqL7qpZS0lLKbw/M4ANba3RyapiGE8OJGqOrpizGq916999VATvM/AGFn1sxsVjL5AAAAAElFTkSuQmCC")
toc-close as element() :=
img(
alt="X",
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAtklEQVQ4jaWT0Q3DIAxEz52AEbyB2cDZhBEY3SNcPyqqBEwqpZaQAHNP5jBCEiJCPAiSIgAeiUe8zoveO9x9e9jd0XtfKwHA1hpHtNY49rO8u59zn4mqMiJSyFkcEVTVFQCAtdYFMotrrXN111JnyA/xCsggN2JeXmGEmaGU8l2XUmBm29fZuh0RW2PTK2SGZcamADPb3nmGmNkKOI7j1rAzJG2kcWhqkstQ1QX+/2ciKU/FJOUN6JFZYWpmK3sAAAAASUVORK5CYII=")
pagetoc-elements as string* := tokenize($pagetoc-elements, '\s+')
olinkdb := false()
olink-databases as element(h:targetdb)* :=
if normalize-space($olink-databases) != '':
foreach tokenize($olink-databases, ',\s*') ! normalize-space(.):
db := resolve-uri(., static-base-uri())
try
olinkdb := doc($db)/h:targetdb
if empty($olinkdb):
message(select="'No targets in olinkdb:', $db")
<-- $olinkdb
catch
message(select="'Failed to load olinkdb:', $db")
theme-list as element()* :=
theme(dark="true", id="materials-dark", name="Materials dark")
theme(dark="false", id="materials-light", name="Materials light")
random-prefix as string :=
chars := ('a','b','c','d','e','f','_','_','_','1','2','3','4','5','6')
<-- string-join(random-number-generator()?permute($chars), '')
js-controls as element()* :=
random := $vp:random-prefix
span(class="controls-open") = ☰
div(class="js-controls-wrapper")
if $v:theme-list[@dark='true']:
@db-dark-theme
div(class="js-controls-body")
div(class="js-controls-header")
div(class="js-controls-close") = ╳
div(class="js-controls-title")
"Settings"
div(class="js-controls-content")
fieldset(class="js-controls-toggles", db-random="{$random}")
legend = Select options:
input(id="db-js-annotations_{$random}", type="checkbox", value="js")
label(for="db-js-annotations_{$random}") = JavaScript annotations
br
input(id="db-js-xlinks_{$random}", type="checkbox", value="js")
label(for="db-js-xlinks_{$random}") = JavaScript extended links
br
div(class="js-controls-reload", id="db-js-controls-reload_{$random}")
fieldset
legend = Choose a theme:
input(id="db-default-theme_{$random}", name="db-theme", type="radio", value="default")
label(for="db-default-theme_{$random}") = Default
br
foreach $v:theme-list:
input(id="db-theme-{@id}-{$random}", name="db-theme", type="radio", value="{@id}")
label(for="db-theme-{@id}-{$random}")
<-- @name/string()
br
div(class="js-controls-buttons")
button(id="js-controls-cancel") = ✗
button(id="js-controls-ok") = ✓
highlight-js-head-elements as element()* :=
link(href="{fp:add-resource-base-uri('css/highlight-11.10.0.min.css')}", rel="stylesheet")
script(src="{fp:add-resource-base-uri('js/highlight-11.10.0.min.js')}")
choose:
when f:is-true($verbatim-embellish-linenumbers):
script(src="{fp:add-resource-base-uri('js/highlightjs-line-numbers-2.9.0.min.js')}")
script = hljs.configure({languages:[]}); hljs.highlightAll(); hljs.initLineNumbersOnLoad();
else:
script = hljs.configure({languages:[]}); hljs.highlightAll();
prism-js-head-elements as element()* :=
link(href="{fp:add-resource-base-uri('css/prism.css')}", rel="stylesheet")
script(src="{fp:add-resource-base-uri('js/prism.js')}")
media-type-default as string := 'application/octet-stream'
media-type-map as map(xs:string, xs:string) :=
map
map-entry(key="'.aac'", select="'audio/aac'")
map-entry(key="'.abw'", select="'application/x-abiword'")
map-entry(key="'.arc'", select="'application/x-freearc'")
map-entry(key="'.avif'", select="'image/avif'")
map-entry(key="'.avi'", select="'video/x-msvideo'")
map-entry(key="'.azw'", select="'application/vnd.amazon.ebook'")
map-entry(key="'.bin'", select="'application/octet-stream'")
map-entry(key="'.bmp'", select="'image/bmp'")
map-entry(key="'.bz'", select="'application/x-bzip'")
map-entry(key="'.bz2'", select="'application/x-bzip2'")
map-entry(key="'.cda'", select="'application/x-cdf'")
map-entry(key="'.csh'", select="'application/x-csh'")
map-entry(key="'.css'", select="'text/css'")
map-entry(key="'.csv'", select="'text/csv'")
map-entry(key="'.doc'", select="'application/msword'")
map-entry(
key="'.docx'",
select="'application/vnd.openxmlformats-officedocument.wordprocessingml.document'")
map-entry(key="'.eot'", select="'application/vnd.ms-fontobject'")
map-entry(key="'.epub'", select="'application/epub+zip'")
map-entry(key="'.gz'", select="'application/gzip'")
map-entry(key="'.gif'", select="'image/gif'")
map-entry(key="'.htm'", select="'text/html'")
map-entry(key="'.html'", select="'text/html'")
map-entry(key="'.ico'", select="'image/vnd.microsoft.icon'")
map-entry(key="'.ics'", select="'text/calendar'")
map-entry(key="'.jar'", select="'application/java-archive'")
map-entry(key="'.jpeg'", select="'image/jpeg'")
map-entry(key="'.jpg'", select="'image/jpeg'")
map-entry(key="'.js'", select="'text/javascript'")
map-entry(key="'.json'", select="'application/json'")
map-entry(key="'.jsonld'", select="'application/ld+json'")
map-entry(key="'.mid'", select="'audio/midi'")
map-entry(key="'.midi'", select="'audio/midi'")
map-entry(key="'.mjs'", select="'text/javascript'")
map-entry(key="'.m3u8'", select="'application/x-mpegURL'")
map-entry(key="'.mp3'", select="'audio/mpeg'")
map-entry(key="'.mp4'", select="'video/mp4'")
map-entry(key="'.mpeg'", select="'video/mpeg'")
map-entry(key="'.mpkg'", select="'application/vnd.apple.installer+xml'")
map-entry(key="'.mov'", select="'video/quicktime'")
map-entry(key="'.odp'", select="'application/vnd.oasis.opendocument.presentation'")
map-entry(key="'.ods'", select="'application/vnd.oasis.opendocument.spreadsheet'")
map-entry(key="'.odt'", select="'application/vnd.oasis.opendocument.text'")
map-entry(key="'.oga'", select="'audio/ogg'")
map-entry(key="'.ogv'", select="'video/ogg'")
map-entry(key="'.ogx'", select="'application/ogg'")
map-entry(key="'.opus'", select="'audio/opus'")
map-entry(key="'.otf'", select="'font/otf'")
map-entry(key="'.png'", select="'image/png'")
map-entry(key="'.pdf'", select="'application/pdf'")
map-entry(key="'.php'", select="'application/x-httpd-php'")
map-entry(key="'.ppt'", select="'application/vnd.ms-powerpoint'")
map-entry(
key="'.pptx'",
select="'application/vnd.openxmlformats-officedocument.presentationml.presentation'")
map-entry(key="'.rar'", select="'application/vnd.rar'")
map-entry(key="'.rtf'", select="'application/rtf'")
map-entry(key="'.sh'", select="'application/x-sh'")
map-entry(key="'.svg'", select="'image/svg'") // not image/svg+xml for epub
map-entry(key="'.tar'", select="'application/x-tar'")
map-entry(key="'.tif'", select="'image/tiff'")
map-entry(key="'.tiff'", select="'image/tiff'")
map-entry(key="'.ts'", select="'video/mp2t'")
map-entry(key="'.ttf'", select="'font/ttf'")
map-entry(key="'.txt'", select="'text/plain'")
map-entry(key="'.text'", select="'text/plain'")
map-entry(key="'.vsd'", select="'application/vnd.visio'")
map-entry(key="'.wav'", select="'audio/wav'")
map-entry(key="'.weba'", select="'audio/webm'")
map-entry(key="'.webm'", select="'video/webm'")
map-entry(key="'.webp'", select="'image/webp'")
map-entry(key="'.wmv'", select="'video/x-ms-wmv'")
map-entry(key="'.woff'", select="'font/woff'")
map-entry(key="'.woff2'", select="'font/woff2'")
map-entry(key="'.xhtml'", select="'application/xhtml+xml'")
map-entry(key="'.xls'", select="'application/vnd.ms-excel'")
map-entry(
key="'.xlsx'",
select="'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'")
map-entry(key="'.xml'", select="'application/xml'")
map-entry(key="'.xul'", select="'application/vnd.mozilla.xul+xml'")
map-entry(key="'.zip'", select="'application/zip'")
map-entry(key="'.7z'", select="'application/x-7z-compressed'")