Bonjour,
Voici une ébauche personnelle d'un simple logiciel de généalogie.
Parmi les représentations d'arbres généalogiques, la liste indentée (voir Geneawiki: Modèles de présentation) devrait bien convenir à une visualisation interactive à l'écran.
Mais avant de parler de visualisation, il nous faut définir comment enregistrer et maintenir une généalogie.
On a la possibilité d'utiliser une base de données existante ou "personnelle": j'ai choisi ici la seconde solution.
Archivage
La généalogie est archivée dans un fichier texte (ASCII UTF-8) selon la syntaxe définie dans
SyntaxEBNF.pdf:
Extended Backus-Naur Form (EBNF):
Généalogie = 'Gene-WV' Texte.Titre Descendant.Patriarche
Descendant = EoL {'|'} Personne {Conjoint}
Conjoint = EoL {'|'} '+' Date.Union ['-' Date.FinUnion] Personne
Personne = ('#'|'§') Texte.Nom Texte.Prénom Date.Naissance ['-' Date.Décès] [Text.Remarque]
Date = ('?'|Entier.Année ['.' Entier.Mois ['.' Entier.Jour]])
Texte = '"' {Car|' '|Tab} '"'
EoL = Caractère de fin de ligne
Tab = Caractère de tabulation
Car = Tout caractère ASCII imprimable
Remarques:
a) Le titre occupe la première ligne qui doit commencer par Gene-WV.
b) Les lignes vides ou commençant par un espace ou un Tab sont ignorées (commentaires).
c) Les espaces et les tabs sont ignorés, sauf dans un Texte.
d) Une seule ligne est utilisée pour chaque Personne (Descendant ou Conjoint)
C'est la fonction
function Syntax(lgs) qui lit le fichier texte et en génère la structure en mémoire.
En cas d'erreur de syntaxe, il signale le numéro de la ligne et le type d'erreur.
Structure en mémoire
La structure en mémoire est "classique":
function Pers() { // en:person, personne
this.famN; // String
this.forN; // String
this.sex; // Sex: '♂', '♀': masculin, féminin
this.birth; // Int (date de naissance)
this.death; // Int (date de décès)
this.text; // String
}
function Desc() { // en:descendant, descendant
this.pers; // Pers
this.prnt; // Spse (parent, conjoint de l'ascendant direct)
this.spse; // [Spse] (conjoints, époux, épouses, partenaires)
this._opn; // fermé: '►', ouvert '▼'
}
function Spse() { // en:spouse, conjoint, époux, épouse, partenaire
this.pers; // Pers
this.sibl; // [Desc] (fratrie)
this.desc; // Desc (conjoint, époux, épouse, partenaire)
this.begU; // Int (date begin union)
this.endU; // Int (date end union)
}
Représentation: liste indentée dynamique
Dans la structure ci-dessus, nous constatons dans Desc (Descendant) le champ:
this._opn; // fermé: '►', ouvert '▼'
En cliquant sur les caractères '►' ou '▼', on peut "ouvrir" ou "fermer" le descendant correspondant,
c'est-à-dire afficher ou cacher ses conjoints et enfants directs.
En double-cliquant sur ces caractères, on "ouvre" ou "ferme" également toute sa descendance.
Pour montrer l'arbre complet, double-cliquez sur l'ancêtre affiché initialement.
Les impressions peuvent (provisoirement) être obtenus avec un copier/coller dans MS.Word ou par un print.screen.
Le logiciel ouvre directement la généalogie contenue dans le fichier
My Family.txt.
Evolution du logiciel
Les améliorations que l'on pourrait apporter à ce logiciel sont nombreuses !
Par exemple:
- Lecture d'une généalogie au choix.
- Gestion interactive des données.
- Sauvegarder les nouvelles données dans un fichier de syntaxe.
- Générer un fichier d'échange standard (GEDCOM ?).
- Ouvrir directement un fichier d'échange standard.
- Imprimer différentes représentations.
- ...
Aidez-moi à définir les priorités.
Le logiciel fonctionne avec IE, Edge, Firefox et Safari.
Malheureusement pas avec Chrome et Opera.
Attention:
Ne travaillez uniquement avec le fichier
GeneA.html téléchargé !,
car les caractères spéciaux ('►', '▼', ...) ne s'affichent pas correctement sous
voir.
Liens
WikipédiA: Généalogie
WikipédiA: Arborescence
WikipédiA: Arbre généalogique
Geneawiki: Modèles de présentation
Bonne lecture ...
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.