#!/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