[{"id":278,"web_url":"https://patchwork.libcamera.org/comment/278/","msgid":"<e5d470e4-7d11-4c3f-5125-4ca0cd248dd1@ideasonboard.com>","date":"2019-01-11T12:11:27","subject":"Re: [libcamera-devel] [PATCH 1/3] Documentation: Add custom theme","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"On 10/01/2019 23:38, Laurent Pinchart wrote:\n> The theme replicates the look and feel of the libcamera.org website.\n> \n\nAcked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> ---\n>  Documentation/conf.py                    |   3 +-\n>  Documentation/theme/footer.html          |  11 +\n>  Documentation/theme/layout.html          | 116 ++++++++++\n>  Documentation/theme/search.html          |  60 +++++\n>  Documentation/theme/static/css/theme.css | 274 +++++++++++++++++++++++\n>  Documentation/theme/static/search.png    | Bin 0 -> 482 bytes\n>  Documentation/theme/theme.conf           |   5 +\n>  7 files changed, 468 insertions(+), 1 deletion(-)\n>  create mode 100644 Documentation/theme/footer.html\n>  create mode 100644 Documentation/theme/layout.html\n>  create mode 100644 Documentation/theme/search.html\n>  create mode 100644 Documentation/theme/static/css/theme.css\n>  create mode 100644 Documentation/theme/static/search.png\n>  create mode 100644 Documentation/theme/theme.conf\n> \n> diff --git a/Documentation/conf.py b/Documentation/conf.py\n> index 770358198f03..70fbd21448a1 100644\n> --- a/Documentation/conf.py\n> +++ b/Documentation/conf.py\n> @@ -74,7 +74,8 @@ pygments_style = None\n>  # The theme to use for HTML and HTML Help pages.  See the documentation for\n>  # a list of builtin themes.\n>  #\n> -html_theme = 'alabaster'\n> +html_theme = 'theme'\n> +html_theme_path = ['.']\n>  \n>  # Theme options are theme-specific and customize the look and feel of a theme\n>  # further.  For a list of options available for each theme, see the\n> diff --git a/Documentation/theme/footer.html b/Documentation/theme/footer.html\n> new file mode 100644\n> index 000000000000..e63e9fb31099\n> --- /dev/null\n> +++ b/Documentation/theme/footer.html\n> @@ -0,0 +1,11 @@\n> +<footer>\n> +  <div id=\"signature\">\n> +    {%- if show_copyright %}\n> +      {%- if hasdoc('copyright') %}\n> +        {% trans path=pathto('copyright'), copyright=copyright|e %}&copy; <a href=\"{{ path }}\">Copyright</a> {{ copyright }}.{% endtrans %}\n> +      {%- else %}\n> +        {% trans copyright=copyright|e %}&copy; Copyright {{ copyright }}.{% endtrans %}\n> +      {%- endif %}\n> +    {%- endif %}\n> +  </div>\n> +</footer>\n> diff --git a/Documentation/theme/layout.html b/Documentation/theme/layout.html\n> new file mode 100644\n> index 000000000000..a5cc2776adf5\n> --- /dev/null\n> +++ b/Documentation/theme/layout.html\n> @@ -0,0 +1,116 @@\n> +{# TEMPLATE VAR SETTINGS #}\n> +{%- set url_root = pathto('', 1) %}\n> +{%- if url_root == '#' %}{% set url_root = '' %}{% endif %}\n> +{%- if not embedded and docstitle %}\n> +  {%- set titlesuffix = \" &mdash; \"|safe + docstitle|e %}\n> +{%- else %}\n> +  {%- set titlesuffix = \"\" %}\n> +{%- endif %}\n> +<!DOCTYPE html>\n> +<head>\n> +  <meta charset=\"utf-8\">\n> +  {{ metatags }}\n> +  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n> +  {% block htmltitle %}\n> +  <title>{{ title|striptags|e }}{{ titlesuffix }}</title>\n> +  {% endblock %}\n> +\n> +  {# FAVICON #}\n> +  {% if favicon %}\n> +    <link rel=\"shortcut icon\" href=\"{{ pathto('_static/' + favicon, 1) }}\"/>\n> +  {% endif %}\n> +\n> +  {# CSS #}\n> +\n> +  {# OPENSEARCH #}\n> +  {% if not embedded %}\n> +    {% if use_opensearch %}\n> +      <link rel=\"search\" type=\"application/opensearchdescription+xml\" title=\"{% trans docstitle=docstitle|e %}Search within {{ docstitle }}{% endtrans %}\" href=\"{{ pathto('_static/opensearch.xml', 1) }}\"/>\n> +    {% endif %}\n> +\n> +  {% endif %}\n> +\n> +  {# RTD hosts this file, so just load on non RTD builds #}\n> +  {% if not READTHEDOCS %}\n> +    <link rel=\"stylesheet\" href=\"{{ pathto('_static/' + style, 1) }}\" type=\"text/css\" />\n> +  {% endif %}\n> +\n> +  {% for cssfile in css_files %}\n> +    <link rel=\"stylesheet\" href=\"{{ pathto(cssfile, 1) }}\" type=\"text/css\" />\n> +  {% endfor %}\n> +\n> +  {% for cssfile in extra_css_files %}\n> +    <link rel=\"stylesheet\" href=\"{{ pathto(cssfile, 1) }}\" type=\"text/css\" />\n> +  {% endfor %}\n> +\n> +  {%- block linktags %}\n> +    {%- if hasdoc('about') %}\n> +        <link rel=\"author\" title=\"{{ _('About these documents') }}\"\n> +              href=\"{{ pathto('about') }}\"/>\n> +    {%- endif %}\n> +    {%- if hasdoc('genindex') %}\n> +        <link rel=\"index\" title=\"{{ _('Index') }}\"\n> +              href=\"{{ pathto('genindex') }}\"/>\n> +    {%- endif %}\n> +    {%- if hasdoc('search') %}\n> +        <link rel=\"search\" title=\"{{ _('Search') }}\" href=\"{{ pathto('search') }}\"/>\n> +    {%- endif %}\n> +    {%- if hasdoc('copyright') %}\n> +        <link rel=\"copyright\" title=\"{{ _('Copyright') }}\" href=\"{{ pathto('copyright') }}\"/>\n> +    {%- endif %}\n> +    <link rel=\"top\" title=\"{{ docstitle|e }}\" href=\"{{ pathto('index') }}\"/>\n> +    {%- if parents %}\n> +        <link rel=\"up\" title=\"{{ parents[-1].title|striptags|e }}\" href=\"{{ parents[-1].link|e }}\"/>\n> +    {%- endif %}\n> +    {%- if next %}\n> +        <link rel=\"next\" title=\"{{ next.title|striptags|e }}\" href=\"{{ next.link|e }}\"/>\n> +    {%- endif %}\n> +    {%- if prev %}\n> +        <link rel=\"prev\" title=\"{{ prev.title|striptags|e }}\" href=\"{{ prev.link|e }}\"/>\n> +    {%- endif %}\n> +  {%- endblock %}\n> +  {%- block extrahead %} {% endblock %}\n> +\n> +</head>\n> +\n> +<body role=\"document\">\n> +  <header>\n> +    <div id=\"navbar\">\n> +      <div class=\"navbar-brand\">\n> +        <div class=\"navbar-logo\">   _\n> ++-/ \\-+\n> +| (o) |\n> ++-----+</div>\n> +        <div class=\"navbar-name\"><span class=\"text-light\">lib</span>camera</div>\n> +      </div>\n> +\n> +      <div class=\"navbar\">\n> +        {{ toctree(maxdepth=1) }}\n> +        <div class=\"searchbox\" role=\"search\">\n> +          <form class=\"search\" action=\"{{ pathto('search') }}\" method=\"get\">\n> +            <input type=\"text\" name=\"q\" />\n> +\t    <input type=\"submit\" value=\"Go\" />\n> +            <input type=\"hidden\" name=\"check_keywords\" value=\"yes\" />\n> +            <input type=\"hidden\" name=\"area\" value=\"default\" />\n> +          </form>\n> +        </div>\n> +      </div>\n> +\n> +    </div>\n> +  </header>\n> +\n> +  <div id=\"content\">\n> +    <div class=\"local-toc\">\n> +      <div class=\"toc-title\">Contents</div>\n> +      {{ toc }}\n> +    </div>\n> +\n> +    {# PAGE CONTENT #}\n> +    <div class=\"block\">\n> +      {% block body %}{% endblock %}\n> +    </div>\n> +  </div>\n> +\n> +  {% include \"footer.html\" %}\n> +</body>\n> +</html>\n> diff --git a/Documentation/theme/search.html b/Documentation/theme/search.html\n> new file mode 100644\n> index 000000000000..14d59395df10\n> --- /dev/null\n> +++ b/Documentation/theme/search.html\n> @@ -0,0 +1,60 @@\n> +{#\n> +    basic/search.html\n> +    ~~~~~~~~~~~~~~~~~\n> +\n> +    Template for the search page.\n> +\n> +    :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS.\n> +    :license: BSD, see LICENSE for details.\n> +#}\n> +{%- extends \"layout.html\" %}\n> +{% block extrahead %}\n> +  <script type=\"text/javascript\" id=\"documentation_options\" data-url_root=\"{{ pathto('', 1) }}\" src=\"{{ pathto('_static/documentation_options.js', 1) }}\"></script>\n> +  {%- for scriptfile in script_files %}\n> +  <script type=\"text/javascript\" src=\"{{ pathto(scriptfile, 1) }}\"></script>\n> +  {%- endfor %}\n> +  <script type=\"text/javascript\" src=\"_static/searchtools.js\"></script>\n> +  <script type=\"text/javascript\">\n> +    jQuery(function() { Search.loadIndex(\"{{ pathto('searchindex.js', 1) }}\"); });\n> +  </script>\n> +  {# this is used when loading the search index using $.ajax fails,\n> +     such as on Chrome for documents on localhost #}\n> +  <script type=\"text/javascript\" id=\"searchindexloader\"></script>\n> +{% endblock %}\n> +{% block body %}\n> +  <h1 id=\"search-documentation\">{{ _('Search') }}</h1>\n> +  <div id=\"fallback\" class=\"admonition warning\">\n> +  <script type=\"text/javascript\">$('#fallback').hide();</script>\n> +  <p>\n> +    Please activate JavaScript to enable the search functionality.\n> +  </p>\n> +  </div>\n> +  <p>\n> +    From here you can search these documents. Enter your search\n> +    words into the box below and click \"search\". Note that the search\n> +    function will automatically search for all of the words. Pages\n> +    containing fewer words won't appear in the result list.\n> +  </p>\n> +  <form action=\"\" method=\"get\">\n> +    <input type=\"text\" name=\"q\" value=\"\" />\n> +    <input type=\"submit\" value=\"{{ _('search') }}\" />\n> +    <span id=\"search-progress\" style=\"padding-left: 10px\"></span>\n> +  </form>\n> +  {% if search_performed %}\n> +    <h2>{{ _('Search Results') }}</h2>\n> +    {% if not search_results %}\n> +      <p>{{ _('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\\'ve selected enough categories.') }}</p>\n> +    {% endif %}\n> +  {% endif %}\n> +  <div id=\"search-results\">\n> +  {% if search_results %}\n> +    <ul>\n> +    {% for href, caption, context in search_results %}\n> +      <li><a href=\"{{ pathto(item.href) }}\">{{ caption }}</a>\n> +        <div class=\"context\">{{ context|e }}</div>\n> +      </li>\n> +    {% endfor %}\n> +    </ul>\n> +  {% endif %}\n> +  </div>\n> +{% endblock %}\n> diff --git a/Documentation/theme/static/css/theme.css b/Documentation/theme/static/css/theme.css\n> new file mode 100644\n> index 000000000000..047aff07dddb\n> --- /dev/null\n> +++ b/Documentation/theme/static/css/theme.css\n> @@ -0,0 +1,274 @@\n> +html {\n> +\tbackground-image: linear-gradient(to bottom right, #4895e1, #56c3ae);\n> +\tbackground-size: cover;\n> +\tbackground-repeat: no-repeat;\n> +\tmin-height: 100vh;\n> +}\n> +\n> +body {\n> +\tcolor: rgb(0, 0, 0, 0.5);\n> +\tfont-family: Arial, sans-serif;\n> +\tmargin: 0px;\n> +}\n> +\n> +a {\n> +\tcolor: unset;\n> +\tfont-weight: bold;\n> +\ttext-decoration: underline dotted;\n> +}\n> +\n> +a.headerlink {\n> +\tcolor: rgba(0, 0, 0, 0.2);\n> +\tfont-size: 70%;\n> +\tpadding-left: 5px;\n> +\tvisibility: hidden;\n> +}\n> +\n> +h1:hover a.headerlink,\n> +h2:hover a.headerlink,\n> +h3:hover a.headerlink,\n> +h4:hover a.headerlink,\n> +h5:hover a.headerlink,\n> +h6:hover a.headerlink {\n> +\tvisibility: visible;\n> +}\n> +\n> +dt {\n> +\tfont-weight: bold;\n> +}\n> +\n> +.text-light {\n> +\tcolor: rgba(255, 255, 255, 0.3);\n> +}\n> +\n> +div#navbar {\n> +\tmargin-top: 0px;\n> +}\n> +\n> +div.navbar-brand {\n> +\tcolor: rgb(255, 255, 255, 1.0);\n> +\tfloat: left;\n> +\tfont-size: 36px;\n> +\tmargin: 0px 24px 24px 24px;\n> +}\n> +\n> +div.navbar-logo {\n> +\tfloat: left;\n> +\tfont-family: monospace;\n> +\tfont-size: 18px;\n> +\tfont-weight: bold;\n> +\twhite-space: pre;\n> +}\n> +\n> +div.navbar-name {\n> +\tfloat: left;\n> +\tcolor: rgb(255, 255, 255, 1.0);\n> +\tfont-size: 34px;\n> +\tmargin-top: 31px;\n> +\tmargin-left: 10px;\n> +\tpadding-top: 1px;\n> +}\n> +\n> +div.navbar {\n> +\tfloat: right;\n> +}\n> +\n> +div.navbar p.caption {\n> +\theight: 0px;\n> +\tmargin: 0px;\n> +\tvisibility: hidden;\n> +}\n> +\n> +div.navbar ul {\n> +\tfloat: left;\n> +\tfont-size: 24px;\n> +\tlist-style: none;\n> +\tmargin-top: 42px;\n> +\tmargin-right: 20px;\n> +\tpadding-left: 0px;\n> +}\n> +\n> +div.navbar a {\n> +\tfont-weight: normal;\n> +\ttext-decoration: none;\n> +}\n> +\n> +div.navbar li {\n> +\tfloat: left;\n> +\tmargin-left: 20px;\n> +\tmargin-right: 20px;\n> +\tposition: relative;\n> +}\n> +\n> +div.navbar li a {\n> +\tcolor: rgb(255, 255, 255, 0.5);\n> +\tposition: relative;\n> +}\n> +\n> +div.navbar li a:before {\n> +\tcontent: \"\";\n> +\tposition: absolute;\n> +\twidth: 100%;\n> +\theight: 2px;\n> +\tbottom: 0;\n> +\tleft: 0;\n> +\tbackground-color: rgb(255, 255, 255, 0.5);\n> +\tvisibility: hidden;\n> +\ttransform: scaleX(0);\n> +\ttransition: all 0.3s ease-in-out 0s;\n> +}\n> +\n> +div.navbar li a:hover {\n> +\tcolor: rgb(255, 255, 255, 1.0);\n> +}\n> +\n> +div.navbar li a:hover:before {\n> +\tvisibility: visible;\n> +\ttransform: scaleX(1);\n> +}\n> +\n> +div.navbar li.current a {\n> +\tcolor: rgb(255, 255, 255, 1.0);\n> +}\n> +\n> +div.navbar li.current a:before {\n> +\tvisibility: visible;\n> +\ttransform: unset;\n> +\ttransition: unset;\n> +}\n> +\n> +div.navbar div.searchbox {\n> +\tbackground-color: white;\n> +\tfloat: right;\n> +\tmargin-right: 50px;\n> +\tmargin-top: 42px;\n> +}\n> +\n> +div.navbar input[type=text] {\n> +\tborder-width: 0;\n> +\theight: 2em;\n> +\tmargin-left: 10px;\n> +\tmargin-right: 5px;\n> +}\n> +\n> +div.navbar input[type=submit] {\n> +\tbackground-color: white;\n> +\tbackground-image: url(../search.png);\n> +\tbackground-repeat: no-repeat;\n> +\tborder-width: 0;\n> +\tcolor: rgba(0, 0, 0, 0);\n> +\tmargin-right: 2px;\n> +\twidth: 20px;\n> +}\n> +\n> +div#frontpage {\n> +\tclear: both;\n> +\tpadding-top: 50px;\n> +\tmargin-left: auto;\n> +\tmargin-right: auto;\n> +\twidth: 75%;\n> +\tdisplay: flex;\n> +\tjustify-content: space-between;\n> +}\n> +\n> +div#frontpage > div.block {\n> +\tbackground-color: white;\n> +\tborder-radius: 5px;\n> +\tbox-shadow: 0 4px 16px 0 rgba(0, 0, 0, 0.2), 0 6px 40px 0 rgba(0, 0, 0, 0.19);\n> +\tcolor: rgb(0, 0, 0, 0.5);\n> +\tfont-size: 20px;\n> +\tmargin-bottom: 40px;\n> +\tmargin-right: 20px;\n> +\tmargin-left: 20px;\n> +\tpadding: 20px 60px 20px 60px;\n> +\ttext-align: center;\n> +\twidth: 50%;\n> +}\n> +\n> +div#frontpage > div.block h1 {\n> +\tfont-size: 64px;\n> +\tpadding-left: 20%;\n> +\tpadding-right: 20%;\n> +\ttext-align: center;\n> +\ttext-shadow: 4px 4px 5px;\n> +}\n> +\n> +div#content {\n> +\tbackground-color: white;\n> +\tclear: both;\n> +\tpadding-top: 50px;\n> +\tpadding-bottom: 50px;\n> +\tmargin-left: 0px;\n> +\tmargin-right: 0px;\n> +\toverflow: auto;\n> +}\n> +\n> +div#content > div.block {\n> +\tfont-size: 16px;\n> +\tmargin-right: 0px;\n> +\tmargin-left: 20px;\n> +\tmax-width: 800px;\n> +\tpadding: 20px 60px 0px 60px;\n> +\ttext-align: justify;\n> +\twidth: 70%;\n> +}\n> +\n> +div#content > div.block h1 {\n> +\tcolor: black;\n> +\tfont-size: 40px;\n> +\ttext-align: left;\n> +}\n> +\n> +div.local-toc {\n> +\tfloat: right;\n> +\tbackground-color: #fcfcff;\n> +\tborder: 1px dotted #4896e0;\n> +\tmargin-right: 100px;\n> +\tpadding: 10px 20px 10px 10px;\n> +}\n> +\n> +div.toc-title {\n> +\tfont-weight: bold;\n> +}\n> +\n> +div.local-toc ul {\n> +\tpadding-left: 20px;\n> +\tmargin-bottom: 5px;\n> +}\n> +\n> +div.local-toc a {\n> +\tfont-weight: normal;\n> +\tpadding-left: 10px;\n> +\ttext-decoration: none;\n> +}\n> +\n> +div.highlight-shell > div.highlight > pre,\n> +pre.console {\n> +\tbackground-color: #fcfcff;\n> +\tborder: 1px dotted #4896e0;\n> +\tmargin-left: 0em;\n> +\tpadding: 10px;\n> +\ttext-align: left;\n> +}\n> +\n> +div.highlight-default > div.highlight > pre,\n> +pre.diagram {\n> +\tbackground-color: #fcfcff;\n> +\tborder: 1px dotted #4896e0;\n> +\tfont-size: 12px;\n> +\tmargin-left: 0em;\n> +\tpadding: 10px;\n> +\ttext-align: left;\n> +\twidth: 47em;\n> +}\n> +\n> +div#signature {\n> +\tcolor: rgb(255, 255, 255, 0.5);\n> +\tmargin: 20px;\n> +\tfloat: right;\n> +\tfont-size: 12px;\n> +}\n> +\n> +#libcamera div.toctree-wrapper {\n> +\tvisibility: hidden;\n> +}\n> diff --git a/Documentation/theme/static/search.png b/Documentation/theme/static/search.png\n> new file mode 100644\n> index 0000000000000000000000000000000000000000..a93c40eb08106554488deaed910aba0f5aef5ec5\n> GIT binary patch\n> literal 482\n> zcmV<80UiE{P)<h;3K|Lk000e1NJLTq000mG000mO0ssI2kdbIM00009a7bBm000ie\n> z000ie0hKEb8vp<Slu1NER49>S{Qv(y11W$BjsN}6-{)Vx|M`d06c#vZ@BJ4Ihb|v`\n> z{Q4gQ11Af!uc~y5qrR#TFPa8Mh?6FtzL~%Ctf7Qpw2q<#567){pJ$)D^X1p?EfEg3\n> za$+bt{{R1f{K;#k=A~KNPW}D&?>`KD`0>kj!7kC>HSfRw{Eq|}{{R0UwEB?Fj4jBj\n> zA>iq!ZyasQJC9yP7Gz>zU^w*fRiw586C)#<bESAW9Tmh6KYooKN}qoImf+#Q8YU7v\n> zoF9JtLf4=mz<u-WC#)K-zxk-Z&yB7jNJDnvrTZU${zg-M;^~_cPv3@W$)Rf~w$Nl|\n> zWb|2a;MLb3aEbFT-iNL^%+1QID8PfP0U8e%UcUEQzW>wD-<~Q`l02L@-hA47{{;&Z\n> z)31O31UcCD$2#ka3!-RXU|{(0<Ja`FxA)wC@!`iWMFE}wbr~Z`A=?GJ-~IR{%Ef*#\n> z&Q(){4@Co3aOU|t=f!(I{rV%x!*M9iRYiywJ@KId6G@@%QBFLpEYH9E$l89Iunm|1\n> Y03N>L+`-G70ssI207*qoM6N<$g81y{PXGV_\n> \n> literal 0\n> HcmV?d00001\n> \n> diff --git a/Documentation/theme/theme.conf b/Documentation/theme/theme.conf\n> new file mode 100644\n> index 000000000000..ba25a19211c7\n> --- /dev/null\n> +++ b/Documentation/theme/theme.conf\n> @@ -0,0 +1,5 @@\n> +[theme]\n> +inherit = basic\n> +stylesheet = css/theme.css\n> +\n> +[options]\n>","headers":{"Return-Path":"<kieran.bingham@ideasonboard.com>","Received":["from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id B64E6600CC\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 11 Jan 2019 13:11:30 +0100 (CET)","from [192.168.0.21]\n\t(cpc89242-aztw30-2-0-cust488.18-1.cable.virginm.net [86.31.129.233])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id E4671547;\n\tFri, 11 Jan 2019 13:11:29 +0100 (CET)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1547208690;\n\tbh=NWXOA0EwbH58oxbF0OOKAMJqzcyiXgSOV6/yOxlFwhU=;\n\th=Reply-To:Subject:To:References:From:Date:In-Reply-To:From;\n\tb=gkjti/ICTOjzM3HMXUVJEH7d58DfZ5qkmT5LOOB9363kBDv3GE7FFT5CUFvLXKGGf\n\tu3OkH/FaMTe1UOoSskhJk2To9n7d1wwDCJkZAWi35Mv/hlPZR0i+8YxUXfyXGDIht1\n\tr7rYKGAeM/qh6Yo+G8JzaE2xMw3lNXBt3hw71Zgs=","Reply-To":"kieran.bingham@ideasonboard.com","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","References":"<20190110233829.9638-1-laurent.pinchart@ideasonboard.com>\n\t<20190110233829.9638-2-laurent.pinchart@ideasonboard.com>","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Openpgp":"preference=signencrypt","Autocrypt":"addr=kieran.bingham@ideasonboard.com; keydata=\n\t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\n\tsbsRB8KNNvVXBOVNwko86rQqF9drZuw=","Organization":"Ideas on Board","Message-ID":"<e5d470e4-7d11-4c3f-5125-4ca0cd248dd1@ideasonboard.com>","Date":"Fri, 11 Jan 2019 12:11:27 +0000","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101\n\tThunderbird/60.2.1","MIME-Version":"1.0","In-Reply-To":"<20190110233829.9638-2-laurent.pinchart@ideasonboard.com>","Content-Type":"text/plain; charset=utf-8","Content-Language":"en-GB","Content-Transfer-Encoding":"7bit","Subject":"Re: [libcamera-devel] [PATCH 1/3] Documentation: Add custom theme","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.23","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","X-List-Received-Date":"Fri, 11 Jan 2019 12:11:30 -0000"}}]