Généalogie (A), affichage dynamique

Description

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 ...

Codes Sources

A voir également

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.