fred voisin’s website

computer music producer, since 1989

Insérer des liens dans un fichier SVG

16 déc. 2011

Le shell-script links2svg permet d’associer des liens internet ou locaux aux différents noeuds d’un graphe ou arbre généré par la fonction graph>dot de fv-morphologie.

Les spécifications du format SVG permettent d’insérer des liens dans les fichiers svg (cf. SVG/links).
Il est alors permis d’associer un fichier à chacun des noeuds d’un graphe ou arbre généré dans le format SVG par la fonction graph>dot de fv-morphologie... Et, par exemple, d’écouter dans un navigateur les différents noeuds d’un arbre de recouvrement minimal qui représenterait un espace compositionnel résultant d’analyses acoustiques.
Le shell-script links2svg suivant automatise l’insertion de liens à l’aide de commandes UNIX ou Linux :

#!/bin/bash
# ajoute des liens a des noeuds d'un fichier svg issu de la commande dot, neato
# et graph>dot de fv-morphologie
# Frederic Voisin, 2011

svgfile=$1
linksfile=$2

while read nodelink
do
node=`echo $nodelink |awk '{print $1}'`
link=`echo $nodelink |awk '{print $2}'`
line=`sed -n '/node\"><title>\ '$node'</=' $svgfile `
# echo $line
i=`expr $line + 1`
cat $svgfile | sed -e ''$line' a\
<a xlink:href="'$link'">' -e ''$i' a\
</a>' > $svgfile-tmp
mv $svgfile-tmp $svgfile
done < $linksfile


Le premier argument (svgfile) est un fichier SVG qui représente un graphe, le second argument (linksfile) est un fichier texte dont chaque ligne associe le nom exact d’un noeud du graphe au lien local ou internet auquel on souhaite qu’il renvoie. Chaque lien peut être soit une URL (par exemple : http://www.site.net), soit le chemin (path) d’un fichier local. Chaque noeud et lien sont séparés par un espace ou une tabulation. Par exemple :

n1 son1.mp3
n2 son2.mp3
...


Ce script, links2svg, peut être exécuté par la commande :

./links2svg graph.svg liens.txt

On prendra soin d’éviter les caractères accentués ou spéciaux qui peuvent être mal interprétés par les différents programmes ou formats invoqués (Lisp, dot/neato, SVG).

links2svg.zip
shell-script links2svg exécutable