PlanFacile-2.0/0000777000175000017500000000000010625124617010362 500000000000000PlanFacile-2.0/doc/0000777000175000017500000000000010625124616011126 500000000000000PlanFacile-2.0/doc/fun0000755000175000017500000000444710510305653011564 00000000000000#!/bin/sh # # PlanFacile (Easy plan, in french) is a small tool to help people to # write a document on a particular subject. # Copyright (C) 2005 Julien BRUGUIER # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 2 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # echo '#start{0}#head{Hello world !}' | planfacile echo '#start{0}#foot{world !}#head{Hello }' | planfacile echo '#start{0}#head{Hello #dest# !}#define{dest}{world}' | planfacile echo '#start{0}#head{Hello #options{Destinataire}#case{fr}monde #case{jp}sekai #other world #end !}' | planfacile echo '#section{0}{}{#txt}{}{}{}#idea{hw}#text Hello world !#end' | planfacile echo '#section{0}{}{#txt}{}{}{}#section{1}{}{#txt}{}{}{}#idea{h}#text Hello #end#idea{w}#text world #dep{h}{}{}#end#idea{!}#text#dep{0xCAFE}{h}{}{}!#dep{w}{}{}#end' | planfacile #echo '#section{0}{}{#txt}{}{}{}#section{1}{}{#txt}{}{}{}#idea{h}#text Hello #end#idea{w}#text world !#dep{h}{}{}#end#generic{g}#text#end' | planfacile echo '#idea{w}#text world !#dep{h}{}{}#end#section{1}{}{#txt}{}{}{}#generic{#index}#text#end#section{0}{}{#txt}{}{}{}#idea{h}#text Hello #end' | planfacile echo '#idea{o}#text#dep{1}{e}{}{}#dep{l}{}{}#end#define{d}{#dep{1}{#1}{}{#1}}#idea{!}#text#dep{1}{r}{}{}#dep{d}{}{}#end#idea{d}#text#dep{2}{r}{}{}#d{# }#end#idea{H}#text#end#idea{l}#text#dep{2}{e}{}{}#d{l}#end#foot{}#idea{# }#text#dep{o}{}{}#end#section{}{#ref#txt}{}{}{}#idea{w}#text#d{o}#dep{# }{}{}#end#idea{e}#text#dep{H}{}{}#end#start{0}#idea{r}#text#dep{2}{H}{}{}#d{l}#end' | planfacile echo '#define{d}{r}#define{r}{H#2#1#H#define{r}{#1#1}}#H{#h{#r{#r{#e}#define{H}{#l}}{e}}{#define{d}{# }!}{#h{#l}{#o}{#w{w}}#e#define{h}{#3#define{o}{r}#1#2}#w{d}{#d}#define{w}{#0}}#define{h}{#1#d#3#2}#define{e}{l}}#start{0}#define{H}{#foot{#1#define{l}{o}}}' | planfacile PlanFacile-2.0/doc/README0000644000175000017500000000267510510305653011727 00000000000000PlanFacile (Easy plan, in french) is a small tool to help people to write a document on a particular subject. Copyright (C) 2005 Julien BRUGUIER This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA In order to read the documentation, you must install PlanFacile before. Then, as the files distributed along the compiler are real examples of source files, you should compile all documentations with PlanFacile. The following lines are the commands you should enter in a terminal to ensure an painless reading of the documentation : (replace compilateur by standard or tutorial for the other documentation parts) [doc] $ cp compilateur /tmp [doc] $ cd /tmp [tmp] $ su -c "chown -R user:user compilateur" Password: [tmp] $ chmod -R a+rw compilateur/ [tmp] $ cd compilateur [compilateur] $ make html or [compilateur] $ make pdf #require LaTeX Have a nice reading of the documentation. PlanFacile-2.0/doc/compilateur/0000777000175000017500000000000010625124616013452 500000000000000PlanFacile-2.0/doc/compilateur/planfacile.plf0000644000175000017500000022246010510305653016170 00000000000000#comment{ PlanFacile (Easy plan, in french) is a small tool to help people to write a document on a particular subject. Copyright (C) 2005 Julien BRUGUIER This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA } #standard #option{fr} #option{iso} #option{auteur} #define{auteur}{Pappy} #option{date} #define{date}{Mardi 28 mars 2006} #option{page de garde} #option{table des matières} #define{parent}{100} #options{Type de sortie} #case{LaTeX} #define{PlanFacile}{#{\sc PlanFacile#}} #option{titre} #define{titre}{Documentation de #PlanFacile} #case{HTML} #define{PlanFacile}{PlanFacile} #option{titre} #define{titre}{Documentation de PlanFacile} #end #idea{PlanFacile}#PlanFacile#text #end #idea{Installation}Installation de #PlanFacile#text#dep{But}{}{} L'installation de #PlanFacile#dep{#parent}{PlanFacile}{#depref}{}# se fait simplement en décompressant le tarball disponible sur internet. #§ Ensuite, dans le répertoire de l'archive décompressée, il suffit d'enchaîner les traditionnelles commandes : #enumeration{#items {#verbatim{|}{./configure}# Utilisez l'option #verbatim{|}{--disable-parser-build}# si la version de #verbatim{|}{flex}# ou de #verbatim{|}{bison}# ne sont pas à jour, et si vous ne souhaitez pas modifier les fichiers correspondants ;} {#verbatim{|}{make}} {#verbatim{|}{make install-strip}} } #§ La dernière peut nécessiter les droits administrateur pour pouvoir être lancée. #end #idea{But}But de #PlanFacile#text Le but premier de #PlanFacile#dep{#parent}{PlanFacile}{#depref}{}# est d'aider toute personne désirant rédiger un document traitant d'un sujet dont : #listeapuce{#items {les différentes idées du document sont globalement connues ;} {les relations entre les différentes idées sont connues. Ces dépendances expriment un ordre partiel de lecture souhaité entre deux idées ;} {l'ordre global de lecture, ainsi que la hiérarchie entre idées, est en revanche totalement inconnu.} } #§ De plus, l'utilisation de #PlanFacile# permet une reflexion de fond sur ce qui doit être décrit dans un document, et permet donc d'affiner et clarifier des concepts qui pouvaient sembler complexes à exprimer. De la même manière, une reflexion sur les relations entre idées donne souvent la possibilité au rédacteur de mieux comprendre le contexte dans lequel se développe chaque idée. Ces deux derniers points font de #PlanFacile# un mindmap à part entière. #§ A partir de cet enchainement, #PlanFacile# est capable de retrouver l'organisation de ces briques de base et, en particulier leur hiérarchie. De plus, il est capable dans certains cas d'ajouter de lui-même des briques qui semblent manquer dans le document. #§ Enfin, #PlanFacile# génère au mieux le document, dans le sens où la lecture de ce dernier sera la plus linéaire possible, en évitant les références vers des parties plus loin dans le document. #end #idea{Algorithme}Algorithme de calcul du plan#text#dep{Installation}{}{} #PlanFacile#dep{#parent}{PlanFacile}{#depref}{}# contient en son c#oe ur un algorithme permettant de calculer le plan du document à produire. #§ Cet algorithme a un objectif double : #enumeration{#items {retrouver la structure globale du document à partir d'informations locales par rapport à chaque idée#dep{But}{#depref}{}# qui lui sont données, pour minimiser le nombre de références, qui sont des portions de texte indiquant de se reporter à une autre partie du document ;} {trouver quelles sont les relations hiérarchiques entre les différentes parties pour construire un vrai plan de document.} } #end #missing{1}{EntreeAlgo}Données fournies à l'algorithme#text Le document, tel qu'il est considéré par l'algorithme de calcul du plan, n'est constitué que de deux choses détaillées ci-dessous ne s'appuyant pas sur le contenu textuel du document. De ce fait, #PlanFacile# ne se base pas sur le sens des mots, via un dictionnaire, pour organiser les idées du document. #end #idea{DependancesAlgo}Dépendances#text#dep{#parent}{Algorithme}{}{} Une dépendance est un concept permettant de lier des idées#dep{IdeesAlgo}{#depref}{# #apposition{vues ci-dessus}}# entre elles. Cette liaison, loin s'en faut, n'est pas bidirectionnelle. #§ Pour illustrer cette notion, on peut donner un cas de figure très précis : dans un document expliquant l'invention de l'outil, si une idée A porte le concept de clou, et que l'idée B porte le concept de marteau, alors sans nul doute, pour expliquer l'existence des marteaux, il serait bon d'avoir parlé des clous, en tant que système de fixation#...#espace Dans ce cas, on dit que l'idée B dépend de l'idée A, mais qu'il y a une dépendance de A vers B. Un moyen simple de se rappeller le sens des dépendances existe : il suffit de se souvenir que l'idée B dépend de l'idée A pour pouvoir être comprise. #end #idea{IdeesAlgo}Idées#text La première entité reconnue par l'algorithme#dep{#parent}{Algorithme}{#depref}{}# est l'idée, au sens général du terme. Une idée est en fait une brique de base totalement indivisible représentant un concept unique du document. Ce concept est, pour l'algorithme, simplement une référence sous forme de mot-clef désignant le concept du document. #§ Seulement, les idées présentes dans un document, même indivisibles, sont interdépendantes. Pour une idée donnée, on peut trouver d'autres idées#dep{DependancesAlgo}{, dont on décrira les liens juste après, }{, comme nous l'avons vu ci-dessus.}# ayant un contenu pouvant permettre au lecteur de comprendre instantanément le sens de l'idée en cours de lecture, tout simplement parce que certaines idées correspondent à des concepts liés. #end #idea{FonctionnementAlgo}Fonctionnement de l'algorithme#text L'algorithme#dep{#parent}{Algorithme}{#depref}{}# de #PlanFacile# est chargé de traiter les idées#dep{IdeesAlgo}{}{}# et les dépendances#dep{DependancesAlgo}{}{}# entre ces idées. L'objectif de l'algorithme est de retrouver l'agencement global du document, tout en cherchant à obtenir un ordre d'apparition des idées permettant une lecture linéaire du texte. #end #idea{GrapheTreillisAlgo}Du graphe de dépendances au treillis de dé#cesure pen#cesure dan#cesure ces#text Cette partie de l'algorithme va analyser le graphe de dépendances#dep{#parent}{GrapheArbreAlgo}{#depref}{}, à la recherche d'éventuelles boucles. Lorsqu'une boucle entre idées est détectée, elle est remplacée par un nouveau sommet, désigné comme idée manquante au sein du document, qui prend comme successeurs les différentes idées de la boucle. #end #idea{GrapheArbreAlgo}Transformation en arbre#text L'ensemble d'idées et de dépendances formant le document forme, au sens informatique du terme, un graphe. Cette structure de données, n'étant évidemment pas adaptée à la représentation d'un plan de document plutôt arborescent, sera donc transformée en arbre. #§ Cette première phase de l'algorithme#dep{#parent}{FonctionnementAlgo}{#depref}{}# est chargée de transformer un graphe de dépendances en un arbre. Pour cela, une structure intermédiaire est nécessaire, structure reprenant certaines caractéristiques du graphe comme la possibilité d'avoir plusieurs sommets comme précédesseurs d'un sommet donné, et des arbres, comme l'absence de boucles. #end #idea{TreillisArbreAlgo}Du treillis de dépendances à l'arbre non trié#text#dep{#parent}{GrapheArbreAlgo}{}{} Le passage à l'arbre non ordonné est relativement simple. Il suffit, à partir du treillis obtenu à la passe précédente#dep{GrapheTreillisAlgo}{#depref}{}, de conserver comme liaison hiérarchique la dépendance la plus pertinente. Pour cela, une notion de pertinence est attachée aux dépendances, permettant ce choix. Cette pertinence sera tout simplement un nombre entier positif, qui de fait indique l'importance relative entre les dépendances d'une même idée. #end #idea{ArbreTriAlgo}Tri de l'arbre#text Cette seconde partie de l'algorithme#dep{#parent}{FonctionnementAlgo}{#depref}{}# consiste simplement, à partir de l'arbre calculé#dep{TreillisArbreAlgo}{#depref}{} , d'effectuer des échanges entre idées de même niveau hié#cesure rar#cesure chi#cesure que, afin d'éliminer les références dont la destination se situe après la source dans le document. Ces références sont qualifiées d'irréductibles, car elles génèrent un renvoi dans le document permettant au lecteur d'avoir les informations nécessaires à la com#cesure pré#cesure hen#cesure sion du texte. Les autres, réductibles, ne génèrent pas de renvoi puisque l'idée correspondante, permettant la com#cesure pré#cesure hen#cesure sion, a normalement été lue, rendant un éventuel renvoi inutile. #end #idea{RacineGrapheArbreAlgo}Calcul de l'idée racine#text Avant le calcul de l'arbre#dep{#parent}{GrapheArbreAlgo}{#depref}{}# des idées correspondant au plan, l'algorithme doit avant tout déterminer une idée, nommée racine, lui donnant une porte d'entrée dans le graphe de dépendances. L'idée choisie est celle qui ne dépend d'aucune autre idée. #end #idea{ExemplesUtilisationsPlanFacile}Exemples d'utilisation de #PlanFacile#text#dep{Installation}{}{} #PlanFacile#dep{#parent}{PlanFacile}{#depref}{}, de par sa capacité de réorganisation globale d'un document à partir de données réparties localement dans ce dernier, peut être utilisé avec un avantage certain dans diverses situations, telles que : #listeapuce{#items {pour un document complexe, où les idées sont très liées sé#cesure man#cesure ti#cesure que#cesure ment ;} {pour un document écrit par plusieurs personnes. Dans ce cas, #PlanFacile# permet de ne pas perdre l'impression d'unité logique au sein du document final ;} {dans une utilisation à des fins pédagogiques, il permet à ceux qui ne sont pas familiers avec l'utilisation d'un compilateur, de comprendre les réactions d'un tel outil. Cette compréhension est plus simple qu'avec un compilateur destiné à un langage de programmation, car dans le cas de #PlanFacile , il est aisé de lire le résultat du compilateur, et de le comparer au fichier source.} } #end #idea{UtilisationPlanFacile}Utilisation de #PlanFacile#text L'utilisation de #PlanFacile#dep{#parent}{PlanFacile}{}{}# peut se décrire en trois composantes bien distinctes : #listeapuce{#items {la ligne de commande, pour appeller #PlanFacile# ;} {la syntaxe des fichiers sources ;} {l'interprétation des messages d'erreur.} } #§ Ces trois composantes distinctes sont en fait reliées par le fait que l'utilisation des trois se cristallise au moment de la compilation par #PlanFacile . #end #idea{LigneCommandePlanFacile}Ligne de commande#text Un des aspects de l'utilisation#dep{#parent}{UtilisationPlanFacile}{}{}# de #PlanFacile# est l'appel du compilateur. Cet appel, qu'il soit effectué directement depuis le shell ou par l'intermédiaire de l'utilitaire de compilation Make, utilise une syntaxe certes standard dans sa forme, mais dont le fond nécessite des précisions. #§ Pour des raisons de confort d'écriture du code de #PlanFacile , le compilateur accepte pas moins de trente cinq options, au format POSIX. Dans la même perspective, le compilateur accepte en entrée un nombre à priori quelconque de noms de fichiers. #end #idea{ArgumentsLigneCommandePlanFacile}Arguments#text Les arguments de la ligne de commande#dep{#parent}{LigneCommandePlanFacile}{#depref}{}# correspondent en fait aux noms des fichiers contenant le source à compiler. Si plusieurs fichiers sont indiqués, le compilateur concatène le code de ces différents fichiers pour produire le document de sortie. Si le fichier nommé #verbatim{|}{-}# est indiqué, l'entrée standard est utilisée. Enfin, dans le cas où aucun fichier n'est indiqué, l'entrée standard est utilisée par défaut. #end #idea{OptionsLigneCommandePlanFacile}Options#text Pour permettre une plus grande liberté aux rédacteurs de fichiers sources, le compilateur accepte une grande variété d'options de ligne de commande# #dep{#parent}{LigneCommandePlanFacile}{#depref}{}. Ces options s'écrivent #apposition{comme le standard POSIX l'exige}# avec un tiret #verbatim{|}{-}# suivi d'une lettre. Certaines de ces options demandent un paramètre lorsqu'elles sont indiquées dans la ligne de commande. #§ Dans leur grande majorité, ces options agissent comme des bascules : placer deux fois une option la replace dans son état initial. Les exceptions seront bien entendu précisés. #§ Heureusement, ces trente cinq options peuvent se regrouper en quelques catégories, ce qui permet de les classer un minimum#... #end #idea{VariablesLigneCommandePlanFacile}Variables d'environnement#text Les variables d'environnement, définies lors de la validation de la ligne de commande#dep{#parent}{LigneCommandePlanFacile}{#depref}{}, peuvent influencer le comportement de #PlanFacile . Pour être précis, seules deux variables d'environnement ont un impact direct sur le compilateur : #listeapuce{#items {#verbatim{|}{LANG}# permet de choisir quelle sera la langue et le jeu de caractères utilisés pour l'affichage des messages de #PlanFacile# sur le terminal ;} {#verbatim{|}{PLANFACILE}# permet de changer temporairement de fichier à inclure au niveau d'un fichier source contenant la commande #verbatim{|}{##standard} #dep{StandardSyntaxePlanFacile}{}{}.} } #end #idea{OptionsGeneralesLigneCommandePlanFacile}Options d'ordre général#text Ces options#dep{#parent}{OptionsLigneCommandePlanFacile}{#depref}{}# sont plutôt destinées à indiquer une action particulière du compilateur : #description{#items {#item{-h (help)}{affiche une aide succinte sur la ligne de commande de #PlanFacile# et sort immédiatement ;}} {#item{-V (version)}{affiche la license d'utilisation de #PlanFacile , ainsi qu'une note sur les développeurs, et sort immédiatement ;}} {#item{-v (verbose)}{affiche des messages #apposition{mode verbeux}# à propos des actions effectuées par le compilateur. Plus cette option est placée, plus le compilateur sera généreux en messages ;}} {#item{-o (output)}{précise un fichier de sortie donnée en argument. Cette option ne peut être donnée qu'une seule fois, et si elle n'est pas précisée, la sortie standard est automatiquement sélectionnée ;}} {#item{-a (all)}{bascule toutes les options désactivées par défaut. D'une manière générale, cela rend le compilateur plus flexible sur certaines erreurs, et plus bavard sur des points particuliers du code source ;}} {#item{-n (none)}{bascule toutes les options activées par défaut. Cela à tendance à rendre le compilateur plus silencieux sur certains points particuliers du code source ;}} {#item{-e (error)}{transforme tous les avertissements en erreur. Cela rend le compilateur plus strict, car aucune erreur, ou remarque n'est tolérée. A utiliser conjointement à l'option #verbatim{|}{-a}# pour obtenir une sévérité maximale ;}} {#item{-W (where)}{permet de ne plus afficher la localisation des erreurs dans le source, ce qui a tendance à alléger la mémoire lors de grosses compilations ;}} {#item{-w (wanted)}{affiche les chemins absolus des fichiers sources dans les messages d'erreur ou d'avertissement du compilateur. Cela est utile lorsque l'éditeur de texte utilisé pour la rédaction du code source comporte un outil accélérant le cycle édition-compilation-correction.}} } #end #idea{OptionsSourcesLigneCommandePlanFacile}Options sur les fichiers sources#text#dep{OptionsGeneralesLigneCommandePlanFacile}{}{} Ces options#dep{#parent}{OptionsLigneCommandePlanFacile}{#depref}{}# sont plutôt destinées à modifier le comportement du compilateur face aux problèmes concernant les fichiers dans lesquels se trouvent le source à analyser : #description{#items {#item{-S (source)}{ignore un fichier source non ouvrable en lecture. Dans ce cas, la compilation se poursuit comme si le fichier n'existait pas ;}} {#item{-I (include)}{ignore une inclusion de fichier dont le fichier est déjà en cours d'analyse #apposition{inclusion récursive de fichiers}# ;}} {#item{-s (standard)}{rend le compilateur plus strict vis-à-vis de la recherche du fichier de définitions standard. En même temps, cette option indique au compilateur que l'on désire savoir ce qu'il fait lorsqu'il rencontre une commande #verbatim{|}{##standard} #dep{StandardSyntaxePlanFacile}{}{}. }} } #end #idea{OptionsCompilationLigneCommandePlanFacile}Options sur la compilation#text#dep{OptionsSourcesLigneCommandePlanFacile}{}{} Ces options#dep{#parent}{OptionsLigneCommandePlanFacile}{#depref}{}# sont plutôt destinées à modifier la compilation en elle-même : #description{#items {#item{-O (option)}{définit une option de compilation, qui est donnée en paramètre de cette option de ligne de commande. La définition d'une option de compilation par ce moyen là revient à placer une commande #verbatim{|}{##option}#dep{OptionSyntaxePlanFacile}{#depref}{}# en tête du fichier source ;}} {#item{-u (user)}{désactive l'affichage des avertissements utilisateurs ;}} {#item{-C (command)}{ignore toute commande qui ne serait pas placée à une position correcte dans le code source. La commande est purement et simplement supprimée.}} } #end #idea{OptionsIdeesLigneCommandePlanFacile}Options sur les idées#text#dep{OptionsCompilationLigneCommandePlanFacile}{}{} Ces options#dep{#parent}{OptionsLigneCommandePlanFacile}{#depref}{}# sont plutôt destinées à modifier le comportement du compilateur face à l'interprétation des idées : #description{#items {#item{-i (idea)}{permet d'éviter l'émission d'un avertissement en cas de redéfinition d'une idée. Pour être plus précis, deux idées ayant la même référence sont considérées comme identiques. Dans ce cas, seule la dernière définie est utilisée ;}} {#item{-Y (empty)}{ignore les idées dont la référence est vide ;}} {#item{-m (missing)}{ignore les idées manquantes dont les indices sont incorrects. Ces indices sont normalement des valeurs numériques entières strictement positives ;}} {#item{-g (generic)}{ignore les idées génériques dont la référence sur l'idée parente est incorrecte. Ces références sont normalement une référence d'idée #verbatim{|}{##idea.}#dep{IdeaIdeesSyntaxePlanFacile}{}{}}} {#item{-r (root)}{désactive l'affichage d'un ajout éventuel d'une idée racine. Cela arrive lorsque #PlanFacile# trouve plusieurs idées sans dépendances ;}} {#item{-A (automatic)}{ignore les idées automatiquement ajoutées par #PlanFacile# qui ne seraient pas résolues par une des commandes #verbatim{|}{##missing} #dep{MissingIdeesSyntaxePlanFacile}{#depref}{}# et #verbatim{|}{##generic}#dep{GenericIdeesSyntaxePlanFacile}{#depref}{}.}} } #end #idea{OptionsDependancesReferencesLigneCommandePlanFacile}Options sur les dépendances et les références#text#dep{OptionsIdeesLigneCommandePlanFacile}{}{} Ces options#dep{#parent}{OptionsLigneCommandePlanFacile}{#depref}{}# sont plutôt destinées à influencer le comportement de #PlanFacile# vis-à-vis des dépendances et des références : #description{#items {#item{-d (destination)}{ignore les dépendances dont la destination est incorrecte. Une dépendance correcte se fait sur une autre idée du document ;}} {#item{-D (dependency)}{indique les dépendances dont #PlanFacile# ne va pas se servir pour calculer le plan. Cela ne signifie en aucun cas que ces dépendances sont fausses, mais tout simplement qu'elles ne sont pas utiles pour ce calcul ;}} {#item{-p (pertinence)}{ignore les dépendances dont la pertinence n'est pas une valeur numérique entière positive ;}} {#item{-E (extern)}{ignore les références extérieures dont l'indice n'est pas une valeur numérique entière strictement positive.}} } #end #idea{OptionsStylesLigneCommandePlanFacile}Options sur les styles#text#dep{OptionsDependancesReferencesLigneCommandePlanFacile}{}{} Ces options#dep{#parent}{OptionsLigneCommandePlanFacile}{#depref}{}# sont plutôt vouées à modifier la manière dont le compilateur doit gérer les styles, ce qui a une conséquence directe sur la sortie du compilateur : #description{#items {#item{-c (comment)}{permet de transmettre les commentaires placés dans le texte dans le document généré ;}} {#item{-y (style)}{affiche toute redéfinition de style. Seul le dernier est pris en compte ;}} {#item{-l (level)}{ignore toute définition de style dont le niveau est incorrect. Une valeur numérique entière positive fera toujours l'affaire ;}} {#item{-G (ignore)}{ignore toutes les idées dont le format de section ne peut être trouvé ;}} {#item{-N (reference)}{ignore toutes les références dont le format n'a pas été défini ;}} {#item{-T (section)}{ignore les commandes #verbatim{|}{##sec}#dep{ExpliciteReferenceStyleSyntaxePlanFacile}{#depref}{}# dont le niveau n'est pas défini.}} } #end #idea{OptionsMacrosLigneCommandePlanFacile}Options sur les macros#text#dep{OptionsStylesLigneCommandePlanFacile}{}{} Ces options#dep{#parent}{OptionsLigneCommandePlanFacile}{#depref}{}# concernent plus précisément les macros de #PlanFacile# : #description{#items {#item{-M (macro)}{affiche toute redéfinition de macro. La position dans le source indique la macro qui remplace la précédente ;}} {#item{-U (unknown)}{ignore tout appel de macro non définie. L'appel est simplement supprimé ;}} {#item{-P (parameters)}{réajuste le nombre de paramètres de la macro con#cesure for#cesure mé#cesure ment à sa définition : si des paramètres sont ajoutés, ils sont ajoutés vides, sinon ils sont ignorés ;}} {#item{-R (recursive)}{ignore tout appel récursif de macro. La récursivité est absolument interdite avec les macros ;}} {#item{-t (option)}{ignore toute définition d'option de compilation placée au sein d'une macro. Ceci est une limitation nécessaire au bon déroulement de la compilation.}} } #end #idea{ErreursPlanFacile}Erreurs de #PlanFacile#text #PlanFacile# détecte un nombre assez important d'incorrections possibles dans les fichiers sources, lors de son invocation#dep{#parent}{UtilisationPlanFacile} {#depref}{}. #§ Cependant, toutes ces incorrections ne sont pas équivalentes, et le compilateur est capable de graduer la sanction en fonction de l'importance des problèmes rencontrés. En clair, il y a quatre niveaux distincts de réponse : #description{#items {#item{la notification}{est un avertissement que l'on obtient sur demande explicite au compilateur ;}} {#item{l'avertissement}{est un avertissement que l'on obtient par défaut. Cependant, il est possible de demander au compilateur ne de pas afficher cet avertissement ;}} {#item{l'erreur rattrapable}{est une erreur dont la gravité est modérée. A l'aide d'une option, le compilateur peut transformer cette erreur en un avertissement et adopter un comportement visant à réparer au mieux l'erreur commise ;}} {#item{l'erreur non rattrapable}{est une erreur dont la seule issue est une modification du code source, étant donné qu'il s'agit là d'une faute grave dont aucune solution n'est connue de #PlanFacile .}} } #end #idea{EnvironnementErreursPlanFacile}Erreurs dûes à l'environnement#text Ces erreurs#dep{#parent}{ErreursPlanFacile}{#depref}{}# sont reliées au système dans lequel se trouve #PlanFacile# : #description{#items {#item{Mémoire insuffisante pour la poursuite de la compilation}{Cette erreur non rattrapable est dûe à un manque de mémoire empêchant la poursuite de la compilation ;}} {#item{Impossible d'éxécuter PlanFacile dans le répertoire courant}{Cette erreur non rattrapable indique que le répertoire dans lequel revient le compilateur a changé depuis un passage précédent ;}} {#item{Option #apposition{-option}# non reconnue. (#... )}{Cet avertissement est obtenu lorsque qu'une option de ligne de commande n'est pas utilisée par le compilateur.}} } #end #idea{FichiersErreursPlanFacile}Erreurs relatives aux fichiers#text#dep{EnvironnementErreursPlanFacile}{}{} Ces erreurs#dep{#parent}{ErreursPlanFacile}{#depref}{}# indiquent toutes une opération impossible sur un fichier : #description{#items {#item{Impossible d'ouvrir le fichier #apposition{fichier}# en lecture}{Cette erreur rattrapable indique qu'un fichier source ne peut être ouvert pour être analysé. Si l'erreur est rattrapée, la commande d'inclusion est ignorée ;}} {#item{Impossible d'ouvrir le fichier #apposition{fichier}# en écriture}{Cette erreur non rattrapable indique que le fichier désigné pour enregistrer le document produit ne peut être ouvert en écriture. Il faut alors préciser un autre fichier ;}} {#item{Impossible d'ouvrir le fichier de nom vide en lecture}{Cette erreur rattrapable indique qu'une commande #verbatim{|}{##include}# a été appellée sans nom de #dep{IncludeSyntaxePlanFacile}{}{} fichier. Si l'erreur est rattrapée, la commande d'inclusion est ignorée ;}} {#item{Aucun fichier n'a pu être ouvert pour #dièse standard}{Cette erreur non rattrapable, obtenue avec l'option -s de la ligne de commande #dep{OptionsSourcesLigneCommandePlanFacile}{#depref}{}, indique que la commande #verbatim{|}{##standard}# n'a pas pu ouvrir de fichier ;} #dep{StandardSyntaxePlanFacile}{}{}} {#item{Inclusion récursive du fichier #apposition{fichier}}{Cette erreur rattrapable indique qu'une inclusion de fichier essaye d'ouvrir un fichier déjà en cours d'analyse par le compilateur. Si l'erreur est rattrapée, la commande d'inclusion est ignorée ;}} {#item{Fichier de sortie déjà spécifié}{Cette erreur non rattrapable indique la présence d'une option de ligne de commande -o #dep{OptionsGeneralesLigneCommandePlanFacile}{#depref}{}# surnuméraire.}} } #end #idea{CompilationErreursPlanFacile}Erreurs de compilation#text#dep{FichiersErreursPlanFacile}{}{} Ces erreurs#dep{#parent}{ErreursPlanFacile}{#depref}{}# indiquent un problème vraiment attaché au langage de #PlanFacile# : #description{#items {#item{Erreur de syntaxe avant le symbole #apposition{symbole}}{Cette erreur non rattrapable indique qu'une commande est syntaxiquement incorrecte. Dans ce cas, la seule solution est de modifier la commande ;}} {#item{Commande #apposition{commande}# mal placée}{Cette erreur rattrapable indique d'une commande est placée à un endroit où elle n'est pas admise par le langage. Si l'erreur est rattrapée, la commande fautive est ignorée.}} } #end #idea{MacrosErreursPlanFacile}Erreurs avec les macros#text#dep{CompilationErreursPlanFacile}{}{} Ces erreurs#dep{#parent}{ErreursPlanFacile}{#depref}{}# correspondent toutes à une mauvaise utilisation des macros : #description{#items {#item{Redéfinition de la macro #apposition{macro}}{Cette notification sert simplement à indiquer une redéfinition de macro. Cela permet de savoir quelle est la macro qui est utilisée, en cas de résultat inattendu ;}} {#item{Appel de la macro #apposition{macro}# non définie}{Cette erreur rattrapable indique qu'aucune définition ne correspond à un appel de macro. Si cette erreur est rattrapée, l'appel est supprimé ;}} {#item{Appel de la macro #apposition{macro}# avec #apposition{nbre}# paramètre(s) (#... )}{Cette erreur rattrapable indique qu'une macro n'est pas correctement appellée. Dans le cas où cette erreur est rattrapée, le compilateur ajuste le nombre des paramètres automatiquement, en ajoutant au besoin des paramètres vides ;}} {#item{Appel récursif de la macro #apposition{macro}}{Cette erreur rattrapable indique qu'une macro est appellée récursivement, ce qui est strictement interdit. Si cette erreur est rattrapée, l'appel de la macro est supprimé ;}} {#item{Option #apposition{option}# définie à l'intérieur de la macro #apposition{macro}}{Cette erreur rattrapable indique qu'une option est définie à l'intérieur d'une macro, ce qui est également interdit. Dans ce cas, si l'erreur est rattrapée, la définition de l'option est ignorée.}} } #end #idea{IdeesErreursPlanFacile}Erreurs sur les idées#text#dep{MacrosErreursPlanFacile}{}{} Ces erreurs#dep{#parent}{ErreursPlanFacile}{#depref}{}# correspondent à tous les petits tracas que l'on peut avoir avec les idées#dep{IdeesAlgo}{#depref}{} , sauf le drame de la page blanche : #description{#items {#item{Redéfinition de l'idée #apposition{idée}}{Cet avertissement indique simplement qu'une idée normale a été redéfinie. Cela arrive lorsque deux idées ont la même référence ;}} {#item{Idée de référence vide incorrecte}{Cette erreur rattrapable indique que la référence d'une idée normale est vide. Lorsque cette erreur est rattrappée, l'erreur est ignorée.}} } #§ Par souci de clarté, les idées automatiques seront traitées séparément. #end #idea{IdeesGeneriquesErreursPlanFacile}Erreurs sur les idées génériques#text Ces erreurs#dep{ErreursPlanFacile}{#depref}{}# sont toutes plus spécifiques aux idées génériques#dep{#parent}{IdeesErreursPlanFacile}{#depref}{}# : #description{#items {#item{Redéfinition de l'idée générique par défaut}{Cet avertissement in#cesure di#cesure que simplement que la résolution par défaut d'une idée générique a été redéfinie ;}} {#item{Redéfinition de l'idée générique de référence parente #apposition{référence}}{Cet avertissement indique simplement que la résolution d'une idée gé#cesure né#cesure ri#cesure que dont la référence parente a été spécifiée a été redéfinie ;}} {#item{Idée générique de référence vide incorrecte}{Cette erreur rattrapable indique qu'une idée générique dont la référence est vide a été trouvée dans le source. Lorsque cette erreur est rattrapée, la résolution de l'idée est ignorée ;}} {#item{Idée générique de référence parente #apposition{référence}# non définie}{Cet#cesure te erreur rattrapable indique qu'une résolution d'idée générique manque. Dans le cas où l'erreur est rattrapée, la résolution est ignorée ;}} {#item{Référence parente d'idée générique incorrecte}{Cette erreur rat#cesure tra#cesure pa#cesure ble est émise lorsqu'une résolution d'idée générique porte sur une idée parente inexistante.}} } #end #idea{IdeesManquantesErreursPlanFacile}Erreurs sur les idées manquantes#text Ces erreurs#dep{ErreursPlanFacile}{#depref}{}# sont toutes plus spécifiques aux idées manquantes#dep{#parent}{IdeesErreursPlanFacile}{#depref}{}# : #description{#items {#item{Redéfinition de l'idée manquante par défaut}{Cet avertissement in#cesure di#cesure que simplement que la résolution par défaut des idées manquantes a été redéfinie ;}} {#item{Redéfinition de l'idée manquante d'indice #apposition{indice}}{Cet avertissement indique simplement que la résolution de l'idée manquante d'indice spécifié dans le message a été redéfinie ;}} {#item{Idée manquante de référence vide incorrecte}{Cette erreur rattrapable dénonce une résolution d'idée manquante par une idée dont la référence est vide. Si cette erreur est rattrappée, la résolution est ignorée ;}} {#item{Idée manquante d'indice #apposition{indice}# non définie}{Cette erreur rattrapable intervient lorsque #PlanFacile# ne peut résoudre une idée manquante. Si cette erreur est rattrapée, la résolution de l'idée est ignorée ;}} {#item{Indice d'idée manquante incorrect}{Cette erreur rattrapable indique qu'une résolution d'idée manquante porte sur un indice invalide. Cette résolution est ignorée dans le cas où l'erreur est rattrapée.}} } #end #idea{DependancesReferencesErreursPlanFacile}Erreurs sur les dépendances et sur les références#text#dep{IdeesErreursPlanFacile}{}{} Ces erreurs#dep{#parent}{ErreursPlanFacile}{#depref}{}# sont reliées aux dépendances#dep{DependancesAlgo}{#depref}{}, ainsi qu'aux références d'une idée vers une autre, qui sont directement issues des dépendances : #description{#items {#item{Dépendance vers l'idée #apposition{idée}# incorrecte}{Cette erreur rattrapable est émise lorsque la destination d'une idée n'est pas celle d'une idée réellement existante. Si cette erreur est rattrapée, la dépendance est ignorée ;}} {#item{Dépendance vers l'idée de référence vide incorrecte}{Cette erreur rattrapable dénonce l'utilisation d'une dépendance vers une idée dont la référence est vide. Lorsque que cette erreur est rattrapée, la dépendance est simplement ignorée ;}} {#item{Pertinence de la dépendance vers l'idée #apposition{idée}# incorrecte}{Cette erreur rattrapable indique que la pertinence d'une dépendance est incorrecte. La pertinence est une valeur entière positive, qui peut être représentée en décimal, en octal ou en héxadécimal. La dépendance est ignorée dans le cas où l'erreur est rattrapée ;}} {#item{Dépendance vers l'idée #apposition{idée}# non utilisée pour le calcul du plan}{Cette notification sert à vérifier si une dépendance, même correcte, ne sert pas au calcul du plan ;}} {#item{Dépendance vers l'idée de référence vide non utilisée pour (#... )}{Cette notification sert à indiquer que la dépendance dont la destination est une référence vide ne peut pas servir au calcul du plan ;}} {#item{Indice de référence #apposition{référence}# incorrect}{Cette erreur rattrapable est émise lorsque l'indice d'une référence extérieure est incorrect. Si l'erreur est rattrapée, la référence extérieure#dep{MissingIdeesSyntaxePlanFacile}{#depref}{}# est ignorée ;}} {#item{Nom de section de niveau #apposition{niveau}# indéfini}{Cette erreur rattrapable indique qu'un nom de section n'est pas défini. Dans le cas où l'erreur est rattrapée, la commande devant inclure le nom de section est ignorée.}} } #end #idea{CalculPlanErreursPlanFacile}Erreurs sur le calcul du plan#text#dep{DependancesReferencesErreursPlanFacile}{}{} Ces erreurs#dep{#parent}{ErreursPlanFacile}{#depref}{}# sont relatives au calcul du plan#dep{FonctionnementAlgo}{#depref}{}# : #description{#items {#item{Impossible de déterminer l'idée racine}{Cette erreur non rattrapable indique une erreur de topologie du graphe de dépendance : le graphe ne contient aucune idée #apposition{nommée racine}# qui ne dépende de rien, véritable point d'entrée dans ce graphe pour l'algorithme de calcul du plan. Dans ce cas, il suffit d'ajouter une idée racine à la main, et établir les dépendances concernant cette nouvelle idée ;}} {#item{Idée #apposition{idée}# non atteignable depuis la racine du document}{Cet#cesure te erreur non rattrapable indique une autre erreur de topologie du graphe de dépendances, à savoir qu'au moins une idée ne peut pas être atteinte en suivant les dépendances depuis la racine du document. Dans ce cas, la topologie doit être complétée pour que les idées deviennent toutes atteignables ;}} {#item{Ajout d'une idée racine au document}{Cet avertissement sert à indiquer que #PlanFacile# a ajouté une idée complètement virtuelle comme racine du document. Cela arrive lorsque le graphe de dépendances comprend plusieurs racines potentielles.}} } #end #idea{StylesErreursPlanFacile}Erreurs sur les styles#text#dep{CalculPlanErreursPlanFacile}{}{} Ces erreurs#dep{#parent}{ErreursPlanFacile}{#depref}{}# sont toutes liées aux commandes de style de #PlanFacile . Elles peuvent être classées selon le type de commande sur lesquelles elles portent, et c'est ce classement qui sera ici adopté, dans un but de clarté. #end #idea{SectionsStylesErreursPlanFacile}Erreurs sur les sections#text Ces erreurs#dep{#parent}{StylesErreursPlanFacile}{#depref}{}# concernent tout ce qui est relatif aux formats de section : #description{#items {#item{Redéfinition du style pour les sections de niveau #apposition{niveau}}{Cet#cesure te notification indique que l'on modifie un style de section de niveau explicitement spécifié, et qui a été défini au préalable ;}} {#item{Redéfinition du style par défaut pour les sections}{Cette notification indique que l'on modifie le style de section pour tous les niveaux non explicitement définis ;}} {#item{Niveau incorrect pour la définition du format de section}{Cette er#cesure reur rattrapable indique que le niveau, censé être une valeur entière positive, est incorrect. Si l'erreur est rattrapée, le format de section est ignoré ;}} {#item{Format de section non défini pour l'idée #apposition{idée}}{Cette erreur rattrapable signale qu'une idée n'a pas de format de section associé. Si l'erreur est rattrapée, l'idée est ignorée, comme toutes celles du niveau incriminé.}} } #end #idea{ReferencesStylesErreursPlanFacile}Erreurs sur les références#text#dep{SectionsStylesErreursPlanFacile}{}{} Ces erreurs#dep{#parent}{StylesErreursPlanFacile}{#depref}{}# concernent quant à elles tout ce qui est relatif aux formats de référence : #description{#items {#item{Redéfinition du style pour les références de niveau #apposition{niveau}}{Cet#cesure te notification indique qu'un format de référence dont le niveau de la destination explicitement désigné a été modifié ;}} {#item{Redéfinition du style par défaut des références}{Cette notification indique que le format par défaut des références a été modifié ;}} {#item{Niveau incorrect pour la définition du format de référence}{Cette erreur rattrapable survient lorsqu'un format de référence est appliqué à un niveau inexistant. Lorsque l'erreur est rattrapée, le format est ignoré ;}} {#item{Format de référence non défini pour la référence #apposition{référence}}{Cette erreur rattrapable signale qu'une référence n'a pas de format associé. Si l'erreur est rattrapée, la référence est ignorée, comme toutes celles dont la destination est du niveau incriminé.}} } #end #idea{DocumentMessagesStylesErreursPlanFacile}Erreurs sur les messages, les entêtes et pied de document#text#dep{ReferencesStylesErreursPlanFacile}{}{} Ces erreurs#dep{#parent}{StylesErreursPlanFacile}{#depref}{}# sont liés au formatage du document, en dehors des idées : #description{#items {#item{Redéfinition du style de message}{Cette notification indique que la ma#cesure niè#cesure re qu'a #PlanFacile# pour formatter les commentaires et les messages ont été modifiés ;}} {#item{Redéfinition de l'entête de document}{Cette notification indique que l'en#cesure tê#cesure te du document a été changée ;}} {#item{Redéfinition du pied de document}{Cette notification indique que le pied du document a été changé.}} } #end #idea{RacineStylesErreursPlanFacile}Erreurs sur le niveau racine#text#dep{DocumentMessagesStylesErreursPlanFacile}{}{} Ces erreurs#dep{#parent}{StylesErreursPlanFacile}{#depref}{}# sont celles qui concernent le niveau de l'idée racine, qui à lui seul permet de déterminer comment formatter toutes les idées : #description{#items {#item{Redéfinition du niveau racine}{Cette notification indique seulement une modification du niveau racine ;}} {#item{Niveau incorrect pour la définition du niveau racine}{Cette erreur rattrapable souligne une définition du niveau racine dont le niveau est incorrect. Dans le cas où cette erreur est rattrapée, la définition du niveau est ignorée ;}} {#item{Impossible de déterminer le niveau racine}{Cette erreur non rattrapable indique que le niveau racine n'a pas été spécifié, où n'a pas pu être déduit à partir des autres commandes de formattage.}} } #end #idea{ErreurPersonnelleErreursPlanFacile}Erreur et avertissement utilisateur#text#dep{StylesErreursPlanFacile}{}{} Cet avertissement et cette erreur#dep{#parent}{ErreursPlanFacile}{#depref}{}# indiquent un problème déterminé par l'auteur d'un source de #PlanFacile . Le message est alors celui désigné par le rédacteur du code#... #end #idea{LangagePlanFacile}Langage reconnu par #PlanFacile#text Le point le plus crucial de l'utilisation#dep{#parent}{UtilisationPlanFacile}{#depref}{}# de #PlanFacile# est en fait la rédaction d'un texte source pour #PlanFacile . Ce texte source, à première vue, semble être un simple texte parsemé de commandes indiquant au compilateur comment réaliser ses traitements. #end #idea{FluxLangagePlanFacile}Notion de flux#text Une première notion intrinsèque au langage#dep{#parent}{NotionsLangagePlanFacile}{#depref}{}# de #PlanFacile# est le flux de commandes#dep{CommandesLangagePlanFacile} {#depref}{}, véritable enchainement linéaire de commandes pouvant elles-mêmes contenir du texte, voire d'autres commandes. De plus, il est important de remarquer que ces flux ont tous un début et une fin généralement matérialisés par des éléments syntaxiques du langage. #§ De même, certaines commandes peuvent contenir des flux. Ces flux seront indiqués comme sous-flux du flux dans lequel se trouvent de telles commandes. L'interêt de cette remarque vient du fait qu'une action sur un flux peut ou non affecter ses sous-flux. Cette remarque peut sembler anodine, mais elle donne deux portées différentes pour les commandes de #PlanFacile , portée qui est fortement liée à la notion de flux. #end #idea{CommandesLangagePlanFacile}Notion de commandes#text Une des notions intrinsèques du langage#dep{#parent}{NotionsLangagePlanFacile}{#depref}{}# sont les commandes. Les commandes peuvent être classifiées en deux grandes catégories. Cependant, que les commandes soient simples ou composées, elles se comportent comme des ensembles logiques ayant un sens unique. #end #idea{CommandesSimplesLangagePlanFacile}Commandes simples#text Une commande#dep{#parent}{CommandesLangagePlanFacile}{#depref}{}# simple est formée d'un dièse, suivi d'un nom #apposition{une suite de caractères ne comportant ni espace, ni tabulation, ni retour chariot, ni accolade, ni dièse, et ne commençant pas par un chiffre}# lui même éventuellement suivi de paramètres entre accolades. Ces paramètres sont dans leur grande majorité des flux#dep{FluxLangagePlanFacile}{#depref}{}, ce qui permet une grande souplesse en termes d'écriture de code, mais peuvent dans certains cas précis n'être qu'une simple portion de texte. #end #idea{CommandesComposeesLangagePlanFacile}Commandes composées#text Une commande#dep{#parent}{CommandesLangagePlanFacile}{#depref}{}# composée est formée en fait d'un certain nombre de commandes simples#dep{CommandesSimplesLangagePlanFacile}{#depref}{}# placées dans un certain ordre. Entre ces commandes simples, le plus souvent, un flux#dep{FluxLangagePlanFacile}{#depref}{}# peut être inséré, en tant que paramètre de la commande composée. #end #idea{NotionsLangagePlanFacile}Notions sous-jacentes au code source#text Le langage#dep{#parent}{LangagePlanFacile}{#depref}{}# repose sur deux concepts simples qui vont vous permettre de bien comprendre certains aspects du langage, ainsi que faciliter l'interprétation de certains messages d'erreur du compilateur. #end #idea{SyntaxePlanFacile}Syntaxe de #PlanFacile#text Cette partie va décrire, commande#dep{CommandesLangagePlanFacile}{#depref}{}# par commande, la syntaxe du langage#dep{#parent}{LangagePlanFacile}{#depref}{}, avec le rôle de chacun des paramètres des commandes, et surtout l'utilité de ces commandes dans un code source. #end #idea{TextuelSyntaxePlanFacile}Commandes textuelles#text Ces commandes#dep{#parent}{SyntaxePlanFacile}{#depref}{}# sont celles qui vont permettre au compilateur de transmettre du texte depuis le fichier source vers le document généré. #end #idea{TexteSyntaxePlanFacile}Commande de texte#text Cette commande textuelle#dep{#parent}{TextuelSyntaxePlanFacile}{#depref}{}# est en fait unique dans le langage#dep{LangagePlanFacile}{#depref}{}, car elle est la seule commande qui, contrairement au principe normal d'écriture des commandes#dep{CommandesSimplesLangagePlanFacile}{#depref}{}, ne commence pas par un dièse. Pour faire simple, tout texte placé dans le code source est une commande de texte. #§ Pour être plus précis, une commande de texte est une suite de caractères commençant par n'importe quel caractère hormis les espaces, tabulations, retour chariots et caractères indiquant une commande. La fin de la commande de texte est la commande suivante, ou la fin de la ligne sur laquelle la commande de texte a été commencée. De ce fait : #listeapuce{#items {le texte peut respecter l'indentation du code source, en plaçant des tabulations ou espaces en début de ligne, sans quelles soient prises en compte ;} {tout espace, tabulation ou retour-chariot placé après une commande incluse dans une portion de texte sera donc ignoré ;} {les caractères d'espacement ainsi que les caractères #dièse , #accouvrante , #accfermante# ne peuvent pas être directement entrés dans une commande de texte.} } #§ Enfin, il faut préciser une chose importante : les commandes de texte ne peuvent pas êtres utilisées autrement que comme paramètre d'une commande de #PlanFacile . Si une commande de texte se retrouve en dehors d'une commande, la compilation se terminera par une erreur#dep{CompilationErreursPlanFacile}{#depref}{}# du compilateur. #end #idea{EchappementSyntaxePlanFacile}Commandes d'échappement de caractères#text Cet ensemble de com#cesure man#cesure des textuelles#dep{#parent}{TextuelSyntaxePlanFacile}{#depref}{}# sert à palier au manque de la commande de texte#dep {TexteSyntaxePlanFacile}{#depref}{}, qui ne permet pas d'inclure certains caractères dans un texte normal. Ces commandes s'écrivent à l'aide d'un dièse suivi du caractère échappé. #§ D'une part, il y a cinq commandes d'echappement qui se substituent toujours au caractère représenté : #dièse , #accouvrante , #accfermante , l'espace et la tabulation. D'autre part, l'echappement du retour chariot peut s'utiliser de deux manières différentes. Soit il permet après une commande de texte d'indiquer que la ligne en cours se poursuit sur la suivante, ce qui revient à écrire en plusieurs lignes de source une seule ligne un peu longue dans le document généré. Soit il permet d'ajouter un retour chariot qui aurait normalement été ignoré par le compilateur après une commande, ou en début de paramètre. #end #idea{GeneralesSyntaxePlanFacile}Commandes générales de #PlanFacile#text Ces commandes#dep{#parent}{SyntaxePlanFacile}{#depref}{}# sont des commandes qui ne servent pas directement à la génération du document, mais qui permettent de modifier le comportement du compilateur. #end #idea{CommentaireSyntaxePlanFacile}Commande de commentaire#text Cette commande#dep{#parent}{GeneralesSyntaxePlanFacile}{#depref}{}# sert simplement à isoler une portion de code source. La syntaxe de cette commande est tout simplement #verbatim{|}{##comment#{commentaire#}}. #§ Ceci dit, il faut être attentif aux commentaires de #PlanFacile# car, contrairement à beaucoup d'autres langages, ils ne sont pas de simples portions de texte non prises en compte par le compilateur, mais sont de réelles commandes du compilateur. Cela implique que le paramètre contenant le commentaire doit être syntaxique valide. Toutes les commandes placées dans un commentaire seront éliminées, sauf les commandes de macro#dep{MacrosSyntaxePlanFacile}{#depref}{} # et la commande de sélection de code#dep{OptionsSyntaxePlanFacile}{#depref}{}, qui continuent de fonctionner. Ce comportement peut sembler étrange au premier abord, mais se justifie par l'option de ligne de commande #verbatim{|}{-c}#dep{OptionsStylesLigneCommandePlanFacile}{#depref}{}# qui transfère le texte des commentaires placés dans un flux de texte destiné à être placé dans le document. #end #idea{InclusionSyntaxePlanFacile}Inclusions de fichier#text Ces commandes#dep{#parent}{GeneralesSyntaxePlanFacile}{#depref}{}# servent à rediriger temporairement la lecture de #PlanFacile# momentanément vers un autre fichier. #end #idea{IncludeSyntaxePlanFacile}Inclusion simple#text L'inclusion#dep{#parent}{InclusionSyntaxePlanFacile}{#depref}{}# simple consiste à indiquer quel fichier doit être lu par le compilateur. La syntaxe de cette commande est assez simple : #verbatim{|}{##include#{fichier#}}. A la lecture de cette commande, le compilateur arrête l'analyse du fichier en cours et lit le fichier indiqué, pour revenir au fichier de départ après analyse complète du fichier inclus. #end #idea{StandardSyntaxePlanFacile}Inclusion standard#text Cette inclusion#dep{#parent}{InclusionSyntaxePlanFacile}{#depref}{}# est plus complexe que #dep{IncludeSyntaxePlanFacile}{la seconde}{la pre#cesure miè#cesure re} #comment{Comment jouer avec les dépendances ^_^"}. En effet, étant donné qu'elle s'utilise sans paramètre #apposition{à savoir ainsi #verbatim{|}{##standard}} il faut garder à l'esprit où est-ce-que le compilateur va chercher le fichier à inclure. Il utilise trois emplacements précis pour cela, qu'il teste dans l'ordre jusqu'à arriver à en ouvrir un : #enumeration{#items {le contenu de la variable #verbatim{|}{PLANFACILE}# ;} {le fichier #verbatim{|}{~/.planfacile/standard.plf}# ;} {un fichier précisé au moment de l'installation du projet. A priori, ce fichier est #verbatim{|}{/usr/share/planfacile/standard/standard.plf}.} } Le premier est surtout utile pour des tests ou des compilations de documents où l'on veut par exemple modifier le style. Le second correspond au fichier des définitions standard de l'utilisateur, et le dernier correspond au fichier de définitions standard du système, normalement installé avec le compilateur. #end #missing{2}{SelectionCodeSyntaxePlanFacile}Options du compilateur#text Les commandes qui vont vous être présentées maintenant donne le moyen au rédacteur d'un document de proposer plusieurs choix possibles pour une portion de code source, ainsi que d'exprimer le choix retenu pour une compilation donnée. #end #idea{OptionsSyntaxePlanFacile}Utilisation des options#text La commande#dep{#parent}{GeneralesSyntaxePlanFacile}{#depref}{}# de sélection de code est une commande composée qui permet, en fonction des options de compilation déclarées#dep{OptionSyntaxePlanFacile}{#depref{# (Voir #sec# « #title# ».)}}{}, de ne conserver que certaines parties de code. La syntaxe complète de cette commande est : #verbatimlong{ ##options#{label#}#verbligne ##case#{option 1#}# clause 1#verbligne ...#verbligne ##case#{option n#}# clause n#verbligne ##other clause par défaut (facultative)#verbligne ##end} #§ Le comportement de cette commande est assez particulier, dû au fait que la déclaration d'une option#dep{OptionSyntaxePlanFacile}{}{}# soit globale. En fait, la première clause, dont l'option est préalablement déclarée, est executéer. Mais si celle-ci déclare une option dont la clause est au-dessus, la clause en amont sera elle aussi executée à la suite de la première executée. Il faut noter que cette rétroaction s'effectue sur toutes les commandes #verbatim{|}{##options}# du code source, et donc que cette nouvelle déclaration d'option peut amener à ce que des clauses d'autres commandes de sélection de code soient activées ! Ensuite, il est toujours bon de noter que la clause par défaut n'est executée que si aucune des options demandées n'est déclarée. Enfin, il reste une remarque à faire à propos du label. Il est bien évidemment obligatoire, et contient du texte permettant à l'utilisateur de savoir à quoi correspond la sélection de code, #PlanFacile# ne l'utilisant absolument pas pour le traitement du code source. #end #idea{OptionSyntaxePlanFacile}Déclaration des options#text La commande#dep{#parent}{GeneralesSyntaxePlanFacile}{#depref}{}# de déclaration d'option est très simple : #verbatim{|}{##option#{nom de l'option#}}, avec comme paramètre un texte #apposition{et non un flux}# indiquant quelle option déclarer. Cette déclaration, une fois qu'elle est prise en compte par le compilateur, est globale à tout le code source ! Cela signifie que son action porte depuis la première ligne du source jusqu'à sa dernière, et ce où que soit la commande de déclaration en elle-même. #§ L'utilisation d'une telle commande peut se faire n'importe où, sauf dans les macros#dep{MacrosSyntaxePlanFacile}{#depref}{}, où son utilisation provoque une erreur. #§ La déclaration d'une option n'a en soit aucune action directe, mais va avoir une influence localisée sur d'autres commandes#dep{OptionsSyntaxePlanFacile} {#depref{# (Voir #sec# « #title# ».)}}{}# spécialisées dans la sélection de code. #end #idea{MacrosSyntaxePlanFacile}Macros#text Les commandes#dep{#parent}{GeneralesSyntaxePlanFacile}{#depref}{}# présentées ici servent au rédacteur d'un fichier source à créer ses propres commandes. En effet, le principe d'une macro est de pouvoir créer une commande, et de la redévelopper en une portion de code source en réalisant l'appel de la commande créée. Cependant, ce remplacement est un remplacement de flux#dep{FluxLangagePlanFacile}{#depref}{}# et non un remplacement textuel réalisé avant compilation. Cela implique que tous les flux concernés par les macros se doivent d'être syntaxiquement corrects. #end #idea{DefineSyntaxePlanFacile}Définition de macro#text La définition d'une macro#dep{#parent}{MacrosSyntaxePlanFacile}{#depref}{}# se fait à l'aide de la commande #verbatim{|} {##define#{nom de la macro#}#{définition de la macro#}}. Le premier paramètre, un simple texte #apposition{et non un flux}# indique le nom de la macro. Pour que la macro puisse être appellée, il faut que ce nom ne commence pas par un chiffre, et ne contienne aucun des caractères échappables# #dep{EchappementSyntaxePlanFacile}{#depref}{}. Ensuite vient la définition de la macro. Cette définition est un flux#dep{FluxLangagePlanFacile}{#depref}{}# tout à fait normal, aux déclaration de paramètres près. Une telle déclaration est faite par la commande formée d'un #dièse# suivie d'un entier positif. Le premier paramètre correspond au numéro 1, le suivant au numéro 2, etc#...#espace le plus grand indice donnant le nombre de paramètres acceptés par la macro. Le paramètre 0 a quant à lui une signification spéciale, plus facile à exprimer en expliquant comment se déroule l'appel des macros. Enfin, il reste à évoquer la portée d'une définition de macro : #listeapuce{#items {une macro est locale au flux#dep{FluxLangagePlanFacile}{#depref}{}# dans laquelle elle est définie ;} {une macro est masquée dans un sous-flux si une définition de macro portant le même nom est présente ;} {une macro est définie sur l'ensemble du flux dans lequel elle est définie ;} {si deux définitions de macros portent le même nom dans un même flux, seule la seconde est utilisée ;} {une macro définie dans une clause de sélection de code#dep{OptionsSyntaxePlanFacile}{#depref}{}# est vue depuis tout le flux englobant la commande de sélection de code, mais les définitions de macro de même nom définies à l'extérieur de la commande de sélection de code sont prioritaires.} } #end #idea{AppelMacroSyntaxePlanFacile}Appel de macro#text Un appel de macro#dep{#parent}{MacrosSyntaxePlanFacile}{#depref}{}, s'écrivant naturellement comme un commande simple de #PlanFacile# #apposition {#verbatim{|}{##macro#{param 1#}...#{param n#}}}# requiert déjà l'accessibilité à la définition de la macro#dep{DefineSyntaxePlanFacile}{#depref}{}. Ensuite, l'appel doit à priori comporter autant de paramètres que la définition de la macro l'indique. A partir de là, deux cas se présentent : #enumeration{#items {soit la définition de la macro ne comporte pas le paramètre #verbatim{|}{##0}, auquel cas la macro est simplement appellée : l'appel est remplacé par le contenu de la définition avec les paramètres remplacés par leur valeur ;} {soit la définition de la macro contient le paramètre #verbatim{|}{##0}, indiquant que la macro est une boucle. Dans ce cas, tous les paramètres au-delà de ce qu'indique la définition de la macro sert d'indice de boucle. En fait, la macro va être automatiquement appellée autant de fois que nécessaire, en remplaçant tour à tour la commande #verbatim{|}{##0}# par la valeur des paramètres surnuméraires. En effet, une macro boucle peut très bien utiliser des paramètres obligatoires qui seront utilisés à chaque itération de la boucle.} } #§ Enfin, il faut garder à l'esprit une restriction importante à l'utilisation des macros : un appel de macro ne peut pas se faire de manière récursive. En revanche, un appel de macro de même nom peut se faire, à condition de masquer la première définition en cours d'appel avec une définition locale à ce même appel. #options{Format de sortie} #case{LaTeX} #define{verbatim}{\verb%#2%}#comment{Cette macro est laissée à titre d'exemple...} #case{HTML} #end #end #idea{MessagesSyntaxePlanFacile}Messages du compilateur#text Le rédacteur peut vouloir indiquer un avertissement ou une erreur lors de la compilation. Les commandes#dep{#parent}{GeneralesSyntaxePlanFacile}{#depref}{}# qui suivent existent dans ce but. Leur syntaxe est évidente : #listeapuce{#items {#verbatim{|}{##warning#{avertissement#}}# qui donne un avertissement;} {#verbatim{|}{##error#{erreur#}}# qui termine la compilation sur une erreur.} } Le contenu de ces deux paramètres est similaire à celui des commentaires#dep{CommentaireSyntaxePlanFacile}{#depref}{}. #end #idea{StyleSyntaxePlanFacile}Styles#text Ces commandes#dep{#parent}{SyntaxePlanFacile}{#depref}{}# servent toutes à indiquer au compilateur comment gé#cesure né#cesure rer le document. La plupart du temps, ces commandes se trouvent dans le fichier des définitions standard#dep{StandardSyntaxePlanFacile}{#depref}{}, afin de ne pas alourdir inutilement le travail du rédacteur de document. #end #idea{DocumentStyleSyntaxePlanFacile}Entête et pied de document#text Ces deux commandes#dep{#parent}{StyleSyntaxePlanFacile}{#depref}{}# servent à indiquer au compilateur ce qu'il doit insérer comme texte avant et après les idées #dep{IdeesSyntaxePlanFacile}{#depref}{}# organisées dans le plan calculé. #end #idea{EnteteDocumentStyleSyntaxePlanFacile}Entête de document#text Cette commande de style#dep{#parent}{DocumentStyleSyntaxePlanFacile}{#depref}{}, dont la syntaxe est #verbatim{|}{##head#{entête#}}, insère donc le texte# #dep{TextuelSyntaxePlanFacile}{#depref}{}# indiqué en paramètre en début de document généré. #end #idea{PiedDocumentStyleSyntaxePlanFacile}Pied de document#text#dep{EnteteDocumentStyleSyntaxePlanFacile}{}{} Cette commande de style#dep{#parent}{DocumentStyleSyntaxePlanFacile}{#depref}{}, dont la syntaxe est #verbatim{|}{##foot#{entête#}}, insère donc le texte# #dep{TextuelSyntaxePlanFacile}{#depref}{}# indiqué en paramètre en fin de document généré. #end #idea{SectionStyleSyntaxePlanFacile}Format de section#text Ces commandes#dep{#parent}{StyleSyntaxePlanFacile}{#depref}{}# sont là pour indiquer comment #PlanFacile# doit écrire les sections. Il y a deux formes de cette commande, selon la portée de la définition du formattage. #end #idea{DefautSectionStyleSyntaxePlanFacile}Format de section par défaut#text Le format de section#dep{#parent}{SectionStyleSyntaxePlanFacile}{#depref}{}# par défaut s'indique à l'aide de la commande #verbatimlong{##section#{nom niveau#}#{format avant#}#{format après#}#verbligne #{présection#}#{postsection#}}# dont les paramètres signifient : #description{#items {#item{nom niveau}{ce paramètre #apposition{textuel}# donne le nom du niveau par défaut ;}} {#item{format avant}{ce paramètre indique quel est le texte à placer avant les sous-sections lorsque le compilateur doit générér un idée dont le niveau n'a pas de format explicitement défini. Ce paramètre accepte les mêmes commandes que le format des sections explicitement définis#dep{ExpliciteSectionStyleSyntaxePlanFacile} {#depref}{}# ;}} {#item{format après}{ce paramètre indique quel est le texte à placer après les sous-sections lorsque le compilateur doit générér un idée dont le niveau n'a pas de format explicitement défini. Ce paramètre accepte les mêmes commandes que le format des sections explicitement définis#dep{ExpliciteSectionStyleSyntaxePlanFacile} {#depref}{}# ;}} {#item{présection}{ce paramètre indique quel est le texte à placer avant toute section ayant le format de section par défaut ;}} {#item{postsection}{ce paramètre indique quel est le texte à placer après toute section ayant le format de section par défaut.}} } Ces paramètres soulèvent une remarque qui est expliquée#dep{ExpliciteSectionStyleSyntaxePlanFacile}{# ci-après}{# un peu plus haut}. #§ Le format par défaut correspond en fait au format de toutes les idées dont le niveau hiérarchique n'a pas de format explicitement défini#dep {ExpliciteSectionStyleSyntaxePlanFacile}{#depref}{}. #end #idea{ExpliciteSectionStyleSyntaxePlanFacile}Format de section explicitement défini#text Le format d'une section#dep{#parent}{SectionStyleSyntaxePlanFacile}{#depref}{}# explicitement défini s'indique à l'aide de la commande #verbatimlong {##section#{niveau#}#{nom niveau#}#{format avant#}#{format après#}#verbligne #{présection#}#{postsection#}}# dont les paramètres signifient : #description{#items {#item{niveau}{ce paramètre est un nombre entier positif indiquant quel est le niveau hiérarchique affecté par la commande ;}} {#item{nom niveau}{ce paramètre #apposition{textuel}# donne le nom du niveau explicite ;}} {#item{format avant}{ce paramètre indique quel est le texte à placer avant les sous-sections lorsque le compilateur doit générér une idée dont le niveau hiérarchique correspond au niveau indiqué au premier paramètre. Ce paramètre accepte des commandes de formattage permettant de positionner les divers éléments d'une idée : #listeapuce{#items {#verbatim{|}{##title}# donne la position du titre de l'idée#dep{IdeesSyntaxePlanFacile}{#depref}{},} {#verbatim{|}{##ref}# donne la position de la référence de l'idée#dep{IdeesSyntaxePlanFacile}{#depref}{},} {#verbatim{|}{##txt}# donne la position du texte de l'idée#dep{IdeesSyntaxePlanFacile}{#depref}{}# ;} } }} {#item{format après}{ce paramètre indique quel est le texte à placer après les sous-sections lorsque le compilateur doit générér une idée dont le niveau hiérarchique correspond au niveau indiqué au premier paramètre. Ce paramètre accepte les mêmes commandes de formattage que le paramètre précédent ;}} {#item{présection}{ce paramètre indique quel est le texte à placer avant toute section ayant le format de section ici défini ;}} {#item{postsection}{ce paramètre indique quel est le texte à placer après toute section ayant le format de section ici défini.}} } #§ Ces paramètres amènent une remarque importante : quel est l'intêret d'autant de paramètres alors que les quatres derniers semblent être redondants ? En réalité, leurs significations #apposition{et donc leur utilisation}# ne sont pas identiques, et de loin ! Lors du formattage d'une idée, les deux paramètres de format sont utilisés pour formatter l'idée elle-même, alors que les deux derniers sont liés aux sous-sections de l'idée, et ne sont donc présents que si notre idée a des descendants. Enfin, le format de présection et de postsection appliqué est celui du niveau des sous-sections ! #end #idea{ReferenceStyleSyntaxePlanFacile}Format de référence#text Ces commandes#dep{#parent}{StyleSyntaxePlanFacile}{#depref}{}# sont là pour indiquer comment #PlanFacile# doit écrire les références. Il y a deux formes de cette commande, selon la portée de la définition du formattage. #end #idea{DefautReferenceStyleSyntaxePlanFacile}Format de référence par défaut#text Le format de référence#dep{#parent}{ReferenceStyleSyntaxePlanFacile}{#depref}{}# par défaut s'indique à l'aide de la commande #verbatimlong{##reference#{format#}}# dont le paramètre indique quel est le texte à placer lorsque le compilateur doit générér une référence dont le niveau de l'idée de destination n'a pas de format explicitement défini. Ce paramètre accepte les mêmes commandes que le format des références explicitement définies#dep{ExpliciteReferenceStyleSyntaxePlanFacile} {#depref}{}. #§ Le format par défaut correspond en fait au format de toutes les références dont le niveau hiérarchique de l'idée de destination de la références n'a pas de format explicitement défini#dep{ExpliciteReferenceStyleSyntaxePlanFacile}{#depref}{}. #end #idea{ExpliciteReferenceStyleSyntaxePlanFacile}Format de référence explicitement défini#text Le format d'une référence#dep{#parent}{ReferenceStyleSyntaxePlanFacile}{#depref}{}# explicitement défini s'indique à l'aide de la commande #verbatimlong {##reference#{niveau#}#{format#}}# dont les paramètres signifient : #description{#items {#item{niveau}{ce paramètre est un nombre entier positif, ou un nom de niveau explicitement défini, indiquant quel est le niveau hiérarchique affecté par la commande ;}} {#item{format}{ce paramètre indique quel est le texte à placer lorsque le compilateur doit générér une référence dont le niveau hiérarchique de la destination correspond au niveau indiqué au premier paramètre. Ce paramètre accepte des commandes de formattage permettant de positionner les divers éléments d'une référence : #listeapuce{#items {#verbatim{|}{##title}# donne la position du titre de l'idée#dep{IdeesSyntaxePlanFacile}{#depref}{},} {#verbatim{|}{##ref}# donne la position de la référence de l'idée#dep{IdeesSyntaxePlanFacile}{#depref}{},} {#verbatim{|}{##sec}# donne le nom de la section#dep{SectionStyleSyntaxePlanFacile}{#depref}{}# de la destination. Cependant, cette commande peut accepter un unique paramètre précisant le niveau dont on désire récuperer le nom.} } }} } #end #idea{DepartStyleSyntaxePlanFacile}Niveau hiérarchique de départ#text Cette commande#dep{#parent}{StyleSyntaxePlanFacile}{#depref}{}# sert à indiquer à #PlanFacile# quel est le niveau hiérarchique de l'idée racine#dep {RacineGrapheArbreAlgo}{#depref}{}, permettant ainsi de savoir quels formats de section#dep{SectionStyleSyntaxePlanFacile}{#depref}{}# utiliser pour produire le document. La syntaxe de cette commande est simple : #verbatim{|}{##start#{niveau#}}# où le niveau est soit un nombre entier positif, ou le nom d'un niveau explicitement défini#dep{ExpliciteSectionStyleSyntaxePlanFacile}{#depref}{}. #§ Si cette commande n'est pas indiquée dans le code, #PlanFacile# prendra comme niveau racine le niveau le plus faible numériquement dont le format aura été explicitement défini. #end #idea{MessageStyleSyntaxePlanFacile}Format de message#text Cette commande#dep{#parent}{StyleSyntaxePlanFacile}{#depref}{}# sert à deux choses bien distinctes, qui nécessitent un formattage commun : #enumeration{#items {afficher un message de statistiques sur le plan calculé en fin de document généré ;} {transmettre les commentaires#dep{CommentaireSyntaxePlanFacile}{#depref}{}# du fichier source vers le document généré.} } #§ Pour cela, il suffit d'indiquer comment se formatte un commentaire dans le document à l'aide de la commande #verbatim{|}{##message#{message#}}# dans laquelle le paramètre indique le format d'un commentaire. Dans ce paramètre, le contenu du commentaire est indiqué par la commande #verbatim{|}{##mesg}. #end #idea{IdeesSyntaxePlanFacile}Idées#text#dep{GeneralesSyntaxePlanFacile}{}{} Ces commandes#dep{#parent}{SyntaxePlanFacile}{#depref}{}# sont sans nul doute les plus essentielles à un code de #PlanFacile . En effet, ce sont ces trois commandes qui servent à bâtir l'ensemble du document généré, notamment grâce à la possibilité d'enregistrer le texte#dep{TextuelSyntaxePlanFacile}{#depref}{}. #end #idea{IdeaIdeesSyntaxePlanFacile}Idées normales#text Cette commande d'idée#dep{#parent}{IdeesSyntaxePlanFacile}{#depref}{}# sert à indiquer un concept du document. Sa syntaxe est relativement simple : #verbatimlong{ ##idea#{référence#} titre ##text#verbligne texte avec dépendances#verbligne ##end} La référence, véritable identifiant de l'idée pour #PlanFacile , est astreint à l'unicité. Ensuite, le second paramètre est le titre de l'idée, tel qu'il devra apparaître dans les commandes de formattage de section#dep{SectionStyleSyntaxePlanFacile}{#depref}{}# et de référence#dep{ReferenceStyleSyntaxePlanFacile}{#depref}{}. Enfin, le texte est tout simplement la portion du document qui correspond à l'énoncé du concept de l'idée. Ce texte contient également les dépendances de l'idée, notées # avec une commande spécifique : #verbatimlong{##dep#{pertinence#}#{référence#}#{irréductible#}#{réductible#}} Cette commande est en revanche un peu plus complexe à utiliser : #description{#items {#item{pertinence}{ce paramètre, un entier positif, indique l'importance de la dé#cesure pen#cesure dan#cesure ce. Ce paramètre peut être omis, et dans ce cas, la pertinence de la dépendance est prise à 0, soit la pertinence minimale ;}} {#item{référence}{ce paramètre est la référence vers l'idée dont dépend l'idée en cours ;}} {#item{irréductible}{ce paramètre est le texte à placer si la dépendance se transforme en une référence irréductible, c'est-à-dire une référence vers une idée située plus en aval du texte. Dans ce paramètre, il est possible d'ajouter une commande indiquant l'introduction d'une référence : #verbatim{|}{##depref}. Cette référence est formattée avec le format de référence du niveau de l'idée destination de la référence, à moins que le format soit passé en premier paramètre de la commande #verbatim{|}{##depref#{format#}}, paramètre supportant les mêmes commandes de formattage que le dernier paramètre de la commande de formattage de référence#dep {ReferenceStyleSyntaxePlanFacile}{#depref}{}# ;}} {#item{réductible}{ce paramètre est le texte, ne pouvant contenir ni dépendance ni format de référence, à placer si la destination est située en amont de l'idée en cours.}} } #end #idea{MissingIdeesSyntaxePlanFacile}Idées manquantes#text Cette commande d'idée#dep{#parent}{IdeesSyntaxePlanFacile}{#depref}{}, contrairement à l'idée normale#dep{IdeaIdeesSyntaxePlanFacile}{#depref}{}, est une commande qui sert à indiquer à #PlanFacile# par quel contenu doit être remplacé une idée manquante. #end #idea{DefautMissingIdeesSyntaxePlanFacile}Résolution par défaut#text La résolution des idées manquantes#dep{#parent}{MissingIdeesSyntaxePlanFacile}{#depref}{}# par défaut s'écrit comme une idée normale : #verbatimlong{ ##missing#{référence automatique#} titre automatique##text#verbligne texte avec références extérieures#verbligne ##end} Les deux seules différences sont la possibilité d'ajouter la commande #verbatim{|}{##index}# dans la référence et le titre, permettant de savoir quelle est l'idée concernée. Cela est plutôt pratique lorsqu'une nouvelle idée manquante apparaît, car cela permet de la résoudre de manière plus spécifique, avec la commande de résolution explicite#dep{ExpliciteMissingIdeesSyntaxePlanFacile}{#depref}{}# des idées manquantes. La seconde différence concerne le texte. Il n'est évidemment plus question de dépendances dans ce paramètre de texte, mais il se peut que des références partent de l'idée manquante. Pour indiquer ces références, il existe deux commandes : #listeapuce{#items {#verbatim{|}{##extref#{indice#}}# permet d'inclure une référence, en utilisant le format de référence du niveau de l'idée de destination ;} {#verbatim{|}{##extrefs}# permet d'inclure dans l'ordre toutes les références qui partent de l'idée en cours. Cela permet de connaître l'ensemble des références, spécialement dans la résolution par défaut, afin de savoir rapidement quelles sont les références à remplacer.} } Ces deux commandes acceptent un paramètre supplémentaire donnant le format de référence à utiliser à la place de celle définie pour le niveau de l'idée de destination. #end #idea{ExpliciteMissingIdeesSyntaxePlanFacile}Résolution explicite#text La résolution explicite d'une idée manquante#dep{#parent}{MissingIdeesSyntaxePlanFacile}{#depref}{}# suit une syntaxe relativement simple : #verbatimlong{ ##missing#{indice#}#{référence automatique#} titre automatique##text#verbligne texte avec références extérieures#verbligne ##end} Les paramètres de cette commande sont : #description{#items {#item{indice}{ce paramètre, un entier strictement positif, indique quelle idée manquante est résolue par cette commande ;}} {#item{référence}{ce paramètre indique la référence de l'idée manquante résolue, pouvant inclure la commande #verbatim{|}{##index}# pour indiquer quelle est l'indice de l'idée résolue ;}} {#item{titre}{ce paramètre indique le titre de l'idée manquante résolue. La commande #verbatim{|}{##index}# est également permise dans ce paramètre ; }} {#item{texte}{ce dernier paramètre est simplement le texte de l'idée manquante résolue. Ce texte ne peut contenir de dépendances, mais des références vers d'autres idées, nommées références extérieures : #listeapuce{#items {#verbatim{|}{##extref#{indice#}}# permet d'inclure une référence, en utilisant le format de référence du niveau de l'idée de destination ;} {#verbatim{|}{##extrefs}# permet d'inclure dans l'ordre toutes les références qui partent de l'idée en cours. Cela permet de connaître l'ensemble des références, spécialement dans la résolution par défaut, afin de savoir rapidement quelles sont les références à remplacer.} } Ces deux commandes acceptent un paramètre supplémentaire donnant le format de référence à utiliser à la place de celle définie pour le niveau de l'idée de destination. }} } #end #idea{GenericIdeesSyntaxePlanFacile}Idées génériques#text Cette commande d'idée#dep{#parent}{IdeesSyntaxePlanFacile}{#depref}{}, contrairement à l'idée normale#dep{IdeaIdeesSyntaxePlanFacile}{#depref}{}, est une commande qui sert à indiquer à #PlanFacile# par quel contenu doit être remplacé une idée générique. #end #idea{DefautGenericIdeesSyntaxePlanFacile}Résolution par défaut#text La résolution des idées génériques#dep{#parent}{GenericIdeesSyntaxePlanFacile}{#depref}{}# par défaut s'écrit comme une idée normale : #verbatimlong{ ##generic#{référence automatique#} titre automatique##text#verbligne texte#verbligne ##end} La seule différence avec l'idée normale est la possibilité d'ajouter la commande #verbatim{|}{##index}# dans la référence et le titre, permettant de savoir quelle est l'idée concernée. Cela est plutôt pratique lorsqu'une nouvelle idée générique apparaît, car cela permet de la résoudre de manière plus spécifique, avec la commande de résolution explicite#dep{ExpliciteGenericIdeesSyntaxePlanFacile}{#depref}{}# des idées génériques. La seconde différence concerne le texte, qui ne peut contenir ni dépendances#dep{IdeaIdeesSyntaxePlanFacile}{#depref}{}, ni références extérieures#dep{MissingIdeesSyntaxePlanFacile}{#depref}{}. #end #idea{ExpliciteGenericIdeesSyntaxePlanFacile}Résolution explicite#text La résolution explicite d'une idée générique#dep{#parent}{GenericIdeesSyntaxePlanFacile}{#depref}{}# suit une syntaxe relativement simple : #verbatimlong{ ##generic#{indice#}#{référence automatique#} titre automatique##text#verbligne texte#verbligne ##end} Les paramètres de cette commande sont : #description{#items {#item{indice}{ce paramètre, qui n'est en fait que la référence de l'idée parente de l'idée générique, indique quelle idée générique est résolue par cette commande ;}} {#item{référence}{ce paramètre indique la référence de l'idée générique résolue, pouvant inclure la commande #verbatim{|}{##index}# pour indiquer quelle est la référence parente de l'idée résolue ;}} {#item{titre}{ce paramètre indique le titre de l'idée générique résolue. La commande #verbatim{|}{##index}# est également permise dans ce paramètre ; }} {#item{texte}{ce dernier paramètre est simplement le texte de l'idée générique résolue. Ce texte ne peut contenir ni dépendances#dep{IdeaIdeesSyntaxePlanFacile} {#depref}{}, ni références extérieures#dep{MissingIdeesSyntaxePlanFacile}{#depref}{}.}} } #end PlanFacile-2.0/doc/compilateur/MakeFile0000644000175000017500000000223610510305653014764 00000000000000# # PlanFacile (Easy plan, in french) is a small tool to help people to # write a document on a particular subject. # Copyright (C) 2005 Julien BRUGUIER # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 2 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # .PHONY: all html pdf clean PLFFLAGS=-ae all: html html: planfacile.html pdf: planfacile.pdf %.html: %.plf planfacile $(PLFFLAGS) -O HTML -o $@ $^ %.tex: %.plf planfacile $(PLFFLAGS) -O LaTeX -O rapport -O 11pt -o $@ $^ %.dvi: %.tex latex $^ latex $^ %.ps: %.dvi dvips $^ -o $@ %.pdf: %.ps ps2pdf $^ $@ clean: @rm -vf *.{tex,dvi,ps,aux,log,toc,pdf,html} PlanFacile-2.0/doc/compilateur/sitetdmhtml.plf0000644000175000017500000000402010510305653016416 00000000000000#comment{ PlanFacile (Easy plan, in french) is a small tool to help people to write a document on a particular subject. Copyright (C) 2005 Julien BRUGUIER This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA } #start{0} #section{section} {
  • #title } {
  • } { } #head { } #message{} #option{HTML} #define{PlanFacile}{PlanFacile} #define{parent}{100} #generic{ideegeneric#index}Idée générique #index#text #end #define{§} { # #

    # #

    } #define{enumeration} { # #

    # #
      #1 # #
    # #

    #define{items} { # # #

  • #0
  • } } #define{verbatim} { #2# } #define{verbatimlong} {
    #1
    } #define{verbligne} {
    } #define{listeapuce} { # #

    # # # #

    #define{items} { # # #

  • #0
  • } } #define{oe}{œ} #define{...}{...} #define{espace}{# } #define{apposition}{— #1# — } #define{cesure}{} #define{description} { # #

    # # # #

    #define{items} { # # # #0 } #define{item} {

  • #1# : #2
  • } } #define{dièse}{##}#comment{géniales tes macros pappy... ca te dit de recoder toutes les commandes avec des macros ?} #define{accouvrante}{#{}#comment{Euh... pas possible, d'une part, et puis ça serait moins pratique à utiliser... comme quoi, j'y avais déjà pensé ^_^"} #define{accfermante}{#}} #define{citation}{#1 } PlanFacile-2.0/doc/compilateur/Makefile.am0000644000175000017500000000232410625116244015421 00000000000000compilateurdir=${datadir}/doc/@DOCDIR@/doc/compilateur compilateursrcdir=${top_srcdir}/doc/compilateur compilateur_DATA=planfacile.plf EXTRA_DIST=planfacile.plf sitedochtml.plf sitetdmhtml.plf MakeFile site: ${top_srcdir}/doc/compilateur/planfacile.plf ${top_srcdir}/doc/compilateur/sitetdmhtml.plf ${top_srcdir}/doc/compilateur/sitedochtml.plf PLANFACILE=${top_srcdir}/doc/compilateur/sitetdmhtml.plf \ ${top_builddir}/planfacile -o ${top_builddir}/doc/compilateur/planfacile_sitetdm.html ${top_srcdir}/doc/compilateur/planfacile.plf PLANFACILE=${top_srcdir}/doc/compilateur/sitedochtml.plf \ ${top_builddir}/planfacile -o ${top_builddir}/doc/compilateur/planfacile_sitedoc.html ${top_srcdir}/doc/compilateur/planfacile.plf cat ${top_builddir}/doc/compilateur/planfacile_sitetdm.html ${top_builddir}/doc/compilateur/planfacile_sitedoc.html \ > ${top_builddir}/doc/compilateur/planfacile_site.html rm -f ${top_builddir}/doc/compilateur/planfacile_sitedoc.html ${top_builddir}/doc/compilateur/planfacile_sitetdm.html clean-site: -rm -rf planfacile_site.html install-data-hook: ${INSTALL_DATA} ${compilateursrcdir}/MakeFile ${DESTDIR}${compilateurdir}/Makefile uninstall-local: -rm -rf ${DESTDIR}${compilateurdir}/Makefile PlanFacile-2.0/doc/compilateur/Makefile.in0000644000175000017500000002635010625116327015441 00000000000000# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = doc/compilateur DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(compilateurdir)" compilateurDATA_INSTALL = $(INSTALL_DATA) DATA = $(compilateur_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DOCDIR = @DOCDIR@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STDDEFSDIR = @STDDEFSDIR@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ compilateurdir = ${datadir}/doc/@DOCDIR@/doc/compilateur compilateursrcdir = ${top_srcdir}/doc/compilateur compilateur_DATA = planfacile.plf EXTRA_DIST = planfacile.plf sitedochtml.plf sitetdmhtml.plf MakeFile all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/compilateur/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/compilateur/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-compilateurDATA: $(compilateur_DATA) @$(NORMAL_INSTALL) test -z "$(compilateurdir)" || $(MKDIR_P) "$(DESTDIR)$(compilateurdir)" @list='$(compilateur_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(compilateurDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(compilateurdir)/$$f'"; \ $(compilateurDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(compilateurdir)/$$f"; \ done uninstall-compilateurDATA: @$(NORMAL_UNINSTALL) @list='$(compilateur_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(compilateurdir)/$$f'"; \ rm -f "$(DESTDIR)$(compilateurdir)/$$f"; \ done tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(compilateurdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-compilateurDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-dvi: install-dvi-am install-exec-am: install-html: install-html-am install-info: install-info-am install-man: install-pdf: install-pdf-am install-ps: install-ps-am installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-compilateurDATA uninstall-local .MAKE: install-am install-data-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-compilateurDATA install-data install-data-am \ install-data-hook install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ uninstall-compilateurDATA uninstall-local site: ${top_srcdir}/doc/compilateur/planfacile.plf ${top_srcdir}/doc/compilateur/sitetdmhtml.plf ${top_srcdir}/doc/compilateur/sitedochtml.plf PLANFACILE=${top_srcdir}/doc/compilateur/sitetdmhtml.plf \ ${top_builddir}/planfacile -o ${top_builddir}/doc/compilateur/planfacile_sitetdm.html ${top_srcdir}/doc/compilateur/planfacile.plf PLANFACILE=${top_srcdir}/doc/compilateur/sitedochtml.plf \ ${top_builddir}/planfacile -o ${top_builddir}/doc/compilateur/planfacile_sitedoc.html ${top_srcdir}/doc/compilateur/planfacile.plf cat ${top_builddir}/doc/compilateur/planfacile_sitetdm.html ${top_builddir}/doc/compilateur/planfacile_sitedoc.html \ > ${top_builddir}/doc/compilateur/planfacile_site.html rm -f ${top_builddir}/doc/compilateur/planfacile_sitedoc.html ${top_builddir}/doc/compilateur/planfacile_sitetdm.html clean-site: -rm -rf planfacile_site.html install-data-hook: ${INSTALL_DATA} ${compilateursrcdir}/MakeFile ${DESTDIR}${compilateurdir}/Makefile uninstall-local: -rm -rf ${DESTDIR}${compilateurdir}/Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: PlanFacile-2.0/doc/compilateur/sitedochtml.plf0000644000175000017500000000615610510305653016413 00000000000000#comment{ PlanFacile (Easy plan, in french) is a small tool to help people to write a document on a particular subject. Copyright (C) 2005 Julien BRUGUIER This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA } #start{document} #head{} #foot{} #section{0}{document} { # #

    #title

    } { } {} {} #reference{document}{} #section{1}{chapitre} { # #

    #title

    # #

    # # # #txt # #

    } { } {} {} #section{2}{sous-chapitre} { # #

    #title

    # #

    # # # #txt # #

    } { } {} {} #section{3}{section} { # #

    #title

    # #

    # # # #txt # #

    } { } {} {} #section{4}{sous-section} { # #

    #title

    # #

    # # #txt # #

    } { } {} {} #section{5}{sous-sous-section} { # #
    #title
    # #

    # # # #txt # #

    } { } {} {} #section{6}{paragraphe} { # #
    #title
    # #

    # # # #txt # #

    } { } {} {} #section{idée} { # # #
  • # # # #

    #title #txt# } { # # # #

    # # #
  • } { # # } #reference{# (Voir #title )} #message{} #define{PlanFacile}{PlanFacile} #define{parent}{100} #define{§} { # #

    # #

    } #define{enumeration} { # #

    # #
      #1 # #
    # #

    #define{items} { # # #

  • # # # #

    #0

    # # #
  • } } #define{verbatim} { #2# } #define{verbatimlong} {
    #1
    } #define{verbligne} {
    } #define{listeapuce} { # #

    # # # #

    #define{items} { # # #

  • # # # #

    #0

    # # #
  • } } #define{oe}{œ} #define{...}{...} #define{espace}{# } #define{apposition}{— #1# — } #define{cesure}{} #define{description} { # #

    # # # #

    #define{items} { #0 } #define{item} { # # #

  • # # # #

    #1# : #2

    # # #
  • } } #define{dièse}{##}#comment{géniales tes macros pappy... ca te dit de recoder toutes les commandes avec des macros ?} #define{accouvrante}{#{}#comment{Euh... pas possible, d'une part, et puis ça serait moins pratique à utiliser... comme quoi, j'y avais déjà pensé ^_^"} #define{accfermante}{#}} #define{citation}{#1 } #missing{idee_manquante_#index}Idée manquante #index#text #end #generic{idee_generique_#index}Idée générique #index#text #end PlanFacile-2.0/doc/Makefile.am0000644000175000017500000000024110523403246013067 00000000000000docREADMEdir=${datadir}/doc/@DOCDIR@/doc docREADMEsrcdir=${top_srcdir}/doc SUBDIRS=compilateur standard tutorial docREADME_DATA=README EXTRA_DIST=fun README PlanFacile-2.0/doc/Makefile.in0000644000175000017500000003665710625116327013130 00000000000000# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = doc DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(docREADMEdir)" docREADMEDATA_INSTALL = $(INSTALL_DATA) DATA = $(docREADME_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DOCDIR = @DOCDIR@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STDDEFSDIR = @STDDEFSDIR@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ docREADMEdir = ${datadir}/doc/@DOCDIR@/doc docREADMEsrcdir = ${top_srcdir}/doc SUBDIRS = compilateur standard tutorial docREADME_DATA = README EXTRA_DIST = fun README all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-docREADMEDATA: $(docREADME_DATA) @$(NORMAL_INSTALL) test -z "$(docREADMEdir)" || $(MKDIR_P) "$(DESTDIR)$(docREADMEdir)" @list='$(docREADME_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(docREADMEDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(docREADMEdir)/$$f'"; \ $(docREADMEDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(docREADMEdir)/$$f"; \ done uninstall-docREADMEDATA: @$(NORMAL_UNINSTALL) @list='$(docREADME_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(docREADMEdir)/$$f'"; \ rm -f "$(DESTDIR)$(docREADMEdir)/$$f"; \ done # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ (cd $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ am__remove_distdir=: \ am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(docREADMEdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive info: info-recursive info-am: install-data-am: install-docREADMEDATA install-dvi: install-dvi-recursive install-exec-am: install-html: install-html-recursive install-info: install-info-recursive install-man: install-pdf: install-pdf-recursive install-ps: install-ps-recursive installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-docREADMEDATA .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ install-strip .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-docREADMEDATA install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-docREADMEDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: PlanFacile-2.0/doc/tutorial/0000777000175000017500000000000010625124616012771 500000000000000PlanFacile-2.0/doc/tutorial/favicon.png0000644000175000017500000000111010510305653015024 00000000000000‰PNG  IHDRóÿagAMA± üa pHYs  šœtIMEÖ71óàIztEXtCommentCreated with The GIMPïd%n®IDAT8Ë’KH[A…¿¹jÜX¬ *K‹A4ŠD#)¸\DhkL–¢Kw-.âÂl‚›BwŠ;µ‹^7¤­6} ¢ˆ/ð¾z¥`w\4® ·­øgþgΡC+ÿ†°kdqiO$lgn˜æÈ®­ÑæG-IBñÕ¨@J„”xò·ú­s}ó§Ÿ„;Ù/kŸÅò¿-|øUÝÔ>õs±.}PK>A­DrÅ#šß‡)ùMÓ¥ùç„”)xÑü¾ˆæ÷©;)Ò6õÙW²‰.æ>Ûa6¦j«R¡ƒËêtä¹³AÕëçO&ÿx•ÎÝÀÆ—‹.··h üùdYyPlçpGUãqÖÚÒ˜ÚK·7$¤D‘Žm­–dü‚Âk-P#Ì=ä=,ÓÚÞÉPbsã#@ÆE¢¶ š+Ò \ š+€™õ€qúzS&èàH&±<$èö®Y%«L at'–û׌[0¤Š¼§uÝWÛ±aK¯'ƒÀ,+µcÊ].<4~Œ;^¸ÞÄÇ÷îœû=ÒªH%ñ¿aì}ÏP|‰ZP }¾IEND®B`‚PlanFacile-2.0/doc/tutorial/MakeFile0000644000175000017500000000225010510305653014277 00000000000000# # PlanFacile (Easy plan, in french) is a small tool to help people to # write a document on a particular subject. # Copyright (C) 2005 Julien BRUGUIER # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 2 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # .PHONY: all html pdf clean PLFFLAGS=-Aucd -O 'sans générique' all: html html: tuto.html pdf: tuto.pdf %.html: %.plf planfacile $(PLFFLAGS) -O HTML -o $@ $^ %.tex: %.plf planfacile $(PLFFLAGS) -O LaTeX -O rapport -O 11pt -o $@ $^ %.dvi: %.tex latex $^ latex $^ %.ps: %.dvi dvips $^ -o $@ %.pdf: %.ps ps2pdf $^ $@ clean: @rm -vf *.{tex,dvi,ps,aux,log,toc,pdf,html} PlanFacile-2.0/doc/tutorial/Makefile.am0000644000175000017500000000053110523403377014741 00000000000000tutorialdir=${datadir}/doc/@DOCDIR@/doc/tutorial tutorialsrcdir=${top_srcdir}/doc/tutorial tutorial_DATA=favicon.png tuto.css tuto.plf EXTRA_DIST=favicon.png MakeFile tuto.css tuto.plf install-data-hook: ${INSTALL_DATA} ${tutorialsrcdir}/MakeFile ${DESTDIR}${tutorialdir}/Makefile uninstall-local: -rm -rf ${DESTDIR}${tutorialdir}/Makefile PlanFacile-2.0/doc/tutorial/Makefile.in0000644000175000017500000002444510625116330014755 00000000000000# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = doc/tutorial DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(tutorialdir)" tutorialDATA_INSTALL = $(INSTALL_DATA) DATA = $(tutorial_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DOCDIR = @DOCDIR@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STDDEFSDIR = @STDDEFSDIR@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ tutorialdir = ${datadir}/doc/@DOCDIR@/doc/tutorial tutorialsrcdir = ${top_srcdir}/doc/tutorial tutorial_DATA = favicon.png tuto.css tuto.plf EXTRA_DIST = favicon.png MakeFile tuto.css tuto.plf all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/tutorial/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/tutorial/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-tutorialDATA: $(tutorial_DATA) @$(NORMAL_INSTALL) test -z "$(tutorialdir)" || $(MKDIR_P) "$(DESTDIR)$(tutorialdir)" @list='$(tutorial_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(tutorialDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(tutorialdir)/$$f'"; \ $(tutorialDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(tutorialdir)/$$f"; \ done uninstall-tutorialDATA: @$(NORMAL_UNINSTALL) @list='$(tutorial_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(tutorialdir)/$$f'"; \ rm -f "$(DESTDIR)$(tutorialdir)/$$f"; \ done tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(tutorialdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-tutorialDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-dvi: install-dvi-am install-exec-am: install-html: install-html-am install-info: install-info-am install-man: install-pdf: install-pdf-am install-ps: install-ps-am installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-local uninstall-tutorialDATA .MAKE: install-am install-data-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-data-hook install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip install-tutorialDATA installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ uninstall-local uninstall-tutorialDATA install-data-hook: ${INSTALL_DATA} ${tutorialsrcdir}/MakeFile ${DESTDIR}${tutorialdir}/Makefile uninstall-local: -rm -rf ${DESTDIR}${tutorialdir}/Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: PlanFacile-2.0/doc/tutorial/tuto.css0000644000175000017500000000021310510305653014401 00000000000000body { background:#F0F4FF; } h1 { color:#800000; } h2 { color:#008000; } h3 { color:#000080; } p { text-align:justify; color:#303030; }PlanFacile-2.0/doc/tutorial/tuto.plf0000644000175000017500000013624610523421603014410 00000000000000#comment{ PlanFacile (Easy plan, in french) is a small tool to help people to write a document on a particular subject. Copyright (C) 2005 Julien BRUGUIER This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA } #standard #option{fr} #option{iso} #option{rapport} #option{titre} #define{titre}{Introduction à PlanFacile} #option{style} #define{style}{tuto.css} #option{icône} #define{icone}{favicon} #define{typeicone}{png} #options{Type de fichier} #case{LaTeX} #define{PlanFacile}{#{\sc PlanFacile#}} #define{LaTeX}{\LaTeX} #define{<}{<} #define{>}{>} #case{HTML} #define{PlanFacile}{PlanFacile} #define{LaTeX}{LaTeX} #define{<}{<} #define{>}{>} #other #define{PlanFacile}{PlanFacile} #define{LaTeX}{LaTeX} #define{<}{<} #define{>}{>} #end #idea{intro}Introduction à #PlanFacile#text #end #idea{base}Concepts et commandes de base#text#dep{prerecquis}{}{} Cette section de cette introduction#dep{1}{intro}{#depref}{}# a pour but de vous familiariser avec la représentation d'un document utilisée par #PlanFacile , ainsi que la syntaxe associée. #§ A la fin de cette section, vous devriez être en mesure d'écrire un fichier pouvant contenir un document complet. Il ne manquera alors que très peu de choses à ajouter au code source pour obtenir un document en XHTML ou en #LaTeX . #end #idea{idee}Idée de #PlanFacile#text Le concept de base#dep{1}{base}{#depref}{}# le plus fondammental est sans conteste l'idée, véritable composant indispensable à un document. #§ Une idée de #PlanFacile# est une portion de texte atomique pouvant être désignée de manière univoque par un titre simple. #end #idea{ideeelements}Eléments d'une idée#text Une idée#dep{1}{idee}{#depref}{}, de manière purement formelle, est un regroupement d'éléments très simples. #end #idea{syntaxeidee}Syntaxe d'une idée#text La syntaxe d'une idée#dep{1}{idee}{#depref}{}# contient simplement les trois éléments#dep{ideeelements} {#depref}{}# mentionnées plus haut : #verbatimlong{ ##idea#{Référence#} Titre ##text Le texte... ##end} #§ Parmi ces trois éléments, seuls les deux derniers sont donc du texte à entrer au kilomètre. Pour la référence, il est plutôt recommandé de n'utiliser qu'un seul mot, même s'il doit être long et comportant des majuscules pour mettre en relief une composition de plusieurs mots de la langue française. #end #idea{titre}Titre#text Déjà, cet élément d'idée#dep{1}{ideeelements}{#depref}{}# est une portion de texte complètement inerte pour #PlanFacile . Cependant, ce titre se révèle utile au lecteur, car il peut lui servir de point de repère dans le document, tant au point de vue de la mise en page que de la sémantique. #end #idea{texte}Texte#text Le texte de l'idée est l'élément#dep{1}{ideeelements}{#depref}{}# correspondant à la portion de document expliquant en détail le concept mis en avant par l'idée. Pour obtenir un document cohérent, il faut avant tout s'assurer que pour chaque idée de celui-ci, le titre#dep{titre}{#depref}{}# et le texte soient eux-mêmes cohérents. #end #idea{reference}Référence#text Une référence est un mot#dep{1}{ideeelements}{#depref}{}# permettant d'identifier une idée de manière unique. Pour être plus précis, cette référence permet à : #description{#items {#item{PlanFacile}{de désigner l'idée pour ses traitements internes ;}} {#item{au formateur de texte}{#apposition{tels que #LaTeX#espace ou un navigateur web}# pour placer correctement, à priori, les références croisées pouvant être introduites par #PlanFacile# dans le document.}} } #§ Une dernière précision : une référence est unique au sein d'un code source, ce qui a une conséquence plutôt simple à deviner : lorsqu'une idée de référence donnée existe et que l'on définit une nouvelle fois une idée possédant un telle référence, la seconde définition remplace la première. #end #idea{dependance}Dépendances de #PlanFacile#text Un concept de base#dep{1}{base}{#depref}{}# plutôt essentiel de #PlanFacile# permet de relier les différentes idées#dep{idee}{#depref}{}# entre elles : il s'agit des dépendances. Pour pouvoir comprendre l'interêt des dépendances, il faut simplement constater que les idées formant un document sont reliées entre elles par leur sens, car le contenu de certaines d'entre elles permettent d'expliquer le contenu d'autres idées de ce même document. #§ A ce stade, une description précise s'impose. Supposons que l'on a les deux idées « maison en briques » et « brique ». Dans ce cas, on comprend bien que le contenu de la première idée dépend de la seconde pour pouvoir être comprise. En effet, si l'on place les deux idées dans l'ordre indiqué ci-dessus, un lecteur ne sachant pas encore ce qu'est vraiment une brique pourrait être dubitatif quant à l'explication relative à la maison#...#espace Ici, indiquer à #PlanFacile# que l'idée « maison en briques » dépend de l'idée « brique » lui permettra d'inverser les deux idées, dans la mesure où cela ne nuit pas à l'organisation globale du document. #§ Une petite remarque sur le vocabulaire associé aux dépendances dans cette section : par abus de langage, les mots « origine » et « destination » ont été interchangés par rapport à la véritable documentation. Cela a été réalisé pour simplifier la compréhension de celui qui découvre le logiciel, mais cet abus sera corrigé au moment opportun en mettant en avant l'approche que suggère la véritable notation des dépendances.#comment{FIXME Il faudra penser à ajouter cette idée, en parlant des flots de lecture...} #end #idea{dependanceelements}Eléments d'une dépendance#text Une dépendance#dep{1}{dependance}{#depref}{}# est composée de cinq éléments distincts, dont un est implicite, grâce à la position#dep{positiondependance}{#depref}{}# de la dépendance dans le code. Décrivons alors les quatres autres#... #end #idea{referencedestination}Référence de destination#text Cet élément#dep{1}{dependanceelements}{#depref}{}# est la référence#dep{reference}{#depref}{}# de l'idée dont dépend l'idée courante. #end #idea{positiondependance}Où placer une dépendance ?#text Une question peut-être inattendue, mais qui admet une réponse à la fois importante et simple : une dépendance#dep{1} {dependance}{#depref}{}# se place directement dans le texte d'une idée, à savoir entre les commandes #verbatim{|}{##text}# et #verbatim{|}{##end}# de l'idée origine de la dépendance. #§ Ceci explique que l'origine de la dépendance puisse alors être implicite, puisqu'elle est déterminée par sa position particulière dans le code source. #end #idea{irreductibledependance}Texte irréductible#text Cet élément#dep{1}{dependanceelements}{#depref}{}# est le texte par lequel #PlanFacile# doit remplacer la commande de dépendance dans le texte de l'idée#dep{positiondependance}{#depref}{}. Ce remplacement de texte n'est effectué que dans le cas où l'idée destination#dep{referencedestination}{#depref}{}# n'a pu être placée avant l'idée courante. #end #idea{texteirreductibledependance}Remplacement par du texte#text Le remplacement de la commande de dépendance#dep{1}{irreductibledependance}{#depref}{}# peut donc consister en un simple texte, invitant le lecteur à soit admettre le contenu de l'idée de destination de la dépendance, soit de lui indiquer que l'idée se trouve en aval du document. #end #idea{refirreductibledependance}Remplacement par une référence#text Le remplacement de la commande de dépendance#dep{1}{irreductibledependance}{#depref}{}# par un simple texte invitant à voir plus loin dans le texte#dep{texteirreductibledependance}{#depref}{}# est rarement satisfaisant. Donc, en adjonction du texte#dep {texteirreductibledependance}{#depref}{}, il est possible d'ajouter dans ce cas précis une commande qui se substituera en une référence informant le lecteur de manière précise quel est le paragraphe qui doit être lu afin de faciliter la compréhension. #end #idea{reductibledependance}Texte réductible#text Cet élément#dep{1}{dependanceelements}{#depref}{}# est le texte par lequel #PlanFacile# doit remplacer la commande de dépendance dans le texte de l'idée#dep{positiondependance}{#depref}{}. Ce remplacement de texte n'est effectué que dans le cas où l'idée destination#dep{referencedestination}{#depref}{}# a pu être placée avant l'idée courante. Il s'agit là du cas qui est en fait souhaité, car il permet au lecteur de poursuivre la lecture sans devoir aller chercher l'information plus en aval du texte. #§ Le remplacement effectué ici est purement textuel, le placement d'une commande indiquant une référence#dep{refirreductibledependance} {#depref}{}# étant ici interdit. Cela sert à assurer de manière fiable l'amélioration de lecture linéaire du document. #end #idea{pertinence}Pertinence d'une dépendance#text Cet élément#dep{0xCAFE}{dependanceelements}{#depref}{}# est une valeur numérique entière et positive qui nuance la validité des dépendances. Plus cette valeur est forte, plus la pertinence de cette dépendance est grande, ce qui indique à #PlanFacile# qu'il doit #apposition{s'il le peut bien sûr}# tenter d'associer ces deux idées en priorité. #§ Par ailleurs, cet élément pourra être omis. #PlanFacile# supposera alors que la pertinence est nulle, ce qui est la plus faible de toutes#... #end #idea{syntaxedependance}Syntaxe d'une dépendance#text La syntaxe d'une dépendance#dep{1}{dependance}{#depref}{}# comprend donc les quatres éléments précités#dep{dependanceelements}{#depref}{}# : #verbatimlong{ ##dep#{pertinence#}#{référence destination#}#{texte irréductible#}#{texte réductible#} } ou, si on omet la pertinence : #verbatimlong{ ##dep#{référence destination#}#{texte irréductible#}#{texte réductible#} } #§ Dans le texte irréductible, le remplacement de texte par la référence vers l'idée de destination se fait au moyen de la commande #verbatim{|}{##depref}. #end #idea{exemplebase}Un exemple, enfin !#text Pour appuyer ce qui vient d'être développé dans cette partie basique#dep{1}{base}{#depref}{}, un exemple simple mettant en avant les deux grands concepts de #PlanFacile# #apposition{à savoir les idées#dep{idee}{#depref}{}# et les dépendances#dep{dependance}{#depref}{}}# vous est ici donné : #verbatimlong{ ##idea#{terre#}La Terre##text#verbligne La Terre est une planète tellurique appartenant au système solaire##dep#{1#}#{systemesolaire#}#{##depref#}#{#}### et tourne autour du Soleil##dep#{soleil#}#verbligne #{##depref#}#{#}### en 365 jours.#verbligne ##end#verbligne #verbligne ##idea#{lune#}La Lune##text#verbligne La Lune est un satellite tellurique de la Terre##dep#{1#}#{terre#}#{##depref#}#{#}, et de ce fait, appartient au système solaire##dep#{systemesolaire#}#verbligne #{##depref#}#{#}.#verbligne ##end#verbligne #verbligne ##idea#{soleil#}Le soleil##text#verbligne Le Soleil est l'étoile centrale qui illumine l'ensemble du système solaire##dep#{1#}#{systemesolaire#}#{##depref#}#{#}.#verbligne ##end#verbligne #verbligne ##idea#{systemesolaire#}Le système solaire##text#verbligne Le système solaire est l'ensemble des astres dans lequel nous vivons.#verbligne ##end#verbligne } #§ Sur cet exemple, vous pouvez retrouver les syntaxes des commandes permettant de représenter les deux concepts traités ici, mais cette fois réunies pour donner une véritable portion de code source de #PlanFacile . Cela vous donne l'allure générale des commandes, ainsi que leurs positions respectives. Evidemment, ces idées ont été écrites dans le désordre, charge au compilateur de retrouver qui est un chapitre, une section, etc#...#espace ainsi que l'ordre des idées ici données. #end #idea{sourcecomplet}Des idées au code source complet#text En plus des idées#dep{idee}{#depref}{}# et des dépendances#dep{dependance}{#depref}{}, la base#dep{1}{intro}{#depref}{}# d'un code source contient quelques commandes permettant au compilateur de produire un document complet. #end #idea{definitionsstandard}Définitions standard#text D'une part, il faut ajouter au code source#dep{1}{sourcecomplet}{#depref}{}# une commande permettant au compilateur de charger tout un ensemble de définitions permettant la génération de documents en XHTML et en #LaTeX . #end #idea{definitionsstandarddescription}Que sont les définitions standard ?#text Ces définitions standard#dep{1}{definitionsstandard}{#depref}{}# contiennent tout le nécessaire pour écrire un document pouvant être généré au format #LaTeX# ou XHTML #apposition{entre autres}# et ce dans plusieurs langues et jeux de caractères.#comment{FIXME Là, j'anticipe sur la version finale pour les formats et les langues, car cela est déjà vrai pour les charsets.} #§ L'inspection du contenu de ces définitions n'est pas recommandé à celui qui est en train d'acquérir les bases de l'utilisation de #PlanFacile , mais vous devriez être capable de comprendre ce même contenu une fois ce didacticiel terminé.#comment{FIXME Pas sûr, en fait, ça va dépendre de là où je m'arrête...} #end #comment{#idea{definitionsstandardinstallation}Installation des définitions standard#text Les définitions standard#dep{1}{definitionsstandard}{#depref}{}# ne sont pas installées automatiquement par l'installeur actuel.#comment{FIXME Cela sera corrigé dans la version finale du projet}# Pour les installer, tappez #verbatim{|}{make standard}# dans le répertoire du projet. Cela ajoute le répertoire #verbatim{|}{~/.planfacile}# sur votre système, si celui-ci n'était pas présent. #end} #idea{definitionsstandardinstallation}Installation des définitions standard#text Les définitions standard#dep{1}{definitionsstandard}{#depref}{}# sont normalement installées en même temps que le compilateur. Pour vérifier qu'elles sont correctement installées, tappez la ligne de commande : #verbatim{*}{echo "##standard" | planfacile -s}. Si l'erreur concerne la commande #verbatim{|}{##standard}, c'est que les définitions standard ne sont pas correctement accessibles. Revoyez alors l'installation du logiciel. #end #idea{definitionsstandardsyntaxe}Utilisation des définitions standard#text#dep{definitionsstandarddescription}{}{} L'utilisation des définitions standard#dep{1}{definitionsstandard}{#depref}{}# est très simple. Il suffit d'ajouter la commande #verbatim{|}{##standard}# au début de votre fichier source. #PlanFacile# se charge alors de récupérer les définitions standard et de les charger. #end #idea{modificationcomportement}Comportement du compilateur#text En plus des définitions standard#dep{definitionsstandard}{#depref}{# vues ci-dessus}, il faut modifier le comportement du compilateur#dep{1}{sourcecomplet}{#depref}{}, pour pouvoir générer un document acceptable. #end #idea{modificationcomportementmoyens}Modificateurs#text Les modificateurs du comportement#dep{modificationcomportement}{#depref}{}# de #PlanFacile# sont basés sur deux mécanismes du compilateur. #end #idea{modificationcomportementmoyensoptions}Options#text Le principal modificateur#dep{modificationcomportementmoyens}{#depref}{}# consiste en un jeu d'options de compilation permettant d'indiquer à #PlanFacile# un choix de l'utilisateur. Ce choix peut être aussi bien une langue, qu'un format de sortie, ou une précision à apporter au compilateur. #§ Une option est indiquée par la commande #verbatim{|}{##option#{nom de l'option#}}. La définition d'une option est rétro-active, ce qui signifie qu'elle peut être définie n'importe où dans votre code source (à deux exceptions près non traitées ici.). #end #idea{modificationcomportementmoyensmacro}Macros#text Un autre modificateur#dep{1}{modificationcomportementmoyens}{#depref}{}# est en fait une utilisation particulière d'un outil assez générique du compilateur. Plus que d'indiquer comment fonctionne le système des macros#dep{personnalisationmacros}{#depref}{}, nous allons mettre ici l'accent sur son utilisation conjointe aux options#dep{modificationcomportementmoyensoptions}{#depref}{}. #§ Pour certaines options, il faut fournir une valeur de type texte pour que le document puisse être généré. Dans ce cas, on utilise une syntaxe qui peut sembler ici un peu surprenante : #verbatim{|}{##define#{nom du champ à définir#}#{valeur du champ#}}. Si le champ nécessite plusieurs valeurs, il suffit d'indiquer les autres valeurs à la suite de la première : #verbatim{|}{##define#{nom du champ#}#{valeur du champ 1#}#{valeur du champ 2#}# ... #{valeur du champ n#}} #end #idea{exemplesourcecomplet}Reprendrez-vous un peu d'exemple ?#text Reprenons l'exemple du dessus#dep{exemplebase}{#depref}{}# en y ajoutant les commandes nécessaires pour pouvoir se compiler#dep{1}{sourcecomplet}{#depref}{}. Au fichier précédemment écrit #apposition{celui contenant les idées} commençons par ajouter la commande : #verbatimlong{ ##standard }#dep{definitionsstandard}{#depref}{} #§ Ensuite, ajoutons les options#dep{modificationcomportementmoyensoptions}{#depref}{}# : #verbatimlong{ ##option#{fr#}#verbligne ##option#{iso#} } qui indiquent au compilateur la langue et le jeu de caractères utilisés pour l'écriture de ce fichier source. Ensuite, on peut ajouter un titre au document, en utilisant conjointement les options#dep{modificationcomportementmoyensoptions}{#depref}{}# et les macros#dep{modificationcomportementmoyensmacro}{#depref}{}# : #verbatimlong{ ##option#{titre#}#verbligne ##define#{titre#}#{Le système solaire#} } Notez bien la présence des deux lignes : la première indique la présence d'un titre, et la seconde en donne la valeur. #§ Si on souhaite pouvoir générer ce document en #LaTeX , il faut y ajouter au moins ces deux options#dep{modificationcomportementmoyensoptions}{#depref}{}# : #verbatimlong{ ##option#{rapport#}#verbligne ##option#{11pt#} } qui permettent de spécifier de manière plus fine le type de document #LaTeX# et la taille de la police de caractères que l'on souhaite. On pourra accessoirement ajouter une page de garde et une table des matières : #verbatimlong{ ##option#{table des matières#}#verbligne ##option#{page de garde#} } #§ De même, si l'on souhaite générer ce document au format XHTML, on pourra ajouter ces options#dep{modificationcomportementmoyensoptions}{#depref}{}# : #verbatimlong{ ##option#{icone#}#verbligne ##define#{typeicone#}#{png#}#verbligne ##define#{icone#}#{favicon#}#verbligne #verbligne ##option#{style#}#verbligne ##define#{style#}#{style.css#} } Si vous ajoutez ces deux options, pensez à fournir les deux fichiers #verbatim{|}{favicon.png}# et #verbatim{|}{style.css}# pour obtenir l'effet souhaité. #§ Enfin, on va surtout éviter d'ajouter les options #verbatim{|}{HTML}# ou #verbatim{|}{LaTeX}# au code source ! Au contraire, on va le laisser tel quel, car on va pouvoir choisir le format de fichier de sortie au moment de la compilation#...# Pour compiler le document, en admettant que l'on ait sauvegardé le code source dans le fichier #verbatim{|}{planetes.plf}, on utilise ainsi une des deux lignes de commande : #verbatimlong{ planfacile -O LaTeX -o planetes.tex planetes.plf#verbligne planfacile -O HTML -o planetes.html planetes.plf } #§ Et là, c'est le drame#...#espace car #PlanFacile# ajoute une idée tout seul. Pour le moment, on va chercher à supprimer cette idée, en procédant en deux temps : #enumeration{#items {ajouter la commande #verbatim{|}{##option#{sans générique#}}# à notre code source ;} {recompiler en ajoutant l'option #verbatim{|}{-A}# à l'une des lignes de commande précédente : #verbatimlong{ planfacile -A -O LaTeX -o planetes.tex planetes.plf#verbligne planfacile -A -O HTML -o planetes.html planetes.plf }} } Lors de cette compilation, #PlanFacile# indique deux avertissements #apposition{le premier peut être supprimé en ajoutant l'option #verbatim{|}{-u}}# sans importance ici, et produit un code sans cette idée supplémentaire. #§ Enfin ! Ca y est, vous avez #apposition{sans doute}# pu compiler votre premier code source pour #PlanFacile . Un document plus vaste n'est en fait qu'une extension de ce que vous venez de faire. Pour être même plus précis, le plus gros du travail vient d'être fait, le reste n'étant qu'un apprentissage basé sur la syntaxe du langage et de ses possibilités. #§ Notez que ces options sont des exemples extraits des définitions standard, mais que celles-ci peuvent changer. Le mieux, en cas de problème, est de consulter la documentation correspondante#comment{TODO Ah tiens... faudra l'écrire un jour, celle-là...}. #end #idea{personnalisationmacros}Système des macros#text Le premier pas à franchir pour la personnalisation#dep{1}{personnalisation}{#depref}{}# d'un code source est l'utilisation des macros de #PlanFacile . Ce système, complètement intégré au compilateur, permet d'étendre le jeu de commandes de ce dernier en donnant la possibilité à l'utilisateur d'en définir de nouvelles. #end #idea{personnalisation}Personnalisation de #PlanFacile#text La suite de cette introduction#dep{1}{intro}{#depref}{}# à #PlanFacile# va nous mener un peu plus loin. En effet, un code source composé de la commande #verbatim{|}{##standard}#dep{definitionsstandard}{#depref}{}# suivie de déclaration d'options et des idées est un code ne comprenant que la base#dep{base}{#depref}{}# d'un code source, même si celui-ci est complet#dep{sourcecomplet}{#depref}{}. #§ Tout le travail à accomplir maintenant vise à ajouter des commandes permettant : #enumeration{#items {de généraliser le code, pour permettre à un même code d'être généré dans divers formats de sortie ;} {de remplacer l'appel à la commande #verbatim{|}{##standard}#dep{definitionsstandard}{#depref}{}, en définissant soi-même le format de sortie.} } #end #idea{personnalisationmacrosutilisation}Utilisation#text L'utilisation des macros#dep{1}{personnalisationmacros}{#depref}{}# se fait en deux temps : #enumeration{#items {la définition d'une macro ;} {l'appel d'une macro.} } #§ Ces deux parties sont bien distinctes, et suivent des règles propres à chacune. #end #idea{personnalisationmacrosutilisationdefinition}Définition#text La première chose à faire pour utiliser#dep{1}{personnalisationmacrosutilisation}{#depref}{}# une macro est la définir. Comme tout se réalise sous forme de commandes au niveau du langage de #PlanFacile , il existe donc une commande de définition de macro. Sa syntaxe est relativement simple : #verbatimlong{ ##define#{nom de la macro#}#{contenu de la macro#} } Le nom de la macro peut être n'importe quelle succession de caractères hormis l'espace, la tabulation, le retour chariot, ainsi que le dièse et les accolades. #§ Ensuite, vient le contenu de la macro, qui est une portion valide de code de #PlanFacile . Déjà, il est important de se souvenir que ce contenu n'est pas un texte quelconque, mais bien une portion de code valide. Si une commande #verbatim{|}{##idea}# doit se trouver dans une macro, elle se doit d'y être jusqu'au #verbatim{|}{##end}# qui lui correspond ! #§ De plus, il faut ajouter que le contenu de la macro est paramétrable, grâce à des commandes précises placées dans ce même contenu. Ces commandes, formées d'un dièse suivi d'un nombre entier positif, sont positionnées aux emplacements devant être paramétrables. #verbatim{|}{##n}# correspondra alors au n-ième paramètre donné lors de l'appel de la macro, et la plus grande valeur donnée déterminera le nombre de paramètres de la macro. #§ Enfin, la dernière chose à comprendre concerne la portée d'une macro. En effet, lorsqu'une macro est définie, cela ne signifie pas qu'elle est utilisable depuis n'importe quel endroit du code source. Pour faire simple, on peut dire qu'une macro est connue dans l'environnement dans lequel elle est définie, à savoir entre les symboles délimitant la portion de texte ou de code dans laquelle se trouve la définition. #end #idea{personnalisationmacrosutilisationappel}Appel#text A partir du moment où une macro#dep{1}{personnalisationmacrosutilisation}{#depref}{}# est définie#dep{personnalisationmacrosutilisationdefinition}{#depref}{}, elle peut être appellée. La syntaxe d'appel d'une macro ressemble fort à celui d'une commande de #PlanFacile# : #verbatimlong{ ##nomdelamacro#{premier paramètre#} ... #{dernier paramètre#} } Le contenu de la macro sera alors substitué à l'appel, les commandes de paramètres elles-mêmes remplacées par leur valeur. #§ Enfin, il faut savoir que le nombre de paramètres donnés lors de l'appel doit correspondre au nombre de paramètres spécifiés dans la définition de la macro, sous peine d'erreur à la compilation. Dans ce cas, #PlanFacile# vous indique normalement le nombre de paramètres transmis et celui qui était attendu. De même, une macro ne peut être appellée à l'intérieur d'elle-même, que ce soit depuis le corps de la définition de la macro ou depuis un paramètre. #end #idea{personnalisationmacrostypes}Types de macros#text Les macros#dep{1}{personnalisationmacros}{#depref}{}# sont divisées en deux groupes, qui se différencient par l'utilisation#dep{personnalisationmacrosutilisation}{#depref}{}# que l'on peut faire de celles-ci. #end #idea{personnalisationmacrostypesnormale}Macros normales#text Ce type de macro#dep{1}{personnalisationmacrostypes}{#depref}{}# est très simple, et correspond au remplacement simple des macros#dep{personnalisationmacrosutilisationdefinition}{#depref}{# tel que l'on a déjà pu le voir}. On reconnaîtra une telle macro à l'absence de la commande de remplacement de paramètre spéciale #verbatim{|}{##0}# dans la définition de la macro. #end #idea{personnalisationmacrostypesboucle}Macros boucles#text Ce type de macro#dep{1}{personnalisationmacrostypes}{#depref}{}# est légèrement plus complexe que le#dep{personnalisationmacrostypesnormale}{# suivant}{ # précédent}. Il part du principe que dans un texte, on peut parfois trouver une succession de portions de texte toutes formatées de manière identique. Dans ce cas, le système des macros#dep{personnalisationmacros}{#depref}{}# offre un moyen simplifié d'écrire ces portions de texte répétitives. #§ Pour cela, il suffit de définir une macro contenant une ou plusieurs fois la commande de remplacement de paramètre spéciale #verbatim{|}{##0}, qui aura valeur d'indice de boucle. L'appel de la macro se fait alors de manière identique au type#dep{personnalisationmacrostypesnormale}{# suivant}{# précédent}, en plaçant après les paramètres obligatoires #apposition{ceux qui remplaceront les commandes #verbatim{|}{##n}# avec n strictement positif}# ceux qui remplaceront tour à tour la commande #verbatim{|}{##0}. L'appel de la macro sera alors équivalent, à peu de choses près, à autant d'appels de cette macro que de paramètres surnuméraires. #end #idea{personnalisationmacrosexemples}Exemples d'utilisation possible#text Un petit exemple s'impose#...#espace Le système des macros#dep{1}{personnalisationmacros}{#depref}{}, même s'il est un peu complexe à expliquer, reste cependant très simple à utiliser#dep{personnalisationmacrosutilisation}{#depref}{}# après un peu de pratique. #§ Commençons par les macros simples#dep{personnalisationmacrostypesnormale}{#depref}{}# : #verbatimlong{ ##define#{macrosimple#}#{macro très simple#}#verbligne ##define#{macro#}#{Ceci est une ##macrosimple### dont "##1" est le premier paramètre.#}#verbligne ##macro#{ceci#} } Ce code se remplace donc par le texte : #verbatim{|}{#define{macrosimple}{macro très simple}#define{macro}{Ceci est une #macrosimple# dont "#1" est le premier paramètre.}#macro{ceci}} #verbatimlong{ ##define#{melange#}#{##3##1##2#}#verbligne ##melange#{deux#}#{un#}#{trois#} } Ce code se remplace donc par le texte : #verbatim{|}{#define{melange}{#3#1#2}#melange{deux}{un}{trois}} #verbatimlong{ ##define#{radote#}#{##1##1##2##1#}#verbligne ##radote#{Houla ! #}#{Aie ! #} } Ce code se remplace donc par le texte : #verbatim{|}{#define{radote}{#1#1#2#1}#radote{Houla ! }{Aie ! }} #verbatimlong{ ##define#{macrosimple#}#{macro très simple#}#verbligne ##define#{macro#}#{Ceci est une ##macrosimple### dont "##1" est le premier paramètre.#}#verbligne ##macro#{ceci##define#{macrosimple#}#{macro drôle#}#}#verbligne ##macro#{cela#} } Ce code se remplace donc par le texte : #verbatim{|}{#define{macrosimple}{macro très simple}#define{macro}{Ceci est une #macrosimple# dont "#1" est le premier paramètre.}#macro{ceci#define{macrosimple}{macro drôle}}#macro{cela}} #§ Ce dernier exemple montre le genre de manipulations qui peuvent être faites sur les macros. On peut tout à fait combiner plusieurs définitions de macros en un seul appel. L'avantage est de limiter la portée de certaines macros qui ne se voient utilisables qu'au sein d'une autre macro, cette macro limitée pouvant être redéfinie localement. Enfin, on constatera que la définition placée dans le paramètre de la macro #verbatim{|}{##macro}# masque la définition plus globale de la macro #verbatim{|}{##macrosimple}. Il faut se méfier, dans ce cas, des redéfinitions de macros qui peuvent donner des résultats étonnants : #verbatimlong{ ##define#{macro#}#{##1##sousmacro##2##sousmacro#}#verbligne ##macro#{un##define#{sousmacro#}#{1#}#}#{deux##define#{sousmacro#}#{2#}#} } Ce code se remplace donc par le texte : #verbatim{|}{#define{macro}{#1#sousmacro#2#sousmacro}#macro{un#define{sousmacro}{1}}{deux#define{sousmacro}{2}}} #§ Pour vérifier si une macro n'est pas redéfinie alors que l'on obtient un résultat curieux, il suffit de relancer #PlanFacile# avec l'option de ligne de commande #verbatim{|}{-R}, qui dans ce cas affichera un message équivalent à #verbatim{|}{Attention : Redéfinition de la macro sousmacro.} #§ Poursuivons avec les macros de type boucle#dep{personnalisationmacrostypesboucle}{#depref}{}# : #verbatimlong{ ##define#{boucle#}#{##1##0##2#}#verbligne ##boucle#{#<#}#{#>#}#{zéro#}#{un#}#{deux#}#{trois#}#verbligne ##boucle#{#}#{, #}#{quatre#}#{cinq#}#{six#} } Ce code se remplace donc par le texte : #verbatim{|}{#define{boucle}{#1#0#2}#boucle{#<}{#>}{zéro}{un}{deux}{trois}#boucle{}{, }{quatre}{cinq}{six}}# #§ Ici encore, il faudra se méfier des redéfinitions de macro, qui peuvent avoir des résultats surprenants : #verbatimlong{ ##define#{boucle#}#{##1##0##2#}#verbligne ##boucle#{##avant#}#{##après#}#{1##define#{avant#}#{(#}#}#{##define#{après#}#{##avant#}2#}#{3##define#{avant#}#{|#}#} } Ce code se remplace donc par le texte : #verbatim{§}{#define{boucle}{#1#0#2}#boucle{#avant}{#après}{1#define{avant}{(}}{#define{après}{#avant}2}{3#define{avant}{|}}} #§ En dernier exemple, un jeu avec les macros associées à deux autres commandes qui ensemble produisent un document se résumant à #verbatim{|}{Hello world !}# : #verbatimlong{ ##define#{d#}#{r#}##define#{r#}#{H##2##1##H##define#{r#}#{##1##1#}#}##H#{##h#{##r#{##r#{##e#}##define#{H#}#{##l#}#}#{e#}#}#{##define#{d#}#verbligne #{### #}!#}#{##h#{##l#}#{##o#}#{##w#{w#}#}##e##define#{h#}#{##3##define#{o#}#{r#}##1##2#}##w#{d#}#{##d#}##define#{w#}#{##0#}#}##define#{h#} #{##1##d##3##2#verbligne #}##define#{e#}#{l#}#}##start#{0#}##define#{H#}#{##foot#{##1##define#{l#}#{o#}#}#} } #end #idea{personnalisationmacrospossibilites}Utilisations pratiques#text Ce paragraphe sur les macros#dep{1}{personnalisationmacros}{#depref}{}, plus que les exemples#dep{personnalisationmacrosexemples}{#depref}{}# donnant l'étendue des possibilités des macros, se veut proche de l'utilisation dans un véritable document. #§ Ces macros peuvent avoir plusieurs utilisations : #enumeration{#items {jouer avec #PlanFacile , comme le suggère le dernier exemple#dep{personnalisationmacrosexemples}{#depref}{}# ;} {permettre à un même code source d'être réutilisable dans plusieurs formats : #verbatim{§}{##verbatim#{|#}#{texte en verbatim#}}# pourra être transformé selon la définition de la macro en #verbatim{§}{\verb|texte en verbatim|}# pour le format #LaTeX , ou en #verbatim{|}{#< code#> texte en verbatim#< /code#>}# pour le format HTML ;} {simplifier l'écriture de certaines commandes dans des situations particulières : #verbatim{|}{##define#{DEP#}#{##dep#{##2#}#{##1#}#{##depref#}#{#}#}}# ;} {spécifier certains paramètres, tel que le titre du document, lorsque l'utilisation de ce paramètre doit se faire au niveau des définitions standard.} } #end #idea{personnalisationoptions}Système d'options#text Une manière simple de personnaliser#dep{1}{personnalisation}{#depref}{}# un code source est d'utiliser les options de compilation de #PlanFacile . Ce système permet au rédacteur du document de créer des alternatives de code, et d'en sélectionner certaines soit directement dans le code source, soit au moment de la compilation. #end #idea{personnalisationoptionsoptions}Commande de sélection de code#text Une partie du système d'options#dep{1}{personnalisationoptions}{#depref}{}# est la commande de sélection de code. Elle va ainsi comprendre en son sein des portions entières de code qui seront le cas écheant conservées ou éliminées. #end #idea{personnalisationoptionsoptionssyntaxe}Syntaxe#text La syntaxe de la commande de sélection de code#dep{1}{personnalisationoptionsoptions}{#depref}{}# est relativement costaud, mais reste tout à fait compréhensible : #verbatimlong{ ##options#{label#}#verbligne ##case#{option 1#}# code 1#verbligne ##case#{option 2#}# code 2#verbligne ...#verbligne ##case#{option n#}# code n#verbligne ##other code par défaut#verbligne ##end } #§ Le label n'est pas utilisé par le compilateur, mais est utile au rédacteur du code pour préciser la nature du choix qu'il désire apporter au code source. Entre le label et la première commande #verbatim{|}{##case}, il est impossible de placer un commentaire. Les options#dep{personnalisationoptionsoption}{#depref}{}# représentent le moyen de choisir les portions de code à conserver. La clause par défaut introduite par la commande #verbatim{|}{##other}# peut être omise. Dans ce cas, rien n'est exécuté par défaut. #end #idea{personnalisationoptionsoptionscomportement}Comportement#text Les commandes de sélection de code#dep{1}{personnalisationoptionsoptions}{#depref}{}, même si elles ressemblent#dep{personnalisationoptionsoptionssyntaxe}{#depref}{}# à s'y méprendre aux commandes de sélection de langage de programmation, se demarquent de ces dernières sur un point particulier. #§ En effet, dans une commande de sélection de code d'un langage de programmation, exactement une seule clause est executée, ce qui n'est pas toujours le cas avec #PlanFacile . Détaillons : #listeapuce{#items {la première clause dont l'option est définie est exécutée ;} {si aucune clause n'a été sélectionnée, la clause par défaut est exécutée ;} {si une clause définit une option dont la clause précède la clause en cours, la clause qui précède sera également exécutée, mais après la clause en cours. Ceci est dû au caractère global de la définition d'une option#dep{personnalisationoptionsoptioncomportement}{#depref}{}.} } #end #idea{personnalisationoptionsoption}Définition d'options#text Une partie du système d'options#dep{1}{personnalisationoptions}{#depref}{}# consiste à définir des options, pour indiquer les choix que le rédacteur du document veut prendre. #end #idea{personnalisationoptionsoptionsyntaxe}Syntaxe#text La syntaxe de la commande de définition d'option#dep{1}{personnalisationoptionsoption}{#depref}{}# est très simple : #verbatimlong{ ##option#{nom d'option#} } dont le nom est une portion de texte, généralement un seul mot clef. #§ Une autre manière de définir une option est d'utiliser l'option de ligne de commande #verbatim{|}{-O #< nom d'option#>}. Ce mécanisme permet d'écrire un code source dont l'aspect change en fonction d'un choix pris au moment de la compilation. #end #idea{personnalisationoptionsoptioncomportement}Comportement#text Le comportement de la commande de définition d'option#dep{1}{personnalisationoptionsoption}{#depref}{}# est très simple#...#espace La définition peut être placée n'importe où, à l'exception des macros #apposition{définition et paramètres lors des appels}# ce qui provoquera une erreur ; et des commentaires où elles sont ignorées. #§ Une fois qu'une option est définie#dep{personnalisationoptionsoptionsyntaxe}{#depref}{}, son existence est connue depuis le début jusqu'à la fin du code source. #end #idea{personnalisationoptionsexemple}Exemple#text Un exemple d'utilisation assez complet du système d'option#dep{1}{personnalisationoptions}{#depref}{}# va sans nul doute dissiper les derniers doutes concernant l'utilisation de ce dernier : #verbatimlong{ ##options#{Un#}#verbligne ##case#{A#}aaa#verbligne ##option#{D#}#verbligne ##case#{B#}bbb#verbligne ##case#{C#}ccc#verbligne ##option#{B#}#verbligne ##end#verbligne ##options#{Deux#}#verbligne ##case#{B#}bbb#verbligne ##option#{A#}#verbligne ##case#{D#}ddd#verbligne ##case#{E#}eee#verbligne ##other#verbligne ##option#{C#}xxx#verbligne ##end } Ce code va se transformer en : #options{Un} #case{A}aaa #option{D} #case{B}bbb #case{C}ccc #option{B} #end #options{Deux} #case{B}bbb #option{A} #case{D}ddd #case{E}eee #other #option{C}xxx #end . Le résultat peut sembler surprenant, mais il s'explique facilement grâce aux comportements respectifs des commandes #verbatim{|}{##option}#dep{personnalisationoptionsoptioncomportement}{#depref}{}# et #verbatim{|}{##options}#dep{personnalisationoptionsoptionscomportement}{#depref}{}. En fait, les deux commandes de sélection de code vont être remplacées l'une après l'autre, les clauses de chacune étant remplacées dans l'ordre inverse de leur apparition dans le code source. Ensuite, il reste à expliquer dans quel ordre sont définies les options : #enumeration{#items {aucune option n'est définie en dehors des commandes #verbatim{|}{##options}, donc la clause par défaut de la seconde commande est exécutée ;} {de ce fait, l'option C est définie, ce qui entraine l'exécution de la troisième clause de la première commande #verbatim{|}{##options} ;} {du coup, l'option B est définie, exécutant la seconde clause de la première commande #verbatim{|}{##options}# et la première clause de la seconde commande ;} {l'exécution de la première clause de la seconde commande va donc définir l'option A, qui exécute aussi la première clause de la première commande ;} {la première clause de la première commande contient la définition de l'option D, qui n'entraîne pas l'exécution de la seconde clause de la seconde commande, puisque la première clause a déjà été activée.} } #end #idea{personnalisationinclusion}Inclusion de fichier#text Pour de gros documents, il peut être appreciable de placer les idées dans différents fichiers. De même, le découpage d'un code source en différents fichiers peut également servir à modifier le contenu d'un code source, au même titre que les options#dep{personnalisationoptions}{#depref}{}, afin de personnaliser#dep{1}{personnalisation}{#depref}{}# les documents. #end #idea{personnalisationinclusioninclude}Inclusion simple#text La commande d'inclusion#dep{1}{personnalisationinclusion}{#depref}{}# la plus simple est la commande #verbatim{|}{##include#{nom de fichier#}}# où le fichier doit être indiqué soit par chemin absolu, soit par chemin relatif au fichier courant. Enfin, si le premier caractère du nom du fichier est #verbatim{|}{~}, il sera remplacé par le contenu de la variable d'environnement #verbatim{|}{$HOME}. #end #idea{personnalisationinclusionstandard}Inclusion standard#text Plus complexe que l'inclusion simple#dep{personnalisationinclusioninclude}{#depref}{}, cette commande d'inclusion#dep{1}{personnalisationinclusion}{#depref}{}# est un peu spéciale. Présentée #dep{definitionsstandard}{plus loin}{bien avant}, la commande #verbatim{|}{##standard}# permet une inclusion de fichier spécifique à #PlanFacile . Normalement chargée de récupérer des définitions standard, son utilisation peut être détournée pour modifier à la volée le comportement du compilateur. #§ Pour être précis, la commande #verbatim{|}{##standard}# inclut un fichier : #enumeration{#items {dont le nom est contenu de la variable d'environnement #verbatim{|}{PLANFACILE}# ;} {le fichier #verbatim{|}{~/.planfacile/standard.plf}# ;} {un fichier installé sur le système, que le compilateur sait retrouver #apposition{la position de ce fichier est déterminé au moment de la compilation de #PlanFacile}, et contenant les véritables définitions dites standard.} } De ce fait, il y a deux possibilités pour détourner l'inclusion du fichier système par celui qui lance la compilation : #listeapuce{#items {de manière prolongée, en utilisant le répertoire #verbatim{|}{~/.planfacile}# ;} {de manière ponctuelle, avec la variable #verbatim{|}{PLANFACILE}.} } #end #idea{personnalisationstyles}Styles#text La manière la plus flagrante de personnaliser#dep{1}{personnalisation}{#depref}{}# un document produit par #PlanFacile# est de spécifier comment le compilateur doit produire le document sur sa sortie. Plus que les macros#dep{personnalisationmacros}{#depref}{}# qui permettent de modifier le texte généré localement, les commandes présentées ici vont modifier les documents produits dans leur globalité. #§ A dire vrai, les formats #LaTeX# et XHTML, nommés comme des formats disponibles pour le document de sortie ne sont en fait que deux cas particuliers de ce qu'il est possible de générer avec #PlanFacile . En effet, le compilateur est à lui seul absolument incapable de produire ces deux formats, car il récupère le format de sortie depuis son code source. #end #idea{personnalisationstylesmessage}Messages#text Un style#dep{1}{personnalisationstyles}{#depref}{}# assez particulier permet à #PlanFacile# d'écrire dans le document un message. Le but alors est généralement d'indiquer au compilateur comment formater un commentaire dans le document produit. Pour cette raison, dans certains cas, ce format est utilisé pour transmettre certains commentaires présents dans le code source dans le document produit. #§ La syntaxe de la commande de formatage de message est donc : #verbatimlong{ ##message#{format de message#} } Le format est constitué de texte plus la commande #verbatim{|}{##mesg}# pour indiquer où le message doit réellement être placé. #end #idea{personnalisationstylesdocument}Document#text Un document, composé d'idées, comporte souvent un entête et un pied. Les deux commandes qui suivent permettent de spécifier ces dernier, en précisant leur format#dep{1}{personnalisationstyles}{#depref}{}# : #verbatimlong{ ##head#{entête#}#verbligne ##foot#{pied#} } où l'entête et le pied sont seulement le texte à placer respectivement avant et après les idées du document. #end #idea{personnalisationstylesracine}Niveau racine#text Cette commande de style#dep{1}{personnalisationstyles}{#depref}{}# est très particulière. Elle va indiquer le niveau#dep{personnalisationstylessection}{#depref}{} que devra avoir l'idée la plus importante du document. Cela permet en particulier de produire une partie seulement d'un document plus vaste. #§ La syntaxe est extrêmement simple : #verbatimlong{ ##start#{niveau de départ#} } où le niveau est soit une valeur numérique, soit le nom associé à un niveau. #end #idea{personnalisationstylessection}Style de section#text Le style#dep{1}{personnalisationstyles}{#depref}{}# le plus complet est sans nul doute le style de section. Le mieux, pour expliquer comment il fonctionne, est de partir de la syntaxe de la commande : #verbatimlong{ ##section#{niveau#}#{nom niveau#}#verbligne #{format pré-sous-idées#}#{format post-sous-idées#}#verbligne #{format pré-section#}#{format post-section#} } #listeapuce{#items {le niveau, facultatif, est un nombre positif indiquant quel est le niveau hiérarchique affecté par la commande. Si ne niveau n'est pas indiqué, le format s'applique à tous les niveaux dont un format n'aura pas été spécifié explicitement ;} {le nom du niveau est un mot permettant d'indiquer le rang d'un niveau hiérarchique. Pour exemple, le mot "section" peut être affecté au niveau 2 ;} {le format pré-sous-idée est le texte, comprenant les commandes #verbatim{|}{##ref}, #verbatim{|}{##title}# et #verbatim{|}{##txt}# pour indiquer respectivement la référence, le titre et le texte de l'idée à formater. Mais ce texte sera placé avant les idées de niveau supérieur qui appartiennent à cette idée ;} {le format post-sous-idée est identique au paramètre précédent, sauf qu'il sera placé après les idées de niveau supérieur appartenant à l'idée en cours ;} {le format de pré-section est le texte à placer avant toute section de niveau en cours ;} {le format de post-section est le texte à placer après toute section de niveau en cours.} } #end #idea{personnalisationstylesreference}Style de référence#text Lorsqu'une dépendance est irréductible, le compilateur peut avoir à formater#dep{1}{personnalisationstyles}{#depref}{}# une référence vers une autre idée : #verbatimlong{ ##reference#{niveau#}#{format de référence#} } #listeapuce{#items {le niveau, facultatif, indique à quel niveau d'idée de destination de la référence s'applique ce format. Le niveau peut être le nom d'un niveau#dep{personnalisationstylessection}{#depref}{}# ou un nombre entier positif ;} {le format, en lui-même, constitué de texte comprenant les commandes #verbatim{|}{##ref}, #verbatim{|}{##title}# et #verbatim{|}{##sec}# pour indiquer les positions respectives de la référence de destination, le titre de l'idée de destination, ainsi que le nom du niveau de l'idée de destination.} } #end #idea{personnalisationstylesexemple}Un exemple#text Un exemple de fichier de styles#dep{1}{personnalisationstyles}{#depref}{}# va permettre de bien fixer les idées par rapport aux commandes de formatage. Commençons par les sections#dep{personnalisationstylessection}{#depref}{}# : #verbatimlong{ ##section#{0#}#{document#}#verbligne #{#}#{#}#{#}#{#}#verbligne #verbligne ##section#{2#}#{section#}#verbligne #{#< h2#> #< a id="##ref "#> #< /a#>##title #< /h2#>#verbligne ##txt#verbligne #}#{#< !-- Fin de section ##ref -->#verbligne #}#{#}#{#} #verbligne ##section#{idée#}#verbligne #{#< li#>#verbligne #< p#>#< a id="##ref "#> #< /a#>#< strong#>##title #< /strong#>#verbligne ##txt#verbligne #}#{#< /p#>#verbligne #< /li#>#verbligne #< !-- Fin de section ##ref -->#verbligne #}#{#< ul#>#}#{#< /ul#>#} } Poursuivons avec les références#dep{personnalisationstylesreference}{#depref}{}# : #verbatimlong{ ##reference#{document#}#{#}#verbligne #verbligne ##reference#{### (Voir #< a href="######ref "#>##title #< /a#> )#} } Ensuite, le niveau racine#dep{personnalisationstylesracine}{#depref}{}# : #verbatimlong{ ##start#{document#} } ainsi que les messages#dep{personnalisationstylesmessage}{#depref}{}, entête et pied de document#dep{personnalisationstylesdocument}{#depref}{}# : #verbatimlong{ ##head#{#< html#>#verbligne #< head#>#verbligne #< /head#>#verbligne #< body#>#verbligne #}#verbligne #verbligne ##foot#{#< /body#>#verbligne #< /html#>#verbligne #}#verbligne #verbligne ##message#{#< !-- ##mesg### --#>#} } Ce format, une fois complété, donne le format utilisé dans les définitions standard pour générer du XHTML. #end #idea{tutoconclusion}Conclusion#text Enfin se termine ce didacticiel#dep{1}{intro}{#depref}{}# sur #PlanFacile . Si vous lisez ces lignes, vous êtes parfaitement capable de comprendre comment fonctionne n'importe quel code source de #PlanFacile , et même d'écrire vos propres documents, qu'ils soient basiques#dep{base}{#depref}{}# ou personnalisés#dep{personnalisation}{#depref}{}. #end #idea{prerecquis}Outils prérecquis#text Nous allons commencer par une brève description des outils dont vous allez avoir besoin pour utiliser #PlanFacile#dep{10}{intro}{#depref}{}# : #description{#items {#item{un éditeur de texte ASCII}{pour écrire les codes sources de #PlanFacile# ;}} {#item{un terminal}{pour lancer les compilations ;}} {#item{d'un outil de visualisation}{pour lire le document produit par #PlanFacile# une fois formaté (si vous compilez en XHTML, n'importe quel navigateur web conviendra) ;}} {#item{de make}{pour éventuellement automatiser le processus de compilation.}} } #end PlanFacile-2.0/doc/standard/0000777000175000017500000000000010625124616012726 500000000000000PlanFacile-2.0/doc/standard/MakeFile0000644000175000017500000000227610510305653014244 00000000000000# # PlanFacile (Easy plan, in french) is a small tool to help people to # write a document on a particular subject. # Copyright (C) 2005 Julien BRUGUIER # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 2 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # .PHONY: all html pdf clean #PLFFLAGS=-ae PLFFLAGS=-Aucd -O 'sans générique' all: html html: standard.html pdf: standard.pdf %.html: %.plf planfacile $(PLFFLAGS) -O HTML -o $@ $^ %.tex: %.plf planfacile $(PLFFLAGS) -O LaTeX -O rapport -O 11pt -o $@ $^ %.dvi: %.tex latex $^ latex $^ %.ps: %.dvi dvips $^ -o $@ %.pdf: %.ps ps2pdf $^ $@ clean: @rm -vf *.{tex,dvi,ps,aux,log,toc,pdf,html} PlanFacile-2.0/doc/standard/Makefile.am0000644000175000017500000000046710523403421014674 00000000000000standarddir=${datadir}/doc/@DOCDIR@/doc/standard standardsrcdir=${top_srcdir}/doc/standard standard_DATA=standard.plf EXTRA_DIST=standard.plf MakeFile install-data-hook: ${INSTALL_DATA} ${standardsrcdir}/MakeFile ${DESTDIR}${standarddir}/Makefile uninstall-local: -rm -rf ${DESTDIR}${standarddir}/Makefile PlanFacile-2.0/doc/standard/Makefile.in0000644000175000017500000002440310625116330014704 00000000000000# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = doc/standard DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(standarddir)" standardDATA_INSTALL = $(INSTALL_DATA) DATA = $(standard_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DOCDIR = @DOCDIR@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STDDEFSDIR = @STDDEFSDIR@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ standarddir = ${datadir}/doc/@DOCDIR@/doc/standard standardsrcdir = ${top_srcdir}/doc/standard standard_DATA = standard.plf EXTRA_DIST = standard.plf MakeFile all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/standard/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/standard/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-standardDATA: $(standard_DATA) @$(NORMAL_INSTALL) test -z "$(standarddir)" || $(MKDIR_P) "$(DESTDIR)$(standarddir)" @list='$(standard_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(standardDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(standarddir)/$$f'"; \ $(standardDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(standarddir)/$$f"; \ done uninstall-standardDATA: @$(NORMAL_UNINSTALL) @list='$(standard_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(standarddir)/$$f'"; \ rm -f "$(DESTDIR)$(standarddir)/$$f"; \ done tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(standarddir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-standardDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-dvi: install-dvi-am install-exec-am: install-html: install-html-am install-info: install-info-am install-man: install-pdf: install-pdf-am install-ps: install-ps-am installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-local uninstall-standardDATA .MAKE: install-am install-data-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-data-hook install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-standardDATA install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ uninstall-local uninstall-standardDATA install-data-hook: ${INSTALL_DATA} ${standardsrcdir}/MakeFile ${DESTDIR}${standarddir}/Makefile uninstall-local: -rm -rf ${DESTDIR}${standarddir}/Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: PlanFacile-2.0/doc/standard/standard.plf0000644000175000017500000005221410510305653015144 00000000000000#comment{ PlanFacile (Easy plan, in french) is a small tool to help people to write a document on a particular subject. Copyright (C) 2005 Julien BRUGUIER This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA } #standard #option{fr} #option{iso} #option{auteur} #define{auteur}{Pappy} #option{date} #define{date}{Dimanche 4 juin 2006} #option{page de garde} #option{table des matières} #options{Type de sortie} #case{LaTeX} #define{PlanFacile}{#{\sc PlanFacile#}} #option{titre} #define{titre}{Définitions standard de #PlanFacile} #define{LaTeX}{\LaTeX } #case{HTML} #define{PlanFacile}{PlanFacile} #option{titre} #define{titre}{Définitions standard de PlanFacile} #define{LaTeX}{LaTeX} #end #idea{definitionsstandard}Définitions standard#text #end #idea{objectifs}Objectifs#text L'objectif principal des définitions standard#dep{10}{definitionsstandard}{#depref}{}# est de simplifier l'utilisation de #PlanFacile . En effet, il est fréquent de vouloir produire un document lisible par un formateur de texte répandu #apposition{comme #LaTeX#espace ou un navigateur web}. Dans ce cas, il serait pénible de devoir préciser comment générer le document de sortie, et ce pour chaque nouveau code source. Les définitions standard, en fournissant un ensemble de commandes cohérent, permet donc de débarrasser le rédacteur de ces considérations techniques. #§ Un autre objectif est de permettre à un seul et même code source de pouvoir être produit sous plusieurs formats de sortie, et ce sans aucune modification, en apportant des commandes donnant un aspect générique aux codes sources. #end #idea{utilisation}Utilisation#text#dep{objectifs}{}{} L'utilisation des définitions standard#dep{10}{definitionsstandard}{#depref}{}# est extrêmement simple : il suffit d'ajouter la commande #verbatim{|}{##standard}# au code source, et ce de préférence au début. A cette commande, il suffira d'ajouter différentes commandes pour préciser à #PlanFacile# quelles sont les définitions qu'il doit utiliser, parmi toutes celles qui sont présentes. #end #idea{support}Ce qui est supporté par les définitions standard#text Les définitions standard#dep{10}{definitionsstandard}{#depref}{}# supportent un certain nombre de choses dé#cesure cor#cesure ré#cesure lées qui pourtant se doivent de fonctionner ensemble. #end #idea{langues}Langues supportées#text Pouvant supporter#dep{10}{support}{#depref}{}# plusieurs langues, les définitions standard#dep{definitionsstandard}{#depref}{}# sont sensibles à la langue dans laquelle elles sont utilisées. #§ Actuellement, seul le français est véritablement supporté, mais d'autres langues telles que l'anglais et le japonais devraient faire leur prochaine apparition. #end #idea{charset}Jeux de caractères supportés#text Le support#dep{10}{support}{#depref}{}# des jeux de caractères, même relatif à la langue#dep{5}{langues}{#depref}{}# utilisée, est réalisé. #§ D'une manière assez générale, les jeux de caractères actuellement supportés sont l'UTF-8, l'ISO-8859 et l'ASCII. #end #idea{formatsortie}Formats de sortie#text#dep{charset}{}{}#comment{Permet de ne pas séparer langues et charsets << dépendance purement artificielle} Bien sûr, comme annoncé dans les objectifs#dep{1}{objectifs}{#depref}{}, le support#dep{10}{support}{#depref}{}# de plusieurs formats de sortie est présent dans les définitions standard#dep{5}{definitionsstandard}{#depref}{}. #§ Pour le moment, seuls le format #LaTeX#espace et le format XHTML 1.0 sont supportés. Dans un futur relativement proche, les formats XML et nroff devraient être ajoutés. #end #idea{francais}Français#text Lors de la rédaction d'un code source en français, utilisant les définitions standard#dep{1}{definitionsstandard}{#depref}{}, il peut être utile de préciser la langue#dep{10}{langues}{#depref}{}# en ajoutant l'option #verbatim{|}{##option#{fr#}}. #§ Si le format de sortie#dep{5}{formatsortie}{#depref}{}# supporte lui aussi plusieurs langues#dep{10}{langues}{}{}, alors l'utilisation des définitions standard#dep{1}{definitionsstandard}{}{}# permettront de transmettre cette information au formateur de texte. De même, de nombreuses macros porteront un nom français, pour permettre aux non-anglophones une mémorisation simplifiée de ces macros. #end #idea{ascii}ASCII#text Pour indiquer un code source encodé#dep{10}{charset}{#depref}{}# en ASCII, il faudra définir l'option #verbatim{|}{##option#{ascii#}}. #end #idea{utf8}UTF-8#text Pour indiquer un code source encodé#dep{10}{charset}{#depref}{}# en UTF-8, il faudra définir l'option #verbatim{|}{##option#{utf8#}}. #end #idea{iso}ISO#text Pour indiquer un code source encodé#dep{10}{charset}{#depref}{}# en ISO, il faudra définir l'option #verbatim{|}{##option#{iso#}}. #PlanFacile# saura retrouver, grâce aux informations de langue#dep{5}{langues}{#depref}{}, de quelle variante d'ISO il s'agit. #end #idea{LaTeX}#LaTeX#text Pour que #PlanFacile# génère#dep{10}{formatsortie}{#depref}{}# du #LaTeX#espace en utilisant#dep{utilisation}{#depref}{}# les définitions standard#dep{5}{definitionsstandard}{#depref}{}, il suffit simplement d'ajouter l'option #verbatim{|}{##option#{LaTeX#}}. #end #idea{LaTeXfr}#LaTeX#espace en français#text Utilisé en français#dep{5}{francais}{#depref}{}, le format #LaTeX#dep{10}{LaTeX}{#depref}{}# comprend plusieurs options et macros permettant de paramétrer le document produit par #PlanFacile . #§ On trouve tout d'abord de quoi préciser le titre du document et son auteur : #verbatimlong{ ##option#{titre#}#verbligne ##define#{titre#}#{titre du document#}#verbligne #verbligne ##option#{auteur#}#verbligne ##define#{auteur#}#{auteur du document#} } Les options permettent de signaler que l'on désire utiliser un titre et/ou un auteur, et les définitions de macros permettent de passer les valeurs correspondantes aux définitions standard#dep{1}{definitionsstandard}{#depref}{}. #§ Ensuite, on trouve différentes options : #description{#items {#item{la classe de document générée}{#verbatim{|}{##option#{article#}}, #verbatim{|}{##option#{rapport#}}# ou #verbatim{|}{##option#{livre#}}# ;}} {#item{la taille de la police de caractères}{#verbatim{|}{##option#{10pt#}}, #verbatim{|}{##option#{11pt#}}# ou #verbatim{|}{##option#{12pt#}}# ;}} {#item{la table des matières}{peut être ajoutée en début de document, en ajoutant l'option #verbatim{|}{##option#{table des matières#}}# ;}} {#item{la page de garde de base de #LaTeX}{peut être ajoutée grâce à l'option #verbatim{|}{##option#{page de garde#}}# ;}} {#item{la possibilité d'ajouter des packages #LaTeX}{en définissant l'option #verbatim{|}{##option#{packages personnels#}}# et la macro #verbatim{|}{packages}# avec le code #LaTeX# nécessaire à l'ajout des packages.}} } #end #idea{HTML}HTML#text De même que le #LaTeX#dep{3}{LaTeX}{#depref}{}, la génération#dep{10}{formatsortie}{#depref}{}# d'un document en HTML en utilisant#dep{utilisation}{#depref}{}# les définitions standard#dep{5}{definitionsstandard}{#depref}{}# s'indique grâce à la définition de l'option #verbatim{|}{##option#{HTML#}}. #end #idea{HTMLfr}HTML en français#text En utilisation conjointe avec le français#dep{5}{francais}{#depref}{}, le format HTML#dep{10}{HTML}{#depref}{}# rend disponible quelques options et macros. #§ On trouve tout d'abord de quoi préciser le titre du document et son auteur, comme ce que l'on trouve en #LaTeX#dep{8}{LaTeXfr}{#depref}{# (Vu plus haut)}# : #verbatimlong{ ##option#{titre#}#verbligne ##define#{titre#}#{titre du document#}#verbligne #verbligne ##option#{auteur#}#verbligne ##define#{auteur#}#{auteur du document#} } #§ De plus, on trouve de quoi définir l'icône et le style de la page HTML : #verbatimlong{ ##option#{icone#}#verbligne ##define#{typeicone#}#{type (extention du fichier)#}#verbligne ##define#{icone#}#{fichier image#}#verbligne #verbligne ##option#{style#}#verbligne ##define#{style#}#{fichier CSS#} } Un exemple de ces éléments sera sans nul doute pour préciser l'utilisation de ces derniers : #verbatimlong{ ##option#{icone#}#verbligne ##define#{typeicone#}#{png#}#verbligne ##define#{icone#}#{favicon#}#verbligne #verbligne ##option#{style#}#verbligne ##define#{style#}#{style.css#} } #end #idea{macrosoptionsgeneriques}Macros et options génériques#text Cette section présente un ensemble d'options et de macro présentes#dep{10}{support}{#depref}{}# dans les définitions standard#dep{1}{definitionsstandard}{#depref}{}# indépendantes du format de sortie#dep{5}{formatsortie}{#depref}{}# choisi. #end #idea{macrosoptionsgeneriquesfr}Macros et options génériques en français#text Comme les formats de sortie#dep{5}{formatsortie}{#depref}{}, les macros et options generiques#dep{10}{macrosoptionsgeneriques}{#depref}{}# sont influencées par la langue#dep{5}{langues}{#depref}{}# et le jeu de caractères#dep{5}{charset}{#depref}{}# employés. #end #idea{ideesgeneriquesfr}Idées génériques#text Parmi les idées automatiques, les idées génériques sont #apposition{et de loin}# les moins importantes et certaines, voire toutes, peuvent être supprimées sans dénaturer le document généré. A cette fin, il suffit de définir l'option#dep{1}{macrosoptionsgeneriquesfr}{#depref}{}# #verbatim{|}{##option#{sans générique#}} # pour supprimer la résolution par défaut des idées génériques, et relancer la compilation avec l'option de ligne de commande #verbatim{|}{-A}. Cette opération n'empêche en rien la résolution ponctuelle d'une ou plusieurs idées génériques. #end #idea{listesfr}Listes#text Dans le texte d'une idée, il peut être utile de placer des listes. Pour permettre l'introduction de ces listes dans le texte, les définitions standard#dep{1}{definitionsstandard}{#depref}{}# apportent quelques macros#dep{10}{macrosoptionsgeneriquesfr}{#depref}{}# : #verbatimlong{ ##listeapuce#{##items#verbligne #{item 1#}#verbligne #{item 2#}#verbligne ...#verbligne #{item n#}#verbligne #}#verbligne #verbligne ##enumeration#{##items#verbligne #{item 1#}#verbligne #{item 2#}#verbligne ...#verbligne #{item n#}#verbligne #}#verbligne #verbligne ##description#{##items#verbligne #{##item#{item 1#}#{texte 1#}#}#verbligne #{##item#{item 2#}#{texte 2#}#}#verbligne ...#verbligne #{##item#{item n#}#{texte n#}#}#verbligne #} } où les mots #verbatim{|}{item}# et #verbatim{|}{texte}# suivis d'un numéro peuvent être remplacé par le texte désiré. #end #idea{paragraphefr}Changement de paragraphe#text Pour aérer le texte d'une idée un peu longue, les définitions standard#dep{1}{definitionsstandard}{#depref}{}# proposent la macro#dep{10}{macrosoptionsgeneriquesfr}{#depref}{}# #verbatim{|}{##§}# afin de marquer un changement de paragraphe. #end #idea{quotationfr}Discours rapporté#text Il peut être particulièrement appréciable de transmettre du texte qui ne devra pas être formaté. Dans ce cas, les macros#dep{10}{macrosoptionsgeneriquesfr}{#depref}{}# : #verbatimlong{ ##verbatim#{marqueur de fin#}#{texte verbatim#}#verbligne ##verbatimlong#{texte verbatim##verbligne#verbligne sur plusieurs##verbligne#verbligne lignes.#verbligne #} } réalisent cela pour le rédacteur. Le marqueur de fin, un seul caractère de préférence, sert au formateur de texte pour connaître la portée du texte non formaté, mais peut ne pas être utilisé selon le format de sortie#dep{5}{formatsortie}{#depref}{}. #§ De même, une citation peut être insérée grâce à la macro#dep{10}{macrosoptionsgeneriquesfr}{}{}# : #verbatimlong{ ##citation#{citation à rapporter#} } #end #idea{cesurefr}Césures#text Le formateur de texte peut avoir des difficultés à couper certains mots. Dans ce cas, il suffira d'indiquer au formateur où couper les mots en ajoutant la macro#dep{10}{macrosoptionsgeneriquesfr}{#depref}{}# #verbatim{|}{##cesure}# au milieu du mot, comme par exemple le mot : #verbatimlong{ fi##cesure cel##cesure le } #end #idea{appositionfr}Apposition#text Pour un texte en apposition, les définitions standard#dep{1}{definitionsstandard}{#depref}{}# prévoient la macro#dep{10}{macrosoptionsgeneriquesfr}{#depref}{} # : #verbatimlong{ ##apposition#{texte apposé#} } #end #idea{caracteresspeciauxfr}Caractères spéciaux#text Parfois, certains caractères particuliers nécessitent une écriture particulière dans le code produit pour être correctement affichés. Ceux-ci sont dont présents sous forme de macros#dep{10}{macrosoptionsgeneriquesfr}{#depref}{}# : #verbatimlong{ ##oe#verbligne ##...#verbligne ##espace#verbligne ##dièse#verbligne ##accouvrante#verbligne ##accfermante } #end #idea{anglais}Anglais#text Lors de la rédaction d'un code source en anglais, utilisant les définitions standard#dep{1}{definitionsstandard}{#depref}{}, il peut être utile de préciser la langue#dep{10}{langues}{#depref}{}# en ajoutant l'option #verbatim{|}{##option#{en#}}. #§ Si le format de sortie#dep{5}{formatsortie}{#depref}{}# supporte lui aussi plusieurs langues#dep{10}{langues}{}{}, alors l'utilisation des définitions standard#dep{1}{definitionsstandard}{}{}# permettront de transmettre cette information au formateur de texte. #§ Si la langue n'est pas spécifiée, le français#dep{francais}{#depref}{}# est choisie par défaut. #end #idea{LaTeXen}#LaTeX#espace en anglais#text#dep{LaTeXfr}{#depref}{}#comment{Fr avant car langue par défaut} Utilisé en anglais#dep{5}{anglais}{#depref}{}, le format #LaTeX#dep{10}{LaTeX}{#depref}{}# comprend plusieurs options et macros permettant de paramétrer le document produit par #PlanFacile . #§ On trouve tout d'abord de quoi préciser le titre du document et son auteur : #verbatimlong{ ##option#{Title#}#verbligne ##define#{Title#}#{titre du document#}#verbligne #verbligne ##option#{Author#}#verbligne ##define#{Author#}#{auteur du document#} } Les options permettent de signaler que l'on désire utiliser un titre et/ou un auteur, et les définitions de macros permettent de passer les valeurs correspondantes aux définitions standard#dep{1}{definitionsstandard}{#depref}{}. #§ Ensuite, on trouve différentes options : #description{#items {#item{la classe de document générée}{#verbatim{|}{##option#{Article#}}, #verbatim{|}{##option#{Report#}}# ou #verbatim{|}{##option#{Book#}}# ;}} {#item{la taille de la police de caractères}{#verbatim{|}{##option#{10pt#}}, #verbatim{|}{##option#{11pt#}}# ou #verbatim{|}{##option#{12pt#}}# ;}} {#item{la table des matières}{peut être ajoutée en début de document, en ajoutant l'option #verbatim{|}{##option#{Table of contents#}}# ;}} {#item{la page de garde de base de #LaTeX}{peut être ajoutée grâce à l'option #verbatim{|}{##option#{Front page#}}# ;}} {#item{la possibilité d'ajouter des packages #LaTeX}{en définissant l'option #verbatim{|}{##option#{Personnals packages#}}# et la macro #verbatim{|}{Packages}# avec le code #LaTeX# nécessaire à l'ajout des packages.}} } #end #idea{HTMLen}HTML en anglais#text#dep{HTMLfr}{#depref}{}#comment{Fr avant car langue par défaut} En utilisation conjointe avec l'anglais#dep{5}{anglais}{#depref}{}, le format HTML#dep{10}{HTML}{#depref}{}# rend disponible quelques options et macros. #§ On trouve tout d'abord de quoi préciser le titre du document et son auteur, comme ce que l'on trouve en #LaTeX#dep{8}{LaTeXen}{#depref}{# (Vu plus haut)}# : #verbatimlong{ ##option#{Title#}#verbligne ##define#{Title#}#{titre du document#}#verbligne #verbligne ##option#{Author#}#verbligne ##define#{Author#}#{auteur du document#} } #§ De plus, on trouve de quoi définir l'icône et le style de la page HTML : #verbatimlong{ ##option#{Icon#}#verbligne ##define#{IconType#}#{type (extention du fichier)#}#verbligne ##define#{Icon#}#{fichier image#}#verbligne #verbligne ##option#{Style#}#verbligne ##define#{Style#}#{fichier CSS#} } Un exemple de ces éléments sera sans nul doute pour préciser l'utilisation de ces derniers : #verbatimlong{ ##option#{Icon#}#verbligne ##define#{IconType#}#{png#}#verbligne ##define#{Icon#}#{favicon#}#verbligne #verbligne ##option#{Style#}#verbligne ##define#{Style#}#{style.css#} } #end #idea{macrosoptionsgeneriquesen}Macros et options génériques en anglais#text#dep{macrosoptionsgeneriquesfr}{}{}#comment{Fr avant car langue par défaut} Comme les formats de sortie#dep{5}{formatsortie}{#depref}{}, les macros et options generiques#dep{10}{macrosoptionsgeneriques}{#depref}{}# sont influencées par la langue#dep{5}{langues}{#depref}{}# et le jeu de caractères#dep{5}{charset}{#depref}{}# employés. #end #idea{ideesgeneriquesen}Idées génériques#text Parmi les idées automatiques, les idées génériques sont #apposition{et de loin}# les moins importantes et certaines, voire toutes, peuvent être supprimées sans dénaturer le document généré. A cette fin, il suffit de définir l'option#dep{1}{macrosoptionsgeneriquesen}{#depref}{}# #verbatim{|}{##option#{without generic#}} # pour supprimer la résolution par défaut des idées génériques, et relancer la compilation avec l'option de ligne de commande #verbatim{|}{-A}. Cette opération n'empêche en rien la résolution ponctuelle d'une ou plusieurs idées génériques. #end #idea{listesen}Listes#text Dans le texte d'une idée, il peut être utile de placer des listes. Pour permettre l'introduction de ces listes dans le texte, les définitions standard#dep{1}{definitionsstandard}{#depref}{}# apportent quelques macros#dep{10}{macrosoptionsgeneriquesen}{#depref}{}# : #verbatimlong{ ##itemize#{##items#verbligne #{item 1#}#verbligne #{item 2#}#verbligne ...#verbligne #{item n#}#verbligne #}#verbligne #verbligne ##enumerate#{##items#verbligne #{item 1#}#verbligne #{item 2#}#verbligne ...#verbligne #{item n#}#verbligne #}#verbligne #verbligne ##description#{##items#verbligne #{##item#{item 1#}#{texte 1#}#}#verbligne #{##item#{item 2#}#{texte 2#}#}#verbligne ...#verbligne #{##item#{item n#}#{texte n#}#}#verbligne #} } où les mots #verbatim{|}{item}# et #verbatim{|}{texte}# suivis d'un numéro peuvent être remplacé par le texte désiré. #end #idea{paragrapheen}Changement de paragraphe#text Pour aérer le texte d'une idée un peu longue, les définitions standard#dep{1}{definitionsstandard}{#depref}{}# proposent la macro#dep{10}{macrosoptionsgeneriquesen}{#depref}{}# #verbatim{|}{##§}# afin de marquer un changement de paragraphe. #end #idea{quotationen}Discours rapporté#text Il peut être particulièrement appréciable de transmettre du texte qui ne devra pas être formaté. Dans ce cas, les macros#dep{10}{macrosoptionsgeneriquesen}{#depref}{}# : #verbatimlong{ ##verbatim#{marqueur de fin#}#{texte verbatim#}#verbligne ##verbatimlong#{texte verbatim##verbline#verbligne sur plusieurs##verbligne#verbligne lignes.#verbligne #} } réalisent cela pour le rédacteur. Le marqueur de fin, un seul caractère de préférence, sert au formateur de texte pour connaître la portée du texte non formaté, mais peut ne pas être utilisé selon le format de sortie#dep{5}{formatsortie}{#depref}{}. #§ De même, une citation peut être insérée grâce à la macro#dep{10}{macrosoptionsgeneriquesen}{}{}# : #verbatimlong{ ##quotation#{citation à rapporter#} } #end #idea{cesureen}Césures#text Le formateur de texte peut avoir des difficultés à couper certains mots. Dans ce cas, il suffira d'indiquer au formateur où couper les mots en ajoutant la macro#dep{10}{macrosoptionsgeneriquesen}{#depref}{}# #verbatim{|}{##hyphenation}# au milieu du mot, comme par exemple le mot : #verbatimlong{ fi##hyphenation cel##hyphenation le } #end #idea{appositionen}Apposition#text Pour un texte en apposition, les définitions standard#dep{1}{definitionsstandard}{#depref}{}# prévoient la macro#dep{10}{macrosoptionsgeneriquesen}{#depref}{} # : #verbatimlong{ ##dashed#{texte apposé#} } #end #idea{caracteresspeciauxen}Caractères spéciaux#text Parfois, certains caractères particuliers nécessitent une écriture particulière dans le code produit pour être correctement affichés. Ceux-ci sont dont présents sous forme de macros#dep{10}{macrosoptionsgeneriquesen}{#depref}{}# : #verbatimlong{ ##oe#verbligne ##...#verbligne ##space#verbligne ##sharp#verbligne ##opensoftbracket#verbligne ##closesoftbracket } #end #idea{inclusionimagefr}Inclusion d'images#text L'inclusion d'une image dans un document se fait par l'intermédiaire de la macro#dep{10}{macrosoptionsgeneriquesfr}{#depref}{}# #verbatim{|}{image}# activée par l'option #verbatim{|}{inclusion image}. Cette macro demande six paramètres : #listeapuce{#items {nom du fichier à inclure ;} {extension du fichier précisant le type du fichier ;} {titre de l'image ;} {description de l'image pour le HTML#dep{5}{HTMLfr}{#depref}{}# ;} {formattage pour le #LaTeX#dep{5}{LaTeXfr}{#depref}{}# ;} {label de l'image.} } #end #idea{inclusionimageen}Inclusion d'images#text L'inclusion d'une image dans un document se fait par l'intermédiaire de la macro#dep{10}{macrosoptionsgeneriquesen}{#depref}{}# #verbatim{|}{Image}# activée par l'option #verbatim{|}{Image inclusion}. Cette macro demande six paramètres : #listeapuce{#items {nom du fichier à inclure ;} {extension du fichier précisant le type du fichier ;} {titre de l'image ;} {description de l'image pour le HTML#dep{5}{HTMLen}{#depref}{}# ;} {formattage pour le #LaTeX#dep{5}{LaTeXen}{#depref}{}# ;} {label de l'image.} } #end PlanFacile-2.0/man/0000777000175000017500000000000010625124617011135 500000000000000PlanFacile-2.0/man/planfacile.plf0000644000175000017500000001575110510305653013655 00000000000000#comment{ PlanFacile (Easy plan, in french) is a small tool to help people to write a document on a particular subject. Copyright (C) 2005 Julien BRUGUIER This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA } #start{0} #message{.\"#mesg# } #section{0}{document}{.TH #title# }{.\"End of document #ref# }{}{} #section{1}{chapter}{.SH #title# #txt# }{.\"End of chapter #ref# }{}{} #section{2}{section}{.SS #title# #txt# }{.\"End of section #ref# }{}{} #section{paragraph}{.BR #title# #txt# }{.\"End of paragraph #ref# }{}{} #reference{# (See #sec# #title )} #define{specialbold}{# .B #1# } #define{specialitalic}{# .I #1# } #define{specialalternate}{# .BI #1# } #define{§}{# # } #define{bold}{\fB#1\fP} #define{italic}{\fI#1\fP} #define{PlanFacile}{#bold{PlanFacile}} #idea{manpage} PlanFacile 1 "27/05/06" "Version 2.0" "Linux user manual"#text #end #idea{synopsis}SYNOPSIS#text#dep{1}{manpage}{}{}#dep{name}{}{} #specialbold{planfacile} [options] [files] #end #idea{description}DESCRIPTION#text#dep{1}{manpage}{}{}#dep{synopsis}{}{} #PlanFacile# is a document compiler, designed for table of contents computation. More precisely, #PlanFacile# considers that a document is a set of concepts linked by dependencies. #PlanFacile# generates a document using those ideas, sorted in order to read it from the begininng to the end with a minimum of cross references to further parts of the document. #§ #PlanFacile# generates only non-formated documents, such as HTML or LaTeX sources. #end #idea{options}OPTIONS#text#dep{1}{manpage}{}{}#dep{description}{}{} #PlanFacile# uses 36 options to modify its behavior. Listing all of these here is not interesting, as the #italic{-h}# option gives some help about all options. #§ Some options are often useful : #specialalternate{-o "" " " "output file"} specify the output file, to write the document ; #specialalternate{-O "" " " option} define a compiler option, as the #italic{##option}# command. Then the user has the possibility to set some parameters at the time of compilation ; #specialalternate{-d} ignore invalid dependencies. Useful when the writer wants to compile a part of a document, to check if this part is error free ; #specialalternate{-A} ignore undefined automatic ideas. Sometimes, #PlanFacile# adds some ideas to complete the document. This option avoids an error when an automatic idea appears. #end #idea{grammar}BASIC GRAMAR#text#dep{1}{manpage}{}{}#dep{description}{}{} For a common use of #PlanFacile , it is not necessary to know all the language of #PlanFacile . The goal of this section is to present the minimum necessary to know how to write a document. #end #idea{dependency}Dependencies#text In a document with ideas#dep{1}{idea}{#depref}{}# about the same subject, it is quite natural that ideas need some of the others to be understood by the reader. This relation is a dependency between ideas. #§ If the writer puts a dependency in the text of idea A to the idea B, this means that the reader will need to understand idea B before reading idea A in order to understand this last idea. #§ The syntax of a dependency, in its simplest form, is : #specialalternate{##dep#{# reference #}#{##depref#}#{#}} #§ However, the writer may need to add a positive number to specify the weighting of the dependency if the organisation of the document is not the right one, even if the writer has put the correct dependencies : #specialalternate{##dep#{# pertinence #}#{# reference #}#{##depref#}#{#}} #§ The #italic{reference}# must be one of the words used in the #italic{##idea}# command. #end #idea{idea}Ideas#text A document, as said#dep{description}{# after}{# before}, is a set of ideas the author wants to communicate to the reader. One idea is a part of the document that can be represented by a title. For example, if the writer sees that one title does not accurately represent the text of the same idea, he should just make sure that two concepts are not put in one #italic{##idea}# command... The syntax#dep{1}{grammar}{#depref}{}# of an idea is quite simple : #specialalternate{##idea#{# reference #}# title ##text} #specialalternate{"" text} #specialalternate{##end} #§ Also, some ideas are dependent in one document, so they are linked by dependencies#dep{dependency}{#depref}{}. #end #missing{1}{document}Document#text #end #idea{source}Complete source code#text The ideas#dep{idea}{#depref}{}# are not sufficient to produce a document. To complete a source code, the writer needs to learn a bit more about the language#dep{1}{grammar}{#depref}{}# of #PlanFacile . #end #idea{seealso}SEE ALSO#text#dep{1}{manpage}{}{}#dep{grammar}{}{}#dep{options}{}{} See also #italic{latex}(1), #italic{xpdf}(1), #italic{firefox}(1), #italic{lynx}(1). #end #idea{contacts}CONTACTS#text#dep{1}{manpage}{}{}#dep{seealso}{}{} If you have a problem that you can not solve by reading the documentation, or if you find a bug, you can send an email to planfacile@gmail.com and we will send a reply as quickly as possible. #end #idea{standard}Standard#text The first command of the source#dep{1}{source}{#depref}{}# can be #italic{##standard}, that indicates to #PlanFacile# to load standard definitions, to be able to produce a document in LaTeX or in HTML (more formats will be present in the future). #end #idea{optionsmacros}"Options and macros"#text When the writer uses the command #italic{##standard}#dep{standard}{#depref}{}, the compiler will be able to generate all formats. The writer must indicate his choice with some commands#dep{1}{source}{#depref}{}. #§ A choice, such as the output format, can be set with an option : #specialalternate{##option#{# optionname #}} #§ and a text parameter can be set with a macro, for a very specific use : #specialalternate{##define#{# parametername #}#{# value #}} #§ #end #idea{automatic}"Automatic ideas"#text Sometimes, #PlanFacile# adds an idea#dep{idea}{#depref}{}# to the document#dep{1}{document}{#depref}{}. In that case, the writer can replace the default text by an idea that suits the document. To do this, there are two commands, which are like #italic{##idea}# : #specialalternate{##missing#{# index #}#{# reference #}# title ##text} #specialalternate{"" text} #specialalternate{##end} #§ The #italic{index}# parameter is given by #PlanFacile , in the default message... #§ In the same way : #specialalternate{##generic#{# "parent reference" #}#{# reference #}# title ##text} #specialalternate{"" text} #specialalternate{##end} #end #idea{name}NAME#text#dep{1}{manpage}{}{} planfacile \- A document compiler. #end PlanFacile-2.0/man/compile0000744000175000017500000000154110510305653012420 00000000000000#!/bin/sh # PlanFacile (Easy plan, in french) is a small tool to help people to # write a document on a particular subject. # Copyright (C) 2005 Julien BRUGUIER # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 2 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # planfacile planfacile.plf -AdDo planfacile.1 PlanFacile-2.0/man/planfacile.10000644000175000017500000001210710510305653013224 00000000000000.TH PlanFacile 1 "27/05/06" "Version 2.0" "Linux user manual" .SH NAME planfacile \- A document compiler. .\"End of chapter name .SH SYNOPSIS .B planfacile [options] [files] .\"End of chapter synopsis .SH DESCRIPTION \fBPlanFacile\fP is a document compiler, designed for table of contents computation. More precisely, \fBPlanFacile\fP considers that a document is a set of concepts linked by dependencies. \fBPlanFacile\fP generates a document using those ideas, sorted in order to read it from the begininng to the end with a minimum of cross references to further parts of the document. \fBPlanFacile\fP generates only non-formated documents, such as HTML or LaTeX sources. .\"End of chapter description .SH BASIC GRAMAR For a common use of \fBPlanFacile\fP, it is not necessary to know all the language of \fBPlanFacile\fP. The goal of this section is to present the minimum necessary to know how to write a document. .SS Document .BR Ideas A document, as said before, is a set of ideas the author wants to communicate to the reader. One idea is a part of the document that can be represented by a title. For example, if the writer sees that one title does not accurately represent the text of the same idea, he should just make sure that two concepts are not put in one \fI#idea\fP command... The syntax of an idea is quite simple : .BI #idea{ reference } title #text .BI "" text .BI #end Also, some ideas are dependent in one document, so they are linked by dependencies (See paragraph Dependencies). .BR "Automatic ideas" Sometimes, \fBPlanFacile\fP adds an idea to the document. In that case, the writer can replace the default text by an idea that suits the document. To do this, there are two commands, which are like \fI#idea\fP : .BI #missing{ index }{ reference } title #text .BI "" text .BI #end The \fIindex\fP parameter is given by \fBPlanFacile\fP, in the default message... In the same way : .BI #generic{ "parent reference" }{ reference } title #text .BI "" text .BI #end .\"End of paragraph automatic .\"End of paragraph idea .BR Dependencies In a document with ideas about the same subject, it is quite natural that ideas need some of the others to be understood by the reader. This relation is a dependency between ideas. If the writer puts a dependency in the text of idea A to the idea B, this means that the reader will need to understand idea B before reading idea A in order to understand this last idea. The syntax of a dependency, in its simplest form, is : .BI #dep{ reference }{#depref}{} However, the writer may need to add a positive number to specify the weighting of the dependency if the organisation of the document is not the right one, even if the writer has put the correct dependencies : .BI #dep{ pertinence }{ reference }{#depref}{} The \fIreference\fP must be one of the words used in the \fI#idea\fP command. .\"End of paragraph dependency .\"End of section document .SS Complete source code The ideas are not sufficient to produce a document. To complete a source code, the writer needs to learn a bit more about the language of \fBPlanFacile\fP. .BR Standard The first command of the source can be \fI#standard\fP, that indicates to \fBPlanFacile\fP to load standard definitions, to be able to produce a document in LaTeX or in HTML (more formats will be present in the future). .\"End of paragraph standard .BR "Options and macros" When the writer uses the command \fI#standard\fP, the compiler will be able to generate all formats. The writer must indicate his choice with some commands. A choice, such as the output format, can be set with an option : .BI #option{ optionname } and a text parameter can be set with a macro, for a very specific use : .BI #define{ parametername }{ value } .\"End of paragraph optionsmacros .\"End of section source .\"End of chapter grammar .SH OPTIONS \fBPlanFacile\fP uses 36 options to modify its behavior. Listing all of these here is not interesting, as the \fI-h\fP option gives some help about all options. Some options are often useful : .BI -o "" " " "output file" specify the output file, to write the document ; .BI -O "" " " option define a compiler option, as the \fI#option\fP command. Then the user has the possibility to set some parameters at the time of compilation ; .BI -d ignore invalid dependencies. Useful when the writer wants to compile a part of a document, to check if this part is error free ; .BI -A ignore undefined automatic ideas. Sometimes, \fBPlanFacile\fP adds some ideas to complete the document. This option avoids an error when an automatic idea appears. .\"End of chapter options .SH SEE ALSO See also \fIlatex\fP(1), \fIxpdf\fP(1), \fIfirefox\fP(1), \fIlynx\fP(1). .\"End of chapter seealso .SH CONTACTS If you have a problem that you can not solve by reading the documentation, or if you find a bug, you can send an email to planfacile@gmail.com and we will send a reply as quickly as possible. .\"End of chapter contacts .\"End of document manpage .\"Document généré par PlanFacile 2.0 : 16 idée(s) traitée(s), dont 1 manquante(s) et 1 générique(s), ainsi que 14 référence(s) traitée(s) dont 1 irréductible(s). PlanFacile-2.0/man/Makefile.am0000644000175000017500000000041310510305653013075 00000000000000manplfdir=${mandir}/man1 MANPAGE=planfacile.1 MANPAGEGZ=${MANPAGE}.gz man_MANS=${MANPAGE} EXTRA_DIST=${MANPAGE} planfacile.plf compile install-data-hook: -gzip -f ${DESTDIR}${manplfdir}/${MANPAGE} uninstall-local: -gunzip -f ${DESTDIR}${manplfdir}/${MANPAGEGZ} PlanFacile-2.0/man/Makefile.in0000644000175000017500000002544410625116331013121 00000000000000# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = man DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in compile ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = man1dir = $(mandir)/man1 am__installdirs = "$(DESTDIR)$(man1dir)" NROFF = nroff MANS = $(man_MANS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DOCDIR = @DOCDIR@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STDDEFSDIR = @STDDEFSDIR@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ manplfdir = ${mandir}/man1 MANPAGE = planfacile.1 MANPAGEGZ = ${MANPAGE}.gz man_MANS = ${MANPAGE} EXTRA_DIST = ${MANPAGE} planfacile.plf compile all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu man/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu man/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man1: $(man1_MANS) $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ for i in $$l2; do \ case "$$i" in \ *.1*) list="$$list $$i" ;; \ esac; \ done; \ for i in $$list; do \ if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ else file=$$i; fi; \ ext=`echo $$i | sed -e 's/^.*\\.//'`; \ case "$$ext" in \ 1*) ;; \ *) ext='1' ;; \ esac; \ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ inst=`echo $$inst | sed -e 's/^.*\///'`; \ inst=`echo $$inst | sed '$(transform)'`.$$ext; \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \ done uninstall-man1: @$(NORMAL_UNINSTALL) @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ for i in $$l2; do \ case "$$i" in \ *.1*) list="$$list $$i" ;; \ esac; \ done; \ for i in $$list; do \ ext=`echo $$i | sed -e 's/^.*\\.//'`; \ case "$$ext" in \ 1*) ;; \ *) ext='1' ;; \ esac; \ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ inst=`echo $$inst | sed -e 's/^.*\///'`; \ inst=`echo $$inst | sed '$(transform)'`.$$ext; \ echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \ rm -f "$(DESTDIR)$(man1dir)/$$inst"; \ done tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(MANS) installdirs: for dir in "$(DESTDIR)$(man1dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-man @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-dvi: install-dvi-am install-exec-am: install-html: install-html-am install-info: install-info-am install-man: install-man1 install-pdf: install-pdf-am install-ps: install-ps-am installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-local uninstall-man uninstall-man: uninstall-man1 .MAKE: install-am install-data-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-data-hook install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-man1 install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am uninstall uninstall-am uninstall-local uninstall-man \ uninstall-man1 install-data-hook: -gzip -f ${DESTDIR}${manplfdir}/${MANPAGE} uninstall-local: -gunzip -f ${DESTDIR}${manplfdir}/${MANPAGEGZ} # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: PlanFacile-2.0/src/0000777000175000017500000000000010625124605011146 500000000000000PlanFacile-2.0/src/algo/0000777000175000017500000000000010625124600012063 500000000000000PlanFacile-2.0/src/algo/algo/0000777000175000017500000000000010625124600013005 500000000000000PlanFacile-2.0/src/algo/algo/algo.c0000644000175000017500000006717210625123427014032 00000000000000/* * PlanFacile (Easy plan, in french) is a small tool to help people to * write a document on a particular subject. * Copyright (C) 2005 Julien BRUGUIER * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "algo.h" #define NIVEAU_RACINE 0 #define PERTINENCE_RACINE 0 static Resultat recherchebouclesinternes_algo(Graphe *graphe , ListeBoucles *listeboucles , IdIdee idee , Marqueurs *marqueurs , Parcours *parcours) { IdIdee ideedependante; Booleen test; Relations dependances; CompteurBoucles compteurboucles; DEBUTZONESECURISEE SECURISE(lecturedependances_graphe(graphe,&dependances)); SECURISE(lecturecompteurboucles_graphe(graphe,&compteurboucles)); SECURISE(verification_marqueurs(marqueurs,idee,&test)); if(test==VRAI) { //on vient de trouver une boucle, on l'enregistre Marqueurs nouvelleboucle; SECURISE(creation_marqueurs(&nouvelleboucle,dependances.taille)); //construit la boucle SECURISE(marqueboucle_parcours(parcours,idee,&nouvelleboucle)); //l'insere dans la liste triee SECURISE(insertiontriee_listeboucles(listeboucles,&nouvelleboucle,&test)); //met a jour les compteurs de boucle if(test==VRAI) SECURISE(incrementeboucle_compteurboucles(&compteurboucles,nouvelleboucle)); } else { //on s'occupe de chercher les boucles SECURISE(coche_marqueurs(marqueurs,idee)); SECURISE(empileididee_parcours(parcours,idee)); for(ideedependante=0 ; ideedependantedepart,&marqueurs,&parcours)); SECURISE(destruction_parcours(&parcours)); SECURISE(destruction_marqueurs(&marqueurs)); FINZONESECURISEE return RESULTAT_OK; } static Resultat regroupementboucles_algo(ListeIdees *listeidees , Graphe *graphe , ListeBoucles *listeboucles) { Taille nombreboucles , tailledependances , tailleinitiale; Indice indiceideemanquante; IdIdee ididee,idideedependance,idnouvelleidee; Relations dependances , references; CompteurBoucles compteurboucles; DEBUTZONESECURISEE //ajoute les idees SECURISE(taille_listeboucles(listeboucles,&nombreboucles)); SECURISE(taille_listeidees(listeidees,&tailleinitiale)); SECURISE(ajoutidee_graphe(graphe,nombreboucles)); SECURISE(agrandissement_listeboucles(listeboucles,nombreboucles)); for(indiceideemanquante=1 ; indiceideemanquante<=nombreboucles ; indiceideemanquante++) { Idee idee; SECURISE(creation_idee(&idee,IDEE_MANQUANTE,indiceideemanquante,INDICE_IDEE_INVALIDE)); SECURISE(ajoutidee_listeidees(listeidees,idee)); } SECURISE(taille_listeidees(listeidees,&tailledependances)); SECURISE(lecturedependances_graphe(graphe,&dependances)); SECURISE(lecturereferences_graphe(graphe,&references)); SECURISE(lecturecompteurboucles_graphe(graphe,&compteurboucles)); //elimine les boucles for( idnouvelleidee=tailleinitiale ; ; idnouvelleidee++) {//pour chaque boucle de la liste Marqueurs boucle; Indice compteur; Indice nombrenoeudsboucle; SECURISE(taille_listeboucles(listeboucles,&nombreboucles)); if(nombreboucles==0) return RESULTAT_OK; SECURISE(lecture_listeboucles(listeboucles,nombreboucles-1,&boucle)); //deja, on teste si la boucle n'est pas un doublon forme par recombinaison SECURISE(nombre_marqueurs(&boucle,&nombrenoeudsboucle)); if(nombrenoeudsboucle>1) { //reorganisation de la boucle for(ididee=0 ; ididee0) { //applique la transformation sur le fils SECURISE(suppressionrelation_relations(&dependances,ididee,idideedependance)); SECURISE(ajoutrelation_relations(&dependances,idnouvelleidee,idideedependance,pertinence)); SECURISE(ajoutrelation_relations(&references,idideedependance,ididee,pertinence)); //mise a jour des compteurs //ben, yena pas ! //pas de changement de topologie ici, car elle deja ete faite } } } //mise a jour de la topologie des boucles SECURISE(miseajourtopologie_listeboucles(listeboucles,ididee,idnouvelleidee,&compteur)); SECURISE(ajoute_compteurboucles(&compteurboucles,idnouvelleidee,compteur)); } } //on marque le fait que l'on vient de supprimer une boucle en decrementant LE noeud representant la boucle SECURISE(decremente_compteurboucles(&compteurboucles,idnouvelleidee)); } SECURISE(supprime_listeboucles(listeboucles,nombreboucles-1)); } FINZONESECURISEE return RESULTAT_OK; } static Resultat regroupementidees_algo(ListeIdees *listeidees , Graphe *graphe , Statistiques *statistiques) { //recherche les idees qui vont ensemble et les regroupe dans une meme sous section ListeBoucles listeboucles; DEBUTZONESECURISEE SECURISE(creation_listeboucles(&listeboucles)); //on cherche les boucles SECURISE(rechercheboucles_algo(graphe,&listeboucles)); SECURISE(taille_listeboucles(&listeboucles,&(statistiques->nombreideesmanquantes))); //on reconnecte tout proprement SECURISE(regroupementboucles_algo(listeidees,graphe,&listeboucles)); SECURISE(destruction_listeboucles(&listeboucles)); FINZONESECURISEE return RESULTAT_OK; } static Resultat rechercheperespertinents_algo(Graphe *graphe , ListePerePertinent *listeperepertinent) { //place dans listeperepertinent les peres pertinents de chaque idee IdIdee idfils , idpere; Taille taille; Relations dependances; DEBUTZONESECURISEE SECURISE(lecturedependances_graphe(graphe,&dependances)); taille=dependances.taille;//licite //une double boucle revient a un parcours en profondeur du graphe //avec le meme ordre dans la visite des noeuds d'un meme niveau //alors, on use de cette astuce... sans parcimonie ! for(idfils=0 ; idfilsdepart]; //on donne la racine de l'arbre et on s'en va ! free(sections);//faut pas oublier... FINZONESECURISEE return RESULTAT_OK; } static Resultat transformationplan_algo(Graphe *graphe , Plan *plan) { //on tranfere les informations de dependances du systeme logique dans un plan non //optimise //Un graphe s'eteint, un plan s'eveille ListePerePertinent listeperepertinent; Relations dependances; DEBUTZONESECURISEE SECURISE(lecturedependances_graphe(graphe,&dependances)); SECURISE(creation_listeperepertinent(&listeperepertinent,dependances.taille)); //recherche les parents les plus pertinents SECURISE(rechercheperespertinents_algo(graphe,&listeperepertinent)); //transforme les dependances non pertinentes en references SECURISE(transformationdependancesplan_algo(graphe,&listeperepertinent)); //copie le graphe dans l'arbre SECURISE(generationplan_algo(graphe,plan)); //detruit le graphe SECURISE(destruction_graphe(graphe)); SECURISE(destruction_listeperepertinent(&listeperepertinent)); FINZONESECURISEE return RESULTAT_OK; } static Resultat trisoussections_algo(Liens *liens , Contenu *soussections) { //effectue le tri des sous-sections //avec un tri par insertion, si si ! il est ici en O(n^2) au lieu des autres qui seraient //en O(n^2*ln(n)), du au fait que la fonction de comparaison n'est en O(1) que pour //des elements consecutifs ! Indice soussectionsource , soussectiondestination /* , soussectiondeplace*/; Taille taille; DEBUTZONESECURISEE taille=liens->taille; if(taille<2) return RESULTAT_OK; for(soussectionsource=0 ; soussectionsource0 ; soussectiondestination--) { Booleen test; SECURISE(test_liens(liens,soussectiondestination-1,soussectiondestination,&test)); if(test==VRAI) { SECURISE(echange_liens(liens,soussectiondestination-1,soussectiondestination)); SECURISE(echange_contenu(soussections,soussectiondestination-1,soussectiondestination)); } } } FINZONESECURISEE return RESULTAT_OK; } static Resultat optimisationplaninterne_algo(Section *section , Taille taille , Marqueurs *parcours , Marqueurs *noeudscontenus , CompteurBoucles *destinationsreferences , References *statsreferences) { //trie les fils de la section en cours IdIdee ididee; Liens liens; Indice idsoussection , idsoussectiontable , idreferences; Taille nombresoussections; Contenu soussections; Reference references; Marqueurs *noeudscontenussoussection; CompteurBoucles *destinationsreferencessoussection;//utilisation non std de ces compteurs DEBUTZONESECURISEE SECURISE(lectureididee_section(section,&ididee)); SECURISE(lecturesoussections_section(section,&soussections)); SECURISE(lecturereferences_section(section,&references)); //on marque notre passage SECURISE(coche_marqueurs(parcours,ididee)); //recupere le nombre de sous-sections SECURISE(taille_contenu(&soussections,&nombresoussections)); //on construit les tableaux pour recueillir les informations if((noeudscontenussoussection=(Marqueurs*)(malloc(sizeof(Marqueurs)*nombresoussections)))==NULL) return RESULTAT_ERREUR_MEMOIRE;//meme remarque pour le malloc if((destinationsreferencessoussection=(CompteurBoucles*)(malloc(sizeof(CompteurBoucles)*nombresoussections)))==NULL) return RESULTAT_ERREUR_MEMOIRE;//meme remarque pour le malloc //construit la table des liens SECURISE(creation_liens(&liens,nombresoussections)); //on visite les sous-sections et on recupere les infos qui nous y interessent for(idsoussection=0 ; idsoussectionididee)); for(idreferences=0 ; idreferencesreferencesreductibles=0; references->referencesirreductibles=0; //ben, on y va... SECURISE(optimisationplaninterne_algo(*plan,taille,&parcours,&noeudscontenus,&destinationsreferences,references)); SECURISE(destruction_marqueurs(&parcours)); SECURISE(destruction_marqueurs(&noeudscontenus)); SECURISE(destruction_compteurboucles(&destinationsreferences)); FINZONESECURISEE return RESULTAT_OK; } static Resultat reductionreferencespeaufinageinterne_algo(Section *section , ListeIdees *listeidees , Marqueurs *parcours , NiveauHierarchique niveau , Statistiques *statistiques) { //nettoie les references reductibles de la section en cours Contenu soussections; Reference references; Taille taillesoussections , taillereferences ; IdIdee ididee; Indice indice; DEBUTZONESECURISEE SECURISE(ecritureniveauhierarchique_section(section,niveau)); SECURISE(lecturesoussections_section(section,&soussections)); SECURISE(lecturereferences_section(section,&references)); SECURISE(taille_contenu(&soussections,&taillesoussections)); SECURISE(taille_reference(&references,&taillereferences)); SECURISE(lectureididee_section(section,&ididee)); SECURISE(coche_marqueurs(parcours,ididee)); statistiques->nombrereferencestotal += taillereferences; for(indice=0 ; indicenombrereferencesirreductibles)++; } } for(indice=0 ; indicenombreideesgeneralites)++; } FINZONESECURISEE return RESULTAT_OK; } static Resultat reductionreferencespeaufinage_algo(Plan *plan , ListeIdees *listeidees , Statistiques *statistiques) { //elimine les references reductibles Marqueurs parcours; Taille tailleidees; DEBUTZONESECURISEE statistiques->nombreideesgeneralites=0; statistiques->nombrereferencestotal=0; statistiques->nombrereferencesirreductibles=0; SECURISE(taille_listeidees(listeidees,&tailleidees)); SECURISE(creation_marqueurs(&parcours,tailleidees)); SECURISE(reductionreferencespeaufinageinterne_algo(*plan,listeidees,&parcours,NIVEAU_RACINE,statistiques)); SECURISE(destruction_marqueurs(&parcours)); FINZONESECURISEE return RESULTAT_OK; } Resultat rechercheplan_algo(ListeIdees *listeidees , Graphe *dependances , Plan *plan , Statistiques *statistiques) { //A partir des idees et de leurs dependances, contruit le plan. //L'algorithme detruit le graphe de dependances et cree de lui meme le plan References references; Taille taillelisteidees; DEBUTZONESECURISEE //phase 1 : regroupement des idees communes SECURISE(regroupementidees_algo(listeidees,dependances,statistiques)); //phase 2 : transformation du systeme en plan SECURISE(transformationplan_algo(dependances,plan)); //phase 3 : reorganisation du plan SECURISE(taille_listeidees(listeidees,&taillelisteidees)); SECURISE(optimisationplan_algo(plan,taillelisteidees,&references)); //phase 4 : elimination depoussierage du plan trouve SECURISE(reductionreferencespeaufinage_algo(plan,listeidees,statistiques)); SECURISE(taille_listeidees(listeidees,&(statistiques->nombreideestotal))); FINZONESECURISEE return RESULTAT_OK; } static Resultat rechercheaccessibiliteinterne_algo(Graphe *dependances , IdIdee idee , Marqueurs *marqueurs) { //Renvoie la liste des sommets accessibles depuis l'idee indiquee. Relations dependance; IdIdee fils; Booleen relation; Booleen accessible; Pertinence pertinence; DEBUTZONESECURISEE SECURISE(lecturedependances_graphe(dependances,&dependance)); if(idee<0) return RESULTAT_ERREUR_DEPASSEMENT; if(idee>=dependance.taille) return RESULTAT_ERREUR_DEPASSEMENT; SECURISE(coche_marqueurs(marqueurs,idee)); for(fils=0 ; filsdepart,marqueurs)); FINZONESECURISEE return RESULTAT_OK; } Resultat ajouteracine_algo(ListeIdees *listeidees , Graphe *dependances , Marqueurs *orphelines , IdIdee *ididee) { //Ajoute une idee racine au graphe de dependances. Les dependances entre //l'idee ajoutee et les idees orphelines sont ajoutees. Idee idee; IdIdee idorpheline; Booleen orpheline; Relations dependance; DEBUTZONESECURISEE SECURISE(ajoutidee_graphe(dependances,1));//Une seule idee racine, vu que c'est le but recherche... SECURISE(lecturedependances_graphe(dependances,&dependance)); SECURISE(taille_listeidees(listeidees,ididee)); SECURISE(creation_idee(&idee,IDEE_RACINE,INDICE_IDEE_INVALIDE,INDICE_IDEE_INVALIDE)); SECURISE(ajoutidee_listeidees(listeidees,idee)); for(idorpheline=0 ; idorpheline<(*ididee) ; idorpheline++) { SECURISE(verification_marqueurs(orphelines,idorpheline,&orpheline)); if(orpheline==FAUX) { SECURISE(ajoutrelation_relations(&dependance,*ididee,idorpheline,PERTINENCE_RACINE)); } } FINZONESECURISEE return RESULTAT_OK; } PlanFacile-2.0/src/algo/algo/algo.h0000644000175000017500000000614010510305650014014 00000000000000/* * PlanFacile (Easy plan, in french) is a small tool to help people to * write a document on a particular subject. * Copyright (C) 2005 Julien BRUGUIER * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __ALGOPLAN__ #define __ALGOPLAN__ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include Resultat rechercheplan_algo(ListeIdees *listeidees , Graphe *dependances , Plan *plan , Statistiques *statistiques); //A partir des idees et de leurs dependances, contruit le plan. //L'algorithme detruit le graphe de dependances et cree de lui meme le plan //la fonction affichemessage sert a imprimer les statistiques sur l'algorithme //Attention : Cette partie provient de la version 1.0 de PlanFacile //La gestion de la mémoire étant différente, l'accès à la variable //General *general est strictement interdite. De plus, l'appel de cette //fonction devra être aménagé par une fonction réalisant la transition //entre les deux gestions de mémoire. Resultat rechercheaccessibilite_algo(Graphe *dependances , Marqueurs *marqueurs); //Renvoie la liste des sommets accessibles depuis la racine. //Attention : Cette partie provient de la version 1.0 de PlanFacile //La gestion de la mémoire étant différente, l'accès à la variable //General *general est strictement interdite. De plus, l'appel de cette //fonction devra être aménagé par une fonction réalisant la transition //entre les deux gestions de mémoire. Resultat ajouteracine_algo(ListeIdees *listeidees , Graphe *dependances , Marqueurs *orphelines , IdIdee *ididee); //Ajoute une idee racine au graphe de dependances. Les dependances entre //l'idee ajoutee et les idees orphelines sont ajoutees. //Attention : Cette partie provient de la version 1.0 de PlanFacile //La gestion de la mémoire étant différente, l'accès à la variable //General *general est strictement interdite. De plus, l'appel de cette //fonction devra être aménagé par une fonction réalisant la transition //entre les deux gestions de mémoire. #endif PlanFacile-2.0/src/algo/algo/Makefile.am0000644000175000017500000000035310510305650014755 00000000000000INCLUDES=-I${top_builddir} -I${top_srcdir} noinst_LTLIBRARIES=libalgoalgo.la libalgoalgo_la_SOURCES=algo.c algo.h libalgoalgo_la_LIBADD=#${top_builddir}/src/algo/donnees/libalgodonnees.la libalgoalgo_la_LDFLAGS=-no-undefined -module PlanFacile-2.0/src/algo/algo/Makefile.in0000644000175000017500000003251410625116332014776 00000000000000# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/algo/algo DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libalgoalgo_la_DEPENDENCIES = am_libalgoalgo_la_OBJECTS = algo.lo libalgoalgo_la_OBJECTS = $(am_libalgoalgo_la_OBJECTS) libalgoalgo_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libalgoalgo_la_LDFLAGS) $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libalgoalgo_la_SOURCES) DIST_SOURCES = $(libalgoalgo_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DOCDIR = @DOCDIR@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STDDEFSDIR = @STDDEFSDIR@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ INCLUDES = -I${top_builddir} -I${top_srcdir} noinst_LTLIBRARIES = libalgoalgo.la libalgoalgo_la_SOURCES = algo.c algo.h libalgoalgo_la_LIBADD = #${top_builddir}/src/algo/donnees/libalgodonnees.la libalgoalgo_la_LDFLAGS = -no-undefined -module all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/algo/algo/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu src/algo/algo/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libalgoalgo.la: $(libalgoalgo_la_OBJECTS) $(libalgoalgo_la_DEPENDENCIES) $(libalgoalgo_la_LINK) $(libalgoalgo_la_OBJECTS) $(libalgoalgo_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/algo.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-exec-am: install-html: install-html-am install-info: install-info-am install-man: install-pdf: install-pdf-am install-ps: install-ps-am installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: PlanFacile-2.0/src/algo/donnees/0000777000175000017500000000000010625124601013517 500000000000000PlanFacile-2.0/src/algo/donnees/section.c0000644000175000017500000000647210510305650015252 00000000000000/* * PlanFacile (Easy plan, in french) is a small tool to help people to * write a document on a particular subject. * Copyright (C) 2005 Julien BRUGUIER * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "section.h" Resultat creation_section(Section **section , IdIdee ididee , Contenu soussections , Reference references) { //cree une section a partir de ses elements constitutifs if((*section=(Section*)(malloc(sizeof(Section))))==NULL) return RESULTAT_ERREUR_MEMOIRE; (*section)->ididee=ididee; (*section)->niveauhierarchique=0; // (*section)->hauteur=0; (*section)->soussections=soussections; (*section)->references=references; return RESULTAT_OK; } Resultat destruction_section(Plan plan) { //detruit le plan donne = detruit la section et tout le sous arbre DEBUTZONESECURISEE Indice indice; Taille taille; SECURISE(destruction_reference(&(plan->references))); SECURISE(taille_contenu(&(plan->soussections),&taille)); for(indice=0 ; indicesoussections),indice,§ion)); SECURISE(destruction_section(section)); } SECURISE(destruction_contenu(&(plan->soussections))); free(plan); FINZONESECURISEE return RESULTAT_OK; } Resultat lectureididee_section(Section *section , IdIdee *ididee) { //lit l'identificateur de l'idee de la section *ididee=section->ididee; return RESULTAT_OK; } Resultat lectureniveauhierarchique_section(Section *section , NiveauHierarchique *niveauhierarchique) { //lecture du niveau hierarchique *niveauhierarchique=section->niveauhierarchique; return RESULTAT_OK; } Resultat ecritureniveauhierarchique_section(Section *section , NiveauHierarchique niveauhierarchique) { //ecriture du niveau hierarchique section->niveauhierarchique=niveauhierarchique; return RESULTAT_OK; } Resultat lecturesoussections_section(Section *section , Contenu *soussections) { //lecture des sous sections *soussections=section->soussections; return RESULTAT_OK; } Resultat ecrituresoussections_section(Section *section , Contenu soussections) { //ecriture des sous sections => remplacement propre //DEBUTZONESECURISEE //SECURISE(destruction_contenu(&(section->soussections))); section->soussections=soussections; //FINZONESECURISEE return RESULTAT_OK; } Resultat lecturereferences_section(Section *section , Reference *references) { //lecture des references *references=section->references; return RESULTAT_OK; } Resultat ecriturereferences_section(Section *section , Reference references) { //ecriture des references => remplacement propre //DEBUTZONESECURISEE //SECURISE(destruction_contenu(&(section->references))); section->references=references; //FINZONESECURISEE return RESULTAT_OK; } PlanFacile-2.0/src/algo/donnees/section.h0000644000175000017500000000471610510305650015256 00000000000000/* * PlanFacile (Easy plan, in french) is a small tool to help people to * write a document on a particular subject. * Copyright (C) 2005 Julien BRUGUIER * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __SECTION__ #define __SECTION__ #include #include #include #include typedef struct section { IdIdee ididee; //indice de l'idee dans idees NiveauHierarchique niveauhierarchique; //niveau hierarchique dans le plan Contenu soussections; //vecteur des sous sections de la section en cours Reference references; //vecteur des references emanant de cette section } Section; typedef Section* Plan; Resultat creation_section(Section **section , IdIdee ididee , Contenu soussections , Reference references); //cree une section a partir de ses elements constitutifs Resultat destruction_section(Plan plan); //detruit le plan donne = detruit la section et tout le sous arbre Resultat lectureididee_section(Section *section , IdIdee *ididee); //lit l'identificateur de l'idee de la section Resultat lectureniveauhierarchique_section(Section *section , NiveauHierarchique *niveauhierarchique); //lecture du niveau hierarchique Resultat ecritureniveauhierarchique_section(Section *section , NiveauHierarchique niveauhierarchique); //ecriture du niveau hierarchique Resultat lecturesoussections_section(Section *section , Contenu *soussections); //lecture des sous sections Resultat ecrituresoussections_section(Section *section , Contenu soussections); //ecriture des sous sections => remplacement propre Resultat lecturereferences_section(Section *section , Reference *references); //lecture des references Resultat ecriturereferences_section(Section *section , Reference references); //ecriture des references => remplacement propre #endif PlanFacile-2.0/src/algo/donnees/graphe.c0000644000175000017500000000600210510305650015041 00000000000000/* * PlanFacile (Easy plan, in french) is a small tool to help people to * write a document on a particular subject. * Copyright (C) 2005 Julien BRUGUIER * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "graphe.h" Resultat creation_graphe(Graphe *graphe , Taille taille) { //cree le graphe avec la taille specifiee DEBUTZONESECURISEE SECURISE(creation_relations(&(graphe->dependances),taille)); SECURISE(creation_relations(&(graphe->references),taille)); SECURISE(creation_compteurboucles(&(graphe->compteurboucles),taille)); FINZONESECURISEE return RESULTAT_OK; } Resultat destruction_graphe(Graphe *graphe) { //detruit tout ce qui reste dans le graphe DEBUTZONESECURISEE SECURISE(destruction_relations(&(graphe->dependances))); SECURISE(destruction_relations(&(graphe->references))); SECURISE(destruction_compteurboucles(&(graphe->compteurboucles))); FINZONESECURISEE return RESULTAT_OK; } Resultat ajoutidee_graphe(Graphe *graphe , Taille taille) { //ajoute des relations pour des idees supplementaires //renvoie RESULTAT_ERREUR_DOMAINE si taille<0 DEBUTZONESECURISEE SECURISE(ajoutidees_relations(&(graphe->dependances),taille)); SECURISE(ajoutidees_relations(&(graphe->references),taille)); SECURISE(ajoutcompteurs_compteurboucles(&(graphe->compteurboucles),taille)); FINZONESECURISEE return RESULTAT_OK; } Resultat lecturedependances_graphe(Graphe *graphe , Relations *dependances) { //renvoie la table de dependances //les ecritures se feront directement sur le resultat final => pas besoin de tout //reecrire apres. Cependant, apres un ajout d'idee, un acces au pointeur trouve ici est indefini *dependances=graphe->dependances; return RESULTAT_OK; } Resultat lecturereferences_graphe(Graphe *graphe , Relations *references) { //renvoie la table de references //les ecritures se feront directement sur le resultat final => pas besoin de tout //reecrire apres. Cependant, apres un ajout d'idee, un acces au pointeur trouve ici est indefini *references=graphe->references; return RESULTAT_OK; } Resultat lecturecompteurboucles_graphe(Graphe *graphe , CompteurBoucles *compteurboucles) { //renvoie la table des compteurs de boucles //les ecritures se feront directement sur le resultat final => pas besoin de tout //reecrire apres. Cependant, apres un ajout d'idee, un acces au pointeur trouve ici est indefini *compteurboucles=graphe->compteurboucles; return RESULTAT_OK; } PlanFacile-2.0/src/algo/donnees/graphe.h0000644000175000017500000000511510510305650015052 00000000000000/* * PlanFacile (Easy plan, in french) is a small tool to help people to * write a document on a particular subject. * Copyright (C) 2005 Julien BRUGUIER * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __GRAPHE__ #define __GRAPHE__ #include #include #include typedef struct { IdIdee depart; //idee de depart //lectures et ecritures en direct dessus Relations dependances; //ceci contient les dependances entre les idees du systeme logique propose //par l'utilisateur Relations references; //ceci contient les references CompteurBoucles compteurboucles; //indique pour chaque noeud le nombre de boucles qui passent par lui } Graphe; Resultat creation_graphe(Graphe *graphe , Taille taille); //cree le graphe avec la taille specifiee Resultat destruction_graphe(Graphe *graphe); //detruit tout ce qui reste dans le graphe Resultat ajoutidee_graphe(Graphe *graphe , Taille taille); //ajoute des relations pour des idees supplementaires //renvoie RESULTAT_ERREUR_DOMAINE si taille<0 Resultat lecturedependances_graphe(Graphe *graphe , Relations *dependances); //renvoie la table de dependances //les ecritures se feront directement sur le resultat final => pas besoin de tout //reecrire apres. Cependant, apres un ajout d'idee, un acces au pointeur trouve ici est indefini Resultat lecturereferences_graphe(Graphe *graphe , Relations *references); //renvoie la table de references //les ecritures se feront directement sur le resultat final => pas besoin de tout //reecrire apres. Cependant, apres un ajout d'idee, un acces au pointeur trouve ici est indefini Resultat lecturecompteurboucles_graphe(Graphe *graphe , CompteurBoucles *compteurboucles); //renvoie la table des compteurs de boucles //les ecritures se feront directement sur le resultat final => pas besoin de tout //reecrire apres. Cependant, apres un ajout d'idee, un acces au pointeur trouve ici est indefini #endif PlanFacile-2.0/src/algo/donnees/compteurboucles.c0000644000175000017500000001475110510305650017020 00000000000000/* * PlanFacile (Easy plan, in french) is a small tool to help people to * write a document on a particular subject. * Copyright (C) 2005 Julien BRUGUIER * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "compteurboucles.h" Resultat creation_compteurboucles(CompteurBoucles *compteurboucles , Taille taille) { //cree une liste de compteurs de boucle //renvoie RESULTAT_ERREUR_DOMAINE en cas de taille negative if(taille<0) return RESULTAT_ERREUR_DOMAINE; compteurboucles->taille=taille; if((compteurboucles->compteurs=(Indice*)(malloc(sizeof(Indice)*taille)))==NULL) return RESULTAT_ERREUR_MEMOIRE; for( ; taille>0 ; taille--) compteurboucles->compteurs[taille-1]=0; return RESULTAT_OK; } Resultat destruction_compteurboucles(CompteurBoucles *compteurboucles) { //detruit un compteur de boucle free(compteurboucles->compteurs); return RESULTAT_OK; } Resultat ajoutcompteurs_compteurboucles(CompteurBoucles *compteurboucles , Taille ajout) { //ajoute des compteurs dans la liste //renvoie RESULTAT_ERREUR_DOMAINE en cas d'ajout negatif IdIdee ididee; if(ajout<0) return RESULTAT_ERREUR_DOMAINE; if(ajout==0) return RESULTAT_OK; if((compteurboucles->compteurs=(Indice*)(realloc(compteurboucles->compteurs,sizeof(Indice)*(compteurboucles->taille+ajout))))==NULL) return RESULTAT_ERREUR_MEMOIRE; for(ididee=compteurboucles->taille ; idideetaille+ajout ; ididee++) compteurboucles->compteurs[ididee]=0; compteurboucles->taille += ajout; return RESULTAT_OK; } Resultat lecturecompteur_compteurboucles(CompteurBoucles *compteurboucles , IdIdee ididee , Indice *compteur) { //lit un compteur //renvoie RESULTAT_ERREUR_DEPASSEMENT en cas d'indice incorrect if(ididee<0) return RESULTAT_ERREUR_DEPASSEMENT; if(ididee>=compteurboucles->taille) return RESULTAT_ERREUR_DEPASSEMENT; *compteur=compteurboucles->compteurs[ididee]; return RESULTAT_OK; } Resultat ecriturecompteur_compteurboucles(CompteurBoucles *compteurboucles , IdIdee ididee , Indice compteur) { //ecrit un compteur //renvoie RESULTAT_ERREUR_DEPASSEMENT en cas d'indice incorrect //renvoie RESULTAT_ERREUR_DOMAINE en cas de compteur negatif if(ididee<0) return RESULTAT_ERREUR_DEPASSEMENT; if(ididee>=compteurboucles->taille) return RESULTAT_ERREUR_DEPASSEMENT; compteurboucles->compteurs[ididee]=compteur; return RESULTAT_OK; } Resultat incremente_compteurboucles(CompteurBoucles *compteurboucles , IdIdee ididee) { //incremente un compteur de boucle //renvoie RESULTAT_ERREUR_DEPASSEMENT en cas d'indice incorrect if(ididee<0) return RESULTAT_ERREUR_DEPASSEMENT; if(ididee>=compteurboucles->taille) return RESULTAT_ERREUR_DEPASSEMENT; compteurboucles->compteurs[ididee]++; return RESULTAT_OK; } Resultat decremente_compteurboucles(CompteurBoucles *compteurboucles , IdIdee ididee) { //decremente un compteur de boucle //renvoie RESULTAT_ERREUR_DEPASSEMENT en cas d'indice incorrect //renvoie RESULTAT_ERREUR_DOMAINE en cas de compteur nul if(ididee<0) return RESULTAT_ERREUR_DEPASSEMENT; if(ididee>=compteurboucles->taille) return RESULTAT_ERREUR_DEPASSEMENT; if(compteurboucles->compteurs[ididee]==0) return RESULTAT_ERREUR_DOMAINE; compteurboucles->compteurs[ididee]--; return RESULTAT_OK; } Resultat ajoute_compteurboucles(CompteurBoucles *compteurboucles , IdIdee ididee , Indice ajout) { //ajoute la valeur ajout au compteur //si l'indice est incorrect, RESULTAT_ERREUR_DEPASSEMENT est renvoyee //si le compteur devient negatif, RESULTAT_ERREUR_DOMAINE est renvoyee if(ididee<0) return RESULTAT_ERREUR_DEPASSEMENT; if(ididee>=compteurboucles->taille) return RESULTAT_ERREUR_DEPASSEMENT; if(compteurboucles->compteurs[ididee]+ajout<0) return RESULTAT_ERREUR_DOMAINE; compteurboucles->compteurs[ididee]+=ajout; return RESULTAT_OK; } Resultat incrementeboucle_compteurboucles(CompteurBoucles *compteurboucles , Marqueurs boucle) { //incremente un compteur de boucle sur toute une boucle //renvoie RESULTAT_ERREUR_TAILLE en cas de tailles differentes IdIdee ididee; DEBUTZONESECURISEE if(boucle.taille!=compteurboucles->taille) return RESULTAT_ERREUR_TAILLE; for(ididee=0 ; idideetaille ; ididee++) { Booleen test; SECURISE(verification_marqueurs(&boucle,ididee,&test)); if(test==VRAI) compteurboucles->compteurs[ididee]++; } FINZONESECURISEE return RESULTAT_OK; } Resultat cumul_compteurboucles(CompteurBoucles *compteurbouclessomme , CompteurBoucles *compteurboucles) { //ajoute les valeurs des compteurs au compteurs somme //renvoie RESULTAT_ERREUR_TAILLE si les compteurs n'ont pas la meme taille Indice indice; if(compteurbouclessomme->taille!=compteurboucles->taille) return RESULTAT_ERREUR_TAILLE; for(indice=0 ; indicetaille ; indice++) compteurbouclessomme->compteurs[indice] += compteurboucles->compteurs[indice]; return RESULTAT_OK; } Resultat commun_compteurboucles(CompteurBoucles *compteurboucles , Marqueurs *marqueurs , Indice *commun) { //place dans commun la somme des compteurs dont une marque est presente dans la liste des marqueurs //renvoie RESULTAT_ERREUR_TAILLE en cas de taille differentes Indice indice; DEBUTZONESECURISEE if(marqueurs->taille!=compteurboucles->taille) return RESULTAT_ERREUR_TAILLE; *commun=0; for(indice=0 ; indicetaille ; indice++) { Booleen test; SECURISE(verification_marqueurs(marqueurs,(IdIdee)(indice),&test)); if(test==VRAI) *commun += compteurboucles->compteurs[indice]; } return RESULTAT_OK; FINZONESECURISEE } Resultat affiche_compteurboucles(CompteurBoucles compteurboucles , Taille bloc) { //affiche le contenu des compteurs de boucle /!\ DEBUG Indice indice; printf("Compteurs de boucle (taille=%d) :\n",compteurboucles.taille); for(indice=0 ; indice #include typedef struct { Taille taille; //taille Indice *compteurs; //compteurs } CompteurBoucles; Resultat creation_compteurboucles(CompteurBoucles *compteurboucles , Taille taille); //cree une liste de compteurs de boucle //renvoie RESULTAT_ERREUR_DOMAINE en cas de taille negative Resultat destruction_compteurboucles(CompteurBoucles *compteurboucles); //detruit un compteur de boucle Resultat ajoutcompteurs_compteurboucles(CompteurBoucles *compteurboucles , Taille ajout); //ajoute des compteurs dans la liste //renvoie RESULTAT_ERREUR_DOMAINE en cas d'ajout negatif Resultat lecturecompteur_compteurboucles(CompteurBoucles *compteurboucles , IdIdee ididee , Indice *compteur); //lit un compteur //renvoie RESULTAT_ERREUR_DEPASSEMENT en cas d'indice incorrect Resultat ecriturecompteur_compteurboucles(CompteurBoucles *compteurboucles , IdIdee ididee , Indice compteur); //ecrit un compteur //renvoie RESULTAT_ERREUR_DEPASSEMENT en cas d'indice incorrect //renvoie RESULTAT_ERREUR_DOMAINE en cas de compteur negatif Resultat incremente_compteurboucles(CompteurBoucles *compteurboucles , IdIdee ididee); //incremente un compteur de boucle //renvoie RESULTAT_ERREUR_DEPASSEMENT en cas d'indice incorrect Resultat decremente_compteurboucles(CompteurBoucles *compteurboucles , IdIdee ididee); //decremente un compteur de boucle //renvoie RESULTAT_ERREUR_DEPASSEMENT en cas d'indice incorrect //renvoie RESULTAT_ERREUR_DOMAINE en cas de compteur nul Resultat ajoute_compteurboucles(CompteurBoucles *compteurboucles , IdIdee ididee , Indice ajout); //ajoute la valeur ajout au compteur //si l'indice est incorrect, RESULTAT_ERREUR_DEPASSEMENT est renvoyee //si le compteur devient negatif, RESULTAT_ERREUR_DOMAINE est renvoyee Resultat incrementeboucle_compteurboucles(CompteurBoucles *compteurboucles , Marqueurs boucle); //incremente un compteur de boucle sur toute une boucle //renvoie RESULTAT_ERREUR_TAILLE en cas de tailles differentes Resultat cumul_compteurboucles(CompteurBoucles *compteurbouclessomme , CompteurBoucles *compteurboucles); //ajoute les valeurs des compteurs au compteurs somme //renvoie RESULTAT_ERREUR_TAILLE si les compteurs n'ont pas la meme taille Resultat commun_compteurboucles(CompteurBoucles *compteurboucles , Marqueurs *marqueurs , Indice *commun); //place dans commun la somme des compteurs dont une marque est presente dans la liste des marqueurs //renvoie RESULTAT_ERREUR_TAILLE en cas de taille differentes Resultat affiche_compteurboucles(CompteurBoucles compteurboucles , Taille bloc); //affiche le contenu des compteurs de boucle /!\ DEBUG #endif PlanFacile-2.0/src/algo/donnees/reference.c0000644000175000017500000001047410510305650015541 00000000000000/* * PlanFacile (Easy plan, in french) is a small tool to help people to * write a document on a particular subject. * Copyright (C) 2005 Julien BRUGUIER * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "reference.h" Resultat creation_reference(Reference *reference) { //creation d'un reference vide if((reference->destination=(ReferenceComplete*)(malloc(sizeof(ReferenceComplete)*TAILLEINIT)))==NULL) return RESULTAT_ERREUR_MEMOIRE; reference->memoire=TAILLEINIT; reference->taille=0; return RESULTAT_OK; } Resultat destruction_reference(Reference *reference) { //detruit le reference free(reference->destination); return RESULTAT_OK; } Resultat taille_reference(Reference *reference , Taille *taille) { //renvoie le nombre d'elements du reference *taille=reference->taille; return RESULTAT_OK; } static Resultat ajoutfinvide_reference(Reference *reference) { //fait en sorte de laisser un emplacement disponible dans la liste ReferenceComplete *destinationtemp; if(reference->taille==reference->memoire) { //plus assez d'emplacements : on en redemande... if((destinationtemp=(ReferenceComplete*)(realloc(reference->destination,sizeof(ReferenceComplete)*(reference->memoire)*MULTTAILLE)))==NULL) return RESULTAT_ERREUR_MEMOIRE; reference->destination=destinationtemp; reference->memoire *= MULTTAILLE; } //la, on est surs d'avoir la place qu'il faut return RESULTAT_OK; } Resultat ajoutreference_reference(Reference *reference , TypeReference type , P2Section section) { //ajoute une section a la fin du reference DEBUTZONESECURISEE SECURISE(ajoutfinvide_reference(reference)); reference->destination[reference->taille].type=type; reference->destination[reference->taille++].section=section; FINZONESECURISEE return RESULTAT_OK; } Resultat echange_reference(Reference *reference , Indice indice1 , Indice indice2) { //echange les deux destination placees aux indices indiques //renvoie RESULTAT_ERREUR_DEPASSEMENT si un des indices est incorrect ReferenceComplete sectiontemp; if(indice1<0) return RESULTAT_ERREUR_DEPASSEMENT; if(indice1>=reference->taille) return RESULTAT_ERREUR_DEPASSEMENT; if(indice2<0) return RESULTAT_ERREUR_DEPASSEMENT; if(indice2>=reference->taille) return RESULTAT_ERREUR_DEPASSEMENT; sectiontemp=reference->destination[indice1]; reference->destination[indice1]=reference->destination[indice2]; reference->destination[indice2]=sectiontemp; return RESULTAT_OK; } Resultat lecture_reference(Reference *reference , Indice indice , TypeReference *type , P2Section *section) { //place la valeur de la section dans le pointeur //renvoie RESULTAT_ERREUR_DEPASSEMENT si l'indice est incorrect if(indice<0) return RESULTAT_ERREUR_DEPASSEMENT; if(indice>=reference->taille) return RESULTAT_ERREUR_DEPASSEMENT; *type=reference->destination[indice].type; *section=reference->destination[indice].section; return RESULTAT_OK; } Resultat ecrituretype_reference(Reference *reference , Indice indice , TypeReference type) { //ecrit un type de reference //renvoie RESULTAT_ERREUR_DEPASSEMENT si l'indice est incorrect if(indice<0) return RESULTAT_ERREUR_DEPASSEMENT; if(indice>=reference->taille) return RESULTAT_ERREUR_DEPASSEMENT; reference->destination[indice].type=type; return RESULTAT_OK; } Resultat suppression_reference(Reference *reference , Indice indice) { //supprime le lien sur la section dans le reference //renvoie RESULTAT_ERREUR_DEPASSEMENT si l'indice est incorrect if(indice<0) return RESULTAT_ERREUR_DEPASSEMENT; if(indice>=reference->taille) return RESULTAT_ERREUR_DEPASSEMENT; reference->taille--; for( ; indicetaille ; indice++) reference->destination[indice]=reference->destination[indice+1]; return RESULTAT_OK; } PlanFacile-2.0/src/algo/donnees/reference.h0000644000175000017500000000474710510305650015554 00000000000000/* * PlanFacile (Easy plan, in french) is a small tool to help people to * write a document on a particular subject. * Copyright (C) 2005 Julien BRUGUIER * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __REFERENCE__ #define __REFERENCE__ #include #define TAILLEINIT 5 #define MULTTAILLE 2 typedef struct section* P2Section; typedef struct referencecomplete { TypeReference type; //type de la reference P2Section section; //section destination } ReferenceComplete; typedef struct reference { Taille memoire; //taille prise en memoire Taille taille; //taille reellement prise ReferenceComplete *destination; } Reference; Resultat creation_reference(Reference *reference); //creation d'un reference vide Resultat destruction_reference(Reference *reference); //detruit le reference Resultat taille_reference(Reference *reference , Taille *taille); //renvoie le nombre d'elements du reference Resultat ajoutreference_reference(Reference *reference , TypeReference type , P2Section section); //ajoute une section a la fin du reference Resultat echange_reference(Reference *reference , Indice indice1 , Indice indice2); //echange les deux sections placees aux indices indiques //renvoie RESULTAT_ERREUR_DEPASSEMENT si un des indices est incorrect Resultat lecture_reference(Reference *reference , Indice indice , TypeReference *type , P2Section *section); //place la valeur de la section dans le pointeur //renvoie RESULTAT_ERREUR_DEPASSEMENT si l'indice est incorrect Resultat ecrituretype_reference(Reference *reference , Indice indice , TypeReference type); //ecrit un type de reference //renvoie RESULTAT_ERREUR_DEPASSEMENT si l'indice est incorrect Resultat suppression_reference(Reference *reference , Indice indice); //supprime le lien sur la section dans le reference //renvoie RESULTAT_ERREUR_DEPASSEMENT si l'indice est incorrect #endif PlanFacile-2.0/src/algo/donnees/liens.c0000644000175000017500000002165310625124542014724 00000000000000/* * PlanFacile (Easy plan, in french) is a small tool to help people to * write a document on a particular subject. * Copyright (C) 2005 Julien BRUGUIER * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "liens.h" Resultat creation_liens(Liens *liens , Taille taille) { //cree les liens avec la taille specifiee Indice indice , indiceecrit; if(taille<0) return RESULTAT_ERREUR_DOMAINE; liens->taille=taille; if((liens->liste=(Indice*)(malloc(sizeof(Indice)*taille)))==NULL) return RESULTAT_ERREUR_MEMOIRE; for(indice=0 ; indiceliste[indice]=indice; if((liens->table=(References**)(malloc(sizeof(References*)*taille)))==NULL) return RESULTAT_ERREUR_MEMOIRE; for(indice=0 ; indicetable[indice]=(References*)(malloc(sizeof(References)*taille)))==NULL) return RESULTAT_ERREUR_MEMOIRE; for(indiceecrit=0 ; indiceecrittaille ; indiceecrit++) { liens->table[indice][indiceecrit].referencesreductibles=0; liens->table[indice][indiceecrit].referencesirreductibles=0; } } liens->references.referencesreductibles=0; liens->references.referencesirreductibles=0; return RESULTAT_OK; } Resultat destruction_liens(Liens *liens) { //detruit les liens Indice indice; for(indice=0 ; indicetaille ; indice++) free(liens->table[indice]); free(liens->table); free(liens->liste); return RESULTAT_OK; } static Resultat ajoutreferences_liens(References *references , References avant , References apres) { references->referencesreductibles += apres.referencesreductibles-avant.referencesreductibles; references->referencesirreductibles += apres.referencesirreductibles-avant.referencesirreductibles; return RESULTAT_OK; } Resultat lecture_liens(Liens *liens , Indice source , Indice destination , References *references) { //lit une valeur de references entre deux sous arbres //RESULTAT_ERREUR_DEPASSEMENT est renvoye en cas d'indice incorrect if(source<0) return RESULTAT_ERREUR_DEPASSEMENT; if(source>=liens->taille) return RESULTAT_ERREUR_DEPASSEMENT; if(destination<0) return RESULTAT_ERREUR_DEPASSEMENT; if(destination>=liens->taille) return RESULTAT_ERREUR_DEPASSEMENT; source=liens->liste[source]; destination=liens->liste[destination]; if(source<0) return RESULTAT_ERREUR_DEPASSEMENT; if(source>=liens->taille) return RESULTAT_ERREUR_DEPASSEMENT; if(destination<0) return RESULTAT_ERREUR_DEPASSEMENT; if(destination>=liens->taille) return RESULTAT_ERREUR_DEPASSEMENT; *references=liens->table[source][destination]; return RESULTAT_OK; } Resultat ecriture_liens(Liens *liens , Indice source , Indice destination , References references) { //ecrit une valeur de references entre deux sous arbres //RESULTAT_ERREUR_DEPASSEMENT est renvoye en cas d'indice incorrect DEBUTZONESECURISEE if(source<0) return RESULTAT_ERREUR_DEPASSEMENT; if(source>=liens->taille) return RESULTAT_ERREUR_DEPASSEMENT; if(destination<0) return RESULTAT_ERREUR_DEPASSEMENT; if(destination>=liens->taille) return RESULTAT_ERREUR_DEPASSEMENT; SECURISE(ajoutreferences_liens(&(liens->references),liens->table[source][destination],references)); liens->table[source][destination]=references; FINZONESECURISEE return RESULTAT_OK; } Resultat test_liens(Liens *liens , Indice avant , Indice apres , Booleen *comparaison) { //teste si deux contenus ont interet a etre interchanges //RESULTAT_ERREUR_DEPASSEMENT est renvoye en cas d'indice incorrect References refavant , refapres; Indice resultatfonctioncaracteristique; Indice indice; if(avant<0) return RESULTAT_ERREUR_DEPASSEMENT; if(avant>=liens->taille) return RESULTAT_ERREUR_DEPASSEMENT; if(apres<0) return RESULTAT_ERREUR_DEPASSEMENT; if(apres>=liens->taille) return RESULTAT_ERREUR_DEPASSEMENT; avant=liens->liste[avant]; apres=liens->liste[apres]; if(avant<0) return RESULTAT_ERREUR_DEPASSEMENT; if(avant>=liens->taille) return RESULTAT_ERREUR_DEPASSEMENT; if(apres<0) return RESULTAT_ERREUR_DEPASSEMENT; if(apres>=liens->taille) return RESULTAT_ERREUR_DEPASSEMENT; refavant=liens->table[avant][apres]; refapres=liens->table[apres][avant]; //*comparaison=((refapres.referencesirreductibles+refavant.referencesirreductibles)>=(refavant.referencesreductibles+refapres.referencesreductibles))?VRAI:FAUX; //test local resultatfonctioncaracteristique=(refapres.referencesirreductibles+refavant.referencesirreductibles)-(refavant.referencesreductibles+refapres.referencesreductibles); if(resultatfonctioncaracteristique>0) { *comparaison=VRAI; return RESULTAT_OK; } if(resultatfonctioncaracteristique<0) { *comparaison=FAUX; return RESULTAT_OK; } //test global refavant.referencesreductibles=0; refavant.referencesirreductibles=0; for(indice=0 ; indicetaille ; indice++) { if(indice!=avant) { refavant.referencesreductibles+=liens->table[avant][indice].referencesreductibles; refavant.referencesirreductibles+=liens->table[avant][indice].referencesirreductibles; } } refapres.referencesreductibles=0; refapres.referencesirreductibles=0; for(indice=0 ; indicetaille ; indice++) { if(indice!=apres) { refapres.referencesreductibles+=liens->table[apres][indice].referencesreductibles; refapres.referencesirreductibles+=liens->table[apres][indice].referencesirreductibles; } } resultatfonctioncaracteristique=((refavant.referencesirreductibles-refavant.referencesreductibles)+(refapres.referencesreductibles-refapres.referencesreductibles)); if(resultatfonctioncaracteristique>0) { *comparaison=VRAI; } else { *comparaison=FAUX; } return RESULTAT_OK; } Resultat echange_liens(Liens *liens , Indice contenu1 , Indice contenu2) { //echange deux contenus dans les liens //RESULTAT_ERREUR_DEPASSEMENT est renvoye en cas d'indice incorrect DEBUTZONESECURISEE Indice reftemp; Indice indicecontenu1 , indicecontenu2; References refcontenu1 , refcontenu2; if(contenu1<0) return RESULTAT_ERREUR_DEPASSEMENT; if(contenu1>=liens->taille) return RESULTAT_ERREUR_DEPASSEMENT; if(contenu2<0) return RESULTAT_ERREUR_DEPASSEMENT; if(contenu2>=liens->taille) return RESULTAT_ERREUR_DEPASSEMENT; indicecontenu1=contenu1; contenu1=liens->liste[contenu1]; indicecontenu2=contenu2; contenu2=liens->liste[contenu2]; if(contenu1<0) return RESULTAT_ERREUR_DEPASSEMENT; if(contenu1>=liens->taille) return RESULTAT_ERREUR_DEPASSEMENT; if(contenu2<0) return RESULTAT_ERREUR_DEPASSEMENT; if(contenu2>=liens->taille) return RESULTAT_ERREUR_DEPASSEMENT; //inverse les valeurs refcontenu1=liens->table[contenu1][contenu2]; reftemp=refcontenu1.referencesreductibles; refcontenu1.referencesreductibles=refcontenu1.referencesirreductibles; refcontenu1.referencesirreductibles=reftemp; refcontenu2=liens->table[contenu2][contenu1]; reftemp=refcontenu2.referencesreductibles; refcontenu2.referencesreductibles=refcontenu2.referencesirreductibles; refcontenu2.referencesirreductibles=reftemp; //met la table a jour ainsi que la somme des references SECURISE(ajoutreferences_liens(&(liens->references),liens->table[contenu1][contenu2],refcontenu1)); liens->table[contenu1][contenu2]=refcontenu1; SECURISE(ajoutreferences_liens(&(liens->references),liens->table[contenu2][contenu1],refcontenu2)); liens->table[contenu2][contenu1]=refcontenu2; //permute dans la liste reftemp=liens->liste[indicecontenu1]; liens->liste[indicecontenu1]=liens->liste[indicecontenu2]; liens->liste[indicecontenu2]=reftemp; FINZONESECURISEE return RESULTAT_OK; } Resultat references_liens(Liens *liens , References *references) { //place dans references la somme des references des liens *references=liens->references; return RESULTAT_OK; } Resultat affiche_liens(Liens liens) { //affiche le contenu des liens /!\ DEBUG Indice indice1 , indice2; References references; printf("Liens : (taille=%d) : References = (%3d ; %3d)\nListe :",liens.taille,liens.references.referencesreductibles,liens.references.referencesirreductibles); for(indice1=0 ; indice1 typedef struct { Taille taille; //taille des liens References **table; //table donnant les divers types de references entre deux sous arbres du plan //indices table[source][destination] Indice *liste; //liste des indices de la table pour les indices dans les contenus References references; //nombre de references reductibles et de references irreductibles } Liens; Resultat creation_liens(Liens *liens , Taille taille); //cree les liens avec la taille specifiee Resultat destruction_liens(Liens *liens); //detruit les liens Resultat lecture_liens(Liens *liens , Indice source , Indice destination , References *references); //lit une valeur de references entre deux sous arbres //RESULTAT_ERREUR_DEPASSEMENT est renvoye en cas d'indice incorrect Resultat ecriture_liens(Liens *liens , Indice source , Indice destination , References references); //ecrit une valeur de references entre deux sous arbres //RESULTAT_ERREUR_DEPASSEMENT est renvoye en cas d'indice incorrect Resultat test_liens(Liens *liens , Indice contenu1 , Indice contenu2 , Booleen *comparaison); //teste si deux contenus ont interet a etre interchanges //RESULTAT_ERREUR_DEPASSEMENT est renvoye en cas d'indice incorrect Resultat echange_liens(Liens *liens , Indice contenu1 , Indice contenu2); //echange deux contenus dans les liens //RESULTAT_ERREUR_DEPASSEMENT est renvoye en cas d'indice incorrect Resultat references_liens(Liens *liens , References *references); //place dans references la somme des references des liens Resultat affiche_liens(Liens liens); //affiche le contenu des liens /!\ DEBUG #endif PlanFacile-2.0/src/algo/donnees/marqueurs.c0000644000175000017500000001430110510305650015620 00000000000000/* * PlanFacile (Easy plan, in french) is a small tool to help people to * write a document on a particular subject. * Copyright (C) 2005 Julien BRUGUIER * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "marqueurs.h" Resultat creation_marqueurs(Marqueurs *marqueurs , Taille taille) { //initialise le tableau de marques //si taille<0, erreur RESULTAT_ERREUR_DOMAINE DEBUTZONESECURISEE if(taille<0) return RESULTAT_ERREUR_DOMAINE; marqueurs->taille=taille; if((marqueurs->marques=((Booleen*)(malloc(sizeof(Booleen)*taille))))==NULL) return RESULTAT_ERREUR_MEMOIRE; SECURISE(nettoyage_marqueurs(marqueurs)); FINZONESECURISEE return RESULTAT_OK; } Resultat destruction_marqueurs(Marqueurs *marqueurs) { //detruit les marqueurs free(marqueurs->marques); marqueurs->taille=-1; marqueurs->nombremarques=0; return RESULTAT_OK; } Resultat agrandissement_marqueurs(Marqueurs *marqueurs , Taille taille) { //agrandissement de la taille du tableau de marques //taille<0 => rien ne se passe, erreur RESULTAT_ERREUR_DOMAINE Booleen *marquestemp; IdIdee ididee; if(taille<0) return RESULTAT_ERREUR_DOMAINE; if(taille==0) return RESULTAT_OK; if((marquestemp=((Booleen*)(realloc(marqueurs->marques,sizeof(Booleen)*(marqueurs->taille+taille)))))==NULL) return RESULTAT_ERREUR_MEMOIRE; marqueurs->marques=marquestemp; for(ididee=marqueurs->taille ; idideetaille+taille ; ididee++) marqueurs->marques[ididee]=FAUX; marqueurs->taille += taille; return RESULTAT_OK; } Resultat nettoyage_marqueurs(Marqueurs *marqueurs) { //decoche toutes les marques Indice indice; marqueurs->nombremarques=0; for(indice=0 ; indicetaille ; indice++) marqueurs->marques[indice]=FAUX; return RESULTAT_OK; } Resultat nombre_marqueurs(Marqueurs *marqueurs , Indice *nombre) { //place dans nombre le nombre de marques cochees *nombre=marqueurs->nombremarques; return RESULTAT_OK; } Resultat verification_marqueurs(Marqueurs *marqueurs , Indice indice , Booleen *marque) { //place dans marque la valeur de la marque d'indice donne //indice incorrect => RESULTAT_ERREUR_DEPASSEMENT if(indice<0) return RESULTAT_ERREUR_DEPASSEMENT; if(indice>=marqueurs->taille) return RESULTAT_ERREUR_DEPASSEMENT; *marque=marqueurs->marques[indice]; return RESULTAT_OK; } Resultat coche_marqueurs(Marqueurs *marqueurs , Indice indice) { //coche une marque d'indice donne //indice incorrect => RESULTAT_ERREUR_DEPASSEMENT if(indice<0) return RESULTAT_ERREUR_DEPASSEMENT; if(indice>=marqueurs->taille) return RESULTAT_ERREUR_DEPASSEMENT; if(marqueurs->marques[indice]==FAUX) marqueurs->nombremarques++; marqueurs->marques[indice]=VRAI; return RESULTAT_OK; } Resultat decoche_marqueurs(Marqueurs *marqueurs , Indice indice) { //decoche une marque d'indice donne //indice incorrect => RESULTAT_ERREUR_DEPASSEMENT if(indice<0) return RESULTAT_ERREUR_DEPASSEMENT; if(indice>=marqueurs->taille) return RESULTAT_ERREUR_DEPASSEMENT; if(marqueurs->marques[indice]==VRAI) marqueurs->nombremarques--; marqueurs->marques[indice]=FAUX; return RESULTAT_OK; } Resultat inclusion_marqueurs(Marqueurs *marqueursinclus , Marqueurs *marqueurs , Booleen *comparaison) { //teste si marqueursinclus est inclus dans marqueurs. //si les marqueurs n'ont pas la meme taille, une erreur RESULTAT_ERREUR_TAILLE est renvoyee Indice indice; if(marqueursinclus->taille!=marqueurs->taille) return RESULTAT_ERREUR_TAILLE; *comparaison=VRAI; for(indice=0 ; indicetaille ; indice++) if((marqueursinclus->marques[indice]==VRAI)&&(marqueurs->marques[indice]==FAUX)) { *comparaison=FAUX; return RESULTAT_OK; } return RESULTAT_OK; } Resultat egales_marqueurs(Marqueurs *marqueurs1 , Marqueurs *marqueurs2 , Booleen *comparaison) { //teste si les deux ensembles de marques sont egales //si les marqueurs n'ont pas la meme taille, une erreur RESULTAT_ERREUR_TAILLE est renvoyee Indice indice; if(marqueurs1->taille!=marqueurs2->taille) return RESULTAT_ERREUR_TAILLE; *comparaison=VRAI; for(indice=0 ; indicetaille ; indice++) if(marqueurs1->marques[indice]!=marqueurs2->marques[indice]) { *comparaison=FAUX; return RESULTAT_OK; } return RESULTAT_OK; } Resultat cumul_marqueurs(Marqueurs *marqueurssomme , Marqueurs *marqueurs) { //ajoute les marqueurs de marqueurs a ceux de marqueurssomme //si les deux marqueurs n'ont pas la meme taille, une erreur RESULTAT_ERREUR_TAILLE est renvoyee Indice indice; if(marqueurs->taille!=marqueurssomme->taille) return RESULTAT_ERREUR_TAILLE; for(indice=0 ; indicetaille ; indice++) if((marqueurs->marques[indice]==VRAI)&&(marqueurssomme->marques[indice]==FAUX)) { marqueurssomme->marques[indice]=VRAI; marqueurssomme->nombremarques++; } return RESULTAT_OK; } Resultat commun_marqueurs(Marqueurs *marqueurs1 , Marqueurs *marqueurs2 , Indice *commun) { //place dans commun le nombre de marques communes aux deux ensembles //si leurs tailles sont differentes, une erreur RESULTAT_ERREUR_TAILLE est renvoyee Indice indice; if(marqueurs1->taille!=marqueurs2->taille) return RESULTAT_ERREUR_TAILLE; *commun=0; for(indice=0 ; indicetaille ; indice++) if((marqueurs1->marques[indice]==VRAI)&&(marqueurs2->marques[indice]==VRAI)) (*commun)++; return RESULTAT_OK; } Resultat affiche_marqueurs(Marqueurs marqueurs) { //affiche le contenu des marqueurs /!\ DEBUG ! Indice indice; printf("Marqueurs : %d/%d marques :",marqueurs.nombremarques,marqueurs.taille); for(indice=0 ; indice typedef struct { Taille taille; //nombre de marques possible (lue en direct, mais non modifiable) Taille nombremarques; //nombre de marques actuellement prises Booleen *marques; //tableau de marques } Marqueurs; Resultat creation_marqueurs(Marqueurs *marqueurs , Taille taille); //initialise le tableau de marques //si taille<0, erreur RESULTAT_ERREUR_DOMAINE Resultat destruction_marqueurs(Marqueurs *marqueurs); //detruit les marqueurs Resultat agrandissement_marqueurs(Marqueurs *marqueurs , Taille taille); //agrandissement de la taille du tableau de marques //taille<0 => rien ne se passe, erreur RESULTAT_ERREUR_DOMAINE Resultat nettoyage_marqueurs(Marqueurs *marqueurs); //decoche toutes les marques Resultat nombre_marqueurs(Marqueurs *marqueurs , Indice *nombre); //place dans nombre le nombre de marques cochees Resultat verification_marqueurs(Marqueurs *marqueurs , Indice indice , Booleen *marque); //place dans marque la valeur de la marque d'indice donne //indice incorrect => RESULTAT_ERREUR_DEPASSEMENT Resultat coche_marqueurs(Marqueurs *marqueurs , Indice indice); //coche une marque d'indice donne //indice incorrect => RESULTAT_ERREUR_DEPASSEMENT Resultat decoche_marqueurs(Marqueurs *marqueurs , Indice indice); //decoche une marque d'indice donne //indice incorrect => RESULTAT_ERREUR_DEPASSEMENT Resultat inclusion_marqueurs(Marqueurs *marqueursinclus , Marqueurs *marqueurs , Booleen *comparaison); //teste si marqueursinclus est inclus dans marqueurs. //si les marqueurs n'ont pas la meme taille, une erreur RESULTAT_ERREUR_TAILLE est renvoyee Resultat egales_marqueurs(Marqueurs *marqueurs1 , Marqueurs *marqueurs2 , Booleen *comparaison); //teste si les deux ensembles de marques sont egales //si les marqueurs n'ont pas la meme taille, une erreur RESULTAT_ERREUR_TAILLE est renvoyee Resultat cumul_marqueurs(Marqueurs *marqueurssomme , Marqueurs *marqueurs); //ajoute les marqueurs de marqueurs a ceux de marqueurssomme //si les deux marqueurs n'ont pas la meme taille, une erreur RESULTAT_ERREUR_TAILLE est renvoyee Resultat commun_marqueurs(Marqueurs *marqueurs1 , Marqueurs *marqueurs2 , Indice *commun); //place dans commun le nombre de marques communes aux deux ensembles //si leurs tailles sont differentes, une erreur RESULTAT_ERREUR_TAILLE est renvoyee Resultat affiche_marqueurs(Marqueurs marqueurs); //affiche le contenu des marqueurs /!\ DEBUG ! #endif PlanFacile-2.0/src/algo/donnees/listeperepertinent.c0000644000175000017500000001043210510305650017522 00000000000000/* * PlanFacile (Easy plan, in french) is a small tool to help people to * write a document on a particular subject. * Copyright (C) 2005 Julien BRUGUIER * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "listeperepertinent.h" Resultat creation_listeperepertinent(ListePerePertinent *listeperepertinent , Taille taille) { //cree la liste avec la taille specifiee //l'erreur RESULTAT_ERREUR_DOMAINE est renvoyee en cas de taille negative Indice indice; if(taille<0) return RESULTAT_ERREUR_DOMAINE; if((listeperepertinent->perepertinent=(PerePertinent*)(malloc(sizeof(PerePertinent)*taille)))==NULL) return RESULTAT_ERREUR_MEMOIRE; for(indice=0 ; indiceperepertinent[indice].idperepertinent=ORPHELIN; listeperepertinent->taille=taille; return RESULTAT_OK; } Resultat destruction_listeperepertinent(ListePerePertinent *listeperepertinent) { //detruit la liste free(listeperepertinent->perepertinent); return RESULTAT_OK; } Resultat ajoutidee_listeperepertinent(ListePerePertinent *listeperepertinent , Taille ajout) { //a priori inutile, mais bon //ajoute des idees dans la liste //l'erreur RESULTAT_ERREUR_DOMAINE est renvoyee en cas d'ajout negatif Indice indice; if(ajout<0) return RESULTAT_ERREUR_DOMAINE; if(ajout==0) return RESULTAT_OK; if((listeperepertinent->perepertinent=(PerePertinent*)(realloc(listeperepertinent->perepertinent,sizeof(PerePertinent)*(listeperepertinent->taille+ajout))))==NULL) return RESULTAT_ERREUR_MEMOIRE; for(indice=listeperepertinent->taille ; indicetaille+ajout ; indice++) listeperepertinent->perepertinent[indice].idperepertinent=ORPHELIN; listeperepertinent->taille += ajout; return RESULTAT_OK; } Resultat ecriturepere_listeperepertinent(ListePerePertinent *listeperepertinent , IdIdee idfils , IdIdee pere , Pertinence pertinence) { //met a jour la liste des peres pertinents si la pertinence est egale ou superieure pour ce pere, ou si //le fils etait orphelin //renvoie une erreur RESULTAT_ERREUR_DEPASSEMENT si l'idfils n'est pas correct, et RESULTAT_ERREUR_DOMAINE si le pere ou la pertinence //sont incorrects if(idfils<0) return RESULTAT_ERREUR_DEPASSEMENT; if(idfils>listeperepertinent->taille) return RESULTAT_ERREUR_DEPASSEMENT; if(pere<0) return RESULTAT_ERREUR_DOMAINE; if(pere>listeperepertinent->taille) return RESULTAT_ERREUR_DOMAINE; if(pertinence<0) return RESULTAT_ERREUR_DOMAINE; if(listeperepertinent->perepertinent[idfils].idperepertinent==ORPHELIN) { listeperepertinent->perepertinent[idfils].idperepertinent=pere; listeperepertinent->perepertinent[idfils].pertinence=pertinence; return RESULTAT_OK; } if(pertinence>=listeperepertinent->perepertinent[idfils].pertinence) { listeperepertinent->perepertinent[idfils].idperepertinent=pere; listeperepertinent->perepertinent[idfils].pertinence=pertinence; return RESULTAT_OK; } return RESULTAT_OK; } Resultat lecturepere_listeperepertinent(ListePerePertinent *listeperepertinent , IdIdee fils , Booleen *orphelin , IdIdee *pere) { //renvoie le pere le plus pertinent du fils indique //si orphelin est VRAI, le contenu de pere est indefini, sinon, sauf si pere est egal a NULL //pere contient la valeur du pere le plus pertinent //renvoie l'erreur RESULTAT_ERREUR_DEPASSEMENT si l'identificateur du fils est incorrect if(fils<0) return RESULTAT_ERREUR_DEPASSEMENT; if(fils>listeperepertinent->taille) return RESULTAT_ERREUR_DEPASSEMENT; if(listeperepertinent->perepertinent[fils].idperepertinent==ORPHELIN) { *orphelin=VRAI; return RESULTAT_OK; } *orphelin=FAUX; if(pere!=NULL) *pere=listeperepertinent->perepertinent[fils].idperepertinent; return RESULTAT_OK; } PlanFacile-2.0/src/algo/donnees/listeperepertinent.h0000644000175000017500000000515110510305650017531 00000000000000/* * PlanFacile (Easy plan, in french) is a small tool to help people to * write a document on a particular subject. * Copyright (C) 2005 Julien BRUGUIER * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __LISTEPEREPERTINENT__ #define __LISTEPEREPERTINENT__ #include #define ORPHELIN -1 typedef struct { IdIdee idperepertinent; Pertinence pertinence; } PerePertinent; typedef struct { Taille taille; //taille du tableau PerePertinent *perepertinent; //pour chaque ididee, donne l'id de l'idee parente la plus //pertinente. Si l'idee est orpheline, la pertinence est //indefinie } ListePerePertinent; Resultat creation_listeperepertinent(ListePerePertinent *listeperepertinent , Taille taille); //cree la liste avec la taille specifiee //l'erreur RESULTAT_ERREUR_DOMAINE est renvoyee en cas de taille negative Resultat destruction_listeperepertinent(ListePerePertinent *listeperepertinent); //detruit la liste Resultat ajoutidee_listeperepertinent(ListePerePertinent *listeperepertinent , Taille ajout); //a priori inutile, mais bon //ajoute des idees dans la liste //l'erreur RESULTAT_ERREUR_DOMAINE est renvoyee en cas d'ajout negatif Resultat ecriturepere_listeperepertinent(ListePerePertinent *listeperepertinent , IdIdee idfils , IdIdee pere , Pertinence pertinence); //met a jour la liste des peres pertinents si la pertinence est egale ou superieure pour ce pere, ou si //le fils etait orphelin //renvoie une erreur RESULTAT_ERREUR_DEPASSEMENT si l'idfils n'est pas correct, et RESULTAT_ERREUR_DOMAINE si le pere ou la pertinence //sont incorrects Resultat lecturepere_listeperepertinent(ListePerePertinent *listeperepertinent , IdIdee fils , Booleen *orphelin , IdIdee *pere); //renvoie le pere le plus pertinent du fils indique //si orphelin est VRAI, le contenu de pere est indefini, sinon, sauf si pere est egal a NULL //pere contient la valeur du pere le plus pertinent //renvoie l'erreur RESULTAT_ERREUR_DEPASSEMENT si l'identificateur du fils est incorrect #endif PlanFacile-2.0/src/algo/donnees/listeboucles.c0000644000175000017500000001423310510305650016275 00000000000000/* * PlanFacile (Easy plan, in french) is a small tool to help people to * write a document on a particular subject. * Copyright (C) 2005 Julien BRUGUIER * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "listeboucles.h" Resultat creation_listeboucles(ListeBoucles *listeboucles) { //cree une liste de boucles vide if((listeboucles->boucles=(Marqueurs*)(malloc(sizeof(Marqueurs)*TAILLEINIT)))==NULL) return RESULTAT_ERREUR_MEMOIRE; listeboucles->memoire=TAILLEINIT; listeboucles->taille=0; return RESULTAT_OK; } Resultat destruction_listeboucles(ListeBoucles *listeboucles) { //detruit une listeboucles et les boucles contenues DEBUTZONESECURISEE Indice indice; for(indice=0 ; indicetaille ; indice++) SECURISE(destruction_marqueurs(&(listeboucles->boucles[indice]))); free(listeboucles->boucles); FINZONESECURISEE return RESULTAT_OK; } Resultat taille_listeboucles(ListeBoucles *listeboucles , Taille *taille) { //renvoie la taille d'une liste de boucles *taille=listeboucles->taille; return RESULTAT_OK; } Resultat agrandissement_listeboucles(ListeBoucles *listeboucles , Taille ajout) { //agrandi chaque marqueur de la taille specifiee DEBUTZONESECURISEE Indice indice; for(indice=0 ; indicetaille ; indice++) SECURISE(agrandissement_marqueurs(&(listeboucles->boucles[indice]),ajout)); FINZONESECURISEE return RESULTAT_OK; } static Resultat ajoutfinvide_listeboucles(ListeBoucles *listeboucles) { //fait en sorte de laisser un emplacement disponible dans la liste Marqueurs *bouclestemp; if(listeboucles->taille==listeboucles->memoire) { //plus assez d'emplacements : on en redemande... if((bouclestemp=(Marqueurs*)(realloc(listeboucles->boucles,sizeof(Marqueurs)*(listeboucles->memoire)*MULTTAILLE)))==NULL) return RESULTAT_ERREUR_MEMOIRE; listeboucles->boucles=bouclestemp; listeboucles->memoire *= MULTTAILLE; } //la, on est surs d'avoir la place qu'il faut return RESULTAT_OK; } Resultat ajoutfin_listeboucles(ListeBoucles *listeboucles , Marqueurs *boucle) { //ajoute une boucle a la fin de la liste DEBUTZONESECURISEE SECURISE(ajoutfinvide_listeboucles(listeboucles)); listeboucles->boucles[listeboucles->taille++]=*boucle; FINZONESECURISEE return RESULTAT_OK; } Resultat insertiontriee_listeboucles(ListeBoucles *listeboucles , Marqueurs *boucle , Booleen *test) { //insere dans la liste triee par ordre d'inclusion decroissant la boucle specifiee Indice indice , indiceecrit; DEBUTZONESECURISEE *test=FAUX; for(indice=listeboucles->taille ; indice>0 ; indice--) { Booleen compare; SECURISE(egales_marqueurs(&(listeboucles->boucles[indice-1]),boucle,&compare)); if(compare==VRAI) return RESULTAT_OK; SECURISE(inclusion_marqueurs(boucle,&(listeboucles->boucles[indice-1]),&compare)); if(compare==VRAI) break; } if(indice==listeboucles->taille) { SECURISE(ajoutfin_listeboucles(listeboucles,boucle)); } else { SECURISE(ajoutfinvide_listeboucles(listeboucles)); for(indiceecrit=listeboucles->taille ; indiceecrit>indice ; indiceecrit--) listeboucles->boucles[indiceecrit]=listeboucles->boucles[indiceecrit-1]; listeboucles->taille++; SECURISE(ecriture_listeboucles(listeboucles,indice,boucle)); } *test=VRAI; FINZONESECURISEE return RESULTAT_OK; } Resultat lecture_listeboucles(ListeBoucles *listeboucles , Indice indice , Marqueurs *marqueurs) { //renvoie dans marqueurs la boucle d'indice donne //l'erreur RESULTAT_ERREUR_DEPASSEMENT est renvoyee si l'indice est incorrect if(indice<0) return RESULTAT_ERREUR_DEPASSEMENT; if(indice>=listeboucles->taille) return RESULTAT_ERREUR_DEPASSEMENT; *marqueurs=listeboucles->boucles[indice]; return RESULTAT_OK; } Resultat ecriture_listeboucles(ListeBoucles *listeboucles , Indice indice , Marqueurs *marqueurs) { //ecrit la boucle a l'indice donne //l'erreur RESULTAT_ERREUR_DEPASSEMENT est renvoyee si l'indice est incorrect if(indice<0) return RESULTAT_ERREUR_DEPASSEMENT; if(indice>=listeboucles->taille) return RESULTAT_ERREUR_DEPASSEMENT; listeboucles->boucles[indice]=*marqueurs; return RESULTAT_OK; } Resultat supprime_listeboucles(ListeBoucles *listeboucles , Indice indice) { //supprime la boucle a l'indice donne //l'erreur RESULTAT_ERREUR_DEPASSEMENT est renvoyee si l'indice est incorrect DEBUTZONESECURISEE if(indice<0) return RESULTAT_ERREUR_DEPASSEMENT; if(indice>=listeboucles->taille) return RESULTAT_ERREUR_DEPASSEMENT; SECURISE(destruction_marqueurs(&(listeboucles->boucles[indice]))); listeboucles->taille--; for( ; indicetaille ; indice++) listeboucles->boucles[indice]=listeboucles->boucles[indice+1]; FINZONESECURISEE return RESULTAT_OK; } Resultat miseajourtopologie_listeboucles(ListeBoucles *listeboucles , IdIdee ideeboucle , IdIdee ideenouvelle , Indice *compteur) { //met a jour la topologie en remplacant ideeboucle dans les boucles ou il est present //par ideenouvelle //compteur contient le nombre de fois ou ideenouvelle a ete ajoutee //renvoie une erreur RESULTAT_ERREUR_DEPASSEMENT en cas d'indice incorrects Indice indice; DEBUTZONESECURISEE *compteur=0; for(indice=0 ; indicetaille ; indice++) { Booleen test; SECURISE(verification_marqueurs(&(listeboucles->boucles[indice]),ideeboucle,&test)); if(test==VRAI) { SECURISE(decoche_marqueurs(&(listeboucles->boucles[indice]),ideeboucle)); SECURISE(verification_marqueurs(&(listeboucles->boucles[indice]),ideenouvelle,&test)); if(test==FAUX) (*compteur)++; SECURISE(coche_marqueurs(&(listeboucles->boucles[indice]),ideenouvelle)); } } FINZONESECURISEE return RESULTAT_OK; } PlanFacile-2.0/src/algo/donnees/listeboucles.h0000644000175000017500000000637010510305650016305 00000000000000/* * PlanFacile (Easy plan, in french) is a small tool to help people to * write a document on a particular subject. * Copyright (C) 2005 Julien BRUGUIER * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __LISTEBOUCLES__ #define __LISTEBOUCLES__ #include #include #include #define TAILLEINIT 5 #define MULTTAILLE 2 typedef struct { Taille memoire; //nombre d'elements pris en memoire Taille taille; //nombre d'elements reellement utilises Marqueurs *boucles; //Les boucles sont representees par des marqueurs } ListeBoucles; Resultat creation_listeboucles(ListeBoucles *listeboucles); //cree une liste de boucles vide Resultat destruction_listeboucles(ListeBoucles *listeboucles); //detruit une listeboucles et les boucles contenues Resultat taille_listeboucles(ListeBoucles *listeboucles , Taille *taille); //renvoie la taille d'une liste de boucles Resultat agrandissement_listeboucles(ListeBoucles *listeboucles , Taille ajout); //agrandi chaque marqueurs de la taille specifiee //les parcours ne necessitants pas cette operations sont laisses inchanges Resultat ajoutfin_listeboucles(ListeBoucles *listeboucles , Marqueurs *boucle); //ajoute une boucle a la fin de la liste Resultat insertiontriee_listeboucles(ListeBoucles *listeboucles , Marqueurs *boucle , Booleen *test); //insere dans la liste triee par ordre d'inclusion decroissant la boucle specifiee //test est mis a VRAI si la boucle est effectivement inseree, et a FAUX dans le cas contraire Resultat lecture_listeboucles(ListeBoucles *listeboucles , Indice indice , Marqueurs *marqueurs); //renvoie dans marqueurs la boucle d'indice donne et/ou la liste des noeuds //pour cela, il suffit de passer a la fonction un pointeur non NULL //l'erreur RESULTAT_ERREUR_DEPASSEMENT est renvoyee si l'indice est incorrect Resultat ecriture_listeboucles(ListeBoucles *listeboucles , Indice indice , Marqueurs *marqueurs); //ecrit la boucle a l'indice donne //l'erreur RESULTAT_ERREUR_DEPASSEMENT est renvoyee si l'indice est incorrect Resultat supprime_listeboucles(ListeBoucles *listeboucles , Indice indice); //supprime la boucle a l'indice donne //l'erreur RESULTAT_ERREUR_DEPASSEMENT est renvoyee si l'indice est incorrect Resultat miseajourtopologie_listeboucles(ListeBoucles *listeboucles , IdIdee ideeboucle , IdIdee ideenouvelle , Indice *compteur); //met a jour la topologie en remplacant ideeboucle dans les boucles ou il est present //par ideenouvelle //compteur contient le nombre de fois ou ideenouvelle a ete ajoutee //renvoie une erreur RESULTAT_ERREUR_DEPASSEMENT en cas d'indice incorrects #endif PlanFacile-2.0/src/algo/donnees/contenu.c0000644000175000017500000000711110510305650015250 00000000000000/* * PlanFacile (Easy plan, in french) is a small tool to help people to * write a document on a particular subject. * Copyright (C) 2005 Julien BRUGUIER * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "contenu.h" Resultat creation_contenu(Contenu *contenu) { //creation d'un contenu vide if((contenu->sections=(PSection*)(malloc(sizeof(PSection)*TAILLEINIT)))==NULL) return RESULTAT_ERREUR_MEMOIRE; contenu->memoire=TAILLEINIT; contenu->taille=0; return RESULTAT_OK; } Resultat destruction_contenu(Contenu *contenu) { //detruit le contenu free(contenu->sections); return RESULTAT_OK; } Resultat taille_contenu(Contenu *contenu , Taille *taille) { //renvoie le nombre d'elements du contenu *taille=contenu->taille; return RESULTAT_OK; } static Resultat ajoutfinvide_contenu(Contenu *contenu) { //fait en sorte de laisser un emplacement disponible dans la liste PSection *sectionstemp; if(contenu->taille==contenu->memoire) { //plus assez d'emplacements : on en redemande... if((sectionstemp=(PSection*)(realloc(contenu->sections,sizeof(PSection)*(contenu->memoire)*MULTTAILLE)))==NULL) return RESULTAT_ERREUR_MEMOIRE; contenu->sections=sectionstemp; contenu->memoire *= MULTTAILLE; } //la, on est surs d'avoir la place qu'il faut return RESULTAT_OK; } Resultat ajoutsection_contenu(Contenu *contenu , PSection section) { //ajoute une section a la fin du contenu DEBUTZONESECURISEE SECURISE(ajoutfinvide_contenu(contenu)); contenu->sections[contenu->taille++]=section; FINZONESECURISEE return RESULTAT_OK; } Resultat echange_contenu(Contenu *contenu , Indice indice1 , Indice indice2) { //echange les deux sections placees aux indices indiques //renvoie RESULTAT_ERREUR_DEPASSEMENT si un des indices est incorrect PSection sectiontemp; if(indice1<0) return RESULTAT_ERREUR_DEPASSEMENT; if(indice1>=contenu->taille) return RESULTAT_ERREUR_DEPASSEMENT; if(indice2<0) return RESULTAT_ERREUR_DEPASSEMENT; if(indice2>=contenu->taille) return RESULTAT_ERREUR_DEPASSEMENT; sectiontemp=contenu->sections[indice1]; contenu->sections[indice1]=contenu->sections[indice2]; contenu->sections[indice2]=sectiontemp; return RESULTAT_OK; } Resultat lecture_contenu(Contenu *contenu , Indice indice , PSection *section) { //place la valeur de la section dans le pointeur //renvoie RESULTAT_ERREUR_DEPASSEMENT si l'indice est incorrect if(indice<0) return RESULTAT_ERREUR_DEPASSEMENT; if(indice>=contenu->taille) return RESULTAT_ERREUR_DEPASSEMENT; *section=contenu->sections[indice]; return RESULTAT_OK; } Resultat suppression_contenu(Contenu *contenu , Indice indice) { //supprime le lien sur la section dans le contenu //renvoie RESULTAT_ERREUR_DEPASSEMENT si l'indice est incorrect if(indice<0) return RESULTAT_ERREUR_DEPASSEMENT; if(indice>=contenu->taille) return RESULTAT_ERREUR_DEPASSEMENT; contenu->taille--; for( ; indicetaille ; indice++) contenu->sections[indice]=contenu->sections[indice+1]; return RESULTAT_OK; } PlanFacile-2.0/src/algo/donnees/contenu.h0000644000175000017500000000404410510305650015257 00000000000000/* * PlanFacile (Easy plan, in french) is a small tool to help people to * write a document on a particular subject. * Copyright (C) 2005 Julien BRUGUIER * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __CONTENU__ #define __CONTENU__ #include #define TAILLEINIT 5 #define MULTTAILLE 2 typedef struct section* PSection; typedef struct contenu { Taille memoire; //taille prise en memoire Taille taille; //taille reellement prise PSection *sections; } Contenu; Resultat creation_contenu(Contenu *contenu); //creation d'un contenu vide Resultat destruction_contenu(Contenu *contenu); //detruit le contenu Resultat taille_contenu(Contenu *contenu , Taille *taille); //renvoie le nombre d'elements du contenu Resultat ajoutsection_contenu(Contenu *contenu , PSection section); //ajoute une section a la fin du contenu Resultat echange_contenu(Contenu *contenu , Indice indice1 , Indice indice2); //echange les deux sections placees aux indices indiques //renvoie RESULTAT_ERREUR_DEPASSEMENT si un des indices est incorrect Resultat lecture_contenu(Contenu *contenu , Indice indice , PSection *section); //place la valeur de la section dans le pointeur //renvoie RESULTAT_ERREUR_DEPASSEMENT si l'indice est incorrect Resultat suppression_contenu(Contenu *contenu , Indice indice); //supprime le lien sur la section dans le contenu //renvoie RESULTAT_ERREUR_DEPASSEMENT si l'indice est incorrect #endif PlanFacile-2.0/src/algo/donnees/Makefile.am0000644000175000017500000000102610510305650015464 00000000000000INCLUDES=-I${top_builddir} -I${top_srcdir} noinst_LTLIBRARIES=libalgodonnees.la libalgodonnees_la_SOURCES=compteurboucles.c compteurboucles.h contenu.c contenu.h graphe.c graphe.h idee.c idee.h liens.c liens.h listeboucles.c listeboucles.h listedependence.c listedependence.h listeidees.c listeidees.h listeperepertinent.c listeperepertinent.h marqueurs.c marqueurs.h parcours.c parcours.h reference.c reference.h relations.c relations.h section.c section.h libalgodonnees_la_LIBADD= libalgodonnees_la_LDFLAGS=-no-undefined -module PlanFacile-2.0/src/algo/donnees/Makefile.in0000644000175000017500000003547010625116332015513 00000000000000# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/algo/donnees DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libalgodonnees_la_DEPENDENCIES = am_libalgodonnees_la_OBJECTS = compteurboucles.lo contenu.lo graphe.lo \ idee.lo liens.lo listeboucles.lo listedependence.lo \ listeidees.lo listeperepertinent.lo marqueurs.lo parcours.lo \ reference.lo relations.lo section.lo libalgodonnees_la_OBJECTS = $(am_libalgodonnees_la_OBJECTS) libalgodonnees_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libalgodonnees_la_LDFLAGS) $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libalgodonnees_la_SOURCES) DIST_SOURCES = $(libalgodonnees_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DOCDIR = @DOCDIR@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STDDEFSDIR = @STDDEFSDIR@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ INCLUDES = -I${top_builddir} -I${top_srcdir} noinst_LTLIBRARIES = libalgodonnees.la libalgodonnees_la_SOURCES = compteurboucles.c compteurboucles.h contenu.c contenu.h graphe.c graphe.h idee.c idee.h liens.c liens.h listeboucles.c listeboucles.h listedependence.c listedependence.h listeidees.c listeidees.h listeperepertinent.c listeperepertinent.h marqueurs.c marqueurs.h parcours.c parcours.h reference.c reference.h relations.c relations.h section.c section.h libalgodonnees_la_LIBADD = libalgodonnees_la_LDFLAGS = -no-undefined -module all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/algo/donnees/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu src/algo/donnees/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libalgodonnees.la: $(libalgodonnees_la_OBJECTS) $(libalgodonnees_la_DEPENDENCIES) $(libalgodonnees_la_LINK) $(libalgodonnees_la_OBJECTS) $(libalgodonnees_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/compteurboucles.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/contenu.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/graphe.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/idee.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liens.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/listeboucles.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/listedependence.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/listeidees.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/listeperepertinent.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/marqueurs.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parcours.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reference.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/relations.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/section.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-exec-am: install-html: install-html-am install-info: install-info-am install-man: install-pdf: install-pdf-am install-ps: install-ps-am installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: PlanFacile-2.0/src/algo/donnees/idee.c0000644000175000017500000000234610510305650014510 00000000000000/* * PlanFacile (Easy plan, in french) is a small tool to help people to * write a document on a particular subject. * Copyright (C) 2005 Julien BRUGUIER * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "idee.h" Resultat creation_idee(Idee *idee , TypeIdee type , Indice manquante , IdIdee generique) { //cree une idee idee->type=type; idee->manquante=manquante; idee->generique=generique; return RESULTAT_OK; } Resultat destruction_idee(Idee *idee) { //detruit l'idee return RESULTAT_OK; } //les operations d'ecriture ne sont pas permises... //la lecture se fera directement sur la structure PlanFacile-2.0/src/algo/donnees/idee.h0000644000175000017500000000264310510305650014515 00000000000000/* * PlanFacile (Easy plan, in french) is a small tool to help people to * write a document on a particular subject. * Copyright (C) 2005 Julien BRUGUIER * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __IDEE__ #define __IDEE__ #include #define INDICE_IDEE_INVALIDE -1 typedef struct { TypeIdee type; //Type de l'idee. Indice manquante; //Indice dans le cas //ou l'idee est manquante. IdIdee generique; //Identifiant de l'idee parente //dans le cas ou l'idee est //generique. } Idee; Resultat creation_idee(Idee *idee , TypeIdee type , Indice manquante , IdIdee generique); //cree une idee Resultat destruction_idee(Idee *idee); //detruit l'idee //les operations d'ecriture ne sont pas permises... //la lecture se fera directement sur la structure #endif PlanFacile-2.0/src/algo/donnees/relations.c0000644000175000017500000001234410510305650015601 00000000000000/* * PlanFacile (Easy plan, in french) is a small tool to help people to * write a document on a particular subject. * Copyright (C) 2005 Julien BRUGUIER * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "relations.h" Resultat creation_relations(Relations *relations , Taille taille) { //cree une table de relations vide a la taille demandee if(taille<0) return RESULTAT_ERREUR_DOMAINE; Indice indice , indiceecrit; if((relations->relations=(Pertinence**)(malloc(sizeof(Pertinence*)*taille)))==NULL) return RESULTAT_ERREUR_MEMOIRE; for(indice=0 ; indicerelations[indice]=(Pertinence*)(malloc(sizeof(Pertinence)*taille)))==NULL) return RESULTAT_ERREUR_MEMOIRE; for(indiceecrit=0 ; indiceecritrelations[indice][indiceecrit]=SANSRELATION; } relations->taille=taille; return RESULTAT_OK; } Resultat destruction_relations(Relations *relations) { //destruction des relations Indice indice; for(indice=0 ; indicetaille ; indice++) free(relations->relations[indice]); free(relations->relations); return RESULTAT_OK; } Resultat ajoutidees_relations(Relations *relations , Taille ajout) { //ajoute des relations dans la table. //si taille est negative l'erreur RESULTAT_ERREUR_DOMAINE est renvoyee Indice indice , indiceecrit; Taille nouvelletaille; if(ajout<0) return RESULTAT_ERREUR_DOMAINE; if(ajout==0) return RESULTAT_OK; nouvelletaille=relations->taille+ajout; if((relations->relations=(Pertinence**)(realloc(relations->relations,sizeof(Pertinence*)*nouvelletaille)))==NULL) return RESULTAT_ERREUR_MEMOIRE; for(indice=0 ; indicetaille ; indice++) { if((relations->relations[indice]=(Pertinence*)(realloc(relations->relations[indice],sizeof(Pertinence)*nouvelletaille)))==NULL) return RESULTAT_ERREUR_MEMOIRE; for(indiceecrit=relations->taille ; indiceecritrelations[indice][indiceecrit]=SANSRELATION; } for(indice=relations->taille ; indicerelations[indice]=(Pertinence*)(malloc(sizeof(Pertinence)*nouvelletaille)))==NULL) return RESULTAT_ERREUR_MEMOIRE; for(indiceecrit=0 ; indiceecritrelations[indice][indiceecrit]=SANSRELATION; } relations->taille=nouvelletaille; return RESULTAT_OK; } Resultat ajoutrelation_relations(Relations *relations , IdIdee ideesource , IdIdee ideedestination , Pertinence pertinence) { //ajoute une relation dans la table //si un des indices est incorrect, l'erreur RESULTAT_ERREUR_DEPASSEMENT est renvoyee //si la pertinence est negative, l'erreur RESULTAT_ERREUR_DOMAINE est renvoyee if(pertinence<0) return RESULTAT_ERREUR_DOMAINE; if(ideesource<0) return RESULTAT_ERREUR_DEPASSEMENT; if(ideesource>=relations->taille) return RESULTAT_ERREUR_DEPASSEMENT; if(ideedestination<0) return RESULTAT_ERREUR_DEPASSEMENT; if(ideedestination>=relations->taille) return RESULTAT_ERREUR_DEPASSEMENT; if(relations->relations[ideesource][ideedestination]==SANSRELATION) relations->relations[ideesource][ideedestination]=pertinence; else relations->relations[ideesource][ideedestination] += pertinence; return RESULTAT_OK; } Resultat suppressionrelation_relations(Relations *relations , IdIdee ideesource , IdIdee ideedestination) { //supprime une relation //renvoie RESULTAT_ERREUR_DEPASSEMENT en cas d'indice incorrect if(ideesource<0) return RESULTAT_ERREUR_DEPASSEMENT; if(ideesource>=relations->taille) return RESULTAT_ERREUR_DEPASSEMENT; if(ideedestination<0) return RESULTAT_ERREUR_DEPASSEMENT; if(ideedestination>=relations->taille) return RESULTAT_ERREUR_DEPASSEMENT; relations->relations[ideesource][ideedestination]=SANSRELATION; return RESULTAT_OK; } Resultat testrelation_relations(Relations *relations , IdIdee ideesource , IdIdee ideedestination , Booleen *relation , Pertinence *pertinence) { //place VRAI dans relation si la relation existe et fixe pertinence avec la valeur de pertinence, //sauf si le pointeur est NULL //place FAUX dans relation si la relation n'existe pas. dans ce cas, pertinence n'est pas touchee if(ideesource<0) return RESULTAT_ERREUR_DEPASSEMENT; if(ideesource>=relations->taille) return RESULTAT_ERREUR_DEPASSEMENT; if(ideedestination<0) return RESULTAT_ERREUR_DEPASSEMENT; if(ideedestination>=relations->taille) return RESULTAT_ERREUR_DEPASSEMENT; if(relations->relations[ideesource][ideedestination]==SANSRELATION) *relation=FAUX; else { if(pertinence!=NULL) *pertinence=relations->relations[ideesource][ideedestination]; *relation=VRAI; } return RESULTAT_OK; } PlanFacile-2.0/src/algo/donnees/relations.h0000644000175000017500000000455110510305650015607 00000000000000/* * PlanFacile (Easy plan, in french) is a small tool to help people to * write a document on a particular subject. * Copyright (C) 2005 Julien BRUGUIER * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __RELATIONS__ #define __RELATIONS__ #include #define SANSRELATION -1 typedef struct { Taille taille; Pertinence **relations; } Relations; //relations est dans le sens [source][destination] //la taille sera lue (et uniquement lu directement) Resultat creation_relations(Relations *relations , Taille taille); //cree une table de relations vide a la taille demandee Resultat destruction_relations(Relations *relations); //destruction des relations Resultat ajoutidees_relations(Relations *relations , Taille ajout); //ajoute des relations dans la table. //si taille est negative l'erreur RESULTAT_ERREUR_DOMAINE est renvoyee Resultat ajoutrelation_relations(Relations *relations , IdIdee ideesource , IdIdee ideedestination , Pertinence pertinence); //ajoute une relation dans la table //si un des indices est incorrect, l'erreur RESULTAT_ERREUR_DEPASSEMENT est renvoyee //si la pertinence est negative, l'erreur RESULTAT_ERREUR_DOMAINE est renvoyee Resultat suppressionrelation_relations(Relations *relations , IdIdee ideesource , IdIdee ideedestination); //supprime une relation //renvoie RESULTAT_ERREUR_DEPASSEMENT en cas d'indice incorrect Resultat testrelation_relations(Relations *relations , IdIdee ideesource , IdIdee ideedestination , Booleen *relation , Pertinence *pertinence); //place VRAI dans relation si la relation existe et fixe pertinence avec la valeur de pertinence, //sauf si le pointeur est NULL //place FAUX dans relation si la relation n'existe pas. dans ce cas, pertinence n'est pas touchee #endif PlanFacile-2.0/src/algo/donnees/listedependence.c0000644000175000017500000000463210510305650016735 00000000000000/* * PlanFacile (Easy plan, in french) is a small tool to help people to * write a document on a particular subject. * Copyright (C) 2005 Julien BRUGUIER * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "listedependence.h" Resultat creation_listedependences(ListeDependences *listedependences) { //cree une liste de dependences... //bon, j'admets, une fonction pour ca, c'est se foutre de la gueule du monde. //mais ca fait plus propre *listedependences=NULL; return RESULTAT_OK; } Resultat destruction_listedependences(ListeDependences *listedependences) { //detruit la liste des dependences DEBUTZONESECURISEE if(*listedependences!=NULL) SECURISE(destruction_listedependences(&((*listedependences)->precedente))); free(*listedependences); FINZONESECURISEE return RESULTAT_OK; } Resultat empiledependence_listedependences(ListeDependences *listedependences , IdIdee idideesource , IdIdee idideedestination , Pertinence pertinence) { //empile une dependence MaillonDependences *maillon; if((maillon=(MaillonDependences*)(malloc(sizeof(MaillonDependences))))==NULL) return RESULTAT_ERREUR_MEMOIRE; maillon->idideesource=idideesource; maillon->idideedestination=idideedestination; maillon->pertinence=pertinence; maillon->precedente=*listedependences; *listedependences=maillon; return RESULTAT_OK; } Resultat depiledependence_listedependences(ListeDependences *listedependences , IdIdee *idideesource , IdIdee *idideedestination , Pertinence *pertinence) { //depile une dependence MaillonDependences *maillon=*listedependences; *listedependences=maillon->precedente; *idideesource=maillon->idideesource; *idideedestination=maillon->idideedestination; *pertinence=maillon->pertinence; free(maillon); return RESULTAT_OK; } //empile une dependence //depile une dependence PlanFacile-2.0/src/algo/donnees/listedependence.h0000644000175000017500000000360110510305650016735 00000000000000/* * PlanFacile (Easy plan, in french) is a small tool to help people to * write a document on a particular subject. * Copyright (C) 2005 Julien BRUGUIER * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __LISTEDEPENDENCES__ #define __LISTEDEPENDENCES__ #include #define ILLIMITE -1 typedef struct maillondependence { IdIdee idideesource; IdIdee idideedestination; Pertinence pertinence; struct maillondependence *precedente; //attention, les dependences sont empilees a l'envers... } MaillonDependences; typedef MaillonDependences* ListeDependences; Resultat creation_listedependences(ListeDependences *listedependences); //cree une liste de dependences... //bon, j'admets, une fonction pour ca, c'est se foutre de la gueule du monde. //mais ca fait plus propre Resultat destruction_listedependences(ListeDependences *listedependences); //detruit la liste des dependences Resultat empiledependence_listedependences(ListeDependences *listedependences , IdIdee idideesource , IdIdee idideedestination , Pertinence pertinence); //empile une dependence Resultat depiledependence_listedependences(ListeDependences *listedependences , IdIdee *idideesource , IdIdee *idideedestination , Pertinence *pertinence); //depile une dependence #endif PlanFacile-2.0/src/algo/donnees/parcours.c0000644000175000017500000000544110510305650015437 00000000000000/* * PlanFacile (Easy plan, in french) is a small tool to help people to * write a document on a particular subject. * Copyright (C) 2005 Julien BRUGUIER * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "parcours.h" Resultat creation_parcours(Parcours *parcours , Taille taille) { //cree un parcours vide //si taille est negatif, une erreur RESULTAT_ERREUR_DOMAINE est renvoyee if(taille<0) return RESULTAT_ERREUR_DOMAINE; if((parcours->ididee=(IdIdee*)(malloc(sizeof(IdIdee)*taille)))==NULL) return RESULTAT_ERREUR_MEMOIRE; parcours->memoire=taille; parcours->taille=0; return RESULTAT_OK; } Resultat destruction_parcours(Parcours *parcours) { //supprime le parcours free(parcours->ididee); return RESULTAT_OK; } Resultat empileididee_parcours(Parcours *parcours , IdIdee ididee) { //empile un identificateur d'idee //renvoie RESULTAT_ERREUR_DEPASSEMENT si on depasse la taille maximale if(parcours->memoire==parcours->taille) return RESULTAT_ERREUR_DEPASSEMENT; parcours->ididee[parcours->taille++]=ididee; return RESULTAT_OK; } Resultat depileididee_parcours(Parcours *parcours) { //libere le dernier identificateur d'idee empile //renvoie RESULTAT_ERREUR_DEPASSEMENT si il n'y a plus d'identificateur a depiler if(parcours->taille==0) return RESULTAT_ERREUR_DEPASSEMENT; parcours->taille--; return RESULTAT_OK; } Resultat marqueboucle_parcours(Parcours *parcours , IdIdee idideedepart , Marqueurs *boucle) { //place a vrai les marques des idees formant la boucle dont idideedepart est le depart //renvoie RESULTAT_ERREUR_NONTROUVE si aucune boucle n'est detectee Indice indice; DEBUTZONESECURISEE for(indice=parcours->taille-1 ; indice>=0 ; indice--) { SECURISE(coche_marqueurs(boucle,parcours->ididee[indice])); if(parcours->ididee[indice]==idideedepart) return RESULTAT_OK; } FINZONESECURISEE return RESULTAT_ERREUR_NONTROUVE; } Resultat affiche_parcours(Parcours parcours) { //affiche le contenu d'un parcours /!\ DEBUG Indice indice; printf("Parcours : %d/%d parcourus :",parcours.taille,parcours.memoire); for(indice=0 ; indice #include typedef struct { Taille memoire; //taille en memoire Taille taille; //nombre de places prises IdIdee *ididee; //les ididees parcourus } Parcours; Resultat creation_parcours(Parcours *parcours , Taille taille); //cree un parcours vide //si taille est negatif, une erreur RESULTAT_ERREUR_DOMAINE est renvoyee Resultat destruction_parcours(Parcours *parcours); //supprime le parcours Resultat empileididee_parcours(Parcours *parcours , IdIdee ididee); //empile un identificateur d'idee //renvoie RESULTAT_ERREUR_DEPASSEMENT si on depasse la taille maximale Resultat depileididee_parcours(Parcours *parcours); //libere le dernier identificateur d'idee empile //renvoie RESULTAT_ERREUR_DEPASSEMENT si il n'y a plus d'identificateur a depiler Resultat marqueboucle_parcours(Parcours *parcours , IdIdee idideedepart , Marqueurs *boucle); //place a vrai les marques des idees formant la boucle dont idideedepart est le depart //renvoie RESULTAT_ERREUR_NONTROUVE si aucune boucle n'est detectee Resultat affiche_parcours(Parcours parcours); //affiche le contenu d'un parcours /!\ DEBUG #endif PlanFacile-2.0/src/algo/donnees/listeidees.c0000644000175000017500000000625310510305650015735 00000000000000/* * PlanFacile (Easy plan, in french) is a small tool to help people to * write a document on a particular subject. * Copyright (C) 2005 Julien BRUGUIER * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "listeidees.h" Resultat creation_listeidees(ListeIdees *listeidees) { //cree une liste d'idees if((listeidees->idees=(Idee*)(malloc(sizeof(Idee)*TAILLEINIT)))==NULL) return RESULTAT_ERREUR_MEMOIRE; listeidees->memoire=TAILLEINIT; listeidees->taille=0; return RESULTAT_OK; } Resultat destruction_listeidees(ListeIdees *listeidees) { //detruit la liste d'idees et les idees contenues DEBUTZONESECURISEE Indice indice; for(indice=0 ; indicetaille ; indice++) SECURISE(destruction_idee(&(listeidees->idees[indice]))); free(listeidees->idees); FINZONESECURISEE return RESULTAT_OK; } static Resultat ajoutfinvide_listeidees(ListeIdees *listeidees) { //fait en sorte de laisser un emplacement disponible dans la liste Idee *ideestemp; if(listeidees->taille==listeidees->memoire) { //plus assez d'emplacements : on en redemande... if((ideestemp=(Idee*)(realloc(listeidees->idees,sizeof(Idee)*(listeidees->memoire)*MULTTAILLE)))==NULL) return RESULTAT_ERREUR_MEMOIRE; listeidees->idees=ideestemp; listeidees->memoire *= MULTTAILLE; } //la, on est surs d'avoir la place qu'il faut return RESULTAT_OK; } Resultat taille_listeidees(ListeIdees *listeidees , Taille *taille) { //renvoie la taille de la liste *taille=listeidees->taille; return RESULTAT_OK; } Resultat ajoutidee_listeidees(ListeIdees *listeidees , Idee idee) { //ajoute une idee a la liste DEBUTZONESECURISEE SECURISE(ajoutfinvide_listeidees(listeidees)); listeidees->idees[listeidees->taille++]=idee; FINZONESECURISEE return RESULTAT_OK; } Resultat lectureidee_listeidees(ListeIdees *listeidees , IdIdee ididee , Idee *idee) { //place dans la variable idee la valeur de l'idee contenue a l'emplacement ididee //si l'indice est incorrect, une erreur RESULTAT_ERREUR_DEPASSEMENT est renvoyee if(ididee<0) return RESULTAT_ERREUR_DEPASSEMENT; if(ididee>=listeidees->taille) return RESULTAT_ERREUR_DEPASSEMENT; *idee=listeidees->idees[ididee]; return RESULTAT_OK; } Resultat ecritureidee_listeidees(ListeIdees *listeidees , IdIdee ididee , Idee idee) { //ecrit l'idee a l'emplacement ididee dans listeidees //si l'indice est incorrect, une erreur RESULTAT_ERREUR_DEPASSEMENT est renvoyee if(ididee<0) return RESULTAT_ERREUR_DEPASSEMENT; if(ididee>=listeidees->taille) return RESULTAT_ERREUR_DEPASSEMENT; listeidees->idees[ididee]=idee; return RESULTAT_OK; } PlanFacile-2.0/src/algo/donnees/listeidees.h0000644000175000017500000000374610510305650015746 00000000000000/* * PlanFacile (Easy plan, in french) is a small tool to help people to * write a document on a particular subject. * Copyright (C) 2005 Julien BRUGUIER * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __LISTEIDEES__ #define __LISTEIDEES__ #include #include #define TAILLEINIT 5 #define MULTTAILLE 2 typedef struct { Taille memoire; //place prise en memoire Taille taille; //nombre d'elements utilises Idee *idees; //vecteur d'idees } ListeIdees; Resultat creation_listeidees(ListeIdees *listeidees); //cree une liste d'idees Resultat destruction_listeidees(ListeIdees *listeidees); //detruit la liste d'idees et les idees contenues Resultat taille_listeidees(ListeIdees *listeidees , Taille *taille); //renvoie la taille de la liste Resultat ajoutidee_listeidees(ListeIdees *listeidees , Idee idee); //ajoute une idee a la liste Resultat lectureidee_listeidees(ListeIdees *listeidees , IdIdee ididee , Idee *idee); //place dans la variable idee la valeur de l'idee contenue a l'emplacement ididee //si l'indice est incorrect, une erreur RESULTAT_ERREUR_DEPASSEMENT est renvoyee Resultat ecritureidee_listeidees(ListeIdees *listeidees , IdIdee ididee , Idee idee); //ecrit l'idee a l'emplacement ididee dans listeidees //si l'indice est incorrect, une erreur RESULTAT_ERREUR_DEPASSEMENT est renvoyee #endif PlanFacile-2.0/src/algo/Makefile.am0000644000175000017500000000010210510305651014024 00000000000000INCLUDES=-I${top_builddir} -I${top_srcdir} SUBDIRS=algo donnees PlanFacile-2.0/src/algo/Makefile.in0000644000175000017500000003425510625116332014060 00000000000000# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/algo DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DOCDIR = @DOCDIR@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STDDEFSDIR = @STDDEFSDIR@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ INCLUDES = -I${top_builddir} -I${top_srcdir} SUBDIRS = algo donnees all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/algo/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu src/algo/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ (cd $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ am__remove_distdir=: \ am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-exec-am: install-html: install-html-recursive install-info: install-info-recursive install-man: install-pdf: install-pdf-recursive install-ps: install-ps-recursive installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ install-strip .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: PlanFacile-2.0/src/messages/0000777000175000017500000000000010625124577012765 500000000000000PlanFacile-2.0/src/messages/messages/0000777000175000017500000000000010625124572014567 500000000000000PlanFacile-2.0/src/messages/messages/messages/0000777000175000017500000000000010625124576016402 500000000000000PlanFacile-2.0/src/messages/messages/messages/de/0000777000175000017500000000000010625124572016766 500000000000000PlanFacile-2.0/src/messages/messages/messages/de/Makefile.am0000644000175000017500000000005410510305647020732 00000000000000INCLUDES=-I${top_builddir} -I${top_srcdir} PlanFacile-2.0/src/messages/messages/messages/de/Makefile.in0000644000175000017500000002143310625116340020744 00000000000000# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/messages/messages/messages/de DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DOCDIR = @DOCDIR@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STDDEFSDIR = @STDDEFSDIR@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ INCLUDES = -I${top_builddir} -I${top_srcdir} all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/messages/messages/messages/de/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu src/messages/messages/messages/de/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-exec-am: install-html: install-html-am install-info: install-info-am install-man: install-pdf: install-pdf-am install-ps: install-ps-am installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: PlanFacile-2.0/src/messages/messages/messages/en/0000777000175000017500000000000010625124573017001 500000000000000PlanFacile-2.0/src/messages/messages/messages/en/iso/0000777000175000017500000000000010625124573017573 500000000000000PlanFacile-2.0/src/messages/messages/messages/en/iso/Makefile.am0000644000175000017500000000010110510305646021526 00000000000000INCLUDES=-I${top_srcdir} -I${top_builddir} EXTRA_DIST=iso.plflg PlanFacile-2.0/src/messages/messages/messages/en/iso/Makefile.in0000644000175000017500000002147610625116340021557 00000000000000# Makefile.in generated by automake 1.10 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/messages/messages/messages/en/iso DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DOCDIR = @DOCDIR@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STDDEFSDIR = @STDDEFSDIR@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ INCLUDES = -I${top_srcdir} -I${top_builddir} EXTRA_DIST = iso.plflg all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/messages/messages/messages/en/iso/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu src/messages/messages/messages/en/iso/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-exec-am: install-html: install-html-am install-info: install-info-am install-man: install-pdf: install-pdf-am install-ps: install-ps-am installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: PlanFacile-2.0/src/messages/messages/messages/en/iso/iso.plflg0000644000175000017500000003673010547031414021332 00000000000000/ / PlanFacile (Easy plan, in french) is a small tool to help people to / write a document on a particular subject. / Copyright (C) 2005 Julien BRUGUIER / / This program is free software; you can redistribute it and/or modify / it under the terms of the GNU General Public License as published by / the Free Software Foundation; version 2 of the License. / / This program is distributed in the hope that it will be useful, / but WITHOUT ANY WARRANTY; without even the implied warranty of / MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the / GNU General Public License for more details. / / You should have received a copy of the GNU General Public License / along with this program; if not, write to the Free Software / Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA / #charset{CHARSET_ISO}{ISO-8859} #mesg{MESSAGE_ERREUR} Error# # # # #end #mesg{MESSAGE_AVERTISSEMENT} Warning# # #end #mesg{MESSAGE_LOCALISATION} # # # # # # # # # # # # in file #1{s}, line #2{d} #end #mesg{MESSAGE_INCLUSION} # # # # # # # # # # # # included from file #1{s}, line #2{d} #end #mesg{MESSAGE_VIRGULE} ,\n #end #mesg{MESSAGE_POINT} .\n #end #mesg{MESSAGE_DOUBLE_POINTS} # :# #end #mesg{MESSAGE_MEMOIRE_INSUFFISANTE} Insufficient memory #end #mesg{MESSAGE_OPTION_LIGNE_COMMANDE} Wrong option -#1{c}. Use -h option to get help on the available options #end #mesg{MESSAGE_UTILISATEUR} #1{s} #end #mesg{MESSAGE_COMMANDE_INCORRECTE} Misplaced #1{s}# command #end #mesg{MESSAGE_COMMANDE_TEXTE_INCORRECTE} Misplaced text command #end #mesg{MESSAGE_COMMANDE_ECHAPPEMENT_INCORRECTE} Misplaced ###1{c}# command #end #mesg{MESSAGE_COMMANDE_MACRO_INCORRECTE} Misplaced ###1{s}# command #end #mesg{MESSAGE_COMMANDE_PARAMETRE_INCORRECTE} Misplaced ###1{d}# command #end #mesg{MESSAGE_OPTION_DANS_MACRO} Option #1{s}# defined in the macro #2{s} #end #mesg{MESSAGE_REDEFINITION_MACRO} Macro #1{s}# redefined #end #mesg{MESSAGE_MACRO_INCONNUE} Undefined macro #1{s}# call #end #mesg{MESSAGE_RECURSIVITE_MACRO} Recursive call of macro #1{s} #end #mesg{MESSAGE_PARAMETRES_MACRO} Macro #1{s}# defined with #3{d}# parameter(s), but used with #2{d} #end #mesg{MESSAGE_ERREUR_SYNTAXE} Syntax error near #1{s}# token #end #mesg{MESSAGE_RECURSIVITE_FICHIER} Recursive inclusion of #1{s}# file #end #mesg{MESSAGE_UTILISATION_SORTIE} Output file already specified #end #mesg{MESSAGE_OUVERTURE_SORTIE} Impossible to write in #1{s}# file #end #mesg{MESSAGE_OUVERTURE_REPERTOIRE_COURANT} Impossible to run PlanFacile in the current directory #end #mesg{MESSAGE_OUVERTURE_CHEMIN_INVALIDE} Invalid path to #1{s}# file #end #mesg{MESSAGE_OUVERTURE_INEXISTANT} #1{s}# file is not present #end #mesg{MESSAGE_OUVERTURE_TYPE_INCORRECT} #1{s}# is a directory or a block type file #end #mesg{MESSAGE_OUVERTURE_ENTREE} Impossible to read #1{s}# file #end #mesg{MESSAGE_OUVERTURE_ENTREE_VIDE} Impossible to open empty name file #end #mesg{MESSAGE_OUVERTURE_STANDARD_SUIVANTE} Try to open #1{s}# file for ##standard #end #mesg{MESSAGE_OUVERTURE_STANDARD} No file could be opened for ##standard #end #mesg{MESSAGE_REDEFINITION_SECTION} Section style of level #1{d}# redefined #end #mesg{MESSAGE_REDEFINITION_SECTION_DEFAUT} Section style of default level redefined #end #mesg{MESSAGE_REDEFINITION_REFERENCE} Reference style of level #1{d}# redefined #end #mesg{MESSAGE_REDEFINITION_REFERENCE_DEFAUT} Reference style of default level redefined #end #mesg{MESSAGE_REDEFINITION_MESSAGE} Message style redefined #end #mesg{MESSAGE_REDEFINITION_ENTETE} Document head style redefined #end #mesg{MESSAGE_REDEFINITION_PIED} Document foot style redefined #end #mesg{MESSAGE_REDEFINITION_RACINE} Root level redefined #end #mesg{MESSAGE_SECTION_NIVEAU_INCORRECT} Invalid level for section style definition #end #mesg{MESSAGE_REFERENCE_NIVEAU_INCORRECT} Invalid level for reference style definition #end #mesg{MESSAGE_RACINE_NIVEAU_INCORRECT} Invalid level for root level definition #end #mesg{MESSAGE_RACINE_NIVEAU_NON_DEFINI} Impossible to determine root level #end #mesg{MESSAGE_REDEFINITION_IDEE} #1{s}# idea redefined #end #mesg{MESSAGE_IDEE_REFERENCE_VIDE} Idea with empty reference not allowed #end #mesg{MESSAGE_IDEE_MANQUANTE_REFERENCE_VIDE} Missing idea with empty reference not allowed #end #mesg{MESSAGE_IDEE_GENERIQUE_REFERENCE_VIDE} Generic idea with empty reference not allowed #end #mesg{MESSAGE_PERTINENCE_INCORRECTE} Invalid weighting of the dependency from #1{s}# idea #end #mesg{MESSAGE_INDICE_IDEE_MANQUANTE_INCORRECT} Invalid index of missing idea #end #mesg{MESSAGE_REDEFINITION_IDEE_MANQUANTE_DEFAUT} Default missing idea redefined #end #mesg{MESSAGE_REDEFINITION_IDEE_MANQUANTE} Missing idea with index #1{d}# redefined #end #mesg{MESSAGE_INDICE_IDEE_GENERIQUE_INCORRECT} Invalid parent reference of generic idea #end #mesg{MESSAGE_REDEFINITION_IDEE_GENERIQUE_DEFAUT} Default generic idea redefined #end #mesg{MESSAGE_REDEFINITION_IDEE_GENERIQUE} Generic idea with #1{s}# parent reference redefined #end #mesg{MESSAGE_DEPENDANCE_INUTILE} Dependency from #1{s}# idea not used for table of contents computation #end #mesg{MESSAGE_DEPENDANCE_VIDE_INUTILE} Dependency with empty reference not used for table of contents computation #end #mesg{MESSAGE_SANS_IDEE_ORPHELINE} Impossible to determine root idea #end #mesg{MESSAGE_AJOUT_RACINE} Root idea added to the document #end #mesg{MESSAGE_IDEE_NON_ATTEIGNABLE} Impossible to reach #1{s}# idea from the root idea #end #mesg{MESSAGE_SECTION_STYLE_MANQUANT} Section format for #1{s}# idea undefined #end #mesg{MESSAGE_REFERENCE_STYLE_MANQUANT} Reference format for #1{s}# reference undefined #end #mesg{MESSAGE_IDEE_MANQUANTE_MANQUANTE} Missing idea with index #1{d}# undefined #end #mesg{MESSAGE_IDEE_GENERIQUE_MANQUANTE} Generic idea with parent reference #1{s}# undefined #end #mesg{MESSAGE_DEPENDANCE_INCORRECTE} Invalid dependency from #1{s}# idea #end #mesg{MESSAGE_DEPENDANCE_VIDE} Invalid dependency from an empty reference idea #end #mesg{MESSAGE_INDICE_REFERENCE_INCORRECT} Invalid reference index #1{s} #end #mesg{MESSAGE_NOM_NIVEAU_INCORRECT} Section name of level #1{s}# undefined #end #mesg{MESSAGE_STATISTIQUES} Document generated by PlanFacile 2.0 : #1{d}# idea(s) produced, with #2{d}# missing(s) and #3{d}# generic(s). #4{d}# reference(s) produced with #5{d}# unreduced. #end #mesg{MESSAGE_VERBEUX} Verbose #1{d} #end #mesg{MESSAGE_VERBEUX_ANALYSE} Source code analysis #end #mesg{MESSAGE_VERBEUX_ANALYSE_SOURCE} Source file #1{s}# analysis #end #mesg{MESSAGE_VERBEUX_ANALYSE_INCLUSION} Inclusion of source file #1{s} #end #mesg{MESSAGE_VERBEUX_ANALYSE_FININCLUSION} End of included file analysis #end #mesg{MESSAGE_VERBEUX_RETOUCHES} Data flow completion #end #mesg{MESSAGE_VERBEUX_RETOUCHES_PARAMETRE} Parameter ###1{d}# found #end #mesg{MESSAGE_VERBEUX_RETOUCHES_MACRO_NORMALE} Normal macro #1{s}# defined with #2{d}# parameter(s) #end #mesg{MESSAGE_VERBEUX_RETOUCHES_MACRO_BOUCLE} Loop macro #1{s}# defined with #2{d}# parameter(s) #end #mesg{MESSAGE_VERBEUX_RETOUCHES_DEFRAGMENTATION} Defragmentation of data flow of type #1{2d} #end #mesg{MESSAGE_VERBEUX_RETOUCHES_INCLUDE} Include command of file #1{s}# deleted #end #mesg{MESSAGE_VERBEUX_RETOUCHES_STANDARD} Standard command deleted #end #mesg{MESSAGE_VERBEUX_OPTIONS} Option reduction #end #mesg{MESSAGE_VERBEUX_OPTIONS_RECHERCHE} Defined option search #end #mesg{MESSAGE_VERBEUX_OPTIONS_ENREGISTREMENT} Option #1{s}# found #end #mesg{MESSAGE_VERBEUX_OPTIONS_COMMENTAIRE} Option #1{s}# discarded in comment #end #mesg{MESSAGE_VERBEUX_OPTIONS_MACRO} Option #1{s}# defined inside the #2{s}# macro #end #mesg{MESSAGE_VERBEUX_OPTIONS_RECHERCHE_PREMIERE} First option research #end #mesg{MESSAGE_VERBEUX_OPTIONS_RECHERCHE_NOUVELLE} Another option research required #end #mesg{MESSAGE_VERBEUX_OPTIONS_RECHERCHE_FIN} All options have been found #end #mesg{MESSAGE_VERBEUX_OPTIONS_REDUCTION} Reduction of code selection commands #end #mesg{MESSAGE_VERBEUX_OPTIONS_OPTIONS} Command with #1{s}# label reduced #end #mesg{MESSAGE_VERBEUX_MACROS} Macro reduction #end #mesg{MESSAGE_VERBEUX_MACROS_NORMALE} Normal #1{s}# macro found #end #mesg{MESSAGE_VERBEUX_MACROS_BOUCLE} Loop #1{s}# macro found #end #mesg{MESSAGE_VERBEUX_MACROS_PARAMETRE} Parameter #1{d}# replaced #end #mesg{MESSAGE_VERBEUX_MACROS_ITERATION} Iteration number #2{d}# in #1{s}# macro #end #mesg{MESSAGE_VERBEUX_VERIFICATION} Semantic check #end #mesg{MESSAGE_VERBEUX_VERIFICATION_ERREUR} User error found #end #mesg{MESSAGE_VERBEUX_VERIFICATION_AVERTISSEMENT} User warning found #end #mesg{MESSAGE_VERBEUX_VERIFICATION_DEFRAGMENTATION} Defragmentation of data flow of type #1{2d} #end #mesg{MESSAGE_VERBEUX_STYLES} Style registration #end #mesg{MESSAGE_VERBEUX_STYLES_SECTION} Section style registration #end #mesg{MESSAGE_VERBEUX_STYLES_SECTION_DEFAUT} Default section style registered #end #mesg{MESSAGE_VERBEUX_STYLES_SECTION_EXPLICITE} Section style of level #1{d}# registered #end #mesg{MESSAGE_VERBEUX_STYLES_AUTRES} Other style registration #end #mesg{MESSAGE_VERBEUX_STYLES_REFERENCE_DEFAUT} Default reference style registered #end #mesg{MESSAGE_VERBEUX_STYLES_REFERENCE_EXPLICITE} Reference style of level #1{d} registered #end #mesg{MESSAGE_VERBEUX_STYLES_MESSAGE} Message style registered #end #mesg{MESSAGE_VERBEUX_STYLES_ENTETE} Document head style registered #end #mesg{MESSAGE_VERBEUX_STYLES_PIED} Document foot style registered #end #mesg{MESSAGE_VERBEUX_STYLES_RACINE} Root level set to #1{d} #end #mesg{MESSAGE_VERBEUX_IDEES} Idea registration #end #mesg{MESSAGE_VERBEUX_IDEES_PRESENTES} Normal idea registration #end #mesg{MESSAGE_VERBEUX_IDEES_IDEE} #1{s}# idea registered #end #mesg{MESSAGE_VERBEUX_IDEES_DEPENDANCE} Dependency from #1{s}# idea registered #end #mesg{MESSAGE_VERBEUX_IDEES_AUTOMATIQUES} Automatic idea registration #end #mesg{MESSAGE_VERBEUX_IDEES_MANQUANTE_DEFAUT} Default missing idea registered #end #mesg{MESSAGE_VERBEUX_IDEES_MANQUANTE_EXPLICITE} Missing idea of index #1{d}# registered #end #mesg{MESSAGE_VERBEUX_IDEES_GENERIQUE_DEFAUT} Default generic idea registered #end #mesg{MESSAGE_VERBEUX_IDEES_GENERIQUE_EXPLICITE} Generic idea with #1{s}# parent reference registered #end #mesg{MESSAGE_VERBEUX_PLAN} Table of contents computation #end #mesg{MESSAGE_VERBEUX_PLAN_GRAPHE} Dependency graph computation #end #mesg{MESSAGE_VERBEUX_PLAN_GRAPHE_VIDE} No idea, therefore no table of contents computation is needed #end #mesg{MESSAGE_VERBEUX_PLAN_GRAPHE_IDEES} Graph with #1{d}# idea(s) #end #mesg{MESSAGE_VERBEUX_PLAN_GRAPHE_DEPENDANCES} Graph with #1{d}# dependency(ies), including #2{d}# unused #end #mesg{MESSAGE_VERBEUX_PLAN_RACINE} Root idea research #end #mesg{MESSAGE_VERBEUX_PLAN_ATTEIGNABLES} Graph structure check #end #mesg{MESSAGE_VERBEUX_PLAN_CALCUL} Table of contents computation #end #mesg{MESSAGE_VERBEUX_PLAN_TRANSFORMATION} Table of contents conversion and completion #end #mesg{MESSAGE_VERBEUX_PLAN_TRANSFORMATION_IDEE} #1{s}# idea conversion #end #mesg{MESSAGE_VERBEUX_PLAN_TRANSFORMATION_IDEEVIDE} Empty reference idea conversion #end #mesg{MESSAGE_VERBEUX_PLAN_TRANSFORMATION_REFERENCE} Reference to #1{s}# idea completion #end #mesg{MESSAGE_VERBEUX_PLAN_TRANSFORMATION_REFERENCEVIDE} Reference to empty reference idea completion #end #mesg{MESSAGE_VERBEUX_SORTIE} Document generation #end #mesg{MESSAGE_VERBEUX_SORTIE_GENERATION} Text generation #end #mesg{MESSAGE_VERBEUX_SORTIE_GENERATION_ENTETE} Document head generation #end #mesg{MESSAGE_VERBEUX_SORTIE_GENERATION_IDEE} #1{s}# idea generation #end #mesg{MESSAGE_VERBEUX_SORTIE_GENERATION_IDEEVIDE} Empty reference idea generation #end #mesg{MESSAGE_VERBEUX_SORTIE_GENERATION_REFIRR} Non-reducible reference to #1{s}# idea generation #end #mesg{MESSAGE_VERBEUX_SORTIE_GENERATION_REFIRRVIDE} Non-reducible reference to empty reference idea generation #end #mesg{MESSAGE_VERBEUX_SORTIE_GENERATION_DEPREF} Reference made from dependency generation #end #mesg{MESSAGE_VERBEUX_SORTIE_GENERATION_REFRED} Reducible reference to #1{s}# idea generation #end #mesg{MESSAGE_VERBEUX_SORTIE_GENERATION_REFREDVIDE} Reducible reference to empty reference idea generation #end #mesg{MESSAGE_VERBEUX_SORTIE_GENERATION_EXTREF} External reference with index #1{d}# generation #end #mesg{MESSAGE_VERBEUX_SORTIE_GENERATION_EXTREFS} List of external reference(s) generation #end #mesg{MESSAGE_VERBEUX_SORTIE_GENERATION_PIED} Document foot generation #end #mesg{MESSAGE_VERBEUX_SORTIE_PRODUCTION} Document production in compiler output #end #mesg{MESSAGE_VERBEUX_SORTIE_PRODUCTION_DOCUMENT} Document production #end #mesg{MESSAGE_VERBEUX_SORTIE_PRODUCTION_STATS} Internal statistics production of table of contents computation #end #mesg{MESSAGE_AIDE} PlanFacile version 2.0.\n Usage: planfacile \n \n \n Options:\n \n \tGeneral:\n \n -h\t\tDisplay this help.\n -V\t\tDisplay the licence and the copyright.\n -v\t\tVerbose mode. (Put it several times, if necessary).\n -o \tOutput file. If this option\n \t\tis not present, the standard output is used.\n -a\t\tSame as -SICYmgAdDpEcylGNTMUPRt.\n -n\t\tSame as -uir.\n -e\t\tTransform every warning into an error.\n -W\t\tDon't display the position in the source code\n \t\tof warnings and errors. (Faster and lighter in memory)\n -w\t\tDisplay absolute path of the source files in the\n \t\tcompiler messages. (Heavier in memory)\n \n \tSource file:\n \n -S\t\tIgnore non-readable source file.\n -I\t\tIgnore recursive file include.\n -s\t\tDisplay the behavior of the ##standard command, and\n \t\tterminate on error in case of failure.\n \n \tCompilation:\n \n -O