diff --git a/3D Modelling Skill Tree/3D_Modeling.yml b/3D Modelling Skill Tree/3D_Modeling.yml
new file mode 100644
index 0000000..f06a870
--- /dev/null
+++ b/3D Modelling Skill Tree/3D_Modeling.yml
@@ -0,0 +1,82 @@
+---
+title: 3D MODELING
+footer: MADE BY STEVEN MOHR & STEPH PIPER - MAKERQUEEN AU
+row:
+ 0:
+ - Know how to check size in 3D software
+ - Use boolean tools in 3D software
+ - Create a model in TinkerCAD
+ - Learn to navigate a 3D interface with pan, orbit and zoom
+ - Make a low poly model
+ - Use the extrude tool in 3D software
+ - Use the revolve tool in 3D software
+ 1:
+ - Draw a detailed sketch with dimensions before 3D modelling
+ - Create a model in MeshMixer
+ - Edit a texture in an image-editing software
+ - Make a 2D schematic of a 3D model
+ - Texture a low poly object
+ - Design something for 3D printing
+ - Upload a remix of a 3D model
+ 2:
+ - Rig a crane object with FK/IK system
+ - Create a 3D model from a 2D schematic
+ - Create a 3 point light setup
+ - Modify edge normals for low-poly asset design
+ - Model and make something that solves a problem
+ - UV unwrap a low-poly object
+ - Design a custom model for a friend
+ 3:
+ - Make a model in sculpting software e.g. Blender, Z-brush, Mudbox etc
+ - Design a tool of some kind
+ - Light and render a 3D object turntable
+ - UV unwrap a complex object (UDIMs)
+ - Render a model in an engineering CAD software
+ - Create a model in an engineering CAD software e.g. Fusion 350, FreeCAD, SolidWorks or others
+ - 3D model something and upload it under an Open Source licence
+ 4:
+ - Create a texture in a texturing package, e.g. Substance Painter, Blender, Mudbox
+ - Capture a texture from the real world
+ - Texture a 3D model with realistic texturing
+ - Design a model to embed electronics or magnets
+ - Design something to be printed in two colors or materials
+ - Design something flat to be made in folded material, e.g. Sheet metal, papercraft
+ - Stress test a model in an engineering CAD software
+ 5:
+ - 3D model a character
+ - Retopologise a 3D object / character
+ - Sculpt something from a reference photo
+ - Use an SVG file to make part of a 3D model
+ - Design something to be printed in flexible TPU material
+ - Design an articulating or print in place model
+ - Reverse engineer something in CAD software
+ 6:
+ - Use a slicing software for preparing to print a model
+ - Assemble a 3D model with free assets
+ - Design a custom model for cosplay
+ - Make a CAD model of your room, work or home
+ - Iterative design: Make improvements to a 3D model
+ - Animate a 3D rig from a free online model e.g. Ball or pendulum rig
+ - Create a customizable model in OpenSCAD
+ 7:
+ - Rig something you've sculpted
+ - Teach a friend how to 3D model
+ - Learn two or more sculpting softwares
+ - Get 3D scanned or 3D scan something
+ - Design, print and assemble something with multiple parts
+ - Animate a crane rig
+ - Animate an engineering CAD model
+ 8:
+ - Animate something you've sculpted
+ - Use generative design
+ - Make a puzzle based 3D game
+ - Learn more than three softwares for 3D modelling
+ - Use mathematics to create a 3D model e.g. Grasshopper with Rhino 3D software
+ - Learn a game engine
+ - Sell something you've 3D modelled
+ 9:
+ - Make something for VR
+ - Make something for AR
+ - Create an instructable hackaday page or Hackster.io page on a project
+ - Teach a class on 3D printing or 3D modelling
+ - Create a 3D platformer game in a game engine
diff --git a/3D Modelling Skill Tree/3D_Modeling_es.yml b/3D Modelling Skill Tree/3D_Modeling_es.yml
new file mode 100644
index 0000000..0e76d19
--- /dev/null
+++ b/3D Modelling Skill Tree/3D_Modeling_es.yml
@@ -0,0 +1,82 @@
+---
+title: MODELADO 3D
+footer: HECHO POR STEVEN MOHR & STEPH PIPER - MAKERQUEEN AU, TRADUCIDO POR HASECILU
+row:
+ 0:
+ - Saber cómo comprobar el tamaño en el software 3D
+ - Utilizar herramientas booleanas en software 3D
+ - Crear un modelo en TinkerCAD
+ - Aprender a navegar por una interfaz 3D con panorámica, órbita y zoom
+ - Hacer un modelo de pocos polígonos
+ - Utilizar la herramienta de extrusión en el software 3D
+ - Utilizar la herramienta de revolución en el software 3D
+ 1:
+ - Dibujar un croquis detallado con dimensiones antes del modelado 3D
+ - Crear un modelo en MeshMixer
+ - Editar una textura en un software de edición de imágenes
+ - Hacer un esquema 2D de un modelo 3D
+ - Texturizar un objeto de pocos polígonos
+ - Diseñar algo para impresión 3D
+ - Subir una remezcla de un modelo 3D
+ 2:
+ - Crear el esqueleto de una grúa con su sistema de cinemática directa/inversa
+ - Crear un modelo 3D a partir de un esquema 2D
+ - Crear una configuración de luz de 3 puntos
+ - Modificar las normales de las aristas para el diseño de una pieza de pocos polígonos
+ - Modelar y crear algo que resuelva un problema
+ - Hacer el desenvolvimiento UV de un objeto de pocos polígonos
+ - Diseñar un modelo personalizado para un amigo
+ 3:
+ - Hacer un modelo en un software de escultura, p.e. Blender, Z-brush, Mudbox, etc.
+ - Diseñar una herramienta de algún tipo
+ - Iluminar y renderizar un plato giratorio con objetos 3D
+ - Hacer el desenvolvimiento UV de un objeto complejo (UDIMs)
+ - Renderizar un modelo en un software CAD de ingeniería
+ - Crear un modelo en un software CAD de ingeniería, p.e. Fusion 360, FreeCAD, SolidWorks u otros
+ - Modelar algo en 3D y subirlo bajo una licencia de código abierto
+ 4:
+ - Crear una textura en un paquete de texturas, p.e. Substance Painter, Blender, Mudbox
+ - Capturar una textura del mundo real
+ - Texturizar un modelo 3D con texturas realistas
+ - Diseñar un modelo para incorporar electrónica o imanes.
+ - Diseñar algo para imprimir en dos colores o materiales
+ - Diseñar algo plano para fabricarlo con material doblado, p.e. chapa metálica, artesanía en papel
+ - Hacer una prueba de esfuerzo a un modelo en un software CAD de ingeniería
+ 5:
+ - Modelar en 3D a un personaje
+ - Retopologizar un objeto/personaje 3D
+ - Esculpir algo a partir de una foto de referencia
+ - Utilizar un archivo SVG para hacer la parte de un modelo 3D
+ - Diseñar algo para imprimir en material TPU flexible
+ - Diseñar un modelo articulado o un modelo impreso en el lugar
+ - Realizar ingeniería inversa en algún software CAD
+ 6:
+ - Utilizar un software de laminado para prepararse para imprimir un modelo
+ - Ensamblar un modelo 3D con recursos gratuitos
+ - Diseñar un modelo personalizado para cosplay
+ - Hacer un modelo CAD de tu habitación, trabajo o casa
+ - Diseño iterativo: Hacer mejoras a un modelo 3D
+ - Animar el esqueleto 3D de un modelo en línea gratuito, p.e. esqueleto de un sistema de bola o de péndulo
+ - Crear un modelo personalizable en OpenSCAD
+ 7:
+ - Crear el esqueleto de algo que hayas esculpido
+ - Enseñarle a un amigo a modelar en 3D
+ - Aprender dos o más softwares de escultura
+ - Obtener un escaneo 3D o escanear algo en 3D
+ - Diseñar, imprimir y montar algo con varias piezas
+ - Animar una plataforma de grúa
+ - Animar un modelo CAD de ingeniería
+ 8:
+ - Animar algo que hayas esculpido
+ - Utilizar diseño generativo
+ - Crear un juego de rompecabezas en 3D
+ - Aprender más de tres softwares para modelado 3D
+ - Utilizar matemáticas para crear un modelo 3D, p.e. Saltamontes con el software Rhino 3D
+ - Aprender a usar un motor de videojuegos
+ - Vender algo que hayas modelado en 3D
+ 9:
+ - Hacer algo para realidad virtual
+ - Hacer algo para realidad aumentada
+ - Crear una página con instrucciones de un proyecto en hackaday o en Hackster.io
+ - Impartir una clase sobre impresión 3D o modelado 3D
+ - Crear un juego de plataformas en 3D en un motor de juego
diff --git a/3D Printing Skill Tree/3D_Printing.yml b/3D Printing Skill Tree/3D_Printing.yml
new file mode 100644
index 0000000..c917a5e
--- /dev/null
+++ b/3D Printing Skill Tree/3D_Printing.yml
@@ -0,0 +1,82 @@
+---
+title: 3D PRINTING
+footer: MADE BY STEPH PIPER - MAKERQUEEN AU
+row:
+ 0:
+ - Print something with multiple parts and assemble
+ - Print a gift for a friend or family member
+ - Print an organiser for the home
+ - Put on your first 3D Print
+ - Use an FDM printer for the first time
+ - Learn how to level your print bed manually
+ - Print in PLA material
+ 1:
+ - Set up a resin printing PPE and wash and cure station
+ - Use a resin printer for the first time
+ - Create something from Customizer on Thingiverse
+ - Print a batch of something
+ - Accidentally break a print while removing support material
+ - Print something educational
+ - Print an articulating or print in place model
+ 2:
+ - Print something functional
+ - Calibrate a resin printer
+ - Use spiralise or vase mode to print something
+ - Print something that moves (eg fidget toy)
+ - Have a failed print and fix the problem
+ - Change a nozzle for the first time
+ - Identify and fix a settings issue
+ 3:
+ - Print a tool of some kind
+ - Print in PETG material
+ - 3D print something on fabric
+ - Do a hot pull and cold pull cycle to unclog a nozzle
+ - Model and print something that solves a problem
+ - Print a model with tree supports
+ - Edit an existing model and print
+ 4:
+ - Mix your own resin blend
+ - Make a lithophane from a photo or image
+ - Print in ABS material
+ - Embed electronics, magnets or something else inside a 3D print
+ - Print in two colors or materials
+ - Have a spectacular failure, with lots of spaghettis
+ - Upload a remix of a 3D model
+ 5:
+ - Print something for cosplay or prop making
+ - Teach a friend how to 3D Print
+ - Repair something with 3D printing
+ - Use PVA disolvable support material
+ - Print in flexible material
+ - Print something that requires more than 1kg of filament
+ - Reverse engineer something in CAD software
+ 6:
+ - Visit your local makerspace
+ - Use heat set threaded inserts in a part
+ - Print something to wear
+ - Print a mould for a casting project
+ - Print something again after making design improvements
+ - Sell something you've 3D printed
+ - Print something that makes a noise
+ 7:
+ - Try a different slicing software
+ - Acetone smoothing an ABS part
+ - Print something in metal or metal-like material
+ - Get 3D scanned and print a model of yourself
+ - Sand and paint something you've printed
+ - Mod your 3D printer with something 3D printed
+ - 3D Model something and upload it under an Open Source licence
+ 8:
+ - Try heat annealing a part to make it stronger
+ - Print in Carbon Fibre material
+ - Use a different type of 3D printer (eg food, clay, pancake...)
+ - Recycle filament or failed prints in a creative way
+ - Use a multi-material printer
+ - Print in Nylon or ASA material
+ - Print something large
+ 9:
+ - Send a file to your printer wirelessely
+ - Build your own 3D printer
+ - Teach a class on 3D Printing or 3D modelling
+ - Create and instructable, hackaday page or Hackster.io page on a project
+ - Install and use a nozzle larger or smaller than the standard size
diff --git a/3D Printing Skill Tree/3D_Printing_es.yml b/3D Printing Skill Tree/3D_Printing_es.yml
new file mode 100644
index 0000000..75fc0ec
--- /dev/null
+++ b/3D Printing Skill Tree/3D_Printing_es.yml
@@ -0,0 +1,82 @@
+---
+title: IMPRESIÓN 3D
+footer: HECHO POR STEPH PIPER - MAKERQUEEN AU, TRADUCIDO POR HASECILU
+row:
+ 0:
+ - Imprimir algo con varias partes y ensamblarlo
+ - Imprimir un regalo para un amigo o un familiar
+ - Imprimir un organizador para el hogar
+ - Empezar tu primera impresión 3D
+ - Utilizar una impresora FDM por primera vez
+ - Aprender a nivelar su cama de impresión manualmente
+ - Imprimir en material PLA
+ 1:
+ - Instalar equipo de protección personal para impresión con resina y una estación de lavado y curado.
+ - Utilizar una impresora de resina por primera vez
+ - Crear algo desde el personalizador en Thingiverse
+ - Imprimir un lote de algo
+ - Romper accidentalmente una impresión al retirar el material de soporte
+ - Imprimir algo educativo
+ - Imprimir un modelo articulado o un modelo impreso en el lugar
+ 2:
+ - Imprimir algo funcional
+ - Calibrar una impresora de resina
+ - Utilizar el modo espiral o jarrón para imprimir algo
+ - Imprimir algo que se mueva (por ejemplo, un juguete)
+ - Tener una impresión fallida y solucionar el problema
+ - Cambiar una boquilla por primera vez
+ - Identificar y solucionar un problema de configuración
+ 3:
+ - Imprimir una herramienta de algún tipo
+ - Imprimir en material PETG
+ - Imprimie algo en 3D sobre tela
+ - Realizar un ciclo de extracción en caliente y extracción en frío para desatascar una boquilla
+ - Modelar e imprimir algo que resuelva un problema
+ - Imprimir un modelo con soportes de árboles
+ - Editar un modelo existente e imprimirlo
+ 4:
+ - Mezclar tu propia mezcla de resina
+ - Hacer una litofanía a partir de una foto o imagen
+ - Imprimir en material ABS
+ - Incrustar componentes electrónicos, imanes o cualquier otra cosa dentro de una impresión 3D
+ - Imprimir en dos colores o materiales
+ - Tener un fracaso espectacular, con muchos espaguetis
+ - Subir una remezcla de un modelo 3D
+ 5:
+ - Imprimir algo para cosplay o crear algún accesorio
+ - Enseñarle a un amigo cómo imprimir en 3D
+ - Reparar algo con impresión 3D
+ - Utilizar material de soporte soluble PVA
+ - Imprimir en material flexible
+ - Imprimir algo que requiera más de 1kg de filamento
+ - Realizar ingeniería inversa en algún software CAD
+ 6:
+ - Visitar el espacio de creación local
+ - Utilizar insertos roscados termofijados en una pieza
+ - Imprimir algo para vestir
+ - Imprimir un molde para un proyecto de fundición
+ - Imprimir algo nuevamente después de realizar mejoras en el diseño
+ - Vender algo que hayas impreso en 3D
+ - Imprimir algo que haga ruid
+ 7:
+ - Probar un software de laminado diferente
+ - Alisar una pieza de ABS con acetona
+ - Imprimir algo en metal o un material similar al metal
+ - Escanear en 3D e imprimir un modelo de ti mismo
+ - Lijar y pintar algo que hayas impreso
+ - Modificar tu impresora 3D con algo impreso en 3D
+ - Modelar algo en 3D y subirlo bajo una licencia de código abierto
+ 8:
+ - Intentar recocer con calor una pieza para hacerla más fuerte
+ - Imprimir en material de fibra de carbono
+ - Utilizar un tipo diferente de impresora 3D (p.e. comida, arcilla, panqueques...)
+ - Reciclar filamentos o impresiones fallidas de forma creativa
+ - Utilizar una impresora multimaterial
+ - Imprimir en material Nylon o ASA
+ - Imprimir algo grande
+ 9:
+ - Enviar un archivo a la impresora de forma inalámbrica
+ - Construir tu propia impresora 3D
+ - Impartir una clase sobre impresión 3D o modelado 3D
+ - Crear una página con instrucciones de un proyecto en hackaday o en Hackster.io
+ - Instalar y utilizar una boquilla más grande o más pequeña que el tamaño estándar
diff --git a/3D Printing and Modelling Skill Tree/3D_Printing_and_Modelling.yml b/3D Printing and Modelling Skill Tree/3D_Printing_and_Modelling.yml
new file mode 100644
index 0000000..7b6ddb2
--- /dev/null
+++ b/3D Printing and Modelling Skill Tree/3D_Printing_and_Modelling.yml
@@ -0,0 +1,82 @@
+---
+title: 3D PRINTING %amp; MODELLING
+footer: MADE BY STEPH PIPER - MAKERQUEEN AU
+row:
+ 0:
+ - Print something from Thingiverse
+ - Print a gift for a friend or family member
+ - Use a resin printer for the first time
+ - Put on your first 3D Print
+ - Use an FDM printer for the first time
+ - Learn how to level your print bed manually
+ - Print in PLA material
+ 1:
+ - Use 3D Builder to help you to prepare a model for printing
+ - Print something from MyMiniFactory
+ - Create something from Customizer on Thingiverse
+ - Print a benchy or Cali Cat
+ - Print something from Printables
+ - Print something from Cults3D
+ - Print an articulating or print in place model
+ 2:
+ - Print something functional
+ - Create and 3D print a model in TinkerCAD
+ - Use spiralise or vase mode to print something
+ - Create and 3D print a model in MeshMixer
+ - Have a failed print and fix the problem
+ - Change a nozzle for the first time
+ - Print 10 models
+ 3:
+ - Print a tool of some kind
+ - Print in PETG material
+ - 3D print something on fabric
+ - Do a hot pull and cold pull cycle to unclog a nozzle
+ - Model and print something that solves a problem
+ - Print a model with tree supports
+ - Edit an existing model and print
+ 4:
+ - 3D model 10 models
+ - Make a lithophane from a photo or image
+ - Print in ABS material
+ - Embed electronics, magnets or something else inside a 3D print
+ - Print in two colors or materials
+ - Have a spectacular failure, with lots of spaghettis
+ - Upload a remix of a 3D model
+ 5:
+ - Visit your local makerspace
+ - Teach a friend how to 3D Print
+ - Repair something that’s broken with 3D printing
+ - Create a model in an engineering software (eg Fusion 360, FreeCAD, Solidworks or others)
+ - Print in flexible TPU material
+ - Print something that requires more than 1kg of filament
+ - Reverse engineer something in CAD software
+ 6:
+ - Try a different Slicing Software
+ - Use heat set threaded inserts in a part
+ - Accidentally break a print while removing support material
+ - Make a CAD Model of your romm, work or home
+ - Iterative design: print something again after making improvements
+ - Sell something you've 3D printed
+ - Print something that makes a noise
+ 7:
+ - Try heat annealing a part to make it stronger
+ - Try acetone smoothing an ABS printed part
+ - Print something in metal or metal-like material
+ - Get 3D scanned and print a model of yourself
+ - Design, print and assemble something with multiples parts
+ - Mod your 3D printer with something 3D printed
+ - 3D Model something and upload it under an Open Source licence
+ 8:
+ - Make a model in a sculpting software (eg Blender, Z-brush, MudBox, Maya...)
+ - Print in Carbon Fibre material
+ - Use a different type of 3D printer (eg food, clay, pancake...)
+ - Recycle filament or failed prints in a creative way
+ - Buy a second 3D printer for work, home or makerspace
+ - Print in Nylon or ASA material
+ - Create a customizable model in OpenSCAD
+ 9:
+ - Send a file to your printer wirelessely (Octoprint, Astroprint or built-in
+ - Create something to address on of the Sustainable Development Goals
+ - Teach a class on 3D Printing or 3D modelling
+ - Create and instructable, hackaday page or Hackster.io page on a project
+ - Install and use a nozzle larger or smaller than the standard size
diff --git a/3D Printing and Modelling Skill Tree/3D_Printing_and_Modelling_es.yml b/3D Printing and Modelling Skill Tree/3D_Printing_and_Modelling_es.yml
new file mode 100644
index 0000000..fed5d57
--- /dev/null
+++ b/3D Printing and Modelling Skill Tree/3D_Printing_and_Modelling_es.yml
@@ -0,0 +1,82 @@
+---
+title: IMPRESIÓN 3D Y MODELADO
+footer: HECHO POR STEPH PIPER - MAKERQUEEN AU, TRADUCIDO POR HASECILU
+row:
+ 0:
+ - Imprimir algo de Thingiverse
+ - Imprimir un regalo para un amigo o un familiar
+ - Utilizar una impresora de resina por primera vez
+ - Empezar tu primera impresión 3D
+ - Utilizar una impresora FDM por primera vez
+ - Aprender a nivelar su cama de impresión manualmente
+ - Imprimir en material PLA
+ 1:
+ - Utilizar 3D Builder para ayudarse a preparar un modelo para imprimir
+ - Imprimir algo desde MyMiniFactory
+ - Crear algo desde el personalizador en Thingiverse
+ - Imprimir un benchy o Cali Cat
+ - Imprimir algo de Printables
+ - Imprimir algo de Cults3D
+ - Imprimir un modelo articulado o un modelo impreso en el lugar
+ 2:
+ - Imprimir algo funcional
+ - Crear e imprimir en 3D un modelo en TinkerCAD
+ - Utilizar el modo espiral o jarrón para imprimir algo
+ - Crear e imprimir en 3D un modelo en MeshMixer
+ - Tener una impresión fallida y solucionar el problema
+ - Cambiar una boquilla por primera vez
+ - Imprimir 10 modelos
+ 3:
+ - Imprimir una herramienta de algún tipo
+ - Imprimir en material PETG
+ - Imprimir algo en 3D sobre tela
+ - Realizar un ciclo de extracción en caliente y extracción en frío para desatascar una boquilla
+ - Modelar e imprimir algo que resuelva un problema
+ - Imprimir un modelo con soportes de árboles
+ - Editar un modelo existente e imprimirlo
+ 4:
+ - Modelar en 3D 10 modelos
+ - Hacer una litofanía a partir de una foto o imagen
+ - Imprimir en material ABS
+ - Incrustar componentes electrónicos, imanes o cualquier otra cosa dentro de una impresión 3D
+ - Imprimir en dos colores o materiales
+ - Tener un fracaso espectacular, con muchos espaguetis
+ - Subir una remezcla de un modelo 3D
+ 5:
+ - Visitar el espacio de creación local
+ - Enseñarle a un amigo cómo imprimir en 3D
+ - Reparar algo roto con la impresión 3D
+ - Crear un modelo en un software de ingeniería (por ejemplo, Fusion 360, FreeCAD, Solidworks u otros)
+ - Impremir en material TPU flexible
+ - Imprimir algo que requiera más de 1kg de filamento
+ - Realizar ingeniería inversa en algún software CAD
+ 6:
+ - Probar un software de laminado diferente
+ - Utilizar insertos roscados termofijados en una pieza
+ - Romper accidentalmente una impresión al retirar el material de soporte
+ - Hacer un modelo CAD de tu habitación, trabajo o casa
+ - Diseño iterativo: imprimir algo nuevamente después de realizar mejoras
+ - Vender algo que hayas impreso en 3D
+ - Imprimir algo que haga ruido
+ 7:
+ - Intentar recocer con calor una pieza para hacerla más fuerte
+ - Intentar alisar con acetona una pieza impresa en ABS
+ - Imprimir algo en metal o un material similar al metal
+ - Escanear en 3D e imprimir un modelo de ti mismo
+ - Diseñar, imprimir y montar algo con varias piezas
+ - Modificar tu impresora 3D con algo impreso en 3D
+ - Modelar algo en 3D y subirlo bajo una licencia de código abierto
+ 8:
+ - Hacer un modelo en un software de escultura (p.e., Blender, Z-brush, MudBox, Maya...)
+ - Imprimir en material de fibra de carbono
+ - Utilizar un tipo diferente de impresora 3D (p.e., comida, arcilla, panqueques...)
+ - Reciclar filamentos o impresiones fallidas de forma creativa
+ - Comprar una segunda impresora 3D para el trabajo, el hogar o el espacio de creación
+ - Imprimir en material Nylon o ASA
+ - Crear un modelo personalizable en OpenSCAD
+ 9:
+ - Enviar un archivo a su impresora de forma inalámbrica (Octoprint, Astroprint o integrada)
+ - Crear algo para abordar uno de los Objetivos de Desarrollo Sostenible
+ - Impartir una clase sobre impresión 3D o modelado 3D
+ - Crear una página con instrucciones de un proyecto en hackaday o en Hackster.io
+ - Instalar y utilizar una boquilla más grande o más pequeña que el tamaño estándar
diff --git a/python/create_skill_tree_svg.py b/python/create_skill_tree_svg.py
index ddbb4cf..298fdab 100755
--- a/python/create_skill_tree_svg.py
+++ b/python/create_skill_tree_svg.py
@@ -1,6 +1,7 @@
#!/bin/env python
-import argparse
+import argparse
+import os
import yaml
@@ -14,10 +15,33 @@ def load_svg_template(file_path):
return file.read()
+def make_text_multiline(text: list, length1: int = 18, length2: int = 25) -> str:
+ """Split long one-line strings into multiple-lines strings with a maximum length."""
+
+ # To follow the shape of the hexagon the first line should
+ # be smaller, maybe to 18 characters.
+
+ desired_l = length1 # for line 1
+ processed_str_len = 0
+
+ space_indexes = [i for i, char in enumerate(text) if char == " "]
+ for i in range(1, len(space_indexes)):
+ if space_indexes[i] < desired_l + processed_str_len:
+ # substring fit in the line, keep searching
+ pass
+ else:
+ # substring is greater than permissible length
+ text[space_indexes[i - 1]] = "
" # break line on previous space
+ desired_l = length2 # for lines 2, 3, 4, ...
+ processed_str_len += space_indexes[i - 1] - 1
+
+ return "".join(text)
+
+
def process_svg(template, data):
- # Replace title and author
+ # Replace title and footer
processed = template.replace("{{ title }}", data["title"])
- processed = processed.replace("{{ author }}", data["author"])
+ processed = processed.replace("{{ footer }}", data["footer"])
displacement = (0, 9, 19, 29, 39, 49, 59, 69)
for i in range(10):
@@ -29,8 +53,9 @@ def process_svg(template, data):
if j >= 5:
continue
value = data["row"][i][j]
+ splitted_string = make_text_multiline(list(value))
placeholder = f"{{{{ box_{box_number:03d} }}}}"
- processed = processed.replace(placeholder, str(value))
+ processed = processed.replace(placeholder, splitted_string)
return processed
@@ -41,7 +66,8 @@ def save_processed_svg(content, output_path):
def main():
- svg_template_path = "skill_tree_template.svg.j2"
+ script_path = os.path.dirname(os.path.abspath(__file__))
+ svg_template_path = os.path.join(script_path, "skill_tree_template.svg.j2")
parser = argparse.ArgumentParser(description="Process SVG template with YAML data.")
parser.add_argument("input_yaml", help="Path to input YAML file")
diff --git a/python/input.yml b/python/input.yml
index b13caa8..bb73e84 100644
--- a/python/input.yml
+++ b/python/input.yml
@@ -1,6 +1,6 @@
---
title: Some Interesting Title
-author: John Doe
+footer: John Doe
row:
0:
- 0a
diff --git a/python/skill_tree_template.svg.j2 b/python/skill_tree_template.svg.j2
index e28af42..b3ca7c7 100644
--- a/python/skill_tree_template.svg.j2
+++ b/python/skill_tree_template.svg.j2
@@ -658,7 +658,7 @@ text#credits {
CC BY-NC-SA 4.0
github.com/sjpiper145/MakerSkillTree
- MADE BY {{ author }}
+ {{ footer }}