diff options
author | Sebastien Douheret <sebastien.douheret@iot.bzh> | 2017-06-19 11:40:32 +0200 |
---|---|---|
committer | Sebastien Douheret <sebastien.douheret@iot.bzh> | 2017-06-19 16:19:39 +0200 |
commit | c826c6662dc83633aac0ce1622e4a91b4c8100e3 (patch) | |
tree | ca440d402ada8e3ae7acad1fe3d876ad3a0259ff | |
parent | f6bc48698587758fb764bae66302002fe148e978 (diff) |
Add gitbook documentation (support PDF generation).
To generate PDF doc:
./gendocs.sh pdf
To generate HTML doc (local webserver):
./gendocs.sh serve
Change-Id: I77156a45e86f3bcab045cee05694f93b7a50e4ba
Signed-off-by: Sebastien Douheret <sebastien.douheret@iot.bzh>
-rw-r--r-- | .gitignore | 4 | ||||
-rw-r--r-- | book.json | 93 | ||||
l--------- | docs/README.md (renamed from docs/index.md) | 0 | ||||
-rw-r--r-- | docs/SUMMARY.md | 12 | ||||
-rw-r--r-- | docs/_layouts/ebook/page.html | 36 | ||||
-rw-r--r-- | docs/_layouts/ebook/pdf_footer.html | 13 | ||||
-rw-r--r-- | docs/_layouts/ebook/pdf_header.html | 13 | ||||
-rw-r--r-- | docs/_layouts/ebook/summary.html | 58 | ||||
-rw-r--r-- | docs/_layouts/layout.html | 28 | ||||
-rw-r--r-- | docs/annexes.md | 5 | ||||
-rwxr-xr-x | docs/cover.jpg | bin | 0 -> 261451 bytes | |||
-rw-r--r-- | docs/cover_small.jpg | bin | 0 -> 18093 bytes | |||
-rw-r--r-- | docs/resources/cover.svg | 212 | ||||
-rw-r--r-- | docs/resources/ebook.css | 386 | ||||
-rwxr-xr-x | docs/resources/make_cover.sh | 26 | ||||
-rwxr-xr-x | gendocs.sh | 75 |
16 files changed, 960 insertions, 1 deletions
@@ -1,6 +1,6 @@ amixer autom4te.cache -config.log +config.log build/* dist/* !.gitignore @@ -13,3 +13,5 @@ cmake_install.cmake *.so .vscode stress-out* +node_modules/ +_book/
\ No newline at end of file diff --git a/book.json b/book.json new file mode 100644 index 00000000..6699c67b --- /dev/null +++ b/book.json @@ -0,0 +1,93 @@ +{ + "title": "Application Framework Binder", + "description": "Application Framework Binder of Automotive Grade Linux", + "keywords": "AGL, Development, application, framework, binder", + "author": "IoT.Bzh Team", + "website": "http://iot.bzh", + "published": "June 2017", + "version": "4.0", + + "gitbook": "3.2.2", + "root": "docs", + "pdf": { + "fontFamily": "Verdana", + "fontSize": 12, + "paperSize": "a4", + "pageBreaksBefore": "//h:div[@class=\"page-break\"]" + }, + "styles": { + "website": "resources/ebook.css", + "ebook": "resources/ebook.css", + "pdf": "resources/ebook.css" + }, + + "hidepageheaders": [2, 3], + "hidepagefooters": [2, 3], + + "plugins": [ + "regexplace" + ], + "pluginsConfig": { + "regexplace": { + "removeFirstPartsInSectionNumber": true, + "substitutes": [{ + "pattern": "<!-- pagebreak -->", + "flags": "g", + "substitute": "<div class=\"page-break\"></div>" + }, + { + "pattern": "<!-- clear -->", + "flags": "g", + "substitute": "<div class=\"clear\"></div>" + }, + { + "pattern": "<!-- nopagebreak -->", + "flags": "g", + "substitute": "<div class=\"nopb\">" + }, + { + "pattern": "<!-- endnopagebreak -->", + "flags": "g", + "substitute": "</div>" + }, + { + "pattern": "<!-- note -->", + "flags": "g", + "substitute": "<div class=\"note\">" + }, + { + "pattern": "<!-- endnote -->", + "flags": "g", + "substitute": "</div>" + }, + { + "pattern": "!\\[(.*?)\\]\\((.*?)(?:\\s+\"(.*)\")?\\){0,}{caption=1([^\\}]*)}", + "flags": "gmi", + "substitute": "<figure id=\"fig_PAGE_LEVEL_._INDEX_\"><img $3 alt=\"$1\" title=\"$1\" href=\"$2\"><figcaption></figcaption></figure>", + "decode": true + }, + { + "pattern": "<img ([^>]*) {0,}\/{0,}> {0,}{caption=1([^\\}]*)}", + "flags": "g", + "substitute": "<figure id=\"fig_PAGE_LEVEL_._INDEX_\"><img $2 $1><figcaption></figcaption></figure>", + "decode": true + }, + { + "pattern": "<img (.*)alt=\"([^\"]*)\"(.*) {0,1}\/{0,1}><figcaption></figcaption>", + "flags": "g", + "substitute": "<img$1alt=\"$2\"$3><figcaption><span>Picture _PAGE_LEVEL_._INDEX_</span>: $2</figcaption>", + "store": { + "substitute": "<a href=\"_PAGE_PATH_#fig_PAGE_LEVEL_._INDEX_\">Pic. _PAGE_LEVEL_._INDEX_</a> <span>$2</span>", + "variable_name": "pictures" + } + }, + { + "pattern": "<img ([^>]*)> {0,}{style {1,}([^}]*)}", + "flags": "g", + "substitute": "<img $1 style=\"$2\">", + "decode": true + } + ] + } + } +} diff --git a/docs/index.md b/docs/README.md index 81c25433..81c25433 120000 --- a/docs/index.md +++ b/docs/README.md diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md new file mode 100644 index 00000000..827e0031 --- /dev/null +++ b/docs/SUMMARY.md @@ -0,0 +1,12 @@ +# Summary + +* [Overview](README.md) +* [How to write a binding ?](afb-binding-writing.md) +* [Binding references](afb-binding-references.md) +* [Migration from v1 to v2](afb-migration-v1-to-v2.md) +* [Binder events guide](afb-events-guide.md) +* [Binder Application writing guide](afb-application-writing.md) +* [Binder daemon vocabulary](afb-daemon-vocabulary.md) +* [Annexes](annexes.md) + * [Installing the binder on a desktop](afb-desktop-package.md) + * [Options of afb-daemon](afb-daemon-options.md)
\ No newline at end of file diff --git a/docs/_layouts/ebook/page.html b/docs/_layouts/ebook/page.html new file mode 100644 index 00000000..bf325e9b --- /dev/null +++ b/docs/_layouts/ebook/page.html @@ -0,0 +1,36 @@ +{% extends "layout.html" %} + +{% block title %}{{ page.title }}{% endblock %} +{% block description %}{{ page.description }}{% endblock %} + +{% block style %} + {### Include theme css before plugins css ###} + {% if not fileExists(config.styles.print) %} + {% if options.format %} + <link rel="stylesheet" href="{{ (options.format + ".css")|resolveAsset }}"> + {% else %} + <link rel="stylesheet" href="{{ "ebook.css"|resolveAsset }}"> + {% endif %} + {% endif %} + + {{ super() }} + + {### Custom stylesheets for the book ###} + + {% for type, style in config.styles %} + {% if fileExists(style) and (type == "ebook" or type == "print" or type == options.format) %} + <link rel="stylesheet" href="{{ style|resolveFile }}"> + {% endif %} + {% endfor %} +{% endblock %} + +{% block body %} +<div class="page"> + {% block page %} + <h1 class="book-chapter book-chapter-{{ page.depth }}">{{ page.title }}</h1> + <div class="section"> + {{ page.content|safe }} + </div> + {% endblock %} +</div> +{% endblock %} diff --git a/docs/_layouts/ebook/pdf_footer.html b/docs/_layouts/ebook/pdf_footer.html new file mode 100644 index 00000000..679e5628 --- /dev/null +++ b/docs/_layouts/ebook/pdf_footer.html @@ -0,0 +1,13 @@ +{% extends "./page.html" %} +{% block body %} +<div id="pdf-footer" class="pdf-footer"> + <span class="footer-left">Version {{ config.version }}</span> + <span class="footer-right">{{ page.num }}</span> + <span class="footer-center">{{ config.published }}</span> +</div> + +<!-- Allow to hide footer for some pages using hidepagefooters config in book.json --> +<script> + if (({% for num in config.hidepagefooters %}{{ page.num }} == {{ num }} || {% endfor %}false)) document.getElementById('pdf-footer').style.display = 'none' +</script> +{% endblock %} diff --git a/docs/_layouts/ebook/pdf_header.html b/docs/_layouts/ebook/pdf_header.html new file mode 100644 index 00000000..ef496410 --- /dev/null +++ b/docs/_layouts/ebook/pdf_header.html @@ -0,0 +1,13 @@ +{% extends "./page.html" %} +{% block body %} +<div id="pdf-header" class="pdf-header"> + <span class="header-left">IoT.Bzh</span> + <span class="header-right">{{ config.title }}</span> +</div> + +<!-- Allow to hide header for some pages using hidepageheaders config in book.json --> +<script> + if (({% for num in config.hidepageheaders %}{{ page.num }} == {{ num }} || {% endfor %}false)) document.getElementById('pdf-header').style.display = 'none' +</script> + +{% endblock %}
\ No newline at end of file diff --git a/docs/_layouts/ebook/summary.html b/docs/_layouts/ebook/summary.html new file mode 100644 index 00000000..be328a42 --- /dev/null +++ b/docs/_layouts/ebook/summary.html @@ -0,0 +1,58 @@ +{% extends "./page.html" %} + +{% block title %}{{ "SUMMARY"|t }}{% endblock %} + +{% macro articles(_articles) %} + {% for article in _articles %} + <li> + <span class="inner"> + {% if article.path or article.url %} + {% if article.path %} + <a href="{{ article.path|contentURL }}{{ article.anchor }}">{{ article.title }}</a> + {% else %} + <a target="_blank" href="{{ article.url }}">{{ article.title }}</a> + {% endif %} + {% else %} + <span>{{ article.title }}</span> + {% endif %} + {% if 1 %} + <span class="page">{{ article.level }}</span> + {% endif %} + </span> + {% if article.articles.length > 0 %} + <ol> + {{ articles(article.articles) }} + </ol> + {% endif %} + </li> + {% endfor %} +{% endmacro %} + +{% block page %} +<div class="section toc"> + <h1>{{ "SUMMARY"|t }}</h1> + <ol> + {% for part in summary.parts %} + {% if part.title %} + <li class="part-title"> + <h2>{{ part.title }}</h2> + </li> + {% endif %} + {{ articles(part.articles) }} + + {% if not loop.last %} + <li class="divider"></li> + {% endif %} + {% endfor %} + + {% if glossary.path %} + <li> + <span class="inner"> + <a href="{{ ('/' + glossary.path)|contentURL }}">{{ "GLOSSARY"|t }}</a> + </span> + </li> + {% endif %} + </ol> +</div> +{% endblock %} + diff --git a/docs/_layouts/layout.html b/docs/_layouts/layout.html new file mode 100644 index 00000000..3d5aca60 --- /dev/null +++ b/docs/_layouts/layout.html @@ -0,0 +1,28 @@ +<!DOCTYPE HTML> +<html lang="{{ config.language }}" {% if page.dir == "rtl" %}dir="rtl"{% endif %}> + <head> + <meta charset="UTF-8"> + <meta content="text/html; charset=utf-8" http-equiv="Content-Type"> + <title>{% block title %}{{ config.title|d("GitBook", true) }}{% endblock %}</title> + <meta http-equiv="X-UA-Compatible" content="IE=edge" /> + <meta name="description" content="{% block description %}{% endblock %}"> + <meta name="generator" content="GitBook {{ gitbook.version }}"> + {% if config.author %}<meta name="author" content="{{ config.author }}">{% endif %} + {% if config.isbn %}<meta name="identifier" content="{{ config.isbn }}" scheme="ISBN">{% endif %} + {% block style %} + {% for resource in plugins.resources.css %} + {% if resource.url %} + <link rel="stylesheet" href="{{ resource.url }}"> + {% else %} + <link rel="stylesheet" href="{{ resource.path|resolveAsset }}"> + {% endif %} + {% endfor %} + {% endblock %} + + {% block head %}{% endblock %} + </head> + <body> + {% block body %}{% endblock %} + {% block javascript %}{% endblock %} + </body> +</html> diff --git a/docs/annexes.md b/docs/annexes.md new file mode 100644 index 00000000..ea4a0dcf --- /dev/null +++ b/docs/annexes.md @@ -0,0 +1,5 @@ +Annexes +======= + + * [Installing the binder on a desktop](afb-desktop-package.md) + * [Options of afb-daemon](afb-daemon-options.md)
\ No newline at end of file diff --git a/docs/cover.jpg b/docs/cover.jpg Binary files differnew file mode 100755 index 00000000..53e29dae --- /dev/null +++ b/docs/cover.jpg diff --git a/docs/cover_small.jpg b/docs/cover_small.jpg Binary files differnew file mode 100644 index 00000000..8b46a00d --- /dev/null +++ b/docs/cover_small.jpg diff --git a/docs/resources/cover.svg b/docs/resources/cover.svg new file mode 100644 index 00000000..21e9e9f2 --- /dev/null +++ b/docs/resources/cover.svg @@ -0,0 +1,212 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="1800" + height="2360" + viewBox="0 0 1800 2360" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + sodipodi:docname="cover.svg"> + <defs + id="defs4175"> + <filter + style="color-interpolation-filters:sRGB" + inkscape:label="Drop Shadow" + id="filter4000"> + <feFlood + result="flood" + flood-color="rgb(0,0,0)" + flood-opacity="0.475" + id="feFlood4002" /> + <feComposite + result="composite1" + operator="in" + in="flood" + in2="SourceGraphic" + id="feComposite4004" /> + <feGaussianBlur + result="blur" + stdDeviation="5" + id="feGaussianBlur4006" /> + <feOffset + result="offset" + dy="8" + dx="8" + id="feOffset4008" /> + <feComposite + result="composite2" + operator="over" + in="SourceGraphic" + in2="offset" + id="feComposite4010" /> + </filter> + <filter + style="color-interpolation-filters:sRGB" + id="filter4000-6" + inkscape:label="Drop Shadow"> + <feFlood + id="feFlood4002-4" + flood-opacity="0.475" + flood-color="rgb(0,0,0)" + result="flood" /> + <feComposite + id="feComposite4004-6" + in2="SourceGraphic" + in="flood" + operator="in" + result="composite1" /> + <feGaussianBlur + id="feGaussianBlur4006-2" + stdDeviation="5" + result="blur" /> + <feOffset + id="feOffset4008-8" + dx="8" + dy="8" + result="offset" /> + <feComposite + id="feComposite4010-9" + in2="offset" + in="SourceGraphic" + operator="over" + result="composite2" /> + </filter> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="0.24748737" + inkscape:cx="303.38436" + inkscape:cy="1108.7164" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:snap-text-baseline="false" + units="px" + inkscape:window-width="1920" + inkscape:window-height="1171" + inkscape:window-x="1920" + inkscape:window-y="0" + inkscape:window-maximized="1" + showguides="false" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,1307.6379)"> + <g + id="iotbzh-logo" + transform="matrix(2.3917866,0,0,2.3917866,216.6324,-1946.4393)" + inkscape:export-filename="Pictures/Logo/logo_iot_bzh_100dpi.png" + inkscape:export-xdpi="100.22011" + inkscape:export-ydpi="100.22011" + style="display:inline;filter:url(#filter4000-6)"> + <text + sodipodi:linespacing="125%" + id="text3557-5-3-7-0-7-3" + y="519.50671" + x="27.886671" + style="font-style:normal;font-weight:normal;font-size:97.09867096px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none" + xml:space="preserve"><tspan + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:97.09867096px;line-height:125%;font-family:FreeEuro;-inkscape-font-specification:'FreeEuro Bold';text-align:start;writing-mode:lr-tb;text-anchor:start" + y="519.50671" + x="27.886671" + id="tspan3559-5-4-1-5-0-6" + sodipodi:role="line">IOT</tspan></text> + <path + inkscape:connector-curvature="0" + d="m 286.73007,473.23356 c 28.21686,16.29102 28.75566,58.73779 0.99693,78.53831 -7.67688,5.47598 -8.77935,4.91028 -1.99529,-1.0238 17.47377,-15.28453 17.98492,-42.17775 1.08522,-57.09786 l -3.91266,-3.45435 0.72312,-3.71053 c 0.39771,-2.04076 0.5997,-5.73115 0.44885,-8.20083 -0.33876,-5.54623 0.15803,-6.49185 2.65383,-5.05094 z m -64.76568,11.40332 c 7.06047,-7.74198 18.64659,-14.16089 29.04027,-16.08874 l 6.87489,-1.27521 0.87404,2.89709 c 0.4807,1.59343 0.67439,5.2245 0.43037,8.06906 l -0.44364,5.17195 -6.13887,1.6918 c -10.91241,3.00731 -20.4022,10.85909 -25.4533,21.05979 l -2.41633,4.87984 -2.74281,-0.41238 c -5.14252,-0.77316 -12.72985,-3.97645 -12.79123,-5.40033 -0.092,-2.13451 8.34659,-15.74625 12.76661,-20.59287 z m 33.20546,36.39493 c -28.21687,16.29101 -65.24624,-4.46574 -68.51461,-38.40577 -0.9039,-9.38637 0.13723,-10.0583 1.88428,-1.21608 4.49989,22.77499 27.53453,36.66428 48.90556,29.48876 l 4.94788,-1.66128 2.85184,2.48149 c 1.56852,1.36481 4.66349,3.38493 6.87772,4.48914 4.97257,2.47973 5.54308,3.38282 3.04733,4.82374 z m 22.50729,-61.79039 c 3.17451,9.98553 2.94038,23.22889 -0.58688,33.19399 l -2.33309,6.59143 -2.94597,-0.69161 c -1.6203,-0.38041 -4.86173,-2.02821 -7.2032,-3.6618 l -4.25721,-2.97018 1.60429,-6.16234 c 2.85178,-10.95404 0.79685,-23.09833 -5.51167,-32.57307 l -3.01788,-4.53253 1.72854,-2.16916 c 3.24083,-4.06698 9.80863,-9.03614 11.07242,-8.37738 1.89457,0.98756 9.46336,15.1015 11.45065,21.35265 z m -48.80223,10.31437 c 0,-32.58201 36.49058,-54.27201 67.51771,-40.1325 8.58077,3.9104 8.6421,5.148 0.11108,2.23988 -21.97368,-7.49048 -45.51946,5.51348 -49.99082,27.6091 l -1.03521,5.11561 -3.57498,1.22902 c -1.96621,0.67596 -5.26316,2.34622 -7.32655,3.71171 -4.63379,3.06649 -5.70115,3.10904 -5.70115,0.22718 z m 42.25842,50.3871 c -10.23499,-2.24356 -21.58699,-9.06801 -28.45341,-17.10525 l -4.5418,-5.31622 2.07194,-2.20549 c 1.13957,-1.21302 4.18733,-3.19628 6.77282,-4.40726 l 4.70085,-2.20176 4.53458,4.47053 c 8.06061,7.94674 19.60535,12.23927 30.96496,11.51329 l 5.43422,-0.34731 1.01427,2.58154 c 1.90169,4.84014 2.92124,13.01261 1.71883,13.77769 -1.80254,1.14695 -17.80995,0.64475 -24.21726,-0.75976 z" + style="display:inline;fill:#5a2ca0" + id="path3415-4-2-2-5-0-3-7-4-4-1-5" /> + <text + sodipodi:linespacing="125%" + id="text3557-5-3-7-46-7-3-7" + y="519.50671" + x="317.95816" + style="font-style:normal;font-weight:normal;font-size:97.09867096px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none" + xml:space="preserve"><tspan + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:97.09867096px;line-height:125%;font-family:FreeEuro;-inkscape-font-specification:'FreeEuro Bold';text-align:start;writing-mode:lr-tb;text-anchor:start" + y="519.50671" + x="317.95816" + id="tspan3559-5-4-1-90-0-2-9" + sodipodi:role="line">BZH</tspan></text> + </g> + <flowRoot + xml:space="preserve" + id="root-title" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;line-height:125%;font-family:Verdana;-inkscape-font-specification:'Verdana, Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + transform="matrix(2.3469382,0,0,2.3469382,464.13874,-1125.3671)"><flowRegion + id="flowRegion4303"><rect + id="rect4305" + width="679.99994" + height="141.42853" + x="-154.28572" + y="359.50504" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;line-height:125%;font-family:Verdana;-inkscape-font-specification:'Verdana, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1" /></flowRegion><flowPara + id="title" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:87.5px;line-height:125%;font-family:Verdana;-inkscape-font-specification:'Verdana, Bold';text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1">{title}</flowPara></flowRoot> <flowRoot + xml:space="preserve" + id="root-subtitle" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;line-height:125%;font-family:Verdana;-inkscape-font-specification:'Verdana, Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + transform="matrix(1.8523279,0,0,1.8523279,553.97647,-524.84064)"><flowRegion + id="flowRegion4303-6"><rect + id="rect4305-0" + width="852.32806" + height="154.51677" + x="-239.3591" + y="346.41681" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;line-height:125%;font-family:Verdana;-inkscape-font-specification:'Verdana, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1" /></flowRegion><flowPara + id="subtitle" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:62.5px;line-height:125%;font-family:Verdana;-inkscape-font-specification:'Verdana, Bold';text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1">{subtitle}</flowPara></flowRoot> <flowRoot + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:173.28189087px;line-height:125%;font-family:Verdana;-inkscape-font-specification:'Verdana, Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + id="root-version" + xml:space="preserve" + transform="translate(-2.0185547,164)"><flowRegion + id="flowRegion4169"><rect + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:173.28189087px;line-height:125%;font-family:Verdana;-inkscape-font-specification:'Verdana, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1" + y="501.68909" + x="343.32947" + height="99.591171" + width="1117.3768" + id="rect4171" /></flowRegion><flowPara + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:68.75px;line-height:125%;font-family:Verdana;-inkscape-font-specification:'Verdana, Bold';text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1" + id="version">{version}</flowPara></flowRoot> <flowRoot + xml:space="preserve" + id="root-date" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;line-height:125%;font-family:Verdana;-inkscape-font-specification:'Verdana, Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + transform="matrix(4.3320472,0,0,4.3320472,1023.8272,-788.11995)"><flowRegion + id="flowRegion4303-6-5"><rect + id="rect4305-0-8" + width="251.40364" + height="23.922138" + x="-154.28572" + y="359.50504" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;line-height:125%;font-family:Verdana;-inkscape-font-specification:'Verdana, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1" /></flowRegion><flowPara + id="date" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15.87009525px;line-height:125%;font-family:Verdana;-inkscape-font-specification:'Verdana, Bold';text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1">{date}</flowPara></flowRoot> </g> +</svg> diff --git a/docs/resources/ebook.css b/docs/resources/ebook.css new file mode 100644 index 00000000..39f126c2 --- /dev/null +++ b/docs/resources/ebook.css @@ -0,0 +1,386 @@ +/* IoT.Bzh theaming */ + +h1 { + color: #330066; + border-bottom: 2px solid #330066; +} + +h2 { + color: #330066; +} + +h3 { + color: #330066; +} + +h4 { + color: #330066; +} + + +/* GENERAL ELEMENTS */ + +/* clear both */ + +.clear { + clear: both; +} + +.section> :last-child { + margin-bottom: 0 !important; +} + +.section> :first-child { + margin-top: 0 !important; +} + + +/* SPECIAL ELEMENTS */ + + +/* page break always after element on pdf/print definition */ + +div.pagebreak { + page-break-after: always; +} + + +/* no page break inside element on pdf/print definition */ + +div.nopb { + page-break-inside: avoid !important; + margin: 4px 0 4px 0; +} + + +/* note blocks */ + +div.note { + background: #FCF8E3 none repeat scroll 0% 0%; + color: #8A6D3B; + padding: 15px; + margin-bottom: 10px; + border-bottom: 5px solid #DDD; + border-color: #FAEBCC; + page-break-inside: avoid; +} + +div.note p { + padding-bottom: 0; + margin-bottom: 0; +} + + +/* images, figures and captions */ + +p img { + /* center all images */ + display: block; + margin: 0 auto; + padding: 10px 0; +} + +figure { + margin: 1.0em 0px; + padding: 10px 0; + text-align: center; + page-break-inside: avoid; + display: block; +} + +figure img { + display: block; + margin: 0 auto; +} + +figcaption { + clear: left; + margin: 1.0em 0 0 0; + text-align: center; + font-style: italic; + line-height: 1.5em; + font-size: 80%; + color: #666; + display: block; +} + +.page .section p img { + margin-top: 10px; +} + + +/* ul, ol list margin fix */ + +.page .section ol, +.page .section ul { + margin-bottom: 10px; +} + + +/* blockquotes */ + +.page .section blockquote { + margin: 0 0 0 5%; + font-style: italic; +} + + +/* PAGE SPECIFIC */ + + +/* set summary page to right side of the paper */ + +.page .toc h1 { + page-break-before: right; +} + +.page .section.toc { + page-break-inside: always; +} + +/* table headers */ + +div#README\.md table { + margin-top: 30px; + font-size: 95%; +} + +div#README\.md table thead { + display: none; +} + + + +/* CITATION AND IMAGES */ + + +/* math image styles */ + +.page .section p img.svg, +.page .section p img.png { + margin-top: 0px; + margin-bottom: -2px; +} + +.page .section p img.math { + vertical-align: middle; + height: auto; + width: auto; + margin-top: -4px; + max-height: 15px; +} + +.page .section p img.math.line1 { + margin-top: -7px; + max-height: 19px; +} + +.page .section p img.math.line2 { + margin-top: -1px; + max-height: 30px; +} + + +/* credits page */ + +.page .section ul.pictures { + margin-left: -30px; +} + +.page .section ul.pictures li { + list-style: outside none none; +} + +.page .section ul.pictures li a { + float: left; +} + +.page .section ul.pictures li span { + display: block; + margin-left: 100px; +} + + + +/* sub and super script */ + +.page .section sub { + font-size: 80%; + margin-left: 1px; +} + + +/* citations and references */ + +.page .section sup { + margin-left: -1px; + margin-right: 2px; + font-size: 80%; +} + +.page .section sup:before { + content: " "; +} + +.page .section ul.citations, +.page .section ul.references { + margin-left: -30px; +} + + +.page .section ul.citations li:nth-child(1) { + margin-top: 20px; + padding-top: 20px; + border-top: 1px solid #BBB; +} + +.page .section ul.citations li, +.page .section ul.references li { + list-style: outside none none; +} + +.page .section ul.citations li { + font-size: 80%; +} + +.page .section ul.citations li>span:nth-child(1), +.page .section ul.references li>span:nth-child(1) { + display: block; + float: left; + text-align: left; + width: 70px +} + +.page .section ul.citations li>span:nth-child(1) { + width: 50px +} + +.page .section ul.references li div { + margin-left: 70px; +} + +.page .section ul.citations li div { + margin-left: 50px; +} + +.page .section a[href="#"], +.page .section a[href="#"]:link, +.page .section a[href="#"]:visited, +.page .section a[href="#"]:hover, +.page .section a[href="#"]:focus { + text-decoration: none; + color: inherit; + cursor: text; + font-style: italic; +} + + +/* self referential footnotes */ + +.page .section div[type="selfref"] a[href="#"], +.page .section div[type="selfref"] a[href="#"]:link, +.page .section div[type="selfref"] a[href="#"]:visited, +.page .section div[type="selfref"] a[href="#"]:hover, +.page .section div[type="selfref"] a[href="#"]:focus { + font-style: normal; +} + +.page .section div[type="selfref"] span:nth-child(1) { + display: none; +} + + +/* page break always after element on pdf/print definition */ + +div.page-break { + page-break-inside: always; +} + +div.page-break:before { + content: ' '; +} + + +/* no page break inside element on pdf/print definition */ + +div.nopb { + page-break-inside: avoid; +} + +/* justify text */ +p { + text-align: justify; +} + +/* page header and footer */ + +.pdf-footer, +.pdf-header { + margin-top: 20px; + color: #aaa; +} + +.pdf-header .header-left { + float: left; + margin-left: 2em; + margin-right: auto; +} + +.pdf-header .header-right { + display: table; + margin-left: auto; + margin-right: 2em; +} + +.pdf-footer .sub { + padding-top: 8px; + font-size: 70%; +} + +.pdf-header .sub { + padding-top: 2px; + font-size: 70%; +} + +.pdf-footer { + padding-top: 10px; + border-top: 1px solid #eee; +} + +.pdf-footer .footer-left { + float: left; + margin-left: 2em; + margin-right: auto; +} + +.pdf-footer .footer-center { + display: table; + margin-left: auto; + margin-right: auto; +} + +.pdf-footer .footer-right { + float: right; + margin-left: auto; + margin-right: 2em; +} + +.pdf-header { + padding-bottom: 10px; + border-bottom: 1px solid #eee; +} + +.pdf-header .header-pages-count { + float: right; + text-align: right; +} + +.pdf-header .header-pages-count a, +.pdf-header .header-pages-count a:visited, +.pdf-header .header-pages-count a:active, +.pdf-header .header-pages-count a:focus, +.pdf-header .header-pages-count a:link { + text-decoration: none; + color: #aaa; + cursor: text; +} diff --git a/docs/resources/make_cover.sh b/docs/resources/make_cover.sh new file mode 100755 index 00000000..13ba4f0c --- /dev/null +++ b/docs/resources/make_cover.sh @@ -0,0 +1,26 @@ +#!/bin/bash +DOCS_DIR=$(cd $(dirname $0)/.. && pwd) +BOOKFILE=$DOCS_DIR/../book.json + +TITLE=$(grep '"title":' $BOOKFILE | cut -d'"' -f 4) +SUBTITLE="" +VERSION="Version $(grep '"version":' $BOOKFILE | cut -d'"' -f 4)" +DATE=$(grep '"published":' $BOOKFILE | cut -d'"' -f 4) + +[ -z "$TITLE" ] && { echo "Error TITLE not set!" ; exit 1; } +[ -z "$VERSION" ] && { echo "Error VERSION not set!" ; exit 1; } +[ -z "$DATE" ] && { echo "Error DATE not set!" ; exit 1; } + + +cat $(dirname $0)/cover.svg | sed -e "s/{title}/$TITLE/g" \ + -e "s/font-size:87.5px/font-size:54px/g" \ + -e "s/{subtitle}/$SUBTITLE/g" \ + -e "s/{version}/$VERSION/g" \ + -e "s/{date}/$DATE/g" \ + > /tmp/cover.svg + +# use imagemagick convert tool (cover size must be 1800x2360) +convert -resize "1600x2160!" -border 100 -bordercolor white -background white \ + -flatten -quality 100 /tmp/cover.svg $DOCS_DIR/cover.jpg + +convert -resize "200x262!" $DOCS_DIR/cover.jpg $DOCS_DIR/cover_small.jpg diff --git a/gendocs.sh b/gendocs.sh new file mode 100755 index 00000000..5aec2a76 --- /dev/null +++ b/gendocs.sh @@ -0,0 +1,75 @@ +#!/bin/bash + +OUTFILENAME="Application-Framework-Binder" + +SCRIPT=$(basename $BASH_SOURCE) + +function usage() { + cat <<EOF >&2 +Usage: $SCRIPT [options] [pdf|serve|doxygen] + +Options: + --debug + enable debug when generating pdf or html documentation + -d|--dry + dry run + -h|--help + get this help + +Example: + $SCRIPT pdf + +EOF + exit 1 +} + +function info() { + echo "$@" >&2 +} + +#default values +DEBUG_FLAG="" +DRY="" +DO_ACTION="" +OUT_DIR=./build + +[[ $? != 0 ]] && usage +while [ $# -gt 0 ]; do + case "$1" in + --debug) DEBUG_FLAG="--log=debug --debug";; + -d|--dry) DRY=echo;; + -h|--help) usage;; + pdf | serve | doxygen) DO_ACTION=$1;; + --) break;; + esac + shift +done + +cd $(dirname $0) +ROOTDIR=`pwd -P` + +# Create out dir if needed +[ -d $OUT_DIR ] || mkdir -p $OUT_DIR + +if [ "$DO_ACTION" = "pdf" -o "$DO_ACTION" = "serve" ]; then + GITBOOK=`which gitbook` + [ "$?" = "1" ] && { echo "You must install gitbook first, using: sudo npm install -g gitbook-cli"; exit 1; } + + EBCONV=`which ebook-convert` + [ "$?" = "1" ] && { echo "You must install calibre first, using: 'sudo apt install calibre' or refer to https://calibre-ebook.com/download"; exit 1; } + + if [ "$DO_ACTION" = "pdf" ]; then + OUTFILE=$OUT_DIR/$OUTFILENAME.pdf + $DRY $GITBOOK pdf $ROOTDIR $OUTFILE $DEBUG_FLAG + [ "$?" = "0" ] && echo "PDF has been successfully generated in $OUTFILE" + else + $DRY $GITBOOK serve $DEBUG_FLAG + fi + +elif [ "$DO_ACTION" = "doxygen" ]; then + $DRY cd $OUT_DIR && cmake .. && make doxygen $ROOTDIR/Doxyfile + +else + echo "Unknown action !" + usage +fi |