#!/bin/bash #[ # genere une carte freeplane a partir d'un fichier genealogique # si l'utilisateur ne donne pas de fichier : #1:Toto #2:Maman #3:Papa #4:Mamie #5:Papy #6:Bonne Maman #7:Bon Papa # sur le principe : 2n = mere 2n+1 = pere CSP=":" # caractere de separation POLICE=Verdana SUJET="mes aieux" ICON=penguin FEMME=female1 HOMME=male1 # il eut ete plus elegant de mettre une fonction recurente # mais les second appel (pour les peres) ne passaient pas # pour eviter un autre script celui ci s'appelle lui meme avec un option improbable RECURENCE="ghLhioDtytrmoDTYI" test "$#" -lt 2 -o "$2" = "$RECURENCE" || exec echo "$0 : n'accepte qu'un seul argument" >&2 if test "$1" then test -f "$1" || exec echo "$0 : $1 n'est pas un fichier" >&2 file $1 | grep -i text > /dev/null || exec echo "$0 : $1 n'est pas un fichier texte" >&2 FICHIER="$1" else echo "$0 : exemple de data" >&2 FICHIER=/tmp/$(basename $0).$$.txt rm -f "$FICHIER" grep '^#.:' $0 | cut -c2- | tee "$FICHIER" >&2 fi FIC_MM=/tmp/$(basename $0).$$.mm rm -f $FIC_MM if test "$#" -lt 2 #[ then # execution initiale # freeplane veut indexer les noeuds ID=1000000000000 # le fichier freeplane doit commencer par un en tete verbeux ENTETE="^xx--en-tete--xx " grep "$ENTETE" $0 | sed -e "s/$ENTETE//" -e "s/&SUJET/$SUJET/g" -e "s/&POLICE/$POLICE/g" >> $FIC_MM MIN=$(grep : $FICHIER | cut -d: -f1 | sort -n | while read i; do test "$i" -gt 0 && echo $i; done | head -1) test $MIN -gt 1 && if test $(expr $MIN / 2 + $MIN / 2) = $MIN; then ICON=$FEMME; else ICON=$HOMME; fi # RECURRENCE sh $0 $FICHIER $RECURENCE "$(grep ^$MIN: $FICHIER | head -1)" $ICON >> $FIC_MM # si on ne commence au dessus d'1 il y a risque de conjoints n+1 ou n+2 ..... SUP=1 while test $MIN -gt $SUP do CO=$(expr $MIN + $SUP) if test "$(expr $CO / 2 \* 2)" = $CO; then ICON=$FEMME; else ICON=$HOMME; fi grep ^$CO: $FICHIER > /dev/null 2>&1 && \ sh $0 $FICHIER $RECURENCE "$(grep ^$CO: $FICHIER | head -1)" $ICON >> $FIC_MM SUP=$(expr $SUP + 1) done # on ferme echo "" >> $FIC_MM echo "" >> $FIC_MM freeplane $FIC_MM > /dev/null echo freeplane $FIC_MM >&2 else # execution recurrente shift shift N=$(echo $1 | cut -d: -f1) NOM=$(echo $1 | cut -d: -f2) NOTES=$(echo $1 | cut -d: -f3-) echo "" echo "" echo "" test "$NOTES" && echo -e "\n$NOTES\n" NMERE=$(expr $N + $N) MERE=$(grep "^$NMERE:" $FICHIER) && test $N -gt 0 && sh $0 $FICHIER $RECURENCE "$MERE" $FEMME NPERE=$(expr $N + $N + 1) PERE=$(grep "^$NPERE:" $FICHIER) && test $N -gt 0 && sh $0 $FICHIER $RECURENCE "$PERE" $HOMME echo "" fi #] exit #] find de programme # ce qu'il faut mettre en debut de fichier freeplane xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx xx--en-tete--xx