All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC 0/3] add support for diagrams generated from SVG sources
@ 2021-05-15  7:12 Michael Opdenacker
  2021-05-15  7:12 ` [RFC 1/3] Makefile: allow epub and latexpdf outputs to use diagrams " Michael Opdenacker
                   ` (3 more replies)
  0 siblings, 4 replies; 14+ messages in thread
From: Michael Opdenacker @ 2021-05-15  7:12 UTC (permalink / raw)
  To: docs; +Cc: Michael Opdenacker

This RFC proposes modifications to the Makefile and the Sphinx
configuration (conf.py file) to support:

- The generation of PNG diagrams from SVG sources for the generation
  of the EPUB manual. Directly using SVG in EPUB shows at least
  font size and alignment issues.

  The conf.py file has been modified to let the EPUB builder know
  that it should prefer PNG over SVG when both formats are available.

- The generation of PDF diagrams from SVG sources for the generation
  of the PDF manual. PDF output cannot use SVG, and needs PDF diagrams
  instead.

New diagrams are stored in separate "svg" directories so that generated
.png and .pdf files can be "gitignored" without ignoring the original
.png files that have no .svg source.

In the source .rst files, new diagrams can now be included as, for example:
image:: svg/git-workflow.*

Note that the way the Makefile was modified can most probably be improved,
as my "make" skills are pretty limited. I'm interested in your suggestions!

My goal is to progressively replace PNG diagrams with SVG ones:
   - To get high quality definition output documents, in all output formats
   - To Have the ability to update diagrams
I would indeed do this very progressively, a little bit every week,
not at the expense of other tasks.

Michael Opdenacker (3):
  Makefile: allow epub and latexpdf outputs to use diagrams from SVG
    sources
  conf.py: prefer PNG to SVG in EPUB output
  overview-manual: SVG diagram for the git workflow

 documentation/.gitignore                      |    2 +
 documentation/Makefile                        |   29 +-
 documentation/conf.py                         |    4 +
 .../development-environment.rst               |    4 +-
 .../overview-manual/figures/git-workflow.png  |  Bin 26586 -> 0 bytes
 .../overview-manual/svg/git-workflow.svg      | 1205 +++++++++++++++++
 6 files changed, 1239 insertions(+), 5 deletions(-)
 delete mode 100644 documentation/overview-manual/figures/git-workflow.png
 create mode 100644 documentation/overview-manual/svg/git-workflow.svg

-- 
2.25.1


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [RFC 1/3] Makefile: allow epub and latexpdf outputs to use diagrams from SVG sources
  2021-05-15  7:12 [RFC 0/3] add support for diagrams generated from SVG sources Michael Opdenacker
@ 2021-05-15  7:12 ` Michael Opdenacker
  2021-05-16 22:12   ` [docs] " Nicolas Dechesne
  2021-05-28 14:40   ` Quentin Schulz
  2021-05-15  7:12 ` [RFC 2/3] conf.py: prefer PNG to SVG in EPUB output Michael Opdenacker
                   ` (2 subsequent siblings)
  3 siblings, 2 replies; 14+ messages in thread
From: Michael Opdenacker @ 2021-05-15  7:12 UTC (permalink / raw)
  To: docs; +Cc: Michael Opdenacker

html output is great when directly using SVG
epub output has to use exported PNG because of issues using SVG directly
latexpdf output cannot use SVG, it needs exported PDF instead

This adds rules to generate PNG and PDF formats from new SVG sources.

Newly added diagrams have be stored in svg/ subdirectories
so that PNG and PDF files generated from SVG can be "gitignored"
without ignoring the original PNG diagrams that have no SVG source.

Note: had to remove the dependency to "Makefile" in the final "catch-all" target,
otherwise it was also catching my SVG to PNG and SVG to PDF targets.
Any suggest to avoid having to do this?

Signed-off-by: Michael Opdenacker <michael.opdenacker@bootlin.com>
---
 documentation/.gitignore |  2 ++
 documentation/Makefile   | 29 ++++++++++++++++++++++++++---
 2 files changed, 28 insertions(+), 3 deletions(-)

diff --git a/documentation/.gitignore b/documentation/.gitignore
index c44580b088..35ead8af66 100644
--- a/documentation/.gitignore
+++ b/documentation/.gitignore
@@ -1,3 +1,5 @@
 _build/
 Pipfile.lock
 .vscode/
+*/svg/*.png
+*/svg/*.pdf
diff --git a/documentation/Makefile b/documentation/Makefile
index d40f390e2b..acb09726cd 100644
--- a/documentation/Makefile
+++ b/documentation/Makefile
@@ -6,8 +6,11 @@
 SPHINXOPTS    ?= -j auto
 SPHINXBUILD   ?= sphinx-build
 SOURCEDIR     = .
+IMAGEDIRS     = */svg
 BUILDDIR      = _build
 DESTDIR       = final
+SVG2PNG       = inkscape
+SVG2PDF       = inkscape
 
 ifeq ($(shell if which $(SPHINXBUILD) >/dev/null 2>&1; then echo 1; else echo 0; fi),0)
 $(error "The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed")
@@ -17,7 +20,7 @@ endif
 help:
 	@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
 
-.PHONY: help Makefile clean publish
+.PHONY: help Makefile clean publish epub latexpdf
 
 publish: Makefile html singlehtml
 	rm -rf $(BUILDDIR)/$(DESTDIR)/
@@ -26,10 +29,30 @@ publish: Makefile html singlehtml
 	cp $(BUILDDIR)/singlehtml/index.html $(BUILDDIR)/$(DESTDIR)/singleindex.html
 	sed -i -e 's@index.html#@singleindex.html#@g' $(BUILDDIR)/$(DESTDIR)/singleindex.html
 
+# Build a list of SVG files to convert to PDFs
+PDFs := $(foreach dir, $(IMAGEDIRS), $(patsubst %.svg,%.pdf,$(wildcard $(SOURCEDIR)/$(dir)/*.svg)))
+
+# Build a list of SVG files to convert to PNGs
+PNGs := $(foreach dir, $(IMAGEDIRS), $(patsubst %.svg,%.png,$(wildcard $(SOURCEDIR)/$(dir)/*.svg)))
+
+# Pattern rule for converting SVG to PDF
+%.pdf : %.svg
+	$(SVG2PDF) --export-filename=$@ $<
+
+# Pattern rule for converting SVG to PNG
+%.png : %.svg
+	$(SVG2PNG) --export-filename=$@ $<
+
 clean:
-	@rm -rf $(BUILDDIR)
+	@rm -rf $(BUILDDIR) $(PNGs) $(PDFs)
+
+epub: $(PNGs)
+	@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
+
+latexpdf: $(PDFs)
+	@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
 
 # Catch-all target: route all unknown targets to Sphinx using the new
 # "make mode" option.  $(O) is meant as a shortcut for $(SPHINXOPTS).
-%: Makefile
+%:
 	@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [RFC 2/3] conf.py: prefer PNG to SVG in EPUB output
  2021-05-15  7:12 [RFC 0/3] add support for diagrams generated from SVG sources Michael Opdenacker
  2021-05-15  7:12 ` [RFC 1/3] Makefile: allow epub and latexpdf outputs to use diagrams " Michael Opdenacker
@ 2021-05-15  7:12 ` Michael Opdenacker
  2021-05-16 22:29   ` [docs] " Nicolas Dechesne
  2021-05-15  7:12 ` [RFC 3/3] overview-manual: SVG diagram for the git workflow Michael Opdenacker
  2021-05-16 22:11 ` [docs] [RFC 0/3] add support for diagrams generated from SVG sources Nicolas Dechesne
  3 siblings, 1 reply; 14+ messages in thread
From: Michael Opdenacker @ 2021-05-15  7:12 UTC (permalink / raw)
  To: docs; +Cc: Michael Opdenacker

SVG directly included in EPUB output has multiple issues,
in particular font size and alignment ones (tested on two
EPUB readers).

Signed-off-by: Michael Opdenacker <michael.opdenacker@bootlin.com>
---
 documentation/conf.py | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/documentation/conf.py b/documentation/conf.py
index 5a2e25f7b2..798a365c7f 100644
--- a/documentation/conf.py
+++ b/documentation/conf.py
@@ -136,3 +136,7 @@ latex_elements = {
     'passoptionstopackages': '\PassOptionsToPackage{bookmarksdepth=5}{hyperref}',
     'preamble': '\setcounter{tocdepth}{2}',
 }
+
+# Make the EPUB builder prefer PNG to SVG because of issues rendering Inkscape SVG
+from sphinx.builders.epub3 import Epub3Builder
+Epub3Builder.supported_image_types = ['image/png', 'image/svg+xml', 'image/gif', 'image/jpeg']
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [RFC 3/3] overview-manual: SVG diagram for the git workflow
  2021-05-15  7:12 [RFC 0/3] add support for diagrams generated from SVG sources Michael Opdenacker
  2021-05-15  7:12 ` [RFC 1/3] Makefile: allow epub and latexpdf outputs to use diagrams " Michael Opdenacker
  2021-05-15  7:12 ` [RFC 2/3] conf.py: prefer PNG to SVG in EPUB output Michael Opdenacker
@ 2021-05-15  7:12 ` Michael Opdenacker
  2021-05-16 22:11 ` [docs] [RFC 0/3] add support for diagrams generated from SVG sources Nicolas Dechesne
  3 siblings, 0 replies; 14+ messages in thread
From: Michael Opdenacker @ 2021-05-15  7:12 UTC (permalink / raw)
  To: docs; +Cc: Michael Opdenacker

Set in full-width mode to make it ready in PDF
and EPUB outputs.

Signed-off-by: Michael Opdenacker <michael.opdenacker@bootlin.com>
---
 .../development-environment.rst               |    4 +-
 .../overview-manual/figures/git-workflow.png  |  Bin 26586 -> 0 bytes
 .../overview-manual/svg/git-workflow.svg      | 1205 +++++++++++++++++
 3 files changed, 1207 insertions(+), 2 deletions(-)
 delete mode 100644 documentation/overview-manual/figures/git-workflow.png
 create mode 100644 documentation/overview-manual/svg/git-workflow.svg

diff --git a/documentation/overview-manual/development-environment.rst b/documentation/overview-manual/development-environment.rst
index 1decf01e43..ba03f2d5b4 100644
--- a/documentation/overview-manual/development-environment.rst
+++ b/documentation/overview-manual/development-environment.rst
@@ -286,8 +286,8 @@ develop, test, and submit changes to "contrib" areas for the maintainer
 to examine. The maintainer then chooses which changes are going to
 become a permanent part of the project.
 
-.. image:: figures/git-workflow.png
-   :align: center
+.. image:: svg/git-workflow.*
+   :width: 100%
 
 While each development environment is unique, there are some best
 practices or methods that help development run smoothly. The following
diff --git a/documentation/overview-manual/figures/git-workflow.png b/documentation/overview-manual/figures/git-workflow.png
deleted file mode 100644
index e401330a1217d4792a8007600442731fcb72d084..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 26586
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

diff --git a/documentation/overview-manual/svg/git-workflow.svg b/documentation/overview-manual/svg/git-workflow.svg
new file mode 100644
index 0000000000..7747e35d9c
--- /dev/null
+++ b/documentation/overview-manual/svg/git-workflow.svg
@@ -0,0 +1,1205 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   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:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
+   id="svg2"
+   width="914.0769"
+   height="379.81961"
+   viewBox="0 0 914.0769 379.81961"
+   sodipodi:docname="git-workflow.svg"
+   inkscape:version="1.0.2 (394de47547, 2021-03-26)">
+  <metadata
+     id="metadata8">
+    <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></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs6">
+    <inkscape:path-effect
+       effect="powerstroke"
+       id="path-effect6121"
+       is_visible="true"
+       lpeversion="1"
+       offset_points="0,0.5"
+       sort_points="true"
+       interpolator_type="CubicBezierJohan"
+       interpolator_beta="0.2"
+       start_linecap_type="zerowidth"
+       linejoin_type="extrp_arc"
+       miter_limit="4"
+       scale_width="1"
+       end_linecap_type="zerowidth" />
+    <marker
+       style="overflow:visible"
+       id="marker5783"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mend"
+       inkscape:isstock="true">
+      <path
+         transform="scale(-0.6)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5781" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="marker5623"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mend"
+       inkscape:isstock="true">
+      <path
+         transform="scale(-0.6)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5621" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="marker5487"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mend"
+       inkscape:isstock="true">
+      <path
+         transform="scale(-0.6)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5485" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="marker5285"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mstart"
+       inkscape:isstock="true">
+      <path
+         transform="scale(0.6)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5283" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="marker5161"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mend"
+       inkscape:isstock="true">
+      <path
+         transform="scale(-0.6)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5159" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="marker4978"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mend"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         transform="scale(-0.6)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path4976" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="marker4860"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mend"
+       inkscape:isstock="true">
+      <path
+         transform="scale(-0.6)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path4858" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="marker4712"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mend"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         transform="scale(-0.6)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path4710" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="marker4604"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mend"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         transform="scale(-0.6)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#ffa348;fill-opacity:1;fill-rule:evenodd;stroke:#ffa348;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path4602" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="marker4504"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mend"
+       inkscape:isstock="true">
+      <path
+         transform="scale(-0.6)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#ffa348;fill-opacity:1;fill-rule:evenodd;stroke:#ffa348;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path4502" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="marker4414"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mend"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         transform="scale(-0.6)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#62a0ea;fill-opacity:1;fill-rule:evenodd;stroke:#62a0ea;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path4412" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="marker4286"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mend"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         transform="scale(-0.6)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#62a0ea;fill-opacity:1;fill-rule:evenodd;stroke:#62a0ea;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path4284" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Mend"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend"
+       inkscape:isstock="true">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#62a0ea;fill-opacity:1;fill-rule:evenodd;stroke:#62a0ea;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3318" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="marker4174"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mstart"
+       inkscape:isstock="true">
+      <path
+         transform="scale(0.6)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#62a0ea;fill-opacity:1;fill-rule:evenodd;stroke:#62a0ea;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path4172" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow2Mend"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mend"
+       inkscape:isstock="true">
+      <path
+         transform="scale(-0.6)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#ffa348;fill-opacity:1;fill-rule:evenodd;stroke:#ffa348;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path3336" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow2Mstart"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mstart"
+       inkscape:isstock="true"
+       inkscape:collect="always">
+      <path
+         transform="scale(0.6)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#ffa348;fill-opacity:1;fill-rule:evenodd;stroke:#ffa348;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path3333" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Mstart"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mstart"
+       inkscape:isstock="true">
+      <path
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         style="fill:#ff7800;fill-opacity:1;fill-rule:evenodd;stroke:#ffa348;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3315" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow2Lstart"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lstart"
+       inkscape:isstock="true">
+      <path
+         transform="matrix(1.1,0,0,1.1,1.1,0)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#ff7800;fill-opacity:1;fill-rule:evenodd;stroke:#ffa348;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path3327" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Lstart"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lstart"
+       inkscape:isstock="true">
+      <path
+         transform="matrix(0.8,0,0,0.8,10,0)"
+         style="fill:#ff7800;fill-opacity:1;fill-rule:evenodd;stroke:#ffa348;stroke-width:1pt;stroke-opacity:1"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path3309" />
+    </marker>
+    <linearGradient
+       id="linearGradient921"
+       osb:paint="solid">
+      <stop
+         style="stop-color:#deddda;stop-opacity:1;"
+         offset="0"
+         id="stop919" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6035-4">
+      <stop
+         id="stop6037-2"
+         style="stop-color:#ffffff"
+         offset="0" />
+      <stop
+         id="stop6039-9"
+         style="stop-color:#ffffff;stop-opacity:0"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient11801"
+       y2="511.97"
+       spreadMethod="reflect"
+       gradientUnits="userSpaceOnUse"
+       x2="286.63"
+       gradientTransform="matrix(4.9627,0,0,4.9627,278.63,-3355.4)"
+       y1="511.97"
+       x1="269.97"
+       inkscape:collect="always">
+      <stop
+         id="stop5497-7"
+         style="stop-color:#497bb3"
+         offset="0" />
+      <stop
+         id="stop5501-5"
+         style="stop-color:#a5c4e6"
+         offset=".20485" />
+      <stop
+         id="stop5499-8"
+         style="stop-color:#3b5d8b"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient11803"
+       y2="527.34003"
+       gradientUnits="userSpaceOnUse"
+       x2="286.63"
+       y1="518.56"
+       x1="282.35999"
+       inkscape:collect="always">
+      <stop
+         id="stop5468-4"
+         style="stop-color:#a5c4e6"
+         offset="0" />
+      <stop
+         id="stop5470-8"
+         style="stop-color:#497bb3"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient11805"
+       y2="520.33002"
+       xlink:href="#linearGradient6035-4"
+       spreadMethod="reflect"
+       gradientUnits="userSpaceOnUse"
+       x2="327.78"
+       gradientTransform="matrix(4.1992,0,0,4.1992,407.33,-3062.9)"
+       y1="522.60999"
+       x1="308.5"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient11807"
+       y2="520.33002"
+       xlink:href="#linearGradient6035-4"
+       spreadMethod="reflect"
+       gradientUnits="userSpaceOnUse"
+       x2="327.78"
+       gradientTransform="matrix(4.1992,0,0,4.1992,407.33,-3015.8)"
+       y1="522.60999"
+       x1="308.5"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient11809"
+       y2="520.33002"
+       xlink:href="#linearGradient6035-4"
+       spreadMethod="reflect"
+       gradientUnits="userSpaceOnUse"
+       x2="327.78"
+       gradientTransform="matrix(4.1992,0,0,4.1992,407.33,-2971.6)"
+       y1="522.60999"
+       x1="308.5"
+       inkscape:collect="always" />
+    <marker
+       style="overflow:visible"
+       id="Arrow2Mstart-4"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mstart"
+       inkscape:isstock="true">
+      <path
+         transform="scale(0.6)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#ffa348;fill-opacity:1;fill-rule:evenodd;stroke:#ffa348;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path3333-2" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow2Mend-2"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mend"
+       inkscape:isstock="true">
+      <path
+         transform="scale(-0.6)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#ffa348;fill-opacity:1;fill-rule:evenodd;stroke:#ffa348;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path3336-7" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="marker5623-2"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mend"
+       inkscape:isstock="true">
+      <path
+         transform="scale(-0.6)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path5621-3" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1848"
+     inkscape:window-height="983"
+     id="namedview4"
+     showgrid="false"
+     inkscape:zoom="1.0233281"
+     inkscape:cx="782.70306"
+     inkscape:cy="243.82083"
+     inkscape:window-x="1992"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="g10"
+     inkscape:document-rotation="0"
+     inkscape:snap-perpendicular="true"
+     fit-margin-top="30"
+     lock-margins="true"
+     fit-margin-left="30"
+     fit-margin-right="30"
+     fit-margin-bottom="30">
+    <inkscape:grid
+       type="xygrid"
+       id="grid1257"
+       originx="52.044543"
+       originy="-399.74243" />
+  </sodipodi:namedview>
+  <g
+     inkscape:groupmode="layer"
+     inkscape:label="Image"
+     id="g10"
+     transform="translate(52.044543,-399.74244)">
+    <g
+       id="g5149"
+       transform="translate(-6.511663,12.941792)">
+      <g
+         id="g3925"
+         transform="matrix(0.4122756,0,0,0.4122756,-131.50883,333.4483)"
+         style="stroke-width:2.42556">
+        <g
+           id="layer1-3-5-2"
+           inkscape:label="Capa 1"
+           transform="matrix(1.1196,0,0,1.1196,-122.82057,267.39056)"
+           style="stroke-width:2.42556">
+          <g
+             id="g10-5-2"
+             transform="matrix(0.0423,0,0,0.0423,319.39,59.128)"
+             class="Graphic"
+             style="stroke-width:2.42556">
+            <g
+               id="g12-4-2"
+               style="stroke-width:2.42556">
+              <g
+                 id="g14-64-0"
+                 style="fill:#c7c7c7;stroke-width:2.42556">
+                <path
+                   id="path16-1-5"
+                   inkscape:connector-curvature="0"
+                   d="m 5903,2361 c 50,82 34,3995 -31,4149 -51,122 -1703,1495 -1789,1531 -1117,-7 -1870,-414 -1995,-629 -48,-270 -7,-4433 38,-4520 40,-76 2153,-833 2227,-851 67,-15 1493,229 1550,320 z"
+                   style="stroke-width:2.42556" />
+              </g>
+              <g
+                 id="g18-6-5"
+                 style="fill:#000000;stroke-width:2.42556">
+                <path
+                   id="path20-8-2"
+                   inkscape:connector-curvature="0"
+                   d="m 5881,2374 2,-1 -2,2 c 0,-1 -1,-1 -1,-1 v -2 l 7,-3 -2,2 -5,1 5,-1 -2,2 z m 2,-1 2,-2 2,-2 5,-2 -5,4 5,-4 h 1 l -6,3 v 1 -1 z m 10,-6 h -1 1 -1 l 11,-6 -10,5 z m 11,-4 -11,4 v -1 z m 20,-15 c -2,-3 -4,-6 -7,-9 -2,-3 -5,-5 -8,-7 -5,-4 -12,-8 -20,-12 -7,-4 -15,-7 -24,-11 -9,-4 -19,-7 -30,-11 -21,-8 -47,-16 -75,-24 -29,-8 -61,-16 -95,-25 -136,-34 -313,-72 -494,-106 -181,-35 -364,-66 -511,-90 -73,-11 -138,-21 -189,-27 -25,-3 -47,-6 -65,-8 -9,-1 -17,-1 -24,-2 -4,0 -7,0 -10,-1 h -9 c -3,0 -5,0 -7,1 h -4 c -2,0 -3,0 -4,1 -2,0 -4,1 -7,2 -2,0 -5,1 -8,2 -3,1 -7,2 -11,3 -4,2 -8,3 -13,5 -10,3 -22,7 -35,12 -13,4 -28,9 -44,15 -33,11 -71,25 -115,40 -43,15 -91,32 -144,51 -209,75 -481,173 -753,274 -271,101 -542,203 -747,285 -51,21 -98,40 -140,57 -43,18 -80,34 -111,48 -16,7 -30,14 -42,20 -13,6 -24,12 -33,17 -5,2 -9,5 -13,7 -4,3 -8,5 -10,7 -4,3 -7,5 -9,7 -5,4 -7,8 -9,11 -1,2 -2,5 -4,9 0,3 -1,6 -1,9 -1,3 -1,7 -2,11 -1,4 -1,8 -2,13 0,9 -1,20 -3,32 0,13 -1,27 -2,42 -2,31 -4,69 -6,111 -2,43 -4,91 -5,144 -7,213 -14,504 -19,835 -11,662 -19,1482 -19,2144 0,308 2,583 5,791 1,52 2,100 3,143 1,43 3,82 4,115 1,34 3,62 4,85 1,12 2,22 3,30 1,5 1,9 1,13 1,3 2,7 2,10 l 1,4 2,4 c 9,15 20,30 33,46 14,16 30,32 48,49 35,32 80,66 135,101 107,70 249,142 423,207 173,65 377,124 608,167 231,43 489,70 769,72 h 6 l 5,-2 8,-4 c 2,-2 5,-3 8,-6 3,-2 6,-4 10,-6 l 12,-9 c 9,-6 19,-13 30,-22 11,-8 23,-17 37,-28 27,-20 58,-45 93,-73 35,-28 74,-59 116,-93 169,-136 385,-315 600,-497 215,-181 430,-366 593,-512 41,-37 79,-71 113,-103 34,-31 64,-59 89,-84 13,-13 24,-24 34,-35 11,-11 20,-20 28,-29 8,-9 14,-17 19,-23 3,-4 5,-8 7,-10 2,-4 4,-8 6,-11 0,-2 1,-5 2,-8 1,-3 2,-5 3,-9 1,-6 2,-13 3,-22 2,-8 3,-17 4,-28 1,-11 2,-22 3,-35 2,-25 4,-55 7,-89 1,-34 3,-72 5,-113 8,-166 14,-391 19,-648 10,-516 16,-1164 16,-1743 0,-389 -3,-747 -8,-1012 -1,-66 -2,-127 -4,-181 -1,-53 -3,-100 -5,-139 -1,-20 -2,-38 -3,-53 -1,-16 -2,-30 -3,-41 -1,-6 -1,-11 -2,-16 -1,-5 -1,-10 -2,-13 -1,-4 -1,-8 -2,-11 -1,-2 -1,-4 -2,-5 -1,-3 -2,-5 -3,-6 z m -37,21 12,-12 z m -6,9 c 1,3 1,7 2,11 0,4 1,9 1,15 1,11 3,24 4,39 0,15 1,33 2,52 2,39 4,86 6,139 1,53 2,114 4,180 5,264 7,622 7,1011 0,578 -5,1227 -15,1742 -6,257 -12,481 -19,646 -2,42 -4,79 -6,113 -2,33 -4,63 -6,88 -1,12 -2,24 -4,34 0,10 -2,18 -3,26 -1,7 -2,14 -3,18 0,3 -1,4 -1,6 0,1 -1,2 -1,2 0,1 -1,2 -2,4 -1,1 -3,4 -4,6 -5,6 -10,13 -17,21 -7,7 -16,17 -26,27 l -34,34 c -25,24 -54,52 -88,83 -33,31 -71,66 -112,102 -163,146 -377,330 -592,512 -215,181 -431,360 -598,495 -42,34 -81,65 -116,93 -35,28 -66,52 -93,73 -13,10 -26,20 -37,28 -10,8 -20,15 -28,21 -4,3 -8,6 -12,8 -3,2 -6,4 -8,6 -2,1 -4,2 -5,3 -276,-2 -528,-29 -755,-71 -228,-42 -429,-100 -600,-164 -169,-64 -308,-134 -413,-202 -51,-33 -94,-66 -128,-97 -17,-15 -31,-30 -43,-44 -10,-12 -19,-23 -26,-34 v -4 c -1,-3 -1,-7 -1,-11 -1,-8 -2,-18 -3,-28 -2,-23 -3,-51 -5,-84 -1,-33 -2,-71 -3,-115 -1,-42 -2,-90 -3,-142 -3,-208 -5,-482 -5,-790 0,-662 7,-1481 18,-2143 6,-330 12,-622 19,-834 2,-53 4,-101 6,-144 2,-42 3,-79 5,-109 1,-16 2,-30 3,-42 1,-12 2,-22 3,-31 0,-4 1,-8 1,-11 1,-4 1,-6 2,-9 v -2 c 0,-1 1,-1 2,-2 2,-1 4,-3 7,-5 4,-1 7,-4 11,-6 9,-5 19,-10 31,-16 12,-6 26,-12 41,-19 31,-14 67,-29 109,-47 42,-17 89,-37 140,-57 205,-82 475,-184 746,-284 271,-101 543,-200 752,-274 52,-19 101,-36 144,-51 43,-16 82,-29 114,-40 17,-6 31,-11 44,-16 13,-4 25,-8 35,-11 4,-2 9,-3 13,-4 4,-2 7,-3 10,-4 3,-1 5,-1 8,-2 l 3,-1 -2,-8 1,8 h 1 4 7 c 2,0 5,0 8,1 7,0 14,1 23,2 17,1 39,4 64,7 50,6 114,16 187,27 147,23 329,55 509,89 180,35 357,72 492,106 34,9 65,17 92,25 28,8 53,15 73,23 10,3 20,7 28,10 7,3 15,6 20,9 5,3 10,5 13,8 0,0 1,0 1,1 0,1 1,3 1,4 z M 4075,8017 c 1,0 1,-1 2,-1 h 6 v 14 l -8,-13 8,13 v 11 l -10,-23 c 0,0 1,-1 2,-1 z M 2110,7400 c 1,1 1,3 2,4 1,1 1,3 1,4 l -25,4 21,-11 1,-1 -1,1 1,-1 h 2 z m 39,-4498 v 3 c -1,0 -1,1 -2,1 l -5,-6 -17,-4 17,4 -2,-1 4,2 z m -7,-2 2,1 z m -16,-8 14,7 z m 14,7 -10,-11 z m 2217,-841 -2,-17 z m -4,-17 4,17 v 1 z"
+                   style="stroke-width:2.42556" />
+              </g>
+              <g
+                 id="g22-8-9"
+                 style="fill:#ffffff;fill-opacity:0.54118;stroke:#ffffff;stroke-width:2.42556;stroke-opacity:0.54118">
+                <path
+                   id="path24-1-0"
+                   inkscape:connector-curvature="0"
+                   d="m 5822,2442 -52,22 -52,23 -52,23 -53,25 -53,25 -53,26 -53,26 -54,27 -54,27 -54,28 -55,28 -54,29 -55,29 -55,29 -111,60 -112,60 -112,60 -113,61 -114,60 -114,60 -114,59 -57,29 -57,29 -58,28 -57,28 -27,-6 -28,-7 -56,-13 -58,-14 -59,-13 -60,-14 -61,-14 -61,-14 -63,-14 -62,-14 -63,-15 -127,-28 -127,-28 -64,-14 -63,-14 -62,-13 -62,-13 -61,-13 -60,-13 -60,-13 -58,-12 -57,-12 -28,-5 -28,-6 -27,-5 -27,-6 -27,-5 -26,-5 -26,-5 -25,-6 -25,-4 -24,-5 -24,-5 -24,-4 -23,-4 -22,-5 -22,-4 -21,-3 -21,-4 -20,-4 52,16 52,16 53,16 54,15 55,16 55,15 57,16 56,15 57,16 58,15 116,31 117,30 118,31 118,31 117,30 116,31 58,15 57,16 57,15 56,16 55,15 55,16 54,15 53,16 52,16 52,16 1,60 2,61 1,61 1,63 1,64 2,64 1,65 1,66 1,67 1,67 1,68 v 69 l 1,69 1,70 1,70 v 71 l 1,71 v 72 l 1,72 1,73 1,146 1,147 v 149 l 1,149 2,299 1,300 1,149 1,148 1,147 1,146 1,73 v 72 l 1,72 1,71 v 71 l 1,71 1,69 1,70 v 68 l 1,68 1,67 1,67 1,66 1,65 1,65 2,63 1,63 1,62 2,61 1,60 1,-61 1,-61 v -63 l 1,-63 1,-64 1,-65 1,-66 1,-67 1,-67 1,-68 1,-69 2,-69 1,-70 1,-71 1,-71 1,-72 1,-72 2,-73 1,-73 1,-73 3,-148 3,-149 2,-151 3,-151 6,-303 5,-303 3,-151 3,-150 2,-149 3,-149 1,-73 2,-73 1,-73 1,-72 1,-71 1,-72 1,-70 2,-70 1,-70 1,-68 1,-68 1,-68 1,-66 1,-66 1,-65 1,-64 1,-64 v -62 l 1,-62 1,-60 110,-59 109,-59 109,-57 109,-58 108,-57 107,-58 107,-57 107,-58 105,-58 105,-58 104,-60 103,-60 51,-30 50,-31 51,-31 50,-31 50,-31 50,-32 49,-32 z"
+                   style="stroke-width:2.42556" />
+              </g>
+              <g
+                 id="g28-1-8"
+                 style="fill:none;stroke-width:2.42556">
+                <path
+                   id="path30-7-3"
+                   inkscape:connector-curvature="0"
+                   d="m 5822,2442 c -549,232 -1156,606 -1768,901 -580,-138 -1417,-322 -1839,-396 543,169 1257,327 1800,496 32,1271 16,3196 48,4467 16,-1282 59,-3238 75,-4519 586,-317 1161,-601 1684,-949 z"
+                   style="stroke-width:2.42556" />
+              </g>
+              <g
+                 id="g32-7-8"
+                 style="fill:#000000;fill-opacity:0.16078;stroke:#ffffff;stroke-width:2.42556;stroke-opacity:0.16078">
+                <path
+                   id="path34-1-0"
+                   inkscape:connector-curvature="0"
+                   d="m 2420,6628 10,14 10,13 11,13 12,13 12,12 12,12 14,12 13,12 14,12 15,11 15,11 16,11 15,11 17,10 16,10 17,11 18,9 18,10 18,9 18,8 19,9 19,8 19,8 19,8 40,15 40,14 41,12 41,11 42,10 41,9 42,8 41,6 41,6 41,3 21,2 20,1 19,1 h 20 20 19 l 19,-1 19,-1 18,-1 19,-1 17,-2 18,-3 17,-2 17,-3 17,-4 16,-4 15,-4 15,-4 15,-5 15,-5 -2,-1 h -1 l -5,-2 -6,-1 -7,-2 -8,-2 -10,-3 -10,-3 -12,-3 -13,-4 -14,-3 -15,-4 -16,-5 -16,-4 -18,-5 -18,-5 -19,-5 -20,-6 -20,-5 -21,-6 -22,-6 -22,-6 -22,-6 -23,-7 -24,-6 -48,-13 -49,-14 -50,-14 -50,-13 -50,-15 -50,-13 -49,-14 -49,-13 -23,-7 -24,-6 -23,-7 -22,-6 -22,-6 -21,-6 -21,-6 -20,-5 -19,-6 -19,-5 -18,-5 -17,-5 -16,-4 -15,-5 -15,-4 -13,-4 -12,-3 -12,-3 -10,-3 -9,-3 -7,-2 -7,-2 -5,-2 h -2 z"
+                   style="stroke-width:2.42556" />
+              </g>
+              <g
+                 id="g38-5-0"
+                 style="fill:none;stroke-width:2.42556">
+                <path
+                   id="path40-7-9"
+                   inkscape:connector-curvature="0"
+                   d="m 2420,6628 c 201,289 833,431 1133,315 -53,-14 -1066,-293 -1133,-315 z"
+                   style="stroke-width:2.42556" />
+              </g>
+              <g
+                 id="g42-6-1"
+                 style="fill:#ffffff;fill-opacity:0.38824;stroke:#ffffff;stroke-width:2.42556;stroke-opacity:0.38824">
+                <path
+                   id="path44-7-9"
+                   inkscape:connector-curvature="0"
+                   d="m 3454,6093 -936,-361 -9,4 -8,4 -8,4 -6,5 -6,6 -6,6 -5,7 -5,6 -4,7 -4,7 -3,7 -3,8 -3,8 -2,7 -3,15 -2,15 -2,14 v 6 7 5 6 5 4 4 l 1,4 v 2 2 1 1 l 146,51 1,1 1,1 1,1 1,2 2,2 1,3 3,3 2,3 3,4 3,4 3,4 4,5 4,4 4,6 5,4 10,12 10,11 13,12 13,12 14,13 15,12 17,13 17,12 19,12 19,11 21,11 22,10 11,4 11,5 12,4 12,4 13,3 12,3 13,3 13,3 13,2 13,1 14,2 14,1 h 14 15 15 l 15,-1 15,-2 15,-2 16,-2 16,-3 16,-4 16,-4 17,-5 17,-6 h 1 l 2,1 h 3 l 6,1 6,1 7,1 8,1 9,1 10,1 11,1 12,1 12,1 h 12 l 13,1 h 26 l 14,-1 13,-1 14,-1 13,-2 13,-2 12,-3 12,-3 12,-3 10,-5 11,-5 9,-6 8,-6 8,-8 3,-4 3,-4 3,-4 2,-4 2,-5 z"
+                   style="stroke-width:2.42556" />
+              </g>
+              <g
+                 id="g48-57-2"
+                 style="fill:none;stroke-width:2.42556">
+                <path
+                   id="path50-0-5"
+                   inkscape:connector-curvature="0"
+                   d="m 3454,6093 -936,-361 c -97,34 -78,177 -78,177 l 146,51 c 0,0 204,319 566,194 0,0 269,48 302,-61 z"
+                   style="stroke-width:2.42556" />
+              </g>
+              <g
+                 id="g52-5-4"
+                 style="fill:#606060;stroke-width:2.42556">
+                <path
+                   id="path54-7-4"
+                   inkscape:connector-curvature="0"
+                   d="m 3446,5971 c -311,-81 -622,-161 -933,-242 -12,44 -13,107 6,140 47,23 142,41 189,64 136,131 255,142 472,124 84,17 168,31 251,48 26,-51 33,-72 15,-134 z"
+                   style="stroke-width:2.42556" />
+              </g>
+              <g
+                 id="g56-7-9"
+                 style="fill:none;stroke-width:2.42556">
+                <path
+                   id="path58-8-9"
+                   inkscape:connector-curvature="0"
+                   d="m 3446,5971 c -311,-81 -622,-161 -933,-242 -12,44 -13,107 6,140 47,23 142,41 189,64 136,131 255,142 472,124 84,17 168,31 251,48 26,-51 33,-72 15,-134 z"
+                   style="stroke-width:2.42556" />
+              </g>
+              <g
+                 id="g60-5-3"
+                 style="fill:#ffffff;fill-opacity:0.4;stroke:#ffffff;stroke-width:2.42556;stroke-opacity:0.4">
+                <path
+                   id="path62-2-6"
+                   inkscape:connector-curvature="0"
+                   d="m 5856,2414 -1813,1017 7,4549 1775,-1494 z"
+                   style="stroke-width:2.42556" />
+              </g>
+              <g
+                 id="g66-2-5"
+                 style="fill:none;stroke-width:2.42556">
+                <path
+                   id="path68-9-0"
+                   inkscape:connector-curvature="0"
+                   d="m 5856,2414 -1813,1017 7,4549 1775,-1494 z"
+                   style="stroke-width:2.42556" />
+              </g>
+              <g
+                 id="g70-9-2"
+                 style="fill:#000000;fill-opacity:0.16078;stroke:#ffffff;stroke-width:2.42556;stroke-opacity:0.16078">
+                <path
+                   id="path72-9-9"
+                   inkscape:connector-curvature="0"
+                   d="m 2525,6916 10,13 11,12 10,13 11,11 11,12 11,11 12,11 12,10 12,10 12,10 13,10 12,9 13,9 13,8 27,17 28,15 28,14 28,13 29,11 29,11 30,9 30,8 29,8 30,6 30,5 30,4 30,3 30,2 29,2 h 29 l 29,-1 27,-2 28,-2 27,-3 26,-5 25,-5 24,-6 24,-6 22,-8 -2,-1 h -4 l -4,-2 -5,-1 -6,-2 -8,-2 -8,-2 -9,-2 -10,-3 -10,-3 -11,-3 -12,-3 -13,-4 -13,-3 -14,-4 -15,-4 -15,-4 -15,-5 -16,-4 -16,-5 -17,-4 -18,-5 -35,-10 -36,-10 -38,-10 -38,-10 -38,-11 -76,-21 -37,-10 -37,-11 -36,-10 -17,-4 -17,-5 -17,-5 -16,-4 -16,-5 -15,-4 -15,-4 -14,-4 -14,-4 -13,-4 -12,-3 -11,-3 -12,-3 -10,-3 -9,-3 -8,-2 -8,-3 -7,-1 -6,-2 -5,-2 -4,-1 z"
+                   style="stroke-width:2.42556" />
+              </g>
+              <g
+                 id="g76-2-3"
+                 style="fill:none;stroke-width:2.42556">
+                <path
+                   id="path78-7-5"
+                   inkscape:connector-curvature="0"
+                   d="m 2525,6916 c 209,276 627,323 861,239 -39,-10 -810,-222 -861,-239 z"
+                   style="stroke-width:2.42556" />
+              </g>
+              <g
+                 id="g80-6-1"
+                 style="fill:#000000;fill-opacity:0.16078;stroke:#ffffff;stroke-width:2.42556;stroke-opacity:0.16078">
+                <path
+                   id="path82-0-7"
+                   inkscape:connector-curvature="0"
+                   d="m 2680,7199 12,15 12,14 13,14 14,12 14,13 14,11 15,11 16,11 15,9 17,9 16,9 17,7 18,7 17,7 18,5 18,5 18,5 19,3 18,4 19,2 18,2 19,1 h 19 19 l 18,-1 19,-2 18,-2 19,-3 18,-4 18,-4 18,-5 17,-6 h -1 l -2,-1 h -3 l -4,-1 -3,-1 -5,-2 -5,-1 -6,-2 -6,-1 -6,-2 -7,-2 -8,-2 -8,-2 -8,-3 -9,-2 -9,-2 -19,-6 -20,-5 -22,-6 -22,-6 -23,-6 -23,-7 -48,-13 -48,-13 -23,-7 -23,-6 -23,-6 -21,-6 -21,-6 -19,-6 -9,-2 -9,-3 -9,-2 -8,-2 -8,-2 -7,-2 -7,-2 -6,-2 -6,-2 -5,-2 -5,-1 -5,-1 -3,-1 -3,-1 -3,-1 z"
+                   style="stroke-width:2.42556" />
+              </g>
+              <g
+                 id="g86-0-3"
+                 style="fill:none;stroke-width:2.42556">
+                <path
+                   id="path88-3-1"
+                   inkscape:connector-curvature="0"
+                   d="m 2680,7199 c 121,163 355,213 540,149 -25,-6 -507,-139 -540,-149 z"
+                   style="stroke-width:2.42556" />
+              </g>
+              <g
+                 id="g90-5-4"
+                 style="fill:#fcfcfc;fill-opacity:0.43922;stroke:#ffffff;stroke-width:2.42556;stroke-opacity:0.43922">
+                <path
+                   id="path92-9-6"
+                   inkscape:connector-curvature="0"
+                   d="m 2356,3259 -92,13 -17,2173 1425,399 35,-116 -1369,-365 z"
+                   style="stroke-width:2.42556" />
+              </g>
+              <g
+                 id="g96-7-4"
+                 style="fill:none;stroke-width:2.42556">
+                <path
+                   id="path98-7-2"
+                   inkscape:connector-curvature="0"
+                   d="m 2356,3259 -92,13 -17,2173 1425,399 35,-116 -1369,-365 z"
+                   style="stroke-width:2.42556" />
+              </g>
+              <g
+                 id="g100-1-2"
+                 style="fill:#000000;fill-opacity:0.23137;stroke:#ffffff;stroke-width:2.42556;stroke-opacity:0.23137">
+                <path
+                   id="path102-64-6"
+                   inkscape:connector-curvature="0"
+                   d="m 3700,4065 -2,61 -1340,-386 z"
+                   style="stroke-width:2.42556" />
+              </g>
+              <g
+                 id="g106-1-1"
+                 style="fill:#000000;fill-opacity:0.23137;stroke:#ffffff;stroke-width:2.42556;stroke-opacity:0.23137">
+                <path
+                   id="path108-3-2"
+                   inkscape:connector-curvature="0"
+                   d="m 3720,4507 -3,61 -1339,-386 z"
+                   style="stroke-width:2.42556" />
+              </g>
+              <g
+                 id="g112-9-8"
+                 style="fill:#000000;fill-opacity:0.23137;stroke:#ffffff;stroke-width:2.42556;stroke-opacity:0.23137">
+                <path
+                   id="path114-09-9"
+                   inkscape:connector-curvature="0"
+                   d="m 3700,4916 -2,61 -1340,-386 z"
+                   style="stroke-width:2.42556" />
+              </g>
+              <g
+                 id="g118-8-8"
+                 style="fill:#000000;fill-opacity:0.23137;stroke:#ffffff;stroke-width:2.42556;stroke-opacity:0.23137">
+                <path
+                   id="path120-3-8"
+                   inkscape:connector-curvature="0"
+                   d="m 3700,5318 -2,61 -1340,-387 z"
+                   style="stroke-width:2.42556" />
+              </g>
+              <g
+                 id="g124-5-6"
+                 style="fill:#9e9e9e;stroke-width:2.42556">
+                <path
+                   id="path126-3-8"
+                   inkscape:connector-curvature="0"
+                   d="m 2361,3309 1332,333 -11,2197 h 11 11 l 11,-2205 v -9 l -8,-2 -1341,-335 -2,11 z m 1340,335 -8,-2 v -8 h 11 z"
+                   style="stroke-width:2.42556" />
+              </g>
+            </g>
+          </g>
+        </g>
+        <g
+           id="g16724-3"
+           transform="matrix(0.52218647,0,0,0.42933357,-400.52138,1028.8214)"
+           style="stroke-width:2.42556">
+          <path
+             id="path5488-8"
+             d="m 1618.4,-890.85 v 126.36 h 0.5249 c -0.3385,1.0131 -0.5249,1.975 -0.5249,3.0182 0,15.228 36.989,27.557 82.672,27.557 45.683,0 82.672,-12.33 82.672,-27.557 0,-1.0447 -0.1856,-2.0037 -0.5249,-3.0182 h 0.5249 v -126.36 h -165.34 z"
+             sodipodi:nodetypes="cccssscccc"
+             style="fill:url(#linearGradient11801);stroke-width:2.42556"
+             inkscape:connector-curvature="0" />
+          <ellipse
+             id="path5460-3"
+             style="fill:url(#linearGradient11803);stroke-width:2.42556"
+             transform="matrix(4.9627,0,0,4.9627,278.63,-3481.3)"
+             cx="286.6308"
+             cy="521.77954"
+             rx="16.667517"
+             ry="5.5558391" />
+          <path
+             id="path6026-3"
+             d="m 1618.3,-800.18 c 0.6187,15.05 37.507,27.164 82.804,27.164 45.168,0 81.851,-12.042 82.672,-27.033 -14.494,12.328 -46.02,20.865 -82.672,20.865 -36.727,0 -68.35,-8.6271 -82.804,-20.996 z"
+             style="fill:#3b5d8b;stroke-width:2.42556"
+             inkscape:connector-curvature="0" />
+          <path
+             id="path6030-3"
+             d="m 1618.3,-891.51 c 0.6187,15.05 37.507,27.164 82.804,27.164 45.168,0 81.851,-12.042 82.672,-27.033 -0.9058,0.77052 -1.8509,1.4911 -2.8869,2.2308 -0.038,0.0491 -0.091,0.0823 -0.131,0.13101 -9.6253,11.663 -41.587,20.209 -79.654,20.209 -38.306,0 -70.487,-8.6955 -79.917,-20.471 -0.1046,-0.0752 -0.1596,-0.18729 -0.2625,-0.26245 -0.9185,-0.67058 -1.8123,-1.2733 -2.6245,-1.9684 z"
+             style="fill:url(#linearGradient11805);stroke-width:2.42556"
+             inkscape:connector-curvature="0" />
+          <path
+             id="path6022-8"
+             style="fill:#3b5d8b;stroke-width:2.42556"
+             inkscape:connector-curvature="0"
+             d="m 1618.3,-844.36 c 0.6187,15.05 37.507,27.164 82.804,27.164 45.168,0 81.851,-12.042 82.672,-27.033 -14.494,12.328 -46.02,20.865 -82.672,20.865 -36.727,0 -68.35,-8.6271 -82.804,-20.996 z" />
+          <path
+             id="path6043-0"
+             d="m 1618.3,-844.36 c 0.6187,15.05 37.507,27.164 82.804,27.164 45.168,0 81.851,-12.042 82.672,-27.033 -0.2087,0.17721 -0.4427,0.3519 -0.6561,0.52491 -5.2161,13.55 -39.937,24.014 -82.016,24.014 -42.466,0 -77.55,-10.545 -82.279,-24.277 -0.1684,-0.13312 -0.3624,-0.2549 -0.5249,-0.39347 z"
+             style="fill:url(#linearGradient11807);stroke-width:2.42556"
+             inkscape:connector-curvature="0" />
+          <path
+             id="path6054-4"
+             style="fill:url(#linearGradient11809);stroke-width:2.42556"
+             inkscape:connector-curvature="0"
+             d="m 1618.3,-800.18 c 0.6187,15.05 37.507,27.164 82.804,27.164 45.168,0 81.851,-12.042 82.672,-27.033 -0.2087,0.17721 -0.4427,0.3519 -0.6561,0.52491 -5.2161,13.55 -39.937,24.014 -82.016,24.014 -42.466,0 -77.55,-10.545 -82.279,-24.277 -0.1684,-0.13312 -0.3624,-0.2549 -0.5249,-0.39347 z" />
+          <path
+             id="path6060-7"
+             d="m 1618.8,-754.64 c 4.7284,13.732 39.813,24.277 82.279,24.277 42.079,0 76.8,-10.464 82.016,-24.014 -14.766,12.043 -45.892,20.34 -82.016,20.34 -36.314,0 -67.608,-8.4562 -82.279,-20.602 z"
+             style="fill:#3b5d8b;stroke-width:2.42556"
+             inkscape:connector-curvature="0" />
+        </g>
+      </g>
+      <text
+         xml:space="preserve"
+         style="font-weight:bold;font-size:13.3333px;line-height:125%;font-family:'Nimbus Roman';-inkscape-font-specification:'Nimbus Roman, Bold';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         x="-15.501629"
+         y="651.78131"
+         id="text1185"><tspan
+           sodipodi:role="line"
+           id="tspan1183"
+           x="-15.501629"
+           y="651.78131"
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';stroke:none">source repositories </tspan></text>
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-weight:bold;font-size:42.5884px;line-height:125%;font-family:'Nimbus Roman';-inkscape-font-specification:'Nimbus Roman, Bold';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="142.22464"
+       y="565.10297"
+       id="text907"><tspan
+         sodipodi:role="line"
+         id="tspan905"
+         x="142.22464"
+         y="565.10297" /></text>
+    <text
+       xml:space="preserve"
+       style="font-weight:bold;font-size:42.5884px;line-height:125%;font-family:'Nimbus Roman';-inkscape-font-specification:'Nimbus Roman, Bold';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="98.363503"
+       y="637.8432"
+       id="text911"><tspan
+         sodipodi:role="line"
+         id="tspan909"
+         x="98.363503"
+         y="637.8432" /></text>
+    <text
+       xml:space="preserve"
+       style="font-weight:bold;font-size:42.5884px;line-height:125%;font-family:'Nimbus Roman';-inkscape-font-specification:'Nimbus Roman, Bold';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="-59.575905"
+       y="580.05695"
+       id="text915"><tspan
+         sodipodi:role="line"
+         id="tspan913"
+         x="-59.575905"
+         y="580.05695" /></text>
+    <g
+       id="g1153"
+       transform="translate(-10.813715,57.621063)">
+      <rect
+         style="opacity:1;fill:#deddda;fill-opacity:1;fill-rule:evenodd;stroke:#9a9996;stroke-width:2;stroke-opacity:1"
+         id="rect917"
+         width="125.52824"
+         height="69.017166"
+         x="196.65169"
+         y="503.49741"
+         ry="3.4599047" />
+      <text
+         xml:space="preserve"
+         style="font-weight:bold;font-size:13.3333px;line-height:125%;font-family:'Nimbus Roman';-inkscape-font-specification:'Nimbus Roman, Bold';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         x="259.14236"
+         y="523.42725"
+         id="text1185-3"><tspan
+           sodipodi:role="line"
+           id="tspan1183-8"
+           x="259.14236"
+           y="523.42725"
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle;stroke:none">project</tspan><tspan
+           sodipodi:role="line"
+           x="259.14236"
+           y="541.42395"
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle;stroke:none"
+           id="tspan959">&quot;master&quot;</tspan><tspan
+           sodipodi:role="line"
+           x="260.99133"
+           y="559.42059"
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';stroke:none"
+           id="tspan957"><tspan
+   style="text-align:center;text-anchor:middle"
+   id="tspan961">git repository</tspan> </tspan></text>
+    </g>
+    <g
+       id="g1125"
+       transform="matrix(0.22552185,0,0,0.22090333,92.716864,465.68288)"
+       style="stroke:none;stroke-width:4.48028">
+      <rect
+         style="opacity:1;fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:8.96054;stroke-opacity:1"
+         id="rect1061"
+         width="452.00439"
+         height="192.0562"
+         x="11.609296"
+         y="276.44562"
+         ry="4.0176301" />
+      <g
+         id="g1109"
+         transform="translate(-2.7615661,-1.7576335)"
+         style="stroke:none;stroke-width:4.48028">
+        <path
+           id="path14"
+           class="st0"
+           d="m 439.74452,358.11274 c 0,4.22 -3.41,7.64 -7.64,7.64 -4.22,0 -7.63,-3.42 -7.63,-7.64 0,-4.22 3.41,-7.64 7.63,-7.64 4.23,0 7.64,3.42 7.64,7.64 v 0"
+           style="fill:#4a97d2;fill-opacity:1;stroke:none;stroke-width:0.448028;stroke-opacity:1" />
+        <path
+           id="path16"
+           class="st1"
+           d="m 114.56452,324.94274 -11.13,-6.3 -22.409996,45.41 -23.9,-45.41 -11.27,6.3 28.41,53.38 c -0.21,0.51 -0.86,1.9 -1.95,4.22 -1.11,2.21 -2.25,4.41 -3.46,6.62 -2.11,3.81 -4.26,6.91 -6.46,9.32 -2.21,2.51 -4.46,4.51 -6.78,6.02 -2.3,1.51 -4.7,2.65 -7.21,3.46 -2.41,0.8 -4.87,1.45 -7.38,1.95 l 5.12,10.68 c 1.6,-0.21 3.75,-0.71 6.46,-1.51 2.81,-0.7 5.86,-2.06 9.17,-4.06 3.3,-2 6.67,-4.86 10.07,-8.57 3.52,-3.71 6.78,-8.62 9.78,-14.73 l 32.939996,-66.78"
+           style="fill:#ffffff;stroke:none;stroke-width:0.448028;stroke-opacity:1" />
+        <path
+           id="path18"
+           class="st1"
+           d="m 175.39452,358.18274 c 0,3.51 -0.6,6.76 -1.81,9.78 -1.21,3 -2.86,5.62 -4.95,7.81 -2.01,2.11 -4.41,3.81 -7.22,5.12 -2.71,1.19 -5.67,1.8 -8.87,1.8 -3.21,0 -6.22,-0.6 -9.02,-1.8 -2.81,-1.31 -5.27,-3.01 -7.38,-5.12 -2,-2.19 -3.6,-4.81 -4.81,-7.81 -1.21,-3.01 -1.81,-6.27 -1.81,-9.78 0,-3.51 0.6,-6.76 1.81,-9.77 1.21,-3 2.81,-5.61 4.81,-7.82 2.11,-2.21 4.57,-3.92 7.38,-5.11 2.8,-1.32 5.81,-1.97 9.02,-1.97 3.21,0 6.16,0.65 8.87,1.97 2.81,1.19 5.21,2.9 7.22,5.11 2.1,2.21 3.75,4.81 4.95,7.82 1.2,3.01 1.81,6.26 1.81,9.77 m 13.98,0 c 0,-5.21 -0.95,-10.08 -2.86,-14.59 -1.81,-4.51 -4.36,-8.42 -7.67,-11.73 -3.32,-3.3 -7.22,-5.86 -11.73,-7.67 -4.51,-1.9 -9.38,-2.86 -14.59,-2.86 -5.21,0 -10.08,0.95 -14.59,2.86 -4.51,1.81 -8.43,4.36 -11.73,7.67 -3.3,3.31 -5.92,7.22 -7.82,11.73 -1.9,4.51 -2.86,9.38 -2.86,14.59 0,5.21 0.95,10.08 2.86,14.59 1.9,4.41 4.52,8.27 7.82,11.57 3.3,3.32 7.22,5.92 11.73,7.82 4.51,1.81 9.38,2.71 14.59,2.71 5.21,0 10.08,-0.9 14.59,-2.71 4.51,-1.91 8.41,-4.51 11.73,-7.82 3.3,-3.3 5.86,-7.16 7.67,-11.57 1.91,-4.51 2.86,-9.38 2.86,-14.59"
+           style="fill:#ffffff;stroke:none;stroke-width:0.448028;stroke-opacity:1" />
+        <path
+           id="path20"
+           class="st1"
+           d="m 373.22452,358.18274 c 0,3.51 -0.6,6.76 -1.81,9.78 -1.21,3 -2.86,5.62 -4.97,7.81 -2,2.11 -4.4,3.81 -7.21,5.12 -2.71,1.19 -5.67,1.8 -8.87,1.8 -3.21,0 -6.22,-0.6 -9.03,-1.8 -2.8,-1.31 -5.26,-3.01 -7.37,-5.12 -2,-2.19 -3.61,-4.81 -4.81,-7.81 -1.21,-3.01 -1.81,-6.27 -1.81,-9.78 0,-3.51 0.6,-6.76 1.81,-9.77 1.21,-3 2.81,-5.61 4.81,-7.82 2.11,-2.21 4.57,-3.92 7.37,-5.11 2.81,-1.32 5.82,-1.97 9.03,-1.97 3.21,0 6.16,0.65 8.87,1.97 2.81,1.19 5.21,2.9 7.21,5.11 2.11,2.21 3.76,4.81 4.97,7.82 1.21,3.01 1.81,6.26 1.81,9.77 m 13.98,0 c 0,-5.21 -0.95,-10.08 -2.86,-14.59 -1.81,-4.51 -4.36,-8.42 -7.67,-11.73 -3.32,-3.3 -7.22,-5.86 -11.73,-7.67 -4.51,-1.9 -9.38,-2.86 -14.59,-2.86 -5.22,0 -10.08,0.95 -14.59,2.86 -4.51,1.81 -8.43,4.36 -11.73,7.67 -3.3,3.31 -5.92,7.22 -7.82,11.73 -1.9,4.51 -2.86,9.38 -2.86,14.59 0,5.21 0.95,10.08 2.86,14.59 1.9,4.41 4.52,8.27 7.82,11.57 3.3,3.32 7.22,5.92 11.73,7.82 4.51,1.81 9.37,2.71 14.59,2.71 5.21,0 10.08,-0.9 14.59,-2.71 4.51,-1.91 8.41,-4.51 11.73,-7.82 3.3,-3.3 5.86,-7.16 7.67,-11.57 1.91,-4.51 2.86,-9.38 2.86,-14.59"
+           style="fill:#ffffff;stroke:none;stroke-width:0.448028;stroke-opacity:1" />
+        <path
+           id="path22"
+           class="st1"
+           d="m 288.05452,298.59274 -13.39,7.52 v 16.45 h -36.21 c -26.15,0 -41.9,12.74 -41.9,35.95 0,36.04 37.55,42.84 64.25,29.96 l -5.63,-10.92 c -21.13,9.23 -44.53,5.3 -44.53,-19.28 0,-15.86 8.26,-24.54 27.49,-24.54 h 36.54 v 43.82 c 0,19.37 22.19,19.81 35.95,11.86 l -5.29,-10.45 c -8.85,4.48 -17.26,5.06 -17.26,-3.53 v -41.7 h 18.32 v -11.17 h -18.32 l -0.02,-23.97 v 0"
+           style="fill:#ffffff;stroke:none;stroke-width:0.448028;stroke-opacity:1" />
+        <path
+           id="path24"
+           class="st1"
+           d="m 136.79452,428.30274 h 3.35 c 1.69,-0.01 3.34,1.19 3.34,2.9 0,2.87 -3.23,3.3 -3.23,3.3 l -3.46,0.02 z m -4.84,-4.1 v 25.3 h 4.83 l 0.06,-10.67 c 8.62,0.54 11.84,-2.46 11.84,-7.75 0,-4.75 -4.26,-6.88 -8.34,-6.88 h -8.39 v 0"
+           style="fill:#ffffff;stroke:none;stroke-width:0.448028;stroke-opacity:1" />
+        <path
+           id="path26"
+           class="st1"
+           d="m 224.38452,436.87274 c 0,1.23 -0.23,2.39 -0.69,3.46 -0.42,1.04 -1.02,1.95 -1.81,2.74 -0.78,0.78 -1.7,1.4 -2.75,1.86 -1.04,0.42 -2.17,0.64 -3.38,0.64 -1.22,0 -2.35,-0.22 -3.39,-0.64 -1.05,-0.46 -1.96,-1.07 -2.75,-1.86 -0.76,-0.78 -1.36,-1.7 -1.81,-2.74 -0.46,-1.07 -0.69,-2.23 -0.69,-3.46 0,-1.23 0.23,-2.37 0.69,-3.42 0.45,-1.06 1.05,-1.99 1.81,-2.77 0.78,-0.78 1.7,-1.39 2.75,-1.82 1.04,-0.45 2.17,-0.67 3.39,-0.67 1.21,0 2.34,0.23 3.38,0.67 1.05,0.43 1.96,1.04 2.75,1.82 0.78,0.78 1.39,1.71 1.81,2.77 0.46,1.05 0.69,2.19 0.69,3.42 m 4.9,0 c 0,-1.81 -0.35,-3.5 -1.06,-5.06 -0.69,-1.59 -1.65,-2.97 -2.89,-4.12 -1.21,-1.17 -2.64,-2.09 -4.3,-2.75 -1.64,-0.69 -3.41,-1.04 -5.3,-1.04 -1.9,0 -3.69,0.35 -5.35,1.04 -1.64,0.66 -3.06,1.58 -4.27,2.75 -1.22,1.16 -2.17,2.53 -2.89,4.12 -0.69,1.57 -1.03,3.25 -1.03,5.06 0,1.83 0.34,3.53 1.03,5.1 0.72,1.57 1.68,2.94 2.89,4.12 1.21,1.17 2.63,2.09 4.27,2.75 1.66,0.66 3.45,1 5.35,1 1.89,0 3.67,-0.34 5.3,-1 1.66,-0.66 3.1,-1.58 4.3,-2.75 1.24,-1.18 2.21,-2.55 2.89,-4.12 0.71,-1.56 1.06,-3.26 1.06,-5.1"
+           style="fill:#ffffff;stroke:none;stroke-width:0.448028;stroke-opacity:1" />
+        <path
+           id="path28"
+           class="st1"
+           d="m 249.02452,424.25274 v 19.18 c 0,0.77 -0.57,1.63 -1.51,1.65 l -1.51,0.06 0.08,4.7 1.41,0.02 c 4.73,0.07 6.36,-4.37 6.36,-6.45 v -19.13"
+           style="fill:#ffffff;stroke:none;stroke-width:0.448028;stroke-opacity:1" />
+        <path
+           id="path30"
+           class="st1"
+           d="m 290.20452,424.19274 h -16.13 v 25.22 h 16.2 l -0.07,-4.06 h -11.28 v -6.58 h 9.44 v -4.06 h -9.44 v -6.38 h 11.21 l 0.07,-4.14"
+           style="fill:#ffffff;stroke:none;stroke-width:0.448028;stroke-opacity:1" />
+        <path
+           id="path32"
+           class="st1"
+           d="m 327.39452,430.24274 c -8.26,-4.53 -16.39,-1.78 -16.39,6.52 0,6.69 6.43,11.84 17,6.31 l 1.53,4.13 c -10.15,5.58 -23.51,1.6 -23.51,-10.44 0,-10.91 11.85,-16.59 23.36,-10.61 l -1.99,4.09"
+           style="fill:#ffffff;stroke:none;stroke-width:0.448028;stroke-opacity:1" />
+        <path
+           id="path34"
+           class="st1"
+           d="m 366.07452,424.19274 0.01,4.13 h -8.05 v 21.16 h -4.85 v -21.15 h -7.73 l 0.11,-4.13 h 20.51"
+           style="fill:#ffffff;stroke:none;stroke-width:0.448028;stroke-opacity:1" />
+        <path
+           id="path36"
+           class="st1"
+           d="m 172.67452,428.30274 h 3.35 c 1.69,-0.01 3.34,1.19 3.34,2.9 0,2.87 -3.23,3.3 -3.23,3.3 l -3.46,0.02 z m -4.82,-4.1 v 25.3 h 4.82 v -10.89 h 3.2 l 5.59,10.89 h 5.5 l -6.67,-12.2 c 2.64,-1.18 4.01,-3.26 4.01,-6.22 0,-4.94 -4.33,-6.88 -9.09,-6.88 h -7.36 v 0"
+           style="fill:#ffffff;stroke:none;stroke-width:0.448028;stroke-opacity:1" />
+      </g>
+    </g>
+    <g
+       id="g1211"
+       transform="translate(26)">
+      <rect
+         style="fill:#ffbe6f;fill-opacity:1;fill-rule:evenodd;stroke:#ffa348;stroke-width:2;stroke-opacity:1"
+         id="rect917-2"
+         width="125.52824"
+         height="69.017166"
+         x="400.98758"
+         y="502.18555"
+         ry="3.4599047" />
+      <text
+         xml:space="preserve"
+         style="font-weight:bold;font-size:13.3333px;line-height:125%;font-family:'Nimbus Roman';-inkscape-font-specification:'Nimbus Roman, Bold';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         x="463.47824"
+         y="522.11536"
+         id="text1185-3-5"><tspan
+           sodipodi:role="line"
+           id="tspan1183-8-4"
+           x="463.47824"
+           y="522.11536"
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle;stroke:none">project</tspan><tspan
+           sodipodi:role="line"
+           x="463.47824"
+           y="540.11206"
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle;stroke:none"
+           id="tspan959-9">&quot;contrib&quot;</tspan><tspan
+           sodipodi:role="line"
+           x="465.32721"
+           y="558.1087"
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';stroke:none"
+           id="tspan957-6"><tspan
+   style="text-align:center;text-anchor:middle"
+   id="tspan961-2">git repository</tspan> </tspan></text>
+    </g>
+    <g
+       id="g1211-2"
+       transform="translate(301.39294,0.59191294)">
+      <rect
+         style="fill:#ffbe6f;fill-opacity:1;fill-rule:evenodd;stroke:#ffa348;stroke-width:2;stroke-opacity:1"
+         id="rect917-2-7"
+         width="125.52824"
+         height="69.017166"
+         x="400.98758"
+         y="502.18555"
+         ry="3.4599047" />
+      <text
+         xml:space="preserve"
+         style="font-weight:bold;font-size:13.3333px;line-height:125%;font-family:'Nimbus Roman';-inkscape-font-specification:'Nimbus Roman, Bold';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         x="463.47824"
+         y="522.11536"
+         id="text1185-3-5-0"><tspan
+           sodipodi:role="line"
+           id="tspan1183-8-4-8"
+           x="463.47824"
+           y="522.11536"
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle;stroke:none">local</tspan><tspan
+           sodipodi:role="line"
+           x="463.47824"
+           y="540.11206"
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle;stroke:none"
+           id="tspan959-9-9">development</tspan><tspan
+           sodipodi:role="line"
+           x="465.32721"
+           y="558.1087"
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';stroke:none"
+           id="tspan957-6-3"><tspan
+   style="text-align:center;text-anchor:middle"
+   id="tspan961-2-4">git repository</tspan> </tspan></text>
+    </g>
+    <g
+       id="g1315"
+       transform="translate(26,-6.418026)">
+      <rect
+         style="fill:#99c1f1;fill-opacity:1;fill-rule:evenodd;stroke:#62a0ea;stroke-width:2;stroke-opacity:1"
+         id="rect917-2-4"
+         width="125.52824"
+         height="69.017166"
+         x="400.02109"
+         y="630.14075"
+         ry="3.4599047" />
+      <text
+         xml:space="preserve"
+         style="font-weight:bold;font-size:13.3333px;line-height:125%;font-family:'Nimbus Roman';-inkscape-font-specification:'Nimbus Roman, Bold';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         x="462.51175"
+         y="650.07056"
+         id="text1185-3-5-5"><tspan
+           sodipodi:role="line"
+           id="tspan1183-8-4-4"
+           x="462.51175"
+           y="650.07056"
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle;stroke:none">project</tspan><tspan
+           sodipodi:role="line"
+           x="462.51175"
+           y="668.06726"
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle;stroke:none"
+           id="tspan959-9-97">&quot;contrib&quot;</tspan><tspan
+           sodipodi:role="line"
+           x="464.36072"
+           y="686.0639"
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';stroke:none"
+           id="tspan957-6-5"><tspan
+   style="text-align:center;text-anchor:middle"
+   id="tspan961-2-44">git repository</tspan> </tspan></text>
+    </g>
+    <g
+       id="g1315-2"
+       transform="translate(305.48304,-6.418026)">
+      <rect
+         style="fill:#99c1f1;fill-opacity:1;fill-rule:evenodd;stroke:#62a0ea;stroke-width:2;stroke-opacity:1"
+         id="rect917-2-4-6"
+         width="125.52824"
+         height="69.017166"
+         x="400.02109"
+         y="630.14075"
+         ry="3.4599047" />
+      <text
+         xml:space="preserve"
+         style="font-weight:bold;font-size:13.3333px;line-height:125%;font-family:'Nimbus Roman';-inkscape-font-specification:'Nimbus Roman, Bold';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         x="462.51175"
+         y="650.07056"
+         id="text1185-3-5-5-6"><tspan
+           sodipodi:role="line"
+           id="tspan1183-8-4-4-9"
+           x="462.51175"
+           y="650.07056"
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle;stroke:none">project</tspan><tspan
+           sodipodi:role="line"
+           x="462.51175"
+           y="668.06726"
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle;stroke:none"
+           id="tspan959-9-97-7">development</tspan><tspan
+           sodipodi:role="line"
+           x="464.36072"
+           y="686.0639"
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';stroke:none"
+           id="tspan957-6-5-4"><tspan
+   style="text-align:center;text-anchor:middle"
+   id="tspan961-2-44-8">git repository</tspan> </tspan></text>
+    </g>
+    <path
+       style="fill:#ffa348;fill-rule:evenodd;stroke:#ffa348;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Arrow2Mstart);marker-end:url(#Arrow2Mend)"
+       d="m 552.51582,536.82903 149.8647,0.32211"
+       id="path3307"
+       inkscape:connector-type="polyline"
+       inkscape:connector-curvature="0"
+       inkscape:connection-start="#g1211"
+       inkscape:connection-end="#g1211-2" />
+    <text
+       xml:space="preserve"
+       style="font-weight:bold;font-size:42.5884px;line-height:125%;font-family:'Nimbus Roman';-inkscape-font-specification:'Nimbus Roman, Bold';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="313.46567"
+       y="412.9321"
+       id="text3781"><tspan
+         sodipodi:role="line"
+         id="tspan3779"
+         x="313.46567"
+         y="412.9321" /></text>
+    <text
+       xml:space="preserve"
+       style="font-weight:bold;font-size:13.3333px;line-height:125%;font-family:'Nimbus Roman';-inkscape-font-specification:'Nimbus Roman, Bold';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="580.85419"
+       y="524.23517"
+       id="text1185-9"><tspan
+         sodipodi:role="line"
+         id="tspan1183-1"
+         x="580.85419"
+         y="524.23517"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';stroke:none">git pull and push</tspan></text>
+    <path
+       style="fill:#62a0ea;fill-opacity:1;fill-rule:evenodd;stroke:#62a0ea;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker4174);marker-end:url(#marker4286)"
+       d="M 551.54932,660.2313 H 705.50413"
+       id="path4056"
+       inkscape:connector-type="polyline"
+       inkscape:connector-curvature="0"
+       inkscape:connection-start="#g1315"
+       inkscape:connection-end="#g1315-2" />
+    <text
+       xml:space="preserve"
+       style="font-weight:bold;font-size:13.3333px;line-height:125%;font-family:'Nimbus Roman';-inkscape-font-specification:'Nimbus Roman, Bold';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="580.85419"
+       y="647.90686"
+       id="text1185-9-4"><tspan
+         sodipodi:role="line"
+         id="tspan1183-1-6"
+         x="580.85419"
+         y="647.90686"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';stroke:none">git pull and push</tspan></text>
+    <path
+       style="fill:#62a0ea;fill-rule:evenodd;stroke:#62a0ea;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4414)"
+       d="M 551.54932,632.30915 702.38052,565.2082"
+       id="path4404"
+       inkscape:connector-type="polyline"
+       inkscape:connector-curvature="0"
+       inkscape:connection-start="#g1315"
+       inkscape:connection-end="#g1211-2" />
+    <path
+       style="fill:#ffa348;fill-opacity:1;fill-rule:evenodd;stroke:#ffa348;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4604)"
+       d="m 552.51582,564.53342 152.98831,67.8586"
+       id="path4494"
+       inkscape:connector-type="polyline"
+       inkscape:connector-curvature="0"
+       inkscape:connection-start="#g1211"
+       inkscape:connection-end="#g1315-2" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4712)"
+       d="M 426.98758,552.03263 311.36621,580.28855"
+       id="path4702"
+       inkscape:connector-type="polyline"
+       inkscape:connector-curvature="0"
+       inkscape:connection-start="#g1211"
+       inkscape:connection-end="#g1153" />
+    <text
+       xml:space="preserve"
+       style="font-weight:bold;font-size:13.3333px;line-height:125%;font-family:'Nimbus Roman';-inkscape-font-specification:'Nimbus Roman, Bold';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="377.95239"
+       y="595.54547"
+       id="text1185-9-0"><tspan
+         sodipodi:role="line"
+         x="377.95239"
+         y="595.54547"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;stroke:none"
+         id="tspan4840">git pull from the</tspan><tspan
+         sodipodi:role="line"
+         x="377.95239"
+         y="613.54218"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;stroke:none"
+         id="tspan4844">maintainer</tspan></text>
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4978)"
+       d="M 426.02109,643.34906 311.36621,612.50929"
+       id="path4850"
+       inkscape:connector-type="polyline"
+       inkscape:connector-curvature="0"
+       inkscape:connection-start="#g1315"
+       inkscape:connection-end="#g1153" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker5285);marker-end:url(#marker5161)"
+       d="M 75.034463,595.62705 H 185.83797"
+       id="path5151"
+       inkscape:connector-type="polyline"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-weight:bold;font-size:13.3333px;line-height:125%;font-family:'Nimbus Roman';-inkscape-font-specification:'Nimbus Roman, Bold';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="266.03806"
+       y="439.90387"
+       id="text1185-9-7"><tspan
+         sodipodi:role="line"
+         id="tspan1183-1-2"
+         x="266.03806"
+         y="439.90387"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';stroke:none">git pull</tspan></text>
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.99999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5623)"
+       d="M 250.16567,560.37713 V 455.50595 h 515.77219 l -0.12369,46.24529"
+       id="path6123"
+       sodipodi:nodetypes="cccc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.99999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker5623-2)"
+       d="m 250.61744,629.82817 v 107.36644 h 515.77214 v -42.1946"
+       id="path6123-0"
+       sodipodi:nodetypes="cccc" />
+    <text
+       xml:space="preserve"
+       style="font-weight:bold;font-size:13.3333px;line-height:125%;font-family:'Nimbus Roman';-inkscape-font-specification:'Nimbus Roman, Bold';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="266.03806"
+       y="720.30841"
+       id="text1185-9-7-7"><tspan
+         sodipodi:role="line"
+         id="tspan1183-1-2-6"
+         x="266.03806"
+         y="720.30841"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';stroke:none">git pull</tspan></text>
+  </g>
+  <style
+     type="text/css"
+     id="style1021"> .st0{fill:#4A97D2;} .st1{fill:#333333;} </style>
+</svg>
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Re: [docs] [RFC 0/3] add support for diagrams generated from SVG sources
  2021-05-15  7:12 [RFC 0/3] add support for diagrams generated from SVG sources Michael Opdenacker
                   ` (2 preceding siblings ...)
  2021-05-15  7:12 ` [RFC 3/3] overview-manual: SVG diagram for the git workflow Michael Opdenacker
@ 2021-05-16 22:11 ` Nicolas Dechesne
  2021-05-17  8:45   ` Michael Opdenacker
  3 siblings, 1 reply; 14+ messages in thread
From: Nicolas Dechesne @ 2021-05-16 22:11 UTC (permalink / raw)
  To: Michael Opdenacker; +Cc: YP docs mailing list

[-- Attachment #1: Type: text/plain, Size: 2795 bytes --]

On Sat, May 15, 2021 at 9:12 AM Michael Opdenacker <
michael.opdenacker@bootlin.com> wrote:

> This RFC proposes modifications to the Makefile and the Sphinx
> configuration (conf.py file) to support:
>
> - The generation of PNG diagrams from SVG sources for the generation
>   of the EPUB manual. Directly using SVG in EPUB shows at least
>   font size and alignment issues.
>
>   The conf.py file has been modified to let the EPUB builder know
>   that it should prefer PNG over SVG when both formats are available.


> - The generation of PDF diagrams from SVG sources for the generation
>   of the PDF manual. PDF output cannot use SVG, and needs PDF diagrams
>   instead.
>
> New diagrams are stored in separate "svg" directories so that generated
> .png and .pdf files can be "gitignored" without ignoring the original
> .png files that have no .svg source.
>
> In the source .rst files, new diagrams can now be included as, for example:
> image:: svg/git-workflow.*
>
> Note that the way the Makefile was modified can most probably be improved,
> as my "make" skills are pretty limited. I'm interested in your suggestions!
>

Getting more svg files is definitely the way to go.. thanks for starting
this. It seems like there are sphinx extensions to convert images as
needed, e.g.
https://www.sphinx-doc.org/en/master/usage/extensions/imgconverter.html
or
https://github.com/sephalon/sphinxcontrib-svg2pdfconverter
which seems to support inkscape:
https://github.com/sephalon/sphinxcontrib-svg2pdfconverter/blob/master/sphinxcontrib/inkscapeconverter.py


Have you looked into that or not?


> My goal is to progressively replace PNG diagrams with SVG ones:
>    - To get high quality definition output documents, in all output formats
>    - To Have the ability to update diagrams
> I would indeed do this very progressively, a little bit every week,
> not at the expense of other tasks.
>
> Michael Opdenacker (3):
>   Makefile: allow epub and latexpdf outputs to use diagrams from SVG
>     sources
>   conf.py: prefer PNG to SVG in EPUB output
>   overview-manual: SVG diagram for the git workflow
>
>  documentation/.gitignore                      |    2 +
>  documentation/Makefile                        |   29 +-
>  documentation/conf.py                         |    4 +
>  .../development-environment.rst               |    4 +-
>  .../overview-manual/figures/git-workflow.png  |  Bin 26586 -> 0 bytes
>  .../overview-manual/svg/git-workflow.svg      | 1205 +++++++++++++++++
>  6 files changed, 1239 insertions(+), 5 deletions(-)
>  delete mode 100644 documentation/overview-manual/figures/git-workflow.png
>  create mode 100644 documentation/overview-manual/svg/git-workflow.svg
>
> --
> 2.25.1
>
>
> 
>
>

[-- Attachment #2: Type: text/html, Size: 3991 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [docs] [RFC 1/3] Makefile: allow epub and latexpdf outputs to use diagrams from SVG sources
  2021-05-15  7:12 ` [RFC 1/3] Makefile: allow epub and latexpdf outputs to use diagrams " Michael Opdenacker
@ 2021-05-16 22:12   ` Nicolas Dechesne
  2021-05-17  8:50     ` Michael Opdenacker
  2021-05-28 14:40   ` Quentin Schulz
  1 sibling, 1 reply; 14+ messages in thread
From: Nicolas Dechesne @ 2021-05-16 22:12 UTC (permalink / raw)
  To: Michael Opdenacker; +Cc: YP docs mailing list

[-- Attachment #1: Type: text/plain, Size: 3693 bytes --]

On Sat, May 15, 2021 at 9:12 AM Michael Opdenacker <
michael.opdenacker@bootlin.com> wrote:

> html output is great when directly using SVG
> epub output has to use exported PNG because of issues using SVG directly
> latexpdf output cannot use SVG, it needs exported PDF instead
>
> This adds rules to generate PNG and PDF formats from new SVG sources.
>
> Newly added diagrams have be stored in svg/ subdirectories
> so that PNG and PDF files generated from SVG can be "gitignored"
> without ignoring the original PNG diagrams that have no SVG source.
>
> Note: had to remove the dependency to "Makefile" in the final "catch-all"
> target,
> otherwise it was also catching my SVG to PNG and SVG to PDF targets.
> Any suggest to avoid having to do this?
>
> Signed-off-by: Michael Opdenacker <michael.opdenacker@bootlin.com>
> ---
>  documentation/.gitignore |  2 ++
>  documentation/Makefile   | 29 ++++++++++++++++++++++++++---
>  2 files changed, 28 insertions(+), 3 deletions(-)
>
> diff --git a/documentation/.gitignore b/documentation/.gitignore
> index c44580b088..35ead8af66 100644
> --- a/documentation/.gitignore
> +++ b/documentation/.gitignore
> @@ -1,3 +1,5 @@
>  _build/
>  Pipfile.lock
>  .vscode/
> +*/svg/*.png
> +*/svg/*.pdf
> diff --git a/documentation/Makefile b/documentation/Makefile
> index d40f390e2b..acb09726cd 100644
> --- a/documentation/Makefile
> +++ b/documentation/Makefile
> @@ -6,8 +6,11 @@
>  SPHINXOPTS    ?= -j auto
>  SPHINXBUILD   ?= sphinx-build
>  SOURCEDIR     = .
> +IMAGEDIRS     = */svg
>  BUILDDIR      = _build
>  DESTDIR       = final
> +SVG2PNG       = inkscape
> +SVG2PDF       = inkscape
>

It is a new host dependency, we need to update the README and have a
meaningful error message.


>
>  ifeq ($(shell if which $(SPHINXBUILD) >/dev/null 2>&1; then echo 1; else
> echo 0; fi),0)
>  $(error "The '$(SPHINXBUILD)' command was not found. Make sure you have
> Sphinx installed")
> @@ -17,7 +20,7 @@ endif
>  help:
>         @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS)
> $(O)
>
> -.PHONY: help Makefile clean publish
> +.PHONY: help Makefile clean publish epub latexpdf
>
>  publish: Makefile html singlehtml
>         rm -rf $(BUILDDIR)/$(DESTDIR)/
> @@ -26,10 +29,30 @@ publish: Makefile html singlehtml
>         cp $(BUILDDIR)/singlehtml/index.html
> $(BUILDDIR)/$(DESTDIR)/singleindex.html
>         sed -i -e 's@index.html#@singleindex.html#@g'
> $(BUILDDIR)/$(DESTDIR)/singleindex.html
>
> +# Build a list of SVG files to convert to PDFs
> +PDFs := $(foreach dir, $(IMAGEDIRS), $(patsubst %.svg,%.pdf,$(wildcard
> $(SOURCEDIR)/$(dir)/*.svg)))
> +
> +# Build a list of SVG files to convert to PNGs
> +PNGs := $(foreach dir, $(IMAGEDIRS), $(patsubst %.svg,%.png,$(wildcard
> $(SOURCEDIR)/$(dir)/*.svg)))
> +
> +# Pattern rule for converting SVG to PDF
> +%.pdf : %.svg
> +       $(SVG2PDF) --export-filename=$@ $<
> +
> +# Pattern rule for converting SVG to PNG
> +%.png : %.svg
> +       $(SVG2PNG) --export-filename=$@ $<
> +
>  clean:
> -       @rm -rf $(BUILDDIR)
> +       @rm -rf $(BUILDDIR) $(PNGs) $(PDFs)
> +
> +epub: $(PNGs)
> +       @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS)
> $(O)
> +
> +latexpdf: $(PDFs)
> +       @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS)
> $(O)
>
>  # Catch-all target: route all unknown targets to Sphinx using the new
>  # "make mode" option.  $(O) is meant as a shortcut for $(SPHINXOPTS).
> -%: Makefile
> +%:
>         @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS)
> $(O)
> --
> 2.25.1
>
>
> 
>
>

[-- Attachment #2: Type: text/html, Size: 4666 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [docs] [RFC 2/3] conf.py: prefer PNG to SVG in EPUB output
  2021-05-15  7:12 ` [RFC 2/3] conf.py: prefer PNG to SVG in EPUB output Michael Opdenacker
@ 2021-05-16 22:29   ` Nicolas Dechesne
  2021-05-17  8:36     ` Michael Opdenacker
  0 siblings, 1 reply; 14+ messages in thread
From: Nicolas Dechesne @ 2021-05-16 22:29 UTC (permalink / raw)
  To: Michael Opdenacker; +Cc: YP docs mailing list

[-- Attachment #1: Type: text/plain, Size: 1106 bytes --]

On Sat, May 15, 2021 at 9:13 AM Michael Opdenacker <
michael.opdenacker@bootlin.com> wrote:

> SVG directly included in EPUB output has multiple issues,
> in particular font size and alignment ones (tested on two
> EPUB readers).
>
> Signed-off-by: Michael Opdenacker <michael.opdenacker@bootlin.com>
> ---
>  documentation/conf.py | 4 ++++
>  1 file changed, 4 insertions(+)
>
> diff --git a/documentation/conf.py b/documentation/conf.py
> index 5a2e25f7b2..798a365c7f 100644
> --- a/documentation/conf.py
> +++ b/documentation/conf.py
> @@ -136,3 +136,7 @@ latex_elements = {
>      'passoptionstopackages':
> '\PassOptionsToPackage{bookmarksdepth=5}{hyperref}',
>      'preamble': '\setcounter{tocdepth}{2}',
>  }
> +
> +# Make the EPUB builder prefer PNG to SVG because of issues rendering
> Inkscape SVG
> +from sphinx.builders.epub3 import Epub3Builder
> +Epub3Builder.supported_image_types = ['image/png', 'image/svg+xml',
> 'image/gif', 'image/jpeg']
>

If you concluded svg has issues, should we remove it from this list
instead?


> --
> 2.25.1
>
>
> 
>
>

[-- Attachment #2: Type: text/html, Size: 1777 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [docs] [RFC 2/3] conf.py: prefer PNG to SVG in EPUB output
  2021-05-16 22:29   ` [docs] " Nicolas Dechesne
@ 2021-05-17  8:36     ` Michael Opdenacker
  0 siblings, 0 replies; 14+ messages in thread
From: Michael Opdenacker @ 2021-05-17  8:36 UTC (permalink / raw)
  To: Nicolas Dechesne; +Cc: YP docs mailing list

Hi Nicolas,

Thanks for the review!

On 5/17/21 12:29 AM, Nicolas Dechesne wrote:
>
>
> On Sat, May 15, 2021 at 9:13 AM Michael Opdenacker
> <michael.opdenacker@bootlin.com
> <mailto:michael.opdenacker@bootlin.com>> wrote:
>
>     SVG directly included in EPUB output has multiple issues,
>     in particular font size and alignment ones (tested on two
>     EPUB readers).
>
>     Signed-off-by: Michael Opdenacker <michael.opdenacker@bootlin.com
>     <mailto:michael.opdenacker@bootlin.com>>
>     ---
>      documentation/conf.py | 4 ++++
>      1 file changed, 4 insertions(+)
>
>     diff --git a/documentation/conf.py b/documentation/conf.py
>     index 5a2e25f7b2..798a365c7f 100644
>     --- a/documentation/conf.py
>     +++ b/documentation/conf.py
>     @@ -136,3 +136,7 @@ latex_elements = {
>          'passoptionstopackages':
>     '\PassOptionsToPackage{bookmarksdepth=5}{hyperref}',
>          'preamble': '\setcounter{tocdepth}{2}',
>      }
>     +
>     +# Make the EPUB builder prefer PNG to SVG because of issues
>     rendering Inkscape SVG
>     +from sphinx.builders.epub3 import Epub3Builder
>     +Epub3Builder.supported_image_types = ['image/png',
>     'image/svg+xml', 'image/gif', 'image/jpeg']
>
>
> If you concluded svg has issues, should we remove it from this list
> instead?


This definitely makes sense, indeed. I made this change for the next
version I submit.

Cheers,

Michael.

-- 
Michael Opdenacker, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [docs] [RFC 0/3] add support for diagrams generated from SVG sources
  2021-05-16 22:11 ` [docs] [RFC 0/3] add support for diagrams generated from SVG sources Nicolas Dechesne
@ 2021-05-17  8:45   ` Michael Opdenacker
  2021-05-17 12:33     ` Nicolas Dechesne
  0 siblings, 1 reply; 14+ messages in thread
From: Michael Opdenacker @ 2021-05-17  8:45 UTC (permalink / raw)
  To: Nicolas Dechesne; +Cc: YP docs mailing list

Hi Nicolas,

On 5/17/21 12:11 AM, Nicolas Dechesne wrote:
>
>
>
> Getting more svg files is definitely the way to go.. thanks for
> starting this. It seems like there are sphinx extensions to convert
> images as needed, e.g.
> https://www.sphinx-doc.org/en/master/usage/extensions/imgconverter.html
> <https://www.sphinx-doc.org/en/master/usage/extensions/imgconverter.html>
> or
> https://github.com/sephalon/sphinxcontrib-svg2pdfconverter
> <https://github.com/sephalon/sphinxcontrib-svg2pdfconverter>
> which seems to support inkscape:
> https://github.com/sephalon/sphinxcontrib-svg2pdfconverter/blob/master/sphinxcontrib/inkscapeconverter.py
> <https://github.com/sephalon/sphinxcontrib-svg2pdfconverter/blob/master/sphinxcontrib/inkscapeconverter.py> 
>
> Have you looked into that or not?


Not yet, but this sounds like a much better option for converting SVG to
PNG and PDF, rather than having to do this manually in the Makefile.
I will try to use those.

Thanks for the great suggestion!
Michael.

-- 
Michael Opdenacker, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [docs] [RFC 1/3] Makefile: allow epub and latexpdf outputs to use diagrams from SVG sources
  2021-05-16 22:12   ` [docs] " Nicolas Dechesne
@ 2021-05-17  8:50     ` Michael Opdenacker
  2021-05-17 12:26       ` Nicolas Dechesne
  0 siblings, 1 reply; 14+ messages in thread
From: Michael Opdenacker @ 2021-05-17  8:50 UTC (permalink / raw)
  To: Nicolas Dechesne; +Cc: YP docs mailing list

Nicolas,

On 5/17/21 12:12 AM, Nicolas Dechesne wrote:
>
>     +SVG2PNG       = inkscape
>     +SVG2PDF       = inkscape
>
>
> It is a new host dependency, we need to update the README and have a
> meaningful error message.

Yes, depending on the solution that is used, I'll update the list of
package requirements.

I guess we will also have to install those on the autobuilder machine(s)
too, otherwise it will break. Will this be manual, or is there a file we
need to fill so that the right packages are automatically installed on
the autobuilder(s)?

Thanks

Michael.

-- 
Michael Opdenacker, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [docs] [RFC 1/3] Makefile: allow epub and latexpdf outputs to use diagrams from SVG sources
  2021-05-17  8:50     ` Michael Opdenacker
@ 2021-05-17 12:26       ` Nicolas Dechesne
  0 siblings, 0 replies; 14+ messages in thread
From: Nicolas Dechesne @ 2021-05-17 12:26 UTC (permalink / raw)
  To: Michael Opdenacker; +Cc: YP docs mailing list

[-- Attachment #1: Type: text/plain, Size: 1080 bytes --]

On Mon, May 17, 2021 at 10:50 AM Michael Opdenacker <
michael.opdenacker@bootlin.com> wrote:

> Nicolas,
>
> On 5/17/21 12:12 AM, Nicolas Dechesne wrote:
> >
> >     +SVG2PNG       = inkscape
> >     +SVG2PDF       = inkscape
> >
> >
> > It is a new host dependency, we need to update the README and have a
> > meaningful error message.
>
> Yes, depending on the solution that is used, I'll update the list of
> package requirements.
>
> I guess we will also have to install those on the autobuilder machine(s)
> too, otherwise it will break. Will this be manual, or is there a file we
> need to fill so that the right packages are automatically installed on
> the autobuilder(s)?
>

Good question, I think Richard should answer it. The AB uses a 'docs'
buildtools, but I don't remember where it's coming from..
http://git.yoctoproject.org/cgit/cgit.cgi/yocto-autobuilder-helper/tree/scripts/run-docs-build#n8



>
> Thanks
>
> Michael.
>
> --
> Michael Opdenacker, Bootlin
> Embedded Linux and Kernel engineering
> https://bootlin.com
>
>

[-- Attachment #2: Type: text/html, Size: 1871 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [docs] [RFC 0/3] add support for diagrams generated from SVG sources
  2021-05-17  8:45   ` Michael Opdenacker
@ 2021-05-17 12:33     ` Nicolas Dechesne
  0 siblings, 0 replies; 14+ messages in thread
From: Nicolas Dechesne @ 2021-05-17 12:33 UTC (permalink / raw)
  To: Michael Opdenacker; +Cc: YP docs mailing list

[-- Attachment #1: Type: text/plain, Size: 1671 bytes --]

On Mon, May 17, 2021 at 10:45 AM Michael Opdenacker <
michael.opdenacker@bootlin.com> wrote:

> Hi Nicolas,
>
> On 5/17/21 12:11 AM, Nicolas Dechesne wrote:
> >
> >
> >
> > Getting more svg files is definitely the way to go.. thanks for
> > starting this. It seems like there are sphinx extensions to convert
> > images as needed, e.g.
> > https://www.sphinx-doc.org/en/master/usage/extensions/imgconverter.html
> > <https://www.sphinx-doc.org/en/master/usage/extensions/imgconverter.html
> >
> > or
> > https://github.com/sephalon/sphinxcontrib-svg2pdfconverter
> > <https://github.com/sephalon/sphinxcontrib-svg2pdfconverter>
> > which seems to support inkscape:
> >
> https://github.com/sephalon/sphinxcontrib-svg2pdfconverter/blob/master/sphinxcontrib/inkscapeconverter.py
> > <
> https://github.com/sephalon/sphinxcontrib-svg2pdfconverter/blob/master/sphinxcontrib/inkscapeconverter.py
> >
> >
> > Have you looked into that or not?
>
>
> Not yet, but this sounds like a much better option for converting SVG to
> PNG and PDF, rather than having to do this manually in the Makefile.
> I will try to use those.
>

FWIW, I really like the PDF output.. the whole doc in a single PDF is
great. We should make it a goal for this release cycle to produce and
release PDF (I know some prefer epub.. so perhaps we can do both).

We should probably review the PDF output and tweak it a bit, for example, I
don't think we need the "Current and Previous releases" sections.


>
> Thanks for the great suggestion!
> Michael.
>
> --
> Michael Opdenacker, Bootlin
> Embedded Linux and Kernel engineering
> https://bootlin.com
>
>

[-- Attachment #2: Type: text/html, Size: 3127 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [docs] [RFC 1/3] Makefile: allow epub and latexpdf outputs to use diagrams from SVG sources
  2021-05-15  7:12 ` [RFC 1/3] Makefile: allow epub and latexpdf outputs to use diagrams " Michael Opdenacker
  2021-05-16 22:12   ` [docs] " Nicolas Dechesne
@ 2021-05-28 14:40   ` Quentin Schulz
  2021-05-28 15:19     ` Michael Opdenacker
  1 sibling, 1 reply; 14+ messages in thread
From: Quentin Schulz @ 2021-05-28 14:40 UTC (permalink / raw)
  To: Michael Opdenacker; +Cc: docs

Hi Michael,

On Sat, May 15, 2021 at 09:12:17AM +0200, Michael Opdenacker wrote:
> html output is great when directly using SVG
> epub output has to use exported PNG because of issues using SVG directly
> latexpdf output cannot use SVG, it needs exported PDF instead
> 
> This adds rules to generate PNG and PDF formats from new SVG sources.
> 
> Newly added diagrams have be stored in svg/ subdirectories
> so that PNG and PDF files generated from SVG can be "gitignored"
> without ignoring the original PNG diagrams that have no SVG source.
> 
> Note: had to remove the dependency to "Makefile" in the final "catch-all" target,
> otherwise it was also catching my SVG to PNG and SVG to PDF targets.
> Any suggest to avoid having to do this?
> 
> Signed-off-by: Michael Opdenacker <michael.opdenacker@bootlin.com>
> ---
>  documentation/.gitignore |  2 ++
>  documentation/Makefile   | 29 ++++++++++++++++++++++++++---
>  2 files changed, 28 insertions(+), 3 deletions(-)
> 
> diff --git a/documentation/.gitignore b/documentation/.gitignore
> index c44580b088..35ead8af66 100644
> --- a/documentation/.gitignore
> +++ b/documentation/.gitignore
> @@ -1,3 +1,5 @@
>  _build/
>  Pipfile.lock
>  .vscode/
> +*/svg/*.png
> +*/svg/*.pdf
> diff --git a/documentation/Makefile b/documentation/Makefile
> index d40f390e2b..acb09726cd 100644
> --- a/documentation/Makefile
> +++ b/documentation/Makefile
> @@ -6,8 +6,11 @@
>  SPHINXOPTS    ?= -j auto
>  SPHINXBUILD   ?= sphinx-build
>  SOURCEDIR     = .
> +IMAGEDIRS     = */svg
>  BUILDDIR      = _build
>  DESTDIR       = final
> +SVG2PNG       = inkscape
> +SVG2PDF       = inkscape
>  
>  ifeq ($(shell if which $(SPHINXBUILD) >/dev/null 2>&1; then echo 1; else echo 0; fi),0)
>  $(error "The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed")
> @@ -17,7 +20,7 @@ endif
>  help:
>  	@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
>  
> -.PHONY: help Makefile clean publish
> +.PHONY: help Makefile clean publish epub latexpdf
>  
>  publish: Makefile html singlehtml
>  	rm -rf $(BUILDDIR)/$(DESTDIR)/
> @@ -26,10 +29,30 @@ publish: Makefile html singlehtml
>  	cp $(BUILDDIR)/singlehtml/index.html $(BUILDDIR)/$(DESTDIR)/singleindex.html
>  	sed -i -e 's@index.html#@singleindex.html#@g' $(BUILDDIR)/$(DESTDIR)/singleindex.html
>  
> +# Build a list of SVG files to convert to PDFs
> +PDFs := $(foreach dir, $(IMAGEDIRS), $(patsubst %.svg,%.pdf,$(wildcard $(SOURCEDIR)/$(dir)/*.svg)))
> +
> +# Build a list of SVG files to convert to PNGs
> +PNGs := $(foreach dir, $(IMAGEDIRS), $(patsubst %.svg,%.png,$(wildcard $(SOURCEDIR)/$(dir)/*.svg)))
> +
> +# Pattern rule for converting SVG to PDF
> +%.pdf : %.svg
> +	$(SVG2PDF) --export-filename=$@ $<
> +
> +# Pattern rule for converting SVG to PNG
> +%.png : %.svg
> +	$(SVG2PNG) --export-filename=$@ $<
> +
>  clean:
> -	@rm -rf $(BUILDDIR)
> +	@rm -rf $(BUILDDIR) $(PNGs) $(PDFs)
> +
> +epub: $(PNGs)
> +	@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
> +
> +latexpdf: $(PDFs)
> +	@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
>  
>  # Catch-all target: route all unknown targets to Sphinx using the new
>  # "make mode" option.  $(O) is meant as a shortcut for $(SPHINXOPTS).
> -%: Makefile
> +%:
>  	@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

Probably just a note to self but there's now a better chance of me not
forgetting :)

If this ever makes it (there's some interest so it'll probably make it
:) ), I'd very much like to see a `make all` which calls the epub,
latexpdf and html make targets so that I don't need to type all three
when I modify something :) (and it's easier if we decide to upload all
three kinds of outputs on yoctoproject.org).

Cheers,
Quentin

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [docs] [RFC 1/3] Makefile: allow epub and latexpdf outputs to use diagrams from SVG sources
  2021-05-28 14:40   ` Quentin Schulz
@ 2021-05-28 15:19     ` Michael Opdenacker
  0 siblings, 0 replies; 14+ messages in thread
From: Michael Opdenacker @ 2021-05-28 15:19 UTC (permalink / raw)
  To: Quentin Schulz; +Cc: docs

Hi Quentin,

On 5/28/21 4:40 PM, Quentin Schulz wrote:
> Probably just a note to self but there's now a better chance of me not
> forgetting :)
>
> If this ever makes it (there's some interest so it'll probably make it
> :) ), I'd very much like to see a `make all` which calls the epub,
> latexpdf and html make targets so that I don't need to type all three
> when I modify something :) (and it's easier if we decide to upload all
> three kinds of outputs on yoctoproject.org).


Good idea! I'll keep in in mind for the first patch I submit, hopefully
soon.

Thanks,

Michael.

-- 
Michael Opdenacker, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com


^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2021-05-28 15:19 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-05-15  7:12 [RFC 0/3] add support for diagrams generated from SVG sources Michael Opdenacker
2021-05-15  7:12 ` [RFC 1/3] Makefile: allow epub and latexpdf outputs to use diagrams " Michael Opdenacker
2021-05-16 22:12   ` [docs] " Nicolas Dechesne
2021-05-17  8:50     ` Michael Opdenacker
2021-05-17 12:26       ` Nicolas Dechesne
2021-05-28 14:40   ` Quentin Schulz
2021-05-28 15:19     ` Michael Opdenacker
2021-05-15  7:12 ` [RFC 2/3] conf.py: prefer PNG to SVG in EPUB output Michael Opdenacker
2021-05-16 22:29   ` [docs] " Nicolas Dechesne
2021-05-17  8:36     ` Michael Opdenacker
2021-05-15  7:12 ` [RFC 3/3] overview-manual: SVG diagram for the git workflow Michael Opdenacker
2021-05-16 22:11 ` [docs] [RFC 0/3] add support for diagrams generated from SVG sources Nicolas Dechesne
2021-05-17  8:45   ` Michael Opdenacker
2021-05-17 12:33     ` Nicolas Dechesne

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.