diff --git a/build.sh b/build.sh index 3b8e860..ed2d4ea 100755 --- a/build.sh +++ b/build.sh @@ -80,9 +80,17 @@ function show_help { echo -e "\t-debug, -d : \t➔ Configure compilation in debug mode" echo -e "\t-run, -r : \t➔ Execute the generated executable" echo -e "\t-clean, -c : \t➔ Clean before rebuilding and execute" + echo -e "\t-docs : \t➔ Generate Doxygen documentation" echo -e "\t--help, -h : \t➔ Display help" } +function generate_docs { + echo -e "➔ Generating Doxygen documentation..." + show_command "make -B docs" + make -B docs + show_success "Documentation generated." +} + # Options loop while [ "$#" -gt 0 ]; do case "$1" in @@ -109,6 +117,10 @@ while [ "$#" -gt 0 ]; do execute shift ;; + -docs) + generate_docs + shift + ;; --help | -h) show_help exit 0 diff --git a/docs/Doxyfile.in b/docs/Doxyfile.in index ad13d6d..3b8d7db 100644 --- a/docs/Doxyfile.in +++ b/docs/Doxyfile.in @@ -1,3 +1,3 @@ +INPUT = src/ src/app/core_logic src/app/interface -OUTPUT_DIRECTORY = @CMAKE_CURRENT_BINARY_DIR@/doc_doxygen/ -INPUT = @CMAKE_CURRENT_SOURCE_DIR@/src/ @CMAKE_CURRENT_SOURCE_DIR@/docs/ +OUTPUT_DIRECTORY = docs/ diff --git a/docs/html/bc_s.png b/docs/html/bc_s.png new file mode 100644 index 0000000..224b29a Binary files /dev/null and b/docs/html/bc_s.png differ diff --git a/docs/html/bc_sd.png b/docs/html/bc_sd.png new file mode 100644 index 0000000..31ca888 Binary files /dev/null and b/docs/html/bc_sd.png differ diff --git a/docs/html/client_8c.html b/docs/html/client_8c.html new file mode 100644 index 0000000..542f4a9 --- /dev/null +++ b/docs/html/client_8c.html @@ -0,0 +1,586 @@ + + + + + + + +My Project: src/app/core_logic/client.c File Reference + + + + + + + + + +
+
+ + + + + + +
+
My Project +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+Macros | +Functions
+
client.c File Reference
+
+
+ +

Fonctions liées à la gestion des clients et de leur panier. +More...

+
#include <stdio.h>
+#include "client.h"
+
+ + + + + +

+Macros

+#define MAX_ARTICLES   100
 
+#define MAX_CLIENTS   100
 
+ + + + + + + + + + + + + + + + + + + + + + +

+Functions

int charger_clients (int numeros[], float cagnottes[], int suspendues[], int tPhysique)
 Charge les données des clients à partir d'un fichier.
 
void ajouter_article_au_panier (int numeroClient, int references[], float poids[], float volume[], float prixUnitaire[], int numeros[], float cagnottes[], int suspendues[], int nombreArticles, int nombreClients, float volumeCoffre, float chargeMaximale, int panier[], int quantites[], int *taillePanier)
 Ajoute un article au panier du client.
 
void supprimer_article_du_panier (int panier[], int quantites[], int *taillePanier)
 Supprime un article du panier du client.
 
void affiche_recap_panier (int panier[], int taillePanier, int references[], float poids[], float volume[], float prixUnitaire[], int quantites[])
 Affiche un récapitulatif du contenu du panier.
 
void modifier_quantite_article_panier (int panier[], int quantites[], int *taillePanier)
 Modifie la quantité d'un article dans le panier du client.
 
void reinitialiser_panier (int panier[], int quantites[], int *taillePanier)
 Réinitialise le panier du client.
 
void deduire_cagnotte (int numeroClient, float montant, int numeros[], float cagnottes[], int nombreClients, int suspendus[])
 Déduit un montant de la cagnotte du client.
 
+

Detailed Description

+

Fonctions liées à la gestion des clients et de leur panier.

+

Function Documentation

+ +

◆ affiche_recap_panier()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void affiche_recap_panier (int panier[],
int taillePanier,
int references[],
float poids[],
float volume[],
float prixUnitaire[],
int quantites[] 
)
+
+ +

Affiche un récapitulatif du contenu du panier.

+

Cette fonction permet d'afficher un récapitulatif du contenu du panier.

+
Parameters
+ + + + + + + + +
panier- Tableau des références des articles dans le panier.
taillePanier- Taille du panier.
references- Tableau des références des articles.
poids- Tableau des poids des articles.
volume- Tableau des volumes des articles.
prixUnitaire- Tableau des prix unitaires des articles.
quantites- Tableau des quantités de chaque article dans le panier.
+
+
+ +
+
+ +

◆ ajouter_article_au_panier()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void ajouter_article_au_panier (int numeroClient,
int references[],
float poids[],
float volume[],
float prixUnitaire[],
int numeros[],
float cagnottes[],
int suspendues[],
int nombreArticles,
int nombreClients,
float volumeCoffre,
float chargeMaximale,
int panier[],
int quantites[],
int * taillePanier 
)
+
+ +

Ajoute un article au panier du client.

+

Cette fonction permet d'ajouter un article au panier du client.

+
Parameters
+ + + + + + + + + + + + + + + + +
numeroClient- Numéro du client.
references- Tableau des références des articles.
poids- Tableau des poids des articles.
volume- Tableau des volumes des articles.
prixUnitaire- Tableau des prix unitaires des articles.
numeros- Tableau des numéros de clients.
cagnottes- Tableau des cagnottes des clients.
suspendues- Tableau des états de suspension des clients.
nombreArticles- Nombre d'articles disponibles.
nombreClients- Nombre de clients.
volumeCoffre- Volume total du coffre.
chargeMaximale- Charge maximale du coffre.
panier- Tableau des références des articles dans le panier.
quantites- Tableau des quantités de chaque article dans le panier.
taillePanier- Taille du panier.
+
+
+ +
+
+ +

◆ charger_clients()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int charger_clients (int numeros[],
float cagnottes[],
int suspendues[],
int tPhysique 
)
+
+ +

Charge les données des clients à partir d'un fichier.

+

Cette fonction permet de charger les données des clients à partir d'un fichier.

+
Parameters
+ + + + + +
numeros- Tableau des numéros de clients.
cagnottes- Tableau des cagnottes des clients.
suspendues- Tableau des états de suspension des clients.
tPhysique- Taille du tableau physique.
+
+
+
Returns
Le nombre de clients chargés ou -1 en cas d'erreur.
+ +
+
+ +

◆ deduire_cagnotte()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void deduire_cagnotte (int numeroClient,
float montant,
int numeros[],
float cagnottes[],
int nombreClients,
int suspendus[] 
)
+
+ +

Déduit un montant de la cagnotte du client.

+

Cette fonction permet de déduire un montant de la cagnotte du client.

+
Parameters
+ + + + + + + +
numeroClient- Numéro du client.
montant- Montant à déduire de la cagnotte.
numeros- Tableau des numéros de clients.
cagnottes- Tableau des cagnottes des clients.
nombreClients- Nombre de clients.
suspendus- Tableau des états de suspension des clients.
+
+
+ +
+
+ +

◆ modifier_quantite_article_panier()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void modifier_quantite_article_panier (int panier[],
int quantites[],
int * taillePanier 
)
+
+ +

Modifie la quantité d'un article dans le panier du client.

+

Cette fonction permet de modifier la quantité d'un article dans le panier du client.

+
Parameters
+ + + + +
panier- Tableau des références des articles dans le panier.
quantites- Tableau des quantités de chaque article dans le panier.
taillePanier- Taille du panier.
+
+
+ +
+
+ +

◆ reinitialiser_panier()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void reinitialiser_panier (int panier[],
int quantites[],
int * taillePanier 
)
+
+ +

Réinitialise le panier du client.

+

Cette fonction permet de réinitialiser le panier du client.

+
Parameters
+ + + + +
panier- Tableau des références des articles dans le panier.
quantites- Tableau des quantités de chaque article dans le panier.
taillePanier- Taille du panier.
+
+
+ +
+
+ +

◆ supprimer_article_du_panier()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void supprimer_article_du_panier (int panier[],
int quantites[],
int * taillePanier 
)
+
+ +

Supprime un article du panier du client.

+

Cette fonction permet de supprimer un article du panier du client.

+
Parameters
+ + + + +
panier- Tableau des références des articles dans le panier.
quantites- Tableau des quantités de chaque article dans le panier.
taillePanier- Taille du panier.
+
+
+ +
+
+
+ + + + diff --git a/docs/html/client_8h.html b/docs/html/client_8h.html new file mode 100644 index 0000000..bdebd54 --- /dev/null +++ b/docs/html/client_8h.html @@ -0,0 +1,655 @@ + + + + + + + +My Project: src/app/core_logic/client.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
My Project +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+Functions
+
client.h File Reference
+
+
+ +

Fonctions liées à la gestion des clients et de leur panier. +More...

+
#include <stdio.h>
+#include <stdlib.h>
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + +

+Functions

int charger_clients (int numeros[], float cagnottes[], int suspendues[], int tPhysique)
 Charge les données des clients à partir d'un fichier.
 
void ajouter_article_au_panier (int numeroClient, int references[], float poids[], float volume[], float prixUnitaire[], int numeros[], float cagnottes[], int suspendues[], int nombreArticles, int nombreClients, float volumeCoffre, float chargeMaximale, int panier[], int quantites[], int *taillePanier)
 Ajoute un article au panier du client.
 
void supprimer_article_du_panier (int panier[], int quantites[], int *taillePanier)
 Supprime un article du panier du client.
 
void affiche_recap_panier (int panier[], int taillePanier, int references[], float poids[], float volume[], float prixUnitaire[], int quantites[])
 Affiche un récapitulatif du contenu du panier.
 
void modifier_quantite_article_panier (int panier[], int quantites[], int *taillePanier)
 Modifie la quantité d'un article dans le panier du client.
 
void reinitialiser_panier (int panier[], int quantites[], int *taillePanier)
 Réinitialise le panier du client.
 
void deduire_cagnotte (int numeroClient, float montant, int numeros[], float cagnottes[], int nombreClients, int suspendus[])
 Déduit un montant de la cagnotte du client.
 
+

Detailed Description

+

Fonctions liées à la gestion des clients et de leur panier.

+

Function Documentation

+ +

◆ affiche_recap_panier()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void affiche_recap_panier (int panier[],
int taillePanier,
int references[],
float poids[],
float volume[],
float prixUnitaire[],
int quantites[] 
)
+
+ +

Affiche un récapitulatif du contenu du panier.

+
Parameters
+ + + + + + + + +
panier- Tableau des références des articles dans le panier.
taillePanier- Taille du panier.
references- Tableau des références des articles.
poids- Tableau des poids des articles.
volume- Tableau des volumes des articles.
prixUnitaire- Tableau des prix unitaires des articles.
quantites- Tableau des quantités de chaque article dans le panier.
+
+
+

Cette fonction permet d'afficher un récapitulatif du contenu du panier.

+
Parameters
+ + + + + + + + +
panier- Tableau des références des articles dans le panier.
taillePanier- Taille du panier.
references- Tableau des références des articles.
poids- Tableau des poids des articles.
volume- Tableau des volumes des articles.
prixUnitaire- Tableau des prix unitaires des articles.
quantites- Tableau des quantités de chaque article dans le panier.
+
+
+ +
+
+ +

◆ ajouter_article_au_panier()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void ajouter_article_au_panier (int numeroClient,
int references[],
float poids[],
float volume[],
float prixUnitaire[],
int numeros[],
float cagnottes[],
int suspendues[],
int nombreArticles,
int nombreClients,
float volumeCoffre,
float chargeMaximale,
int panier[],
int quantites[],
int * taillePanier 
)
+
+ +

Ajoute un article au panier du client.

+
Parameters
+ + + + + + + + + + + + + + + + +
numeroClient- Numéro du client.
references- Tableau des références des articles.
poids- Tableau des poids des articles.
volume- Tableau des volumes des articles.
prixUnitaire- Tableau des prix unitaires des articles.
numeros- Tableau des numéros de clients.
cagnottes- Tableau des cagnottes des clients.
suspendues- Tableau des états de suspension des clients.
nombreArticles- Nombre d'articles disponibles.
nombreClients- Nombre de clients.
volumeCoffre- Volume total du coffre.
chargeMaximale- Charge maximale du coffre.
panier- Tableau des références des articles dans le panier.
quantites- Tableau des quantités de chaque article dans le panier.
taillePanier- Taille du panier.
+
+
+

Cette fonction permet d'ajouter un article au panier du client.

+
Parameters
+ + + + + + + + + + + + + + + + +
numeroClient- Numéro du client.
references- Tableau des références des articles.
poids- Tableau des poids des articles.
volume- Tableau des volumes des articles.
prixUnitaire- Tableau des prix unitaires des articles.
numeros- Tableau des numéros de clients.
cagnottes- Tableau des cagnottes des clients.
suspendues- Tableau des états de suspension des clients.
nombreArticles- Nombre d'articles disponibles.
nombreClients- Nombre de clients.
volumeCoffre- Volume total du coffre.
chargeMaximale- Charge maximale du coffre.
panier- Tableau des références des articles dans le panier.
quantites- Tableau des quantités de chaque article dans le panier.
taillePanier- Taille du panier.
+
+
+ +
+
+ +

◆ charger_clients()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int charger_clients (int numeros[],
float cagnottes[],
int suspendues[],
int tPhysique 
)
+
+ +

Charge les données des clients à partir d'un fichier.

+
Parameters
+ + + + + +
numeros- Tableau des numéros de clients.
cagnottes- Tableau des cagnottes des clients.
suspendues- Tableau des états de suspension des clients.
tPhysique- Taille du tableau physique.
+
+
+
Returns
Le nombre de clients chargés ou -1 en cas d'erreur.
+

Cette fonction permet de charger les données des clients à partir d'un fichier.

+
Parameters
+ + + + + +
numeros- Tableau des numéros de clients.
cagnottes- Tableau des cagnottes des clients.
suspendues- Tableau des états de suspension des clients.
tPhysique- Taille du tableau physique.
+
+
+
Returns
Le nombre de clients chargés ou -1 en cas d'erreur.
+ +
+
+ +

◆ deduire_cagnotte()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void deduire_cagnotte (int numeroClient,
float montant,
int numeros[],
float cagnottes[],
int nombreClients,
int suspendus[] 
)
+
+ +

Déduit un montant de la cagnotte du client.

+
Parameters
+ + + + + + + +
numeroClient- Numéro du client.
montant- Montant à déduire de la cagnotte.
numeros- Tableau des numéros de clients.
cagnottes- Tableau des cagnottes des clients.
nombreClients- Nombre de clients.
suspendus- Tableau des états de suspension des clients.
+
+
+

Cette fonction permet de déduire un montant de la cagnotte du client.

+
Parameters
+ + + + + + + +
numeroClient- Numéro du client.
montant- Montant à déduire de la cagnotte.
numeros- Tableau des numéros de clients.
cagnottes- Tableau des cagnottes des clients.
nombreClients- Nombre de clients.
suspendus- Tableau des états de suspension des clients.
+
+
+ +
+
+ +

◆ modifier_quantite_article_panier()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void modifier_quantite_article_panier (int panier[],
int quantites[],
int * taillePanier 
)
+
+ +

Modifie la quantité d'un article dans le panier du client.

+
Parameters
+ + + + +
panier- Tableau des références des articles dans le panier.
quantites- Tableau des quantités de chaque article dans le panier.
taillePanier- Taille du panier.
+
+
+

Cette fonction permet de modifier la quantité d'un article dans le panier du client.

+
Parameters
+ + + + +
panier- Tableau des références des articles dans le panier.
quantites- Tableau des quantités de chaque article dans le panier.
taillePanier- Taille du panier.
+
+
+ +
+
+ +

◆ reinitialiser_panier()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void reinitialiser_panier (int panier[],
int quantites[],
int * taillePanier 
)
+
+ +

Réinitialise le panier du client.

+
Parameters
+ + + + +
panier- Tableau des références des articles dans le panier.
quantites- Tableau des quantités de chaque article dans le panier.
taillePanier- Taille du panier.
+
+
+

Cette fonction permet de réinitialiser le panier du client.

+
Parameters
+ + + + +
panier- Tableau des références des articles dans le panier.
quantites- Tableau des quantités de chaque article dans le panier.
taillePanier- Taille du panier.
+
+
+ +
+
+ +

◆ supprimer_article_du_panier()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void supprimer_article_du_panier (int panier[],
int quantites[],
int * taillePanier 
)
+
+ +

Supprime un article du panier du client.

+
Parameters
+ + + + +
panier- Tableau des références des articles dans le panier.
quantites- Tableau des quantités de chaque article dans le panier.
taillePanier- Taille du panier.
+
+
+

Cette fonction permet de supprimer un article du panier du client.

+
Parameters
+ + + + +
panier- Tableau des références des articles dans le panier.
quantites- Tableau des quantités de chaque article dans le panier.
taillePanier- Taille du panier.
+
+
+ +
+
+
+ + + + diff --git a/docs/html/client_8h_source.html b/docs/html/client_8h_source.html new file mode 100644 index 0000000..4e513a4 --- /dev/null +++ b/docs/html/client_8h_source.html @@ -0,0 +1,121 @@ + + + + + + + +My Project: src/app/core_logic/client.h Source File + + + + + + + + + +
+
+ + + + + + +
+
My Project +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
client.h
+
+
+Go to the documentation of this file.
1#ifndef SAE_101_CLIENT_H
+
2#define SAE_101_CLIENT_H
+
3
+
4#include <stdio.h>
+
5#include <stdlib.h>
+
6
+
21int charger_clients(int numeros[], float cagnottes[], int suspendues[], int tPhysique);
+
22
+
42void ajouter_article_au_panier(int numeroClient, int references[], float poids[], float volume[], float prixUnitaire[],
+
43 int numeros[], float cagnottes[], int suspendues[], int nombreArticles, int nombreClients,
+
44 float volumeCoffre, float chargeMaximale, int panier[], int quantites[], int *taillePanier);
+
45
+
53void supprimer_article_du_panier(int panier[], int quantites[], int *taillePanier);
+
54
+
66void affiche_recap_panier(int panier[], int taillePanier, int references[], float poids[], float volume[],
+
67 float prixUnitaire[], int quantites[]);
+
68
+
76void modifier_quantite_article_panier(int panier[], int quantites[], int *taillePanier);
+
77
+
85void reinitialiser_panier(int panier[], int quantites[], int *taillePanier);
+
86
+
97void deduire_cagnotte(int numeroClient, float montant, int numeros[], float cagnottes[], int nombreClients, int suspendus[]);
+
98
+
99#endif // SAE_101_CLIENT_H
+
void ajouter_article_au_panier(int numeroClient, int references[], float poids[], float volume[], float prixUnitaire[], int numeros[], float cagnottes[], int suspendues[], int nombreArticles, int nombreClients, float volumeCoffre, float chargeMaximale, int panier[], int quantites[], int *taillePanier)
Ajoute un article au panier du client.
Definition client.c:68
+
void deduire_cagnotte(int numeroClient, float montant, int numeros[], float cagnottes[], int nombreClients, int suspendus[])
Déduit un montant de la cagnotte du client.
Definition client.c:319
+
int charger_clients(int numeros[], float cagnottes[], int suspendues[], int tPhysique)
Charge les données des clients à partir d'un fichier.
Definition client.c:23
+
void affiche_recap_panier(int panier[], int taillePanier, int references[], float poids[], float volume[], float prixUnitaire[], int quantites[])
Affiche un récapitulatif du contenu du panier.
Definition client.c:211
+
void reinitialiser_panier(int panier[], int quantites[], int *taillePanier)
Réinitialise le panier du client.
Definition client.c:302
+
void supprimer_article_du_panier(int panier[], int quantites[], int *taillePanier)
Supprime un article du panier du client.
Definition client.c:165
+
void modifier_quantite_article_panier(int panier[], int quantites[], int *taillePanier)
Modifie la quantité d'un article dans le panier du client.
Definition client.c:258
+
+ + + + diff --git a/docs/html/closed.png b/docs/html/closed.png new file mode 100644 index 0000000..98cc2c9 Binary files /dev/null and b/docs/html/closed.png differ diff --git a/docs/html/dir_5194e5fea318fda12687127c23f8aba1.html b/docs/html/dir_5194e5fea318fda12687127c23f8aba1.html new file mode 100644 index 0000000..c9e3de1 --- /dev/null +++ b/docs/html/dir_5194e5fea318fda12687127c23f8aba1.html @@ -0,0 +1,93 @@ + + + + + + + +My Project: src/app Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
My Project +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
app Directory Reference
+
+
+ + + + + + +

+Directories

 core_logic
 
 interface
 
+
+ + + + diff --git a/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html new file mode 100644 index 0000000..cd33c1f --- /dev/null +++ b/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html @@ -0,0 +1,92 @@ + + + + + + + +My Project: src Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
My Project +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
src Directory Reference
+
+
+ + + + + +

+Files

 main.c
 Programme principal pour choisir une interface et lancer l'application.
 
+
+ + + + diff --git a/docs/html/dir_9a14f97cc8a04806f17ae0e592fed671.html b/docs/html/dir_9a14f97cc8a04806f17ae0e592fed671.html new file mode 100644 index 0000000..a3f4311 --- /dev/null +++ b/docs/html/dir_9a14f97cc8a04806f17ae0e592fed671.html @@ -0,0 +1,101 @@ + + + + + + + +My Project: src/app/interface Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
My Project +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
interface Directory Reference
+
+
+ + + + + + + + + + + + + + +

+Files

 interface_client.c
 Implémentation des fonctions liées à l'interface client.
 
 interface_client.h
 En-tête des fonctions liées à l'interface client.
 
 interface_resp.c
 Implémentation des fonctions liées à l'interface du responsable.
 
 interface_resp.h
 En-tête des fonctions liées à l'interface du responsable.
 
+
+ + + + diff --git a/docs/html/dir_b5c97184117f1879a3567c3d06daf03f.html b/docs/html/dir_b5c97184117f1879a3567c3d06daf03f.html new file mode 100644 index 0000000..86bc31d --- /dev/null +++ b/docs/html/dir_b5c97184117f1879a3567c3d06daf03f.html @@ -0,0 +1,101 @@ + + + + + + + +My Project: src/app/core_logic Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
My Project +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
core_logic Directory Reference
+
+
+ + + + + + + + + + + + + + +

+Files

 client.c
 Fonctions liées à la gestion des clients et de leur panier.
 
 client.h
 Fonctions liées à la gestion des clients et de leur panier.
 
 responsable.c
 Définition des fonctions de responsable.c.
 
 responsable.h
 Déclaration des fonctions de responsable.c.
 
+
+ + + + diff --git a/docs/html/doc.svg b/docs/html/doc.svg new file mode 100644 index 0000000..0b928a5 --- /dev/null +++ b/docs/html/doc.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docs/html/docd.svg b/docs/html/docd.svg new file mode 100644 index 0000000..ac18b27 --- /dev/null +++ b/docs/html/docd.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docs/html/doxygen.css b/docs/html/doxygen.css new file mode 100644 index 0000000..009a9b5 --- /dev/null +++ b/docs/html/doxygen.css @@ -0,0 +1,2045 @@ +/* The standard CSS for doxygen 1.9.8*/ + +html { +/* page base colors */ +--page-background-color: white; +--page-foreground-color: black; +--page-link-color: #3D578C; +--page-visited-link-color: #4665A2; + +/* index */ +--index-odd-item-bg-color: #F8F9FC; +--index-even-item-bg-color: white; +--index-header-color: black; +--index-separator-color: #A0A0A0; + +/* header */ +--header-background-color: #F9FAFC; +--header-separator-color: #C4CFE5; +--header-gradient-image: url('nav_h.png'); +--group-header-separator-color: #879ECB; +--group-header-color: #354C7B; +--inherit-header-color: gray; + +--footer-foreground-color: #2A3D61; +--footer-logo-width: 104px; +--citation-label-color: #334975; +--glow-color: cyan; + +--title-background-color: white; +--title-separator-color: #5373B4; +--directory-separator-color: #9CAFD4; +--separator-color: #4A6AAA; + +--blockquote-background-color: #F7F8FB; +--blockquote-border-color: #9CAFD4; + +--scrollbar-thumb-color: #9CAFD4; +--scrollbar-background-color: #F9FAFC; + +--icon-background-color: #728DC1; +--icon-foreground-color: white; +--icon-doc-image: url('doc.svg'); +--icon-folder-open-image: url('folderopen.svg'); +--icon-folder-closed-image: url('folderclosed.svg'); + +/* brief member declaration list */ +--memdecl-background-color: #F9FAFC; +--memdecl-separator-color: #DEE4F0; +--memdecl-foreground-color: #555; +--memdecl-template-color: #4665A2; + +/* detailed member list */ +--memdef-border-color: #A8B8D9; +--memdef-title-background-color: #E2E8F2; +--memdef-title-gradient-image: url('nav_f.png'); +--memdef-proto-background-color: #DFE5F1; +--memdef-proto-text-color: #253555; +--memdef-proto-text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +--memdef-doc-background-color: white; +--memdef-param-name-color: #602020; +--memdef-template-color: #4665A2; + +/* tables */ +--table-cell-border-color: #2D4068; +--table-header-background-color: #374F7F; +--table-header-foreground-color: #FFFFFF; + +/* labels */ +--label-background-color: #728DC1; +--label-left-top-border-color: #5373B4; +--label-right-bottom-border-color: #C4CFE5; +--label-foreground-color: white; + +/** navigation bar/tree/menu */ +--nav-background-color: #F9FAFC; +--nav-foreground-color: #364D7C; +--nav-gradient-image: url('tab_b.png'); +--nav-gradient-hover-image: url('tab_h.png'); +--nav-gradient-active-image: url('tab_a.png'); +--nav-gradient-active-image-parent: url("../tab_a.png"); +--nav-separator-image: url('tab_s.png'); +--nav-breadcrumb-image: url('bc_s.png'); +--nav-breadcrumb-border-color: #C2CDE4; +--nav-splitbar-image: url('splitbar.png'); +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #283A5D; +--nav-text-hover-color: white; +--nav-text-active-color: white; +--nav-text-normal-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +--nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-menu-button-color: #364D7C; +--nav-menu-background-color: white; +--nav-menu-foreground-color: #555555; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.5); +--nav-arrow-color: #9CAFD4; +--nav-arrow-selected-color: #9CAFD4; + +/* table of contents */ +--toc-background-color: #F4F6FA; +--toc-border-color: #D8DFEE; +--toc-header-color: #4665A2; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); + +/** search field */ +--search-background-color: white; +--search-foreground-color: #909090; +--search-magnification-image: url('mag.svg'); +--search-magnification-select-image: url('mag_sel.svg'); +--search-active-color: black; +--search-filter-background-color: #F9FAFC; +--search-filter-foreground-color: black; +--search-filter-border-color: #90A5CE; +--search-filter-highlight-text-color: white; +--search-filter-highlight-bg-color: #3D578C; +--search-results-foreground-color: #425E97; +--search-results-background-color: #EEF1F7; +--search-results-border-color: black; +--search-box-shadow: inset 0.5px 0.5px 3px 0px #555; + +/** code fragments */ +--code-keyword-color: #008000; +--code-type-keyword-color: #604020; +--code-flow-keyword-color: #E08000; +--code-comment-color: #800000; +--code-preprocessor-color: #806020; +--code-string-literal-color: #002080; +--code-char-literal-color: #008080; +--code-xml-cdata-color: black; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #000000; +--code-vhdl-keyword-color: #700070; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #4665A2; +--code-external-link-color: #4665A2; +--fragment-foreground-color: black; +--fragment-background-color: #FBFCFD; +--fragment-border-color: #C4CFE5; +--fragment-lineno-border-color: #00FF00; +--fragment-lineno-background-color: #E8E8E8; +--fragment-lineno-foreground-color: black; +--fragment-lineno-link-fg-color: #4665A2; +--fragment-lineno-link-bg-color: #D8D8D8; +--fragment-lineno-link-hover-fg-color: #4665A2; +--fragment-lineno-link-hover-bg-color: #C8C8C8; +--tooltip-foreground-color: black; +--tooltip-background-color: white; +--tooltip-border-color: gray; +--tooltip-doc-color: grey; +--tooltip-declaration-color: #006318; +--tooltip-link-color: #4665A2; +--tooltip-shadow: 1px 1px 7px gray; +--fold-line-color: #808080; +--fold-minus-image: url('minus.svg'); +--fold-plus-image: url('plus.svg'); +--fold-minus-image-relpath: url('../../minus.svg'); +--fold-plus-image-relpath: url('../../plus.svg'); + +/** font-family */ +--font-family-normal: Roboto,sans-serif; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: Tahoma,Arial,sans-serif; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +} + +@media (prefers-color-scheme: dark) { + html:not(.dark-mode) { + color-scheme: dark; + +/* page base colors */ +--page-background-color: black; +--page-foreground-color: #C9D1D9; +--page-link-color: #90A5CE; +--page-visited-link-color: #A3B4D7; + +/* index */ +--index-odd-item-bg-color: #0B101A; +--index-even-item-bg-color: black; +--index-header-color: #C4CFE5; +--index-separator-color: #334975; + +/* header */ +--header-background-color: #070B11; +--header-separator-color: #141C2E; +--header-gradient-image: url('nav_hd.png'); +--group-header-separator-color: #283A5D; +--group-header-color: #90A5CE; +--inherit-header-color: #A0A0A0; + +--footer-foreground-color: #5B7AB7; +--footer-logo-width: 60px; +--citation-label-color: #90A5CE; +--glow-color: cyan; + +--title-background-color: #090D16; +--title-separator-color: #354C79; +--directory-separator-color: #283A5D; +--separator-color: #283A5D; + +--blockquote-background-color: #101826; +--blockquote-border-color: #283A5D; + +--scrollbar-thumb-color: #283A5D; +--scrollbar-background-color: #070B11; + +--icon-background-color: #334975; +--icon-foreground-color: #C4CFE5; +--icon-doc-image: url('docd.svg'); +--icon-folder-open-image: url('folderopend.svg'); +--icon-folder-closed-image: url('folderclosedd.svg'); + +/* brief member declaration list */ +--memdecl-background-color: #0B101A; +--memdecl-separator-color: #2C3F65; +--memdecl-foreground-color: #BBB; +--memdecl-template-color: #7C95C6; + +/* detailed member list */ +--memdef-border-color: #233250; +--memdef-title-background-color: #1B2840; +--memdef-title-gradient-image: url('nav_fd.png'); +--memdef-proto-background-color: #19243A; +--memdef-proto-text-color: #9DB0D4; +--memdef-proto-text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.9); +--memdef-doc-background-color: black; +--memdef-param-name-color: #D28757; +--memdef-template-color: #7C95C6; + +/* tables */ +--table-cell-border-color: #283A5D; +--table-header-background-color: #283A5D; +--table-header-foreground-color: #C4CFE5; + +/* labels */ +--label-background-color: #354C7B; +--label-left-top-border-color: #4665A2; +--label-right-bottom-border-color: #283A5D; +--label-foreground-color: #CCCCCC; + +/** navigation bar/tree/menu */ +--nav-background-color: #101826; +--nav-foreground-color: #364D7C; +--nav-gradient-image: url('tab_bd.png'); +--nav-gradient-hover-image: url('tab_hd.png'); +--nav-gradient-active-image: url('tab_ad.png'); +--nav-gradient-active-image-parent: url("../tab_ad.png"); +--nav-separator-image: url('tab_sd.png'); +--nav-breadcrumb-image: url('bc_sd.png'); +--nav-breadcrumb-border-color: #2A3D61; +--nav-splitbar-image: url('splitbard.png'); +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #B6C4DF; +--nav-text-hover-color: #DCE2EF; +--nav-text-active-color: #DCE2EF; +--nav-text-normal-shadow: 0px 1px 1px black; +--nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-menu-button-color: #B6C4DF; +--nav-menu-background-color: #05070C; +--nav-menu-foreground-color: #BBBBBB; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.2); +--nav-arrow-color: #334975; +--nav-arrow-selected-color: #90A5CE; + +/* table of contents */ +--toc-background-color: #151E30; +--toc-border-color: #202E4A; +--toc-header-color: #A3B4D7; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); + +/** search field */ +--search-background-color: black; +--search-foreground-color: #C5C5C5; +--search-magnification-image: url('mag_d.svg'); +--search-magnification-select-image: url('mag_seld.svg'); +--search-active-color: #C5C5C5; +--search-filter-background-color: #101826; +--search-filter-foreground-color: #90A5CE; +--search-filter-border-color: #7C95C6; +--search-filter-highlight-text-color: #BCC9E2; +--search-filter-highlight-bg-color: #283A5D; +--search-results-background-color: #101826; +--search-results-foreground-color: #90A5CE; +--search-results-border-color: #7C95C6; +--search-box-shadow: inset 0.5px 0.5px 3px 0px #2F436C; + +/** code fragments */ +--code-keyword-color: #CC99CD; +--code-type-keyword-color: #AB99CD; +--code-flow-keyword-color: #E08000; +--code-comment-color: #717790; +--code-preprocessor-color: #65CABE; +--code-string-literal-color: #7EC699; +--code-char-literal-color: #00E0F0; +--code-xml-cdata-color: #C9D1D9; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #C0C0C0; +--code-vhdl-keyword-color: #CF53C9; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #79C0FF; +--code-external-link-color: #79C0FF; +--fragment-foreground-color: #C9D1D9; +--fragment-background-color: black; +--fragment-border-color: #30363D; +--fragment-lineno-border-color: #30363D; +--fragment-lineno-background-color: black; +--fragment-lineno-foreground-color: #6E7681; +--fragment-lineno-link-fg-color: #6E7681; +--fragment-lineno-link-bg-color: #303030; +--fragment-lineno-link-hover-fg-color: #8E96A1; +--fragment-lineno-link-hover-bg-color: #505050; +--tooltip-foreground-color: #C9D1D9; +--tooltip-background-color: #202020; +--tooltip-border-color: #C9D1D9; +--tooltip-doc-color: #D9E1E9; +--tooltip-declaration-color: #20C348; +--tooltip-link-color: #79C0FF; +--tooltip-shadow: none; +--fold-line-color: #808080; +--fold-minus-image: url('minusd.svg'); +--fold-plus-image: url('plusd.svg'); +--fold-minus-image-relpath: url('../../minusd.svg'); +--fold-plus-image-relpath: url('../../plusd.svg'); + +/** font-family */ +--font-family-normal: Roboto,sans-serif; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: Tahoma,Arial,sans-serif; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +}} +body { + background-color: var(--page-background-color); + color: var(--page-foreground-color); +} + +body, table, div, p, dl { + font-weight: 400; + font-size: 14px; + font-family: var(--font-family-normal); + line-height: 22px; +} + +/* @group Heading Levels */ + +.title { + font-weight: 400; + font-size: 14px; + font-family: var(--font-family-normal); + line-height: 28px; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h1.groupheader { + font-size: 150%; +} + +h2.groupheader { + border-bottom: 1px solid var(--group-header-separator-color); + color: var(--group-header-color); + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px var(--glow-color); +} + +dt { + font-weight: bold; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL { + background-image: var(--nav-gradient-active-image); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: var(--nav-text-hover-color); + text-shadow: var(--nav-text-hover-shadow); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: var(--index-separator-color); +} + +#main-menu a:focus { + outline: auto; + z-index: 10; + position: relative; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: var(--index-header-color); +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.even { + background-color: var(--index-even-item-bg-color); +} + +.classindex dl.odd { + background-color: var(--index-odd-item-bg-color); +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: var(--page-link-color); + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: var(--page-visited-link-color); +} + +a:hover { + text-decoration: underline; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: var(--code-link-color); +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: var(--code-external-link-color); +} + +a.code.hl_class { /* style for links to class names in code snippets */ } +a.code.hl_struct { /* style for links to struct names in code snippets */ } +a.code.hl_union { /* style for links to union names in code snippets */ } +a.code.hl_interface { /* style for links to interface names in code snippets */ } +a.code.hl_protocol { /* style for links to protocol names in code snippets */ } +a.code.hl_category { /* style for links to category names in code snippets */ } +a.code.hl_exception { /* style for links to exception names in code snippets */ } +a.code.hl_service { /* style for links to service names in code snippets */ } +a.code.hl_singleton { /* style for links to singleton names in code snippets */ } +a.code.hl_concept { /* style for links to concept names in code snippets */ } +a.code.hl_namespace { /* style for links to namespace names in code snippets */ } +a.code.hl_package { /* style for links to package names in code snippets */ } +a.code.hl_define { /* style for links to macro names in code snippets */ } +a.code.hl_function { /* style for links to function names in code snippets */ } +a.code.hl_variable { /* style for links to variable names in code snippets */ } +a.code.hl_typedef { /* style for links to typedef names in code snippets */ } +a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ } +a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ } +a.code.hl_signal { /* style for links to Qt signal names in code snippets */ } +a.code.hl_slot { /* style for links to Qt slot names in code snippets */ } +a.code.hl_friend { /* style for links to friend names in code snippets */ } +a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ } +a.code.hl_property { /* style for links to property names in code snippets */ } +a.code.hl_event { /* style for links to event names in code snippets */ } +a.code.hl_sequence { /* style for links to sequence names in code snippets */ } +a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ } + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul { + overflow: visible; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + list-style-type: none; +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ + overflow-y: hidden; +} + +pre.fragment { + border: 1px solid var(--fragment-border-color); + background-color: var(--fragment-background-color); + color: var(--fragment-foreground-color); + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: var(--font-family-monospace); + font-size: 105%; +} + +div.fragment { + padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ + margin: 4px 8px 4px 2px; + color: var(--fragment-foreground-color); + background-color: var(--fragment-background-color); + border: 1px solid var(--fragment-border-color); +} + +div.line { + font-family: var(--font-family-monospace); + font-size: 13px; + min-height: 13px; + line-height: 1.2; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: var(--glow-color); + box-shadow: 0 0 10px var(--glow-color); +} + +span.fold { + margin-left: 5px; + margin-right: 1px; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; + display: inline-block; + width: 12px; + height: 12px; + background-repeat:no-repeat; + background-position:center; +} + +span.lineno { + padding-right: 4px; + margin-right: 9px; + text-align: right; + border-right: 2px solid var(--fragment-lineno-border-color); + color: var(--fragment-lineno-foreground-color); + background-color: var(--fragment-lineno-background-color); + white-space: pre; +} +span.lineno a, span.lineno a:visited { + color: var(--fragment-lineno-link-fg-color); + background-color: var(--fragment-lineno-link-bg-color); +} + +span.lineno a:hover { + color: var(--fragment-lineno-link-hover-fg-color); + background-color: var(--fragment-lineno-link-hover-bg-color); +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + color: var(--page-foreground-color); + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +p.formulaDsp { + text-align: center; +} + +img.dark-mode-visible { + display: none; +} +img.light-mode-visible { + display: none; +} + +img.formulaDsp { + +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; + width: var(--footer-logo-width); +} + +.compoundTemplParams { + color: var(--memdecl-template-color); + font-size: 80%; + line-height: 120%; +} + +/* @group Code Colorization */ + +span.keyword { + color: var(--code-keyword-color); +} + +span.keywordtype { + color: var(--code-type-keyword-color); +} + +span.keywordflow { + color: var(--code-flow-keyword-color); +} + +span.comment { + color: var(--code-comment-color); +} + +span.preprocessor { + color: var(--code-preprocessor-color); +} + +span.stringliteral { + color: var(--code-string-literal-color); +} + +span.charliteral { + color: var(--code-char-literal-color); +} + +span.xmlcdata { + color: var(--code-xml-cdata-color); +} + +span.vhdldigit { + color: var(--code-vhdl-digit-color); +} + +span.vhdlchar { + color: var(--code-vhdl-char-color); +} + +span.vhdlkeyword { + color: var(--code-vhdl-keyword-color); +} + +span.vhdllogic { + color: var(--code-vhdl-logic-color); +} + +blockquote { + background-color: var(--blockquote-background-color); + border-left: 2px solid var(--blockquote-border-color); + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid var(--table-cell-border-color); +} + +th.dirtab { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid var(--separator-color); +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: var(--glow-color); + box-shadow: 0 0 15px var(--glow-color); +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: var(--memdecl-background-color); + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: var(--memdecl-foreground-color); +} + +.memSeparator { + border-bottom: 1px solid var(--memdecl-separator-color); + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: var(--memdecl-template-color); + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: var(--memdef-title-gradient-image); + background-repeat: repeat-x; + background-color: var(--memdef-title-background-color); + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: var(--memdef-template-color); + font-weight: normal; + margin-left: 9px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px var(--glow-color); +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 0px 6px 0px; + color: var(--memdef-proto-text-color); + font-weight: bold; + text-shadow: var(--memdef-proto-text-shadow); + background-color: var(--memdef-proto-background-color); + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; +} + +.overload { + font-family: var(--font-family-monospace); + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 10px 2px 10px; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: var(--memdef-doc-background-color); + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: var(--memdef-param-name-color); + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: var(--font-family-monospace); + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: var(--label-background-color); + border-top:1px solid var(--label-left-top-border-color); + border-left:1px solid var(--label-left-top-border-color); + border-right:1px solid var(--label-right-bottom-border-color); + border-bottom:1px solid var(--label-right-bottom-border-color); + text-shadow: none; + color: var(--label-foreground-color); + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid var(--directory-separator-color); + border-bottom: 1px solid var(--directory-separator-color); + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.odd { + padding-left: 6px; + background-color: var(--index-odd-item-bg-color); +} + +.directory tr.even { + padding-left: 6px; + background-color: var(--index-even-item-bg-color); +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: var(--page-link-color); +} + +.arrow { + color: var(--nav-arrow-color); + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: var(--font-family-icon); + line-height: normal; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: var(--icon-background-color); + color: var(--icon-foreground-color); + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-folder-open-image); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-folder-closed-image); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-doc-image); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: var(--footer-foreground-color); +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid var(--table-cell-border-color); + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + margin-bottom: 10px; + border: 1px solid var(--memdef-border-color); + border-spacing: 0px; + border-radius: 4px; + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid var(--memdef-border-color); + border-bottom: 1px solid var(--memdef-border-color); + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid var(--memdef-border-color); +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image: var(--memdef-title-gradient-image); + background-repeat:repeat-x; + background-color: var(--memdef-title-background-color); + font-size: 90%; + color: var(--memdef-proto-text-color); + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid var(--memdef-border-color); +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: var(--nav-gradient-image); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image: var(--nav-gradient-image); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:var(--nav-text-normal-color); + border:solid 1px var(--nav-breadcrumb-border-color); + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:var(--nav-breadcrumb-image); + background-repeat:no-repeat; + background-position:right; + color: var(--nav-foreground-color); +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: var(--nav-text-normal-color); + font-family: var(--font-family-nav); + text-shadow: var(--nav-text-normal-shadow); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color: var(--nav-text-hover-color); + text-shadow: var(--nav-text-hover-shadow); +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color: var(--footer-foreground-color); + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image: var(--header-gradient-image); + background-repeat:repeat-x; + background-color: var(--header-background-color); + margin: 0px; + border-bottom: 1px solid var(--header-separator-color); +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectrow +{ + height: 56px; +} + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; + padding-left: 0.5em; +} + +#projectname +{ + font-size: 200%; + font-family: var(--font-family-title); + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font-size: 90%; + font-family: var(--font-family-title); + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font-size: 50%; + font-family: 50% var(--font-family-title); + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid var(--title-separator-color); + background-color: var(--title-background-color); +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:var(--citation-label-color); + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: var(--toc-background-color); + border: 1px solid var(--toc-border-color); + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +div.toc li { + background: var(--toc-down-arrow-image) no-repeat scroll 0 5px transparent; + font: 10px/1.2 var(--font-family-toc); + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 var(--font-family-toc); + color: var(--toc-header-color); + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 15px; +} + +div.toc li.level4 { + margin-left: 15px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +span.obfuscator { + display: none; +} + +.inherit_header { + font-weight: bold; + color: var(--inherit-header-color); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + /*white-space: nowrap;*/ + color: var(--tooltip-foreground-color); + background-color: var(--tooltip-background-color); + border: 1px solid var(--tooltip-border-color); + border-radius: 4px 4px 4px 4px; + box-shadow: var(--tooltip-shadow); + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: var(--tooltip-doc-color); + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip a { + color: var(--tooltip-link-color); +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: var(--tooltip-declaration-color); +} + +#powerTip div { + margin: 0px; + padding: 0px; + font-size: 12px; + font-family: var(--font-family-tooltip); + line-height: 16px; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: var(--tooltip-background-color); + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before, #powerTip.ne:before, #powerTip.nw:before { + border-top-color: var(--tooltip-border-color); + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: var(--tooltip-background-color); + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: var(--tooltip-border-color); + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: var(--tooltip-border-color); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: var(--tooltip-border-color); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: var(--tooltip-border-color); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: var(--tooltip-border-color); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid var(--table-cell-border-color); + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +tt, code, kbd, samp +{ + display: inline-block; +} +/* @end */ + +u { + text-decoration: underline; +} + +details>summary { + list-style-type: none; +} + +details > summary::-webkit-details-marker { + display: none; +} + +details>summary::before { + content: "\25ba"; + padding-right:4px; + font-size: 80%; +} + +details[open]>summary::before { + content: "\25bc"; + padding-right:4px; + font-size: 80%; +} + +body { + scrollbar-color: var(--scrollbar-thumb-color) var(--scrollbar-background-color); +} + +::-webkit-scrollbar { + background-color: var(--scrollbar-background-color); + height: 12px; + width: 12px; +} +::-webkit-scrollbar-thumb { + border-radius: 6px; + box-shadow: inset 0 0 12px 12px var(--scrollbar-thumb-color); + border: solid 2px transparent; +} +::-webkit-scrollbar-corner { + background-color: var(--scrollbar-background-color); +} + diff --git a/docs/html/doxygen.svg b/docs/html/doxygen.svg new file mode 100644 index 0000000..79a7635 --- /dev/null +++ b/docs/html/doxygen.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/dynsections.js b/docs/html/dynsections.js new file mode 100644 index 0000000..b73c828 --- /dev/null +++ b/docs/html/dynsections.js @@ -0,0 +1,192 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); + $('table.directory tr'). + removeClass('odd').filter(':visible:odd').addClass('odd'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l'); + // add vertical lines to other rows + $('span[class=lineno]').not(':eq(0)').append(''); + // add toggle controls to lines with fold divs + $('div[class=foldopen]').each(function() { + // extract specific id to use + var id = $(this).attr('id').replace('foldopen',''); + // extract start and end foldable fragment attributes + var start = $(this).attr('data-start'); + var end = $(this).attr('data-end'); + // replace normal fold span with controls for the first line of a foldable fragment + $(this).find('span[class=fold]:first').replaceWith(''); + // append div for folded (closed) representation + $(this).after(''); + // extract the first line from the "open" section to represent closed content + var line = $(this).children().first().clone(); + // remove any glow that might still be active on the original line + $(line).removeClass('glow'); + if (start) { + // if line already ends with a start marker (e.g. trailing {), remove it + $(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),'')); + } + // replace minus with plus symbol + $(line).find('span[class=fold]').css('background-image',plusImg[relPath]); + // append ellipsis + $(line).append(' '+start+''+end); + // insert constructed line into closed div + $('#foldclosed'+id).html(line); + }); +} + +/* @license-end */ diff --git a/docs/html/files.html b/docs/html/files.html new file mode 100644 index 0000000..1f5f55c --- /dev/null +++ b/docs/html/files.html @@ -0,0 +1,98 @@ + + + + + + + +My Project: File List + + + + + + + + + +
+
+ + + + + + +
+
My Project +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
File List
+
+
+
Here is a list of all documented files with brief descriptions:
+
[detail level 1234]
+ + + + + + + + + + + + + +
  src
  app
  core_logic
 client.cFonctions liées à la gestion des clients et de leur panier
 client.hFonctions liées à la gestion des clients et de leur panier
 responsable.cDéfinition des fonctions de responsable.c
 responsable.hDéclaration des fonctions de responsable.c
  interface
 interface_client.cImplémentation des fonctions liées à l'interface client
 interface_client.hEn-tête des fonctions liées à l'interface client
 interface_resp.cImplémentation des fonctions liées à l'interface du responsable
 interface_resp.hEn-tête des fonctions liées à l'interface du responsable
 main.cProgramme principal pour choisir une interface et lancer l'application
+
+
+ + + + diff --git a/docs/html/folderclosed.svg b/docs/html/folderclosed.svg new file mode 100644 index 0000000..b04bed2 --- /dev/null +++ b/docs/html/folderclosed.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/docs/html/folderclosedd.svg b/docs/html/folderclosedd.svg new file mode 100644 index 0000000..52f0166 --- /dev/null +++ b/docs/html/folderclosedd.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/docs/html/folderopen.svg b/docs/html/folderopen.svg new file mode 100644 index 0000000..f6896dd --- /dev/null +++ b/docs/html/folderopen.svg @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/docs/html/folderopend.svg b/docs/html/folderopend.svg new file mode 100644 index 0000000..2d1f06e --- /dev/null +++ b/docs/html/folderopend.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docs/html/globals.html b/docs/html/globals.html new file mode 100644 index 0000000..9d3c376 --- /dev/null +++ b/docs/html/globals.html @@ -0,0 +1,141 @@ + + + + + + + +My Project: File Members + + + + + + + + + +
+
+ + + + + + +
+
My Project +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented file members with links to the documentation:
+ +

- a -

+ + +

- c -

+ + +

- d -

+ + +

- g -

+ + +

- m -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+
+ + + + diff --git a/docs/html/globals_func.html b/docs/html/globals_func.html new file mode 100644 index 0000000..fc31966 --- /dev/null +++ b/docs/html/globals_func.html @@ -0,0 +1,141 @@ + + + + + + + +My Project: File Members + + + + + + + + + +
+
+ + + + + + +
+
My Project +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the documentation:
+ +

- a -

+ + +

- c -

+ + +

- d -

+ + +

- g -

+ + +

- m -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+
+ + + + diff --git a/docs/html/index.html b/docs/html/index.html new file mode 100644 index 0000000..a6ec34d --- /dev/null +++ b/docs/html/index.html @@ -0,0 +1,81 @@ + + + + + + + +My Project: Main Page + + + + + + + + + +
+
+ + + + + + +
+
My Project +
+
+
+ + + + + + + +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
My Project Documentation
+
+
+
+ + + + diff --git a/docs/html/interface__client_8c.html b/docs/html/interface__client_8c.html new file mode 100644 index 0000000..dd0e196 --- /dev/null +++ b/docs/html/interface__client_8c.html @@ -0,0 +1,166 @@ + + + + + + + +My Project: src/app/interface/interface_client.c File Reference + + + + + + + + + +
+
+ + + + + + +
+
My Project +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
interface_client.c File Reference
+
+
+ +

Implémentation des fonctions liées à l'interface client. +More...

+ + + + + + +

+Macros

+#define MAX_ARTICLES   100
 
+#define MAX_CLIENTS   100
 
+ + + + + + + + + + +

+Functions

+void affiche_client ()
 Affiche le menu principal de l'interface client.
 
void menu_client (int *choix)
 Laisse l'utilisateur choisir une option du menu.
 
void global_client ()
 Fonction principale de l'interface client.
 
+

Detailed Description

+

Implémentation des fonctions liées à l'interface client.

+

Function Documentation

+ +

◆ global_client()

+ +
+
+ + + + + + + +
void global_client ()
+
+ +

Fonction principale de l'interface client.

+

Cette fonction permet aux clients d'utiliser l'application pour gérer leur panier et effectuer des opérations telles que l'ajout, la suppression ou la modification d'articles dans le panier.

+ +
+
+ +

◆ menu_client()

+ +
+
+ + + + + + + + +
void menu_client (int * choix)
+
+ +

Laisse l'utilisateur choisir une option du menu.

+
Parameters
+ + +
[in,out]choix- L'option choisie par l'utilisateur.
+
+
+ +
+
+
+ + + + diff --git a/docs/html/interface__client_8h.html b/docs/html/interface__client_8h.html new file mode 100644 index 0000000..b1b03e8 --- /dev/null +++ b/docs/html/interface__client_8h.html @@ -0,0 +1,156 @@ + + + + + + + +My Project: src/app/interface/interface_client.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
My Project +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
interface_client.h File Reference
+
+
+ +

En-tête des fonctions liées à l'interface client. +More...

+
#include <stdio.h>
+
+

Go to the source code of this file.

+ + + + + + + + + + + +

+Functions

+void affiche_client ()
 Affiche le menu principal de l'interface client.
 
void menu_client (int *choix)
 Laisse l'utilisateur choisir une option du menu.
 
void global_client ()
 Fonction principale de l'interface client.
 
+

Detailed Description

+

En-tête des fonctions liées à l'interface client.

+

Function Documentation

+ +

◆ global_client()

+ +
+
+ + + + + + + +
void global_client ()
+
+ +

Fonction principale de l'interface client.

+

Cette fonction permet aux clients d'utiliser l'application pour gérer leur panier et effectuer des opérations telles que l'ajout, la suppression ou la modification d'articles dans le panier.

+ +
+
+ +

◆ menu_client()

+ +
+
+ + + + + + + + +
void menu_client (int * choix)
+
+ +

Laisse l'utilisateur choisir une option du menu.

+
Parameters
+ + +
[in,out]choix- L'option choisie par l'utilisateur.
+
+
+ +
+
+
+ + + + diff --git a/docs/html/interface__client_8h_source.html b/docs/html/interface__client_8h_source.html new file mode 100644 index 0000000..21816ec --- /dev/null +++ b/docs/html/interface__client_8h_source.html @@ -0,0 +1,101 @@ + + + + + + + +My Project: src/app/interface/interface_client.h Source File + + + + + + + + + +
+
+ + + + + + +
+
My Project +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
interface_client.h
+
+
+Go to the documentation of this file.
1
+
6#include <stdio.h>
+
7
+
11void affiche_client();
+
12
+
18void menu_client(int *choix);
+
19
+
27void global_client();
+
void menu_client(int *choix)
Laisse l'utilisateur choisir une option du menu.
Definition interface_client.c:38
+
void affiche_client()
Affiche le menu principal de l'interface client.
Definition interface_client.c:16
+
void global_client()
Fonction principale de l'interface client.
Definition interface_client.c:54
+
+ + + + diff --git a/docs/html/interface__resp_8c.html b/docs/html/interface__resp_8c.html new file mode 100644 index 0000000..cbc254e --- /dev/null +++ b/docs/html/interface__resp_8c.html @@ -0,0 +1,589 @@ + + + + + + + +My Project: src/app/interface/interface_resp.c File Reference + + + + + + + + + +
+
+ + + + + + +
+
My Project +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
interface_resp.c File Reference
+
+
+ +

Implémentation des fonctions liées à l'interface du responsable. +More...

+
#include <stdio.h>
+#include <stdlib.h>
+#include "interface_resp.h"
+#include "app/core_logic/responsable.h"
+#include "app/core_logic/client.h"
+
+ + + + + +

+Macros

+#define MAX_CLIENTS   100
 
+#define MAX_ARTICLES   100
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

+void affiche_resp (void)
 Affiche le menu principal de l'interface du responsable.
 
void affichArticles (int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique)
 Affiche la liste des articles.
 
void affichUnArticle (int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique)
 Affiche un article spécifique.
 
void affichUnClient (int tNumClient[], float tCagnotte[], int tSus[], int tLogique)
 Affiche un client spécifique.
 
void affichClients (int tNumClient[], float tCagnotte[], int tSus[], int tLogique)
 Affiche la liste des clients.
 
void affichAjoutArticle (int *ref, float *poids, float *volume, float *prix)
 Affiche les informations pour ajouter un nouvel article.
 
void affichSupprimerArticle (int *ref)
 Affiche les informations pour supprimer un article.
 
void affichModifierArticle (int *ref, float *poids, float *volume, float *prix)
 Affiche les informations pour modifier un article.
 
void affichAjoutClient (int tNumClient[], int tLogique, int *numC)
 Affiche les informations pour ajouter un nouveau client.
 
void menu_resp (int *choix)
 Fonction de menu pour le responsable.
 
void global_resp ()
 Fonction principale de l'interface du responsable.
 
+

Detailed Description

+

Implémentation des fonctions liées à l'interface du responsable.

+

Function Documentation

+ +

◆ affichAjoutArticle()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void affichAjoutArticle (int * ref,
float * poids,
float * volume,
float * prix 
)
+
+ +

Affiche les informations pour ajouter un nouvel article.

+

Affiche les informations nécessaires pour ajouter un nouvel article.

+
Parameters
+ + + + + +
[in,out]ref- Référence du nouvel article.
[in,out]poids- Poids du nouvel article.
[in,out]volume- Volume du nouvel article.
[in,out]prix- Prix du nouvel article.
+
+
+ +
+
+ +

◆ affichAjoutClient()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void affichAjoutClient (int tNumClient[],
int tLogique,
int * numC 
)
+
+ +

Affiche les informations pour ajouter un nouveau client.

+

Affiche les informations nécessaires pour ajouter un nouveau client.

+
Parameters
+ + + + +
[in]tNumClient- Tableau des numéros de client.
[in]tLogique- Taille logique des tableaux.
[in,out]numC- Numéro du nouveau client.
+
+
+ +
+
+ +

◆ affichArticles()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void affichArticles (int tRef[],
float tPoids[],
float tVol[],
float tPrix[],
int tLogique 
)
+
+ +

Affiche la liste des articles.

+
Parameters
+ + + + + + +
tRef- Tableau des références d'articles.
tPoids- Tableau des poids d'articles.
tVol- Tableau des volumes d'articles.
tPrix- Tableau des prix d'articles.
tLogique- Taille logique des tableaux.
+
+
+ +
+
+ +

◆ affichClients()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void affichClients (int tNumClient[],
float tCagnotte[],
int tSus[],
int tLogique 
)
+
+ +

Affiche la liste des clients.

+
Parameters
+ + + + + +
tNumClient- Tableau des numéros de client.
tCagnotte- Tableau des cagnottes des clients.
tSus- Tableau d'états des clients.
tLogique- Taille logique des tableaux.
+
+
+ +
+
+ +

◆ affichModifierArticle()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void affichModifierArticle (int * ref,
float * poids,
float * volume,
float * prix 
)
+
+ +

Affiche les informations pour modifier un article.

+

Affiche les informations nécessaires pour modifier un article.

+
Parameters
+ + + + + +
[in,out]ref- Référence de l'article à modifier.
[in,out]poids- Nouveau poids de l'article.
[in,out]volume- Nouveau volume de l'article.
[in,out]prix- Nouveau prix de l'article.
+
+
+ +
+
+ +

◆ affichSupprimerArticle()

+ +
+
+ + + + + + + + +
void affichSupprimerArticle (int * ref)
+
+ +

Affiche les informations pour supprimer un article.

+

Affiche les informations nécessaires pour supprimer un article.

+
Parameters
+ + +
[in,out]ref- Référence de l'article à supprimer.
+
+
+ +
+
+ +

◆ affichUnArticle()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void affichUnArticle (int tRef[],
float tPoids[],
float tVol[],
float tPrix[],
int tLogique 
)
+
+ +

Affiche un article spécifique.

+

Affiche les informations d'un article spécifique.

+
Parameters
+ + + + + + +
tRef- Tableau des références d'articles.
tPoids- Tableau des poids d'articles.
tVol- Tableau des volumes d'articles.
tPrix- Tableau des prix d'articles.
tLogique- Taille logique des tableaux.
+
+
+ +
+
+ +

◆ affichUnClient()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void affichUnClient (int tNumClient[],
float tCagnotte[],
int tSus[],
int tLogique 
)
+
+ +

Affiche un client spécifique.

+

Affiche les informations d'un client spécifique.

+
Parameters
+ + + + + +
tNumClient- Tableau des numéros de client.
tCagnotte- Tableau des cagnottes des clients.
tSus- Tableau d'états des clients.
tLogique- Taille logique des tableaux.
+
+
+ +
+
+ +

◆ global_resp()

+ +
+
+ + + + + + + +
void global_resp ()
+
+ +

Fonction principale de l'interface du responsable.

+

Cette fonction permet au responsable d'effectuer diverses actions telles que la gestion des articles et des clients.

+ +
+
+ +

◆ menu_resp()

+ +
+
+ + + + + + + + +
void menu_resp (int * choix)
+
+ +

Fonction de menu pour le responsable.

+

Laisse le responsable choisir une option du menu.

+
Parameters
+ + +
[in,out]choix- L'option choisie par le responsable.
+
+
+ +
+
+
+ + + + diff --git a/docs/html/interface__resp_8h.html b/docs/html/interface__resp_8h.html new file mode 100644 index 0000000..c16d295 --- /dev/null +++ b/docs/html/interface__resp_8h.html @@ -0,0 +1,646 @@ + + + + + + + +My Project: src/app/interface/interface_resp.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
My Project +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
interface_resp.h File Reference
+
+
+ +

En-tête des fonctions liées à l'interface du responsable. +More...

+ +

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

void affichArticles (int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique)
 Affiche la liste des articles.
 
void affichUnArticle (int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique)
 Affiche les informations d'un article spécifique.
 
void affichUnClient (int tNumClient[], float tCagnotte[], int tSus[], int tLogique)
 Affiche les informations d'un client spécifique.
 
void affichClients (int tNumClient[], float tCagnotte[], int tSus[], int tLogique)
 Affiche la liste des clients.
 
void affichAjoutArticle (int *ref, float *poids, float *volume, float *prix)
 Affiche les informations nécessaires pour ajouter un nouvel article.
 
void affichSupprimerArticle (int *ref)
 Affiche les informations nécessaires pour supprimer un article.
 
void affichModifierArticle (int *ref, float *poids, float *volume, float *prix)
 Affiche les informations nécessaires pour modifier un article.
 
+void problemRechercheArticle ()
 Affiche un message en cas de problème lors de la recherche d'un article.
 
void affichAjoutClient (int tNumClient[], int tLogique, int *numC)
 Affiche les informations nécessaires pour ajouter un nouveau client.
 
void menu_resp (int *choix)
 Laisse le responsable choisir une option du menu.
 
void global_resp ()
 Fonction principale de l'interface du responsable.
 
+void affiche_resp ()
 Affiche le menu principal de l'interface du responsable.
 
+

Detailed Description

+

En-tête des fonctions liées à l'interface du responsable.

+

Function Documentation

+ +

◆ affichAjoutArticle()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void affichAjoutArticle (int * ref,
float * poids,
float * volume,
float * prix 
)
+
+ +

Affiche les informations nécessaires pour ajouter un nouvel article.

+
Parameters
+ + + + + +
ref- Référence du nouvel article.
poids- Poids du nouvel article.
volume- Volume du nouvel article.
prix- Prix du nouvel article.
+
+
+

Affiche les informations nécessaires pour ajouter un nouvel article.

+
Parameters
+ + + + + +
[in,out]ref- Référence du nouvel article.
[in,out]poids- Poids du nouvel article.
[in,out]volume- Volume du nouvel article.
[in,out]prix- Prix du nouvel article.
+
+
+ +
+
+ +

◆ affichAjoutClient()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void affichAjoutClient (int tNumClient[],
int tLogique,
int * numC 
)
+
+ +

Affiche les informations nécessaires pour ajouter un nouveau client.

+
Parameters
+ + + + +
tNumClient- Tableau des numéros de clients.
tLogique- Nombre de clients actuellement enregistrés.
numC- Numéro du nouveau client.
+
+
+

Affiche les informations nécessaires pour ajouter un nouveau client.

+
Parameters
+ + + + +
[in]tNumClient- Tableau des numéros de client.
[in]tLogique- Taille logique des tableaux.
[in,out]numC- Numéro du nouveau client.
+
+
+ +
+
+ +

◆ affichArticles()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void affichArticles (int tRef[],
float tPoids[],
float tVol[],
float tPrix[],
int tLogique 
)
+
+ +

Affiche la liste des articles.

+
Parameters
+ + + + + + + + + + + +
tRef- Tableau des références des articles.
tPoids- Tableau des poids des articles.
tVol- Tableau des volumes des articles.
tPrix- Tableau des prix des articles.
tLogique- Nombre d'articles actuellement enregistrés.
tRef- Tableau des références d'articles.
tPoids- Tableau des poids d'articles.
tVol- Tableau des volumes d'articles.
tPrix- Tableau des prix d'articles.
tLogique- Taille logique des tableaux.
+
+
+ +
+
+ +

◆ affichClients()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void affichClients (int tNumClient[],
float tCagnotte[],
int tSus[],
int tLogique 
)
+
+ +

Affiche la liste des clients.

+
Parameters
+ + + + + + + + + +
tNumClient- Tableau des numéros de clients.
tCagnotte- Tableau des cagnottes des clients.
tSus- Tableau des états de suspension des clients.
tLogique- Nombre de clients actuellement enregistrés.
tNumClient- Tableau des numéros de client.
tCagnotte- Tableau des cagnottes des clients.
tSus- Tableau d'états des clients.
tLogique- Taille logique des tableaux.
+
+
+ +
+
+ +

◆ affichModifierArticle()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void affichModifierArticle (int * ref,
float * poids,
float * volume,
float * prix 
)
+
+ +

Affiche les informations nécessaires pour modifier un article.

+
Parameters
+ + + + + +
ref- Référence de l'article à modifier.
poids- Nouveau poids de l'article.
volume- Nouveau volume de l'article.
prix- Nouveau prix de l'article.
+
+
+

Affiche les informations nécessaires pour modifier un article.

+
Parameters
+ + + + + +
[in,out]ref- Référence de l'article à modifier.
[in,out]poids- Nouveau poids de l'article.
[in,out]volume- Nouveau volume de l'article.
[in,out]prix- Nouveau prix de l'article.
+
+
+ +
+
+ +

◆ affichSupprimerArticle()

+ +
+
+ + + + + + + + +
void affichSupprimerArticle (int * ref)
+
+ +

Affiche les informations nécessaires pour supprimer un article.

+
Parameters
+ + +
ref- Référence de l'article à supprimer.
+
+
+

Affiche les informations nécessaires pour supprimer un article.

+
Parameters
+ + +
[in,out]ref- Référence de l'article à supprimer.
+
+
+ +
+
+ +

◆ affichUnArticle()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void affichUnArticle (int tRef[],
float tPoids[],
float tVol[],
float tPrix[],
int tLogique 
)
+
+ +

Affiche les informations d'un article spécifique.

+
Parameters
+ + + + + + +
tRef- Tableau des références des articles.
tPoids- Tableau des poids des articles.
tVol- Tableau des volumes des articles.
tPrix- Tableau des prix des articles.
tLogique- Nombre d'articles actuellement enregistrés.
+
+
+

Affiche les informations d'un article spécifique.

+
Parameters
+ + + + + + +
tRef- Tableau des références d'articles.
tPoids- Tableau des poids d'articles.
tVol- Tableau des volumes d'articles.
tPrix- Tableau des prix d'articles.
tLogique- Taille logique des tableaux.
+
+
+ +
+
+ +

◆ affichUnClient()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void affichUnClient (int tNumClient[],
float tCagnotte[],
int tSus[],
int tLogique 
)
+
+ +

Affiche les informations d'un client spécifique.

+
Parameters
+ + + + + +
tNumClient- Tableau des numéros de clients.
tCagnotte- Tableau des cagnottes des clients.
tSus- Tableau des états de suspension des clients.
tLogique- Nombre de clients actuellement enregistrés.
+
+
+

Affiche les informations d'un client spécifique.

+
Parameters
+ + + + + +
tNumClient- Tableau des numéros de client.
tCagnotte- Tableau des cagnottes des clients.
tSus- Tableau d'états des clients.
tLogique- Taille logique des tableaux.
+
+
+ +
+
+ +

◆ global_resp()

+ +
+
+ + + + + + + +
void global_resp ()
+
+ +

Fonction principale de l'interface du responsable.

+

Cette fonction permet au responsable d'effectuer diverses actions telles que la gestion des articles et des clients.

+ +
+
+ +

◆ menu_resp()

+ +
+
+ + + + + + + + +
void menu_resp (int * choix)
+
+ +

Laisse le responsable choisir une option du menu.

+
Parameters
+ + +
[in,out]choix- L'option choisie par le responsable.
+
+
+

Laisse le responsable choisir une option du menu.

+
Parameters
+ + +
[in,out]choix- L'option choisie par le responsable.
+
+
+ +
+
+
+ + + + diff --git a/docs/html/interface__resp_8h_source.html b/docs/html/interface__resp_8h_source.html new file mode 100644 index 0000000..9147782 --- /dev/null +++ b/docs/html/interface__resp_8h_source.html @@ -0,0 +1,126 @@ + + + + + + + +My Project: src/app/interface/interface_resp.h Source File + + + + + + + + + +
+
+ + + + + + +
+
My Project +
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
interface_resp.h
+
+
+Go to the documentation of this file.
1
+
15void affichArticles(int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique);
+
16
+
26void affichUnArticle(int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique);
+
27
+
36void affichUnClient(int tNumClient[], float tCagnotte[], int tSus[], int tLogique);
+
37
+
46void affichClients(int tNumClient[], float tCagnotte[], int tSus[], int tLogique);
+
47
+
56void affichAjoutArticle(int *ref, float *poids, float *volume, float *prix);
+
57
+
63void affichSupprimerArticle(int *ref);
+
64
+
73void affichModifierArticle(int *ref, float *poids, float *volume, float *prix);
+
74
+ +
79
+
87void affichAjoutClient(int tNumClient[], int tLogique, int *numC);
+
88
+
94void menu_resp(int *choix);
+
95
+
101void global_resp();
+
102
+
106void affiche_resp();
+
void menu_resp(int *choix)
Laisse le responsable choisir une option du menu.
Definition interface_resp.c:230
+
void affiche_resp()
Affiche le menu principal de l'interface du responsable.
Definition interface_resp.c:18
+
void global_resp()
Fonction principale de l'interface du responsable.
Definition interface_resp.c:243
+
void affichSupprimerArticle(int *ref)
Affiche les informations nécessaires pour supprimer un article.
Definition interface_resp.c:162
+
void affichUnArticle(int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique)
Affiche les informations d'un article spécifique.
Definition interface_resp.c:64
+
void affichClients(int tNumClient[], float tCagnotte[], int tSus[], int tLogique)
Affiche la liste des clients.
Definition interface_resp.c:114
+
void problemRechercheArticle()
Affiche un message en cas de problème lors de la recherche d'un article.
+
void affichAjoutClient(int tNumClient[], int tLogique, int *numC)
Affiche les informations nécessaires pour ajouter un nouveau client.
Definition interface_resp.c:211
+
void affichAjoutArticle(int *ref, float *poids, float *volume, float *prix)
Affiche les informations nécessaires pour ajouter un nouvel article.
Definition interface_resp.c:131
+
void affichUnClient(int tNumClient[], float tCagnotte[], int tSus[], int tLogique)
Affiche les informations d'un client spécifique.
Definition interface_resp.c:89
+
void affichModifierArticle(int *ref, float *poids, float *volume, float *prix)
Affiche les informations nécessaires pour modifier un article.
Definition interface_resp.c:178
+
void affichArticles(int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique)
Affiche la liste des articles.
Definition interface_resp.c:47
+
+ + + + diff --git a/docs/html/jquery.js b/docs/html/jquery.js new file mode 100644 index 0000000..1dffb65 --- /dev/null +++ b/docs/html/jquery.js @@ -0,0 +1,34 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=y.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split(","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add(this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0),i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth()-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e,function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/docs/html/main_8c.html b/docs/html/main_8c.html new file mode 100644 index 0000000..996606b --- /dev/null +++ b/docs/html/main_8c.html @@ -0,0 +1,152 @@ + + + + + + + +My Project: src/main.c File Reference + + + + + + + + + +
+
+ + + + + + +
+
My Project +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
main.c File Reference
+
+
+ +

Programme principal pour choisir une interface et lancer l'application. +More...

+
#include <stdio.h>
+#include <stdlib.h>
+#include "app/interface/interface_client.h"
+#include "app/interface/interface_resp.h"
+#include "app/core_logic/client.h"
+#include "app/core_logic/responsable.h"
+
+ + + + + + + +

+Functions

int choixInterface (void)
 Fonction permettant à l'utilisateur de choisir une interface.
 
int main ()
 Fonction principale du programme.
 
+

Detailed Description

+

Programme principal pour choisir une interface et lancer l'application.

+

Function Documentation

+ +

◆ choixInterface()

+ +
+
+ + + + + + + + +
int choixInterface (void )
+
+ +

Fonction permettant à l'utilisateur de choisir une interface.

+

L'utilisateur peut choisir entre l'interface "responsable" ou "client" en saisissant 1 ou 2. Cette fonction vérifie que l'entrée de l'utilisateur est valide.

+
Returns
Le choix de l'interface (1 pour responsable, 2 pour client).
+ +
+
+ +

◆ main()

+ +
+
+ + + + + + + +
int main ()
+
+ +

Fonction principale du programme.

+

Cette fonction permet à l'utilisateur de choisir une interface à lancer (responsable ou client) en utilisant la fonction choixInterface(), puis elle lance l'interface correspondante.

+
Returns
0 si le programme s'est exécuté avec succès.
+ +
+
+
+ + + + diff --git a/docs/html/menu.js b/docs/html/menu.js new file mode 100644 index 0000000..b0b2693 --- /dev/null +++ b/docs/html/menu.js @@ -0,0 +1,136 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + var result=''; + if ('children' in data) { + result+='
    '; + for (var i in data.children) { + var url; + var link; + link = data.children[i].url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + } else { + url = relPath+link; + } + result+='
  • '+ + data.children[i].text+''+ + makeTree(data.children[i],relPath)+'
  • '; + } + result+='
'; + } + return result; + } + var searchBoxHtml; + if (searchEnabled) { + if (serverSide) { + searchBoxHtml='
'+ + '
'+ + '
 '+ + ''+ + '
'+ + '
'+ + '
'+ + '
'; + } else { + searchBoxHtml='
'+ + ''+ + ' '+ + ''+ + ''+ + ''+ + ''+ + ''+ + '
'; + } + } + + $('#main-nav').before('
'+ + ''+ + ''+ + '
'); + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchBoxHtml) { + $('#main-menu').append('
  • '); + } + var $mainMenuState = $('#main-menu-state'); + var prevWidth = 0; + if ($mainMenuState.length) { + function initResizableIfExists() { + if (typeof initResizable==='function') initResizable(); + } + // animate mobile menu + $mainMenuState.change(function(e) { + var $menu = $('#main-menu'); + var options = { duration: 250, step: initResizableIfExists }; + if (this.checked) { + options['complete'] = function() { $menu.css('display', 'block') }; + $menu.hide().slideDown(options); + } else { + options['complete'] = function() { $menu.css('display', 'none') }; + $menu.show().slideUp(options); + } + }); + // set default menu visibility + function resetState() { + var $menu = $('#main-menu'); + var $mainMenuState = $('#main-menu-state'); + var newWidth = $(window).outerWidth(); + if (newWidth!=prevWidth) { + if ($(window).outerWidth()<768) { + $mainMenuState.prop('checked',false); $menu.hide(); + $('#searchBoxPos1').html(searchBoxHtml); + $('#searchBoxPos2').hide(); + } else { + $menu.show(); + $('#searchBoxPos1').empty(); + $('#searchBoxPos2').html(searchBoxHtml); + $('#searchBoxPos2').show(); + } + if (typeof searchBox!=='undefined') { + searchBox.CloseResultsWindow(); + } + prevWidth = newWidth; + } + } + $(window).ready(function() { resetState(); initResizableIfExists(); }); + $(window).resize(resetState); + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/docs/html/menudata.js b/docs/html/menudata.js new file mode 100644 index 0000000..0d0156a --- /dev/null +++ b/docs/html/menudata.js @@ -0,0 +1,47 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}, +{text:"File Members",url:"globals.html",children:[ +{text:"All",url:"globals.html",children:[ +{text:"a",url:"globals.html#index_a"}, +{text:"c",url:"globals.html#index_c"}, +{text:"d",url:"globals.html#index_d"}, +{text:"g",url:"globals.html#index_g"}, +{text:"m",url:"globals.html#index_m"}, +{text:"p",url:"globals.html#index_p"}, +{text:"r",url:"globals.html#index_r"}, +{text:"s",url:"globals.html#index_s"}]}, +{text:"Functions",url:"globals_func.html",children:[ +{text:"a",url:"globals_func.html#index_a"}, +{text:"c",url:"globals_func.html#index_c"}, +{text:"d",url:"globals_func.html#index_d"}, +{text:"g",url:"globals_func.html#index_g"}, +{text:"m",url:"globals_func.html#index_m"}, +{text:"p",url:"globals_func.html#index_p"}, +{text:"r",url:"globals_func.html#index_r"}, +{text:"s",url:"globals_func.html#index_s"}]}]}]}]} diff --git a/docs/html/minus.svg b/docs/html/minus.svg new file mode 100644 index 0000000..f70d0c1 --- /dev/null +++ b/docs/html/minus.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/docs/html/minusd.svg b/docs/html/minusd.svg new file mode 100644 index 0000000..5f8e879 --- /dev/null +++ b/docs/html/minusd.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/docs/html/nav_f.png b/docs/html/nav_f.png new file mode 100644 index 0000000..72a58a5 Binary files /dev/null and b/docs/html/nav_f.png differ diff --git a/docs/html/nav_fd.png b/docs/html/nav_fd.png new file mode 100644 index 0000000..032fbdd Binary files /dev/null and b/docs/html/nav_fd.png differ diff --git a/docs/html/nav_g.png b/docs/html/nav_g.png new file mode 100644 index 0000000..2093a23 Binary files /dev/null and b/docs/html/nav_g.png differ diff --git a/docs/html/nav_h.png b/docs/html/nav_h.png new file mode 100644 index 0000000..33389b1 Binary files /dev/null and b/docs/html/nav_h.png differ diff --git a/docs/html/nav_hd.png b/docs/html/nav_hd.png new file mode 100644 index 0000000..de80f18 Binary files /dev/null and b/docs/html/nav_hd.png differ diff --git a/docs/html/open.png b/docs/html/open.png new file mode 100644 index 0000000..30f75c7 Binary files /dev/null and b/docs/html/open.png differ diff --git a/docs/html/plus.svg b/docs/html/plus.svg new file mode 100644 index 0000000..0752016 --- /dev/null +++ b/docs/html/plus.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/html/plusd.svg b/docs/html/plusd.svg new file mode 100644 index 0000000..0c65bfe --- /dev/null +++ b/docs/html/plusd.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/html/responsable_8c.html b/docs/html/responsable_8c.html new file mode 100644 index 0000000..80762a0 --- /dev/null +++ b/docs/html/responsable_8c.html @@ -0,0 +1,565 @@ + + + + + + + +My Project: src/app/core_logic/responsable.c File Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    My Project +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    responsable.c File Reference
    +
    +
    + +

    Définition des fonctions de responsable.c. +More...

    +
    #include <stdio.h>
    +#include <stdlib.h>
    +#include "responsable.h"
    +#include "../interface/interface_resp.h"
    +
    + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    int chargementArticles (int tRef[], float tPoids[], float tVol[], float tPrix[], int tPhysique)
     Charge les informations des articles à partir d'un fichier dans des tableaux.
     
    void sauvegardArticles (int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique)
     Sauvegarde les informations des articles dans un fichier.
     
    int ajouterArticle (int tRef[], float tPoids[], float tVol[], float tPrix[], int *tLogique, int tPhysique, int ref, float poids, float volume, float prix)
     Ajoute un nouvel article aux tableaux d'articles.
     
    void rechercheRefArticle (int tRef[], int ref, int *index, int tLogique)
     Recherche une référence d'article dans le tableau tRef.
     
    void supprimerArticle (int tRef[], float tPoids[], float tVol[], float tPrix[], int *tLogique)
     Supprime un article des tableaux d'articles.
     
    void modifierArticle (int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique)
     Modifie les informations d'un article existant.
     
    void ajouterClient (int tNumClient[], float tCagnotte[], int tSus[], int *tLogique, int tPhysique)
     Ajoute un nouveau client aux tableaux de clients.
     
    +

    Detailed Description

    +

    Définition des fonctions de responsable.c.

    +

    Function Documentation

    + +

    ◆ ajouterArticle()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    int ajouterArticle (int tRef[],
    float tPoids[],
    float tVol[],
    float tPrix[],
    int * tLogique,
    int tPhysique,
    int ref,
    float poids,
    float volume,
    float prix 
    )
    +
    + +

    Ajoute un nouvel article aux tableaux d'articles.

    +

    Cette fonction ajoute un nouvel article aux tableaux tRef, tPoids, tVol, et tPrix et incrémente la taille logique.

    +
    Parameters
    + + + + + + + + + + + +
    tRefTableau des références d'articles.
    tPoidsTableau des poids des articles.
    tVolTableau des volumes des articles.
    tPrixTableau des prix unitaires des articles.
    tLogiqueTaille logique des tableaux.
    tPhysiqueTaille physique des tableaux.
    refRéférence du nouvel article.
    poidsPoids du nouvel article.
    volumeVolume du nouvel article.
    prixPrix unitaire du nouvel article.
    +
    +
    +
    Returns
    0 en cas de succès, -2 si le tableau est plein.
    + +
    +
    + +

    ◆ ajouterClient()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void ajouterClient (int tNumClient[],
    float tCagnotte[],
    int tSus[],
    int * tLogique,
    int tPhysique 
    )
    +
    + +

    Ajoute un nouveau client aux tableaux de clients.

    +

    Cette fonction ajoute un nouveau client aux tableaux tNumClient, tCagnotte et tSus et incrémente la taille logique.

    +
    Parameters
    + + + + + + +
    tNumClientTableau des numéros de client.
    tCagnotteTableau des cagnottes des clients.
    tSusTableau des états de suspension des clients.
    tLogiquePointeur vers la taille logique des tableaux.
    tPhysiqueTaille physique des tableaux.
    +
    +
    + +
    +
    + +

    ◆ chargementArticles()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    int chargementArticles (int tRef[],
    float tPoids[],
    float tVol[],
    float tPrix[],
    int tPhysique 
    )
    +
    + +

    Charge les informations des articles à partir d'un fichier dans des tableaux.

    +

    Cette fonction lit les informations des articles à partir du fichier "donnee/articles.txt" et les stocke dans les tableaux tRef, tPoids, tVol, et tPrix.

    +
    Parameters
    + + + + + + +
    tRefTableau des références d'articles.
    tPoidsTableau des poids des articles.
    tVolTableau des volumes des articles.
    tPrixTableau des prix unitaires des articles.
    tPhysiqueTaille physique des tableaux.
    +
    +
    +
    Returns
    Le nombre d'articles chargés avec succès ou -1 en cas d'erreur.
    + +
    +
    + +

    ◆ modifierArticle()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void modifierArticle (int tRef[],
    float tPoids[],
    float tVol[],
    float tPrix[],
    int tLogique 
    )
    +
    + +

    Modifie les informations d'un article existant.

    +

    Cette fonction permet de modifier les informations (poids, volume, prix) d'un article existant.

    +
    Parameters
    + + + + + + +
    tRefTableau des références d'articles.
    tPoidsTableau des poids des articles.
    tVolTableau des volumes des articles.
    tPrixTableau des prix unitaires des articles.
    tLogiqueTaille logique des tableaux.
    +
    +
    + +
    +
    + +

    ◆ rechercheRefArticle()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void rechercheRefArticle (int tRef[],
    int ref,
    int * index,
    int tLogique 
    )
    +
    + +

    Recherche une référence d'article dans le tableau tRef.

    +

    Cette fonction recherche une référence d'article dans le tableau tRef et renvoie l'index si l'article est trouvé.

    +
    Parameters
    + + + + + +
    tRefTableau des références d'articles.
    refRéférence de l'article à rechercher.
    indexPointeur vers la variable pour stocker l'index de l'article trouvé.
    tLogiqueTaille logique des tableaux.
    +
    +
    + +
    +
    + +

    ◆ sauvegardArticles()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void sauvegardArticles (int tRef[],
    float tPoids[],
    float tVol[],
    float tPrix[],
    int tLogique 
    )
    +
    + +

    Sauvegarde les informations des articles dans un fichier.

    +

    Cette fonction sauvegarde les informations des articles depuis les tableaux tRef, tPoids, tVol et tPrix dans le fichier "donnee/articles.txt".

    +
    Parameters
    + + + + + + +
    tRefTableau des références d'articles.
    tPoidsTableau des poids des articles.
    tVolTableau des volumes des articles.
    tPrixTableau des prix unitaires des articles.
    tLogiqueTaille logique des tableaux.
    +
    +
    + +
    +
    + +

    ◆ supprimerArticle()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void supprimerArticle (int tRef[],
    float tPoids[],
    float tVol[],
    float tPrix[],
    int * tLogique 
    )
    +
    + +

    Supprime un article des tableaux d'articles.

    +

    Cette fonction supprime un article des tableaux tRef, tPoids, tVol, et tPrix et met à jour la taille logique.

    +
    Parameters
    + + + + + + +
    tRefTableau des références d'articles.
    tPoidsTableau des poids des articles.
    tVolTableau des volumes des articles.
    tPrixTableau des prix unitaires des articles.
    tLogiquePointeur vers la taille logique des tableaux.
    +
    +
    + +
    +
    +
    + + + + diff --git a/docs/html/responsable_8h.html b/docs/html/responsable_8h.html new file mode 100644 index 0000000..a8840b5 --- /dev/null +++ b/docs/html/responsable_8h.html @@ -0,0 +1,564 @@ + + + + + + + +My Project: src/app/core_logic/responsable.h File Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    My Project +
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    responsable.h File Reference
    +
    +
    + +

    Déclaration des fonctions de responsable.c. +More...

    +
    #include <stdio.h>
    +
    +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    int chargementArticles (int tRef[], float tPoids[], float tVol[], float tPrix[], int tPhysique)
     Charge les informations des articles à partir d'un fichier dans des tableaux.
     
    void sauvegardArticles (int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique)
     Sauvegarde les informations des articles dans un fichier.
     
    int ajouterArticle (int tRef[], float tPoids[], float tVol[], float tPrix[], int *tLogique, int tPhysique, int ref, float poids, float volume, float prix)
     Ajoute un nouvel article aux tableaux d'articles.
     
    void rechercheRefArticle (int tRef[], int ref, int *index, int tLogique)
     Recherche une référence d'article dans le tableau tRef.
     
    void supprimerArticle (int tRef[], float tPoids[], float tVol[], float tPrix[], int *tLogique)
     Supprime un article des tableaux d'articles.
     
    void modifierArticle (int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique)
     Modifie les informations d'un article existant.
     
    void ajouterClient (int tNumClient[], float tCagnotte[], int tSus[], int *tLogique, int tPhysique)
     Ajoute un nouveau client aux tableaux de clients.
     
    +

    Detailed Description

    +

    Déclaration des fonctions de responsable.c.

    +

    Function Documentation

    + +

    ◆ ajouterArticle()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    int ajouterArticle (int tRef[],
    float tPoids[],
    float tVol[],
    float tPrix[],
    int * tLogique,
    int tPhysique,
    int ref,
    float poids,
    float volume,
    float prix 
    )
    +
    + +

    Ajoute un nouvel article aux tableaux d'articles.

    +

    Cette fonction ajoute un nouvel article aux tableaux tRef, tPoids, tVol, et tPrix et incrémente la taille logique.

    +
    Parameters
    + + + + + + + + + + + +
    tRefTableau des références d'articles.
    tPoidsTableau des poids des articles.
    tVolTableau des volumes des articles.
    tPrixTableau des prix unitaires des articles.
    tLogiqueTaille logique des tableaux.
    tPhysiqueTaille physique des tableaux.
    refRéférence du nouvel article.
    poidsPoids du nouvel article.
    volumeVolume du nouvel article.
    prixPrix unitaire du nouvel article.
    +
    +
    +
    Returns
    0 en cas de succès, -2 si le tableau est plein.
    + +
    +
    + +

    ◆ ajouterClient()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void ajouterClient (int tNumClient[],
    float tCagnotte[],
    int tSus[],
    int * tLogique,
    int tPhysique 
    )
    +
    + +

    Ajoute un nouveau client aux tableaux de clients.

    +

    Cette fonction ajoute un nouveau client aux tableaux tNumClient, tCagnotte et tSus et incrémente la taille logique.

    +
    Parameters
    + + + + + + +
    tNumClientTableau des numéros de client.
    tCagnotteTableau des cagnottes des clients.
    tSusTableau des états de suspension des clients.
    tLogiquePointeur vers la taille logique des tableaux.
    tPhysiqueTaille physique des tableaux.
    +
    +
    + +
    +
    + +

    ◆ chargementArticles()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    int chargementArticles (int tRef[],
    float tPoids[],
    float tVol[],
    float tPrix[],
    int tPhysique 
    )
    +
    + +

    Charge les informations des articles à partir d'un fichier dans des tableaux.

    +

    Cette fonction lit les informations des articles à partir du fichier "donnee/articles.txt" et les stocke dans les tableaux tRef, tPoids, tVol, et tPrix.

    +
    Parameters
    + + + + + + +
    tRefTableau des références d'articles.
    tPoidsTableau des poids des articles.
    tVolTableau des volumes des articles.
    tPrixTableau des prix unitaires des articles.
    tPhysiqueTaille physique des tableaux.
    +
    +
    +
    Returns
    Le nombre d'articles chargés avec succès ou -1 en cas d'erreur.
    + +
    +
    + +

    ◆ modifierArticle()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void modifierArticle (int tRef[],
    float tPoids[],
    float tVol[],
    float tPrix[],
    int tLogique 
    )
    +
    + +

    Modifie les informations d'un article existant.

    +

    Cette fonction permet de modifier les informations (poids, volume, prix) d'un article existant.

    +
    Parameters
    + + + + + + +
    tRefTableau des références d'articles.
    tPoidsTableau des poids des articles.
    tVolTableau des volumes des articles.
    tPrixTableau des prix unitaires des articles.
    tLogiqueTaille logique des tableaux.
    +
    +
    + +
    +
    + +

    ◆ rechercheRefArticle()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void rechercheRefArticle (int tRef[],
    int ref,
    int * index,
    int tLogique 
    )
    +
    + +

    Recherche une référence d'article dans le tableau tRef.

    +

    Cette fonction recherche une référence d'article dans le tableau tRef et renvoie l'index si l'article est trouvé.

    +
    Parameters
    + + + + + +
    tRefTableau des références d'articles.
    refRéférence de l'article à rechercher.
    indexPointeur vers la variable pour stocker l'index de l'article trouvé.
    tLogiqueTaille logique des tableaux.
    +
    +
    + +
    +
    + +

    ◆ sauvegardArticles()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void sauvegardArticles (int tRef[],
    float tPoids[],
    float tVol[],
    float tPrix[],
    int tLogique 
    )
    +
    + +

    Sauvegarde les informations des articles dans un fichier.

    +

    Cette fonction sauvegarde les informations des articles depuis les tableaux tRef, tPoids, tVol et tPrix dans le fichier "donnee/articles.txt".

    +
    Parameters
    + + + + + + +
    tRefTableau des références d'articles.
    tPoidsTableau des poids des articles.
    tVolTableau des volumes des articles.
    tPrixTableau des prix unitaires des articles.
    tLogiqueTaille logique des tableaux.
    +
    +
    + +
    +
    + +

    ◆ supprimerArticle()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void supprimerArticle (int tRef[],
    float tPoids[],
    float tVol[],
    float tPrix[],
    int * tLogique 
    )
    +
    + +

    Supprime un article des tableaux d'articles.

    +

    Cette fonction supprime un article des tableaux tRef, tPoids, tVol, et tPrix et met à jour la taille logique.

    +
    Parameters
    + + + + + + +
    tRefTableau des références d'articles.
    tPoidsTableau des poids des articles.
    tVolTableau des volumes des articles.
    tPrixTableau des prix unitaires des articles.
    tLogiquePointeur vers la taille logique des tableaux.
    +
    +
    + +
    +
    +
    + + + + diff --git a/docs/html/responsable_8h_source.html b/docs/html/responsable_8h_source.html new file mode 100644 index 0000000..73c7957 --- /dev/null +++ b/docs/html/responsable_8h_source.html @@ -0,0 +1,113 @@ + + + + + + + +My Project: src/app/core_logic/responsable.h Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    My Project +
    +
    +
    + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    responsable.h
    +
    +
    +Go to the documentation of this file.
    1
    +
    6#include <stdio.h>
    +
    7
    +
    21int chargementArticles(int tRef[], float tPoids[], float tVol[], float tPrix[], int tPhysique);
    +
    22
    +
    35void sauvegardArticles(int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique);
    +
    36
    +
    54int ajouterArticle(int tRef[], float tPoids[], float tVol[], float tPrix[], int *tLogique, int tPhysique, int ref, float poids, float volume, float prix);
    +
    55
    +
    66void rechercheRefArticle(int tRef[], int ref, int *index, int tLogique);
    +
    67
    +
    79void supprimerArticle(int tRef[], float tPoids[], float tVol[], float tPrix[], int *tLogique);
    +
    80
    +
    92void modifierArticle(int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique);
    +
    93
    +
    105void ajouterClient(int tNumClient[], float tCagnotte[], int tSus[], int *tLogique, int tPhysique);
    +
    void supprimerArticle(int tRef[], float tPoids[], float tVol[], float tPrix[], int *tLogique)
    Supprime un article des tableaux d'articles.
    Definition responsable.c:150
    +
    void ajouterClient(int tNumClient[], float tCagnotte[], int tSus[], int *tLogique, int tPhysique)
    Ajoute un nouveau client aux tableaux de clients.
    Definition responsable.c:201
    +
    void rechercheRefArticle(int tRef[], int ref, int *index, int tLogique)
    Recherche une référence d'article dans le tableau tRef.
    Definition responsable.c:124
    +
    int chargementArticles(int tRef[], float tPoids[], float tVol[], float tPrix[], int tPhysique)
    Charge les informations des articles à partir d'un fichier dans des tableaux.
    Definition responsable.c:24
    +
    void modifierArticle(int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique)
    Modifie les informations d'un article existant.
    Definition responsable.c:177
    +
    int ajouterArticle(int tRef[], float tPoids[], float tVol[], float tPrix[], int *tLogique, int tPhysique, int ref, float poids, float volume, float prix)
    Ajoute un nouvel article aux tableaux d'articles.
    Definition responsable.c:97
    +
    void sauvegardArticles(int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique)
    Sauvegarde les informations des articles dans un fichier.
    Definition responsable.c:62
    +
    + + + + diff --git a/docs/html/search/all_0.js b/docs/html/search/all_0.js new file mode 100644 index 0000000..a0c60b4 --- /dev/null +++ b/docs/html/search/all_0.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['affichajoutarticle_0',['affichajoutarticle',['../interface__resp_8c.html#a9e01225a96daa69eb466e03fd1108c0a',1,'affichAjoutArticle(int *ref, float *poids, float *volume, float *prix): interface_resp.c'],['../interface__resp_8h.html#a9e01225a96daa69eb466e03fd1108c0a',1,'affichAjoutArticle(int *ref, float *poids, float *volume, float *prix): interface_resp.c']]], + ['affichajoutclient_1',['affichajoutclient',['../interface__resp_8c.html#a964d2d2bc5b9aa544e6187ed6cbc961c',1,'affichAjoutClient(int tNumClient[], int tLogique, int *numC): interface_resp.c'],['../interface__resp_8h.html#a964d2d2bc5b9aa544e6187ed6cbc961c',1,'affichAjoutClient(int tNumClient[], int tLogique, int *numC): interface_resp.c']]], + ['afficharticles_2',['afficharticles',['../interface__resp_8c.html#af518981f5e0d4575a6b7bae3f22e9985',1,'affichArticles(int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique): interface_resp.c'],['../interface__resp_8h.html#af518981f5e0d4575a6b7bae3f22e9985',1,'affichArticles(int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique): interface_resp.c']]], + ['affichclients_3',['affichclients',['../interface__resp_8c.html#a7c0531c63ea490d0b674960483e9ba27',1,'affichClients(int tNumClient[], float tCagnotte[], int tSus[], int tLogique): interface_resp.c'],['../interface__resp_8h.html#a7c0531c63ea490d0b674960483e9ba27',1,'affichClients(int tNumClient[], float tCagnotte[], int tSus[], int tLogique): interface_resp.c']]], + ['affiche_5fclient_4',['affiche_client',['../interface__client_8c.html#a98012af1d373da58fa7dc041f97216bc',1,'affiche_client(): interface_client.c'],['../interface__client_8h.html#a98012af1d373da58fa7dc041f97216bc',1,'affiche_client(): interface_client.c']]], + ['affiche_5frecap_5fpanier_5',['affiche_recap_panier',['../client_8c.html#a927a335cb51f714f0e6e89c49f2d0258',1,'affiche_recap_panier(int panier[], int taillePanier, int references[], float poids[], float volume[], float prixUnitaire[], int quantites[]): client.c'],['../client_8h.html#a927a335cb51f714f0e6e89c49f2d0258',1,'affiche_recap_panier(int panier[], int taillePanier, int references[], float poids[], float volume[], float prixUnitaire[], int quantites[]): client.c']]], + ['affiche_5fresp_6',['affiche_resp',['../interface__resp_8c.html#abb1a25ae1531e0857856843b41805528',1,'affiche_resp(void): interface_resp.c'],['../interface__resp_8h.html#a333cea7df6b2de2a16440aaf53d63af4',1,'affiche_resp(): interface_resp.c']]], + ['affichmodifierarticle_7',['affichmodifierarticle',['../interface__resp_8c.html#af075e50ffce501b901ff31b1fb73262f',1,'affichModifierArticle(int *ref, float *poids, float *volume, float *prix): interface_resp.c'],['../interface__resp_8h.html#af075e50ffce501b901ff31b1fb73262f',1,'affichModifierArticle(int *ref, float *poids, float *volume, float *prix): interface_resp.c']]], + ['affichsupprimerarticle_8',['affichsupprimerarticle',['../interface__resp_8c.html#a47ca5882a75fd3b919ba02b028582473',1,'affichSupprimerArticle(int *ref): interface_resp.c'],['../interface__resp_8h.html#a47ca5882a75fd3b919ba02b028582473',1,'affichSupprimerArticle(int *ref): interface_resp.c']]], + ['affichunarticle_9',['affichunarticle',['../interface__resp_8c.html#a5e9ce25cbd73f9d4732b84eb5ab59d13',1,'affichUnArticle(int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique): interface_resp.c'],['../interface__resp_8h.html#a5e9ce25cbd73f9d4732b84eb5ab59d13',1,'affichUnArticle(int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique): interface_resp.c']]], + ['affichunclient_10',['affichunclient',['../interface__resp_8c.html#aa29059c1470e490b32fdf483b5570c88',1,'affichUnClient(int tNumClient[], float tCagnotte[], int tSus[], int tLogique): interface_resp.c'],['../interface__resp_8h.html#aa29059c1470e490b32fdf483b5570c88',1,'affichUnClient(int tNumClient[], float tCagnotte[], int tSus[], int tLogique): interface_resp.c']]], + ['ajouter_5farticle_5fau_5fpanier_11',['ajouter_article_au_panier',['../client_8c.html#a08acbb5bd9bf4235f8d5cdd2edb0749a',1,'ajouter_article_au_panier(int numeroClient, int references[], float poids[], float volume[], float prixUnitaire[], int numeros[], float cagnottes[], int suspendues[], int nombreArticles, int nombreClients, float volumeCoffre, float chargeMaximale, int panier[], int quantites[], int *taillePanier): client.c'],['../client_8h.html#a08acbb5bd9bf4235f8d5cdd2edb0749a',1,'ajouter_article_au_panier(int numeroClient, int references[], float poids[], float volume[], float prixUnitaire[], int numeros[], float cagnottes[], int suspendues[], int nombreArticles, int nombreClients, float volumeCoffre, float chargeMaximale, int panier[], int quantites[], int *taillePanier): client.c']]], + ['ajouterarticle_12',['ajouterarticle',['../responsable_8c.html#abce68a203cf18b85ebdad34e468815f0',1,'ajouterArticle(int tRef[], float tPoids[], float tVol[], float tPrix[], int *tLogique, int tPhysique, int ref, float poids, float volume, float prix): responsable.c'],['../responsable_8h.html#abce68a203cf18b85ebdad34e468815f0',1,'ajouterArticle(int tRef[], float tPoids[], float tVol[], float tPrix[], int *tLogique, int tPhysique, int ref, float poids, float volume, float prix): responsable.c']]], + ['ajouterclient_13',['ajouterclient',['../responsable_8c.html#a185476dbf2dae604d3deb6a3085580a2',1,'ajouterClient(int tNumClient[], float tCagnotte[], int tSus[], int *tLogique, int tPhysique): responsable.c'],['../responsable_8h.html#a185476dbf2dae604d3deb6a3085580a2',1,'ajouterClient(int tNumClient[], float tCagnotte[], int tSus[], int *tLogique, int tPhysique): responsable.c']]] +]; diff --git a/docs/html/search/all_1.js b/docs/html/search/all_1.js new file mode 100644 index 0000000..9b6470c --- /dev/null +++ b/docs/html/search/all_1.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['chargementarticles_0',['chargementarticles',['../responsable_8h.html#a937ddfa15445cc5d2336130fb6567ce1',1,'chargementArticles(int tRef[], float tPoids[], float tVol[], float tPrix[], int tPhysique): responsable.c'],['../responsable_8c.html#a937ddfa15445cc5d2336130fb6567ce1',1,'chargementArticles(int tRef[], float tPoids[], float tVol[], float tPrix[], int tPhysique): responsable.c']]], + ['charger_5fclients_1',['charger_clients',['../client_8h.html#a8bc792436cb2773b638667f7a898a625',1,'charger_clients(int numeros[], float cagnottes[], int suspendues[], int tPhysique): client.c'],['../client_8c.html#a8bc792436cb2773b638667f7a898a625',1,'charger_clients(int numeros[], float cagnottes[], int suspendues[], int tPhysique): client.c']]], + ['choixinterface_2',['choixInterface',['../main_8c.html#a5fdac9110609b2cc4b43c68b643af452',1,'main.c']]], + ['client_2ec_3',['client.c',['../client_8c.html',1,'']]], + ['client_2eh_4',['client.h',['../client_8h.html',1,'']]] +]; diff --git a/docs/html/search/all_2.js b/docs/html/search/all_2.js new file mode 100644 index 0000000..bdee9be --- /dev/null +++ b/docs/html/search/all_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['deduire_5fcagnotte_0',['deduire_cagnotte',['../client_8c.html#a7203df964d63cb07d7b19912d5e3c3bd',1,'deduire_cagnotte(int numeroClient, float montant, int numeros[], float cagnottes[], int nombreClients, int suspendus[]): client.c'],['../client_8h.html#a7203df964d63cb07d7b19912d5e3c3bd',1,'deduire_cagnotte(int numeroClient, float montant, int numeros[], float cagnottes[], int nombreClients, int suspendus[]): client.c']]] +]; diff --git a/docs/html/search/all_3.js b/docs/html/search/all_3.js new file mode 100644 index 0000000..2a654ce --- /dev/null +++ b/docs/html/search/all_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['global_5fclient_0',['global_client',['../interface__client_8c.html#aace0a1bcc32fda795f57fa76de7ec276',1,'global_client(): interface_client.c'],['../interface__client_8h.html#aace0a1bcc32fda795f57fa76de7ec276',1,'global_client(): interface_client.c']]], + ['global_5fresp_1',['global_resp',['../interface__resp_8c.html#a421ebe0511c91fb6431aed873aa01e35',1,'global_resp(): interface_resp.c'],['../interface__resp_8h.html#a421ebe0511c91fb6431aed873aa01e35',1,'global_resp(): interface_resp.c']]] +]; diff --git a/docs/html/search/all_4.js b/docs/html/search/all_4.js new file mode 100644 index 0000000..42d86ba --- /dev/null +++ b/docs/html/search/all_4.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['interface_5fclient_2ec_0',['interface_client.c',['../interface__client_8c.html',1,'']]], + ['interface_5fclient_2eh_1',['interface_client.h',['../interface__client_8h.html',1,'']]], + ['interface_5fresp_2ec_2',['interface_resp.c',['../interface__resp_8c.html',1,'']]], + ['interface_5fresp_2eh_3',['interface_resp.h',['../interface__resp_8h.html',1,'']]] +]; diff --git a/docs/html/search/all_5.js b/docs/html/search/all_5.js new file mode 100644 index 0000000..534e215 --- /dev/null +++ b/docs/html/search/all_5.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['main_0',['main',['../main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main.c']]], + ['main_2ec_1',['main.c',['../main_8c.html',1,'']]], + ['menu_5fclient_2',['menu_client',['../interface__client_8c.html#a49de18c6560633af132a56085d28a8ba',1,'menu_client(int *choix): interface_client.c'],['../interface__client_8h.html#a49de18c6560633af132a56085d28a8ba',1,'menu_client(int *choix): interface_client.c']]], + ['menu_5fresp_3',['menu_resp',['../interface__resp_8c.html#a1f14dc8f23be75e1a5c0e7ce0c77f597',1,'menu_resp(int *choix): interface_resp.c'],['../interface__resp_8h.html#a1f14dc8f23be75e1a5c0e7ce0c77f597',1,'menu_resp(int *choix): interface_resp.c']]], + ['modifier_5fquantite_5farticle_5fpanier_4',['modifier_quantite_article_panier',['../client_8c.html#affb9999893c1599e32ff604b5b50899d',1,'modifier_quantite_article_panier(int panier[], int quantites[], int *taillePanier): client.c'],['../client_8h.html#affb9999893c1599e32ff604b5b50899d',1,'modifier_quantite_article_panier(int panier[], int quantites[], int *taillePanier): client.c']]], + ['modifierarticle_5',['modifierarticle',['../responsable_8c.html#ab02f9ff38b359630bc980bae859f7512',1,'modifierArticle(int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique): responsable.c'],['../responsable_8h.html#ab02f9ff38b359630bc980bae859f7512',1,'modifierArticle(int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique): responsable.c']]] +]; diff --git a/docs/html/search/all_6.js b/docs/html/search/all_6.js new file mode 100644 index 0000000..e6d0ad7 --- /dev/null +++ b/docs/html/search/all_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['problemrecherchearticle_0',['problemRechercheArticle',['../interface__resp_8h.html#a80d8c0f53cf692db395b729a229f2df8',1,'interface_resp.h']]] +]; diff --git a/docs/html/search/all_7.js b/docs/html/search/all_7.js new file mode 100644 index 0000000..cfcc993 --- /dev/null +++ b/docs/html/search/all_7.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['rechercherefarticle_0',['rechercherefarticle',['../responsable_8c.html#a33f342ec6aaff14efce87b42350d9bee',1,'rechercheRefArticle(int tRef[], int ref, int *index, int tLogique): responsable.c'],['../responsable_8h.html#a33f342ec6aaff14efce87b42350d9bee',1,'rechercheRefArticle(int tRef[], int ref, int *index, int tLogique): responsable.c']]], + ['reinitialiser_5fpanier_1',['reinitialiser_panier',['../client_8c.html#acbac92090885f76ac2ea79c3449af58e',1,'reinitialiser_panier(int panier[], int quantites[], int *taillePanier): client.c'],['../client_8h.html#acbac92090885f76ac2ea79c3449af58e',1,'reinitialiser_panier(int panier[], int quantites[], int *taillePanier): client.c']]], + ['responsable_2ec_2',['responsable.c',['../responsable_8c.html',1,'']]], + ['responsable_2eh_3',['responsable.h',['../responsable_8h.html',1,'']]] +]; diff --git a/docs/html/search/all_8.js b/docs/html/search/all_8.js new file mode 100644 index 0000000..6b3abd1 --- /dev/null +++ b/docs/html/search/all_8.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['sauvegardarticles_0',['sauvegardarticles',['../responsable_8c.html#ac9e79c89d04823f4b1b5572c9865e57d',1,'sauvegardArticles(int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique): responsable.c'],['../responsable_8h.html#ac9e79c89d04823f4b1b5572c9865e57d',1,'sauvegardArticles(int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique): responsable.c']]], + ['supprimer_5farticle_5fdu_5fpanier_1',['supprimer_article_du_panier',['../client_8c.html#ae12d225761d8ad5a091665228bfe676e',1,'supprimer_article_du_panier(int panier[], int quantites[], int *taillePanier): client.c'],['../client_8h.html#ae12d225761d8ad5a091665228bfe676e',1,'supprimer_article_du_panier(int panier[], int quantites[], int *taillePanier): client.c']]], + ['supprimerarticle_2',['supprimerarticle',['../responsable_8c.html#a0f8076a332f73d1edca58cfaeb42167e',1,'supprimerArticle(int tRef[], float tPoids[], float tVol[], float tPrix[], int *tLogique): responsable.c'],['../responsable_8h.html#a0f8076a332f73d1edca58cfaeb42167e',1,'supprimerArticle(int tRef[], float tPoids[], float tVol[], float tPrix[], int *tLogique): responsable.c']]] +]; diff --git a/docs/html/search/close.svg b/docs/html/search/close.svg new file mode 100644 index 0000000..337d6cc --- /dev/null +++ b/docs/html/search/close.svg @@ -0,0 +1,18 @@ + + + + + + diff --git a/docs/html/search/files_0.js b/docs/html/search/files_0.js new file mode 100644 index 0000000..22fdf58 --- /dev/null +++ b/docs/html/search/files_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['client_2ec_0',['client.c',['../client_8c.html',1,'']]], + ['client_2eh_1',['client.h',['../client_8h.html',1,'']]] +]; diff --git a/docs/html/search/files_1.js b/docs/html/search/files_1.js new file mode 100644 index 0000000..42d86ba --- /dev/null +++ b/docs/html/search/files_1.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['interface_5fclient_2ec_0',['interface_client.c',['../interface__client_8c.html',1,'']]], + ['interface_5fclient_2eh_1',['interface_client.h',['../interface__client_8h.html',1,'']]], + ['interface_5fresp_2ec_2',['interface_resp.c',['../interface__resp_8c.html',1,'']]], + ['interface_5fresp_2eh_3',['interface_resp.h',['../interface__resp_8h.html',1,'']]] +]; diff --git a/docs/html/search/files_2.js b/docs/html/search/files_2.js new file mode 100644 index 0000000..e594314 --- /dev/null +++ b/docs/html/search/files_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['main_2ec_0',['main.c',['../main_8c.html',1,'']]] +]; diff --git a/docs/html/search/files_3.js b/docs/html/search/files_3.js new file mode 100644 index 0000000..47ac1a7 --- /dev/null +++ b/docs/html/search/files_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['responsable_2ec_0',['responsable.c',['../responsable_8c.html',1,'']]], + ['responsable_2eh_1',['responsable.h',['../responsable_8h.html',1,'']]] +]; diff --git a/docs/html/search/functions_0.js b/docs/html/search/functions_0.js new file mode 100644 index 0000000..a0c60b4 --- /dev/null +++ b/docs/html/search/functions_0.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['affichajoutarticle_0',['affichajoutarticle',['../interface__resp_8c.html#a9e01225a96daa69eb466e03fd1108c0a',1,'affichAjoutArticle(int *ref, float *poids, float *volume, float *prix): interface_resp.c'],['../interface__resp_8h.html#a9e01225a96daa69eb466e03fd1108c0a',1,'affichAjoutArticle(int *ref, float *poids, float *volume, float *prix): interface_resp.c']]], + ['affichajoutclient_1',['affichajoutclient',['../interface__resp_8c.html#a964d2d2bc5b9aa544e6187ed6cbc961c',1,'affichAjoutClient(int tNumClient[], int tLogique, int *numC): interface_resp.c'],['../interface__resp_8h.html#a964d2d2bc5b9aa544e6187ed6cbc961c',1,'affichAjoutClient(int tNumClient[], int tLogique, int *numC): interface_resp.c']]], + ['afficharticles_2',['afficharticles',['../interface__resp_8c.html#af518981f5e0d4575a6b7bae3f22e9985',1,'affichArticles(int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique): interface_resp.c'],['../interface__resp_8h.html#af518981f5e0d4575a6b7bae3f22e9985',1,'affichArticles(int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique): interface_resp.c']]], + ['affichclients_3',['affichclients',['../interface__resp_8c.html#a7c0531c63ea490d0b674960483e9ba27',1,'affichClients(int tNumClient[], float tCagnotte[], int tSus[], int tLogique): interface_resp.c'],['../interface__resp_8h.html#a7c0531c63ea490d0b674960483e9ba27',1,'affichClients(int tNumClient[], float tCagnotte[], int tSus[], int tLogique): interface_resp.c']]], + ['affiche_5fclient_4',['affiche_client',['../interface__client_8c.html#a98012af1d373da58fa7dc041f97216bc',1,'affiche_client(): interface_client.c'],['../interface__client_8h.html#a98012af1d373da58fa7dc041f97216bc',1,'affiche_client(): interface_client.c']]], + ['affiche_5frecap_5fpanier_5',['affiche_recap_panier',['../client_8c.html#a927a335cb51f714f0e6e89c49f2d0258',1,'affiche_recap_panier(int panier[], int taillePanier, int references[], float poids[], float volume[], float prixUnitaire[], int quantites[]): client.c'],['../client_8h.html#a927a335cb51f714f0e6e89c49f2d0258',1,'affiche_recap_panier(int panier[], int taillePanier, int references[], float poids[], float volume[], float prixUnitaire[], int quantites[]): client.c']]], + ['affiche_5fresp_6',['affiche_resp',['../interface__resp_8c.html#abb1a25ae1531e0857856843b41805528',1,'affiche_resp(void): interface_resp.c'],['../interface__resp_8h.html#a333cea7df6b2de2a16440aaf53d63af4',1,'affiche_resp(): interface_resp.c']]], + ['affichmodifierarticle_7',['affichmodifierarticle',['../interface__resp_8c.html#af075e50ffce501b901ff31b1fb73262f',1,'affichModifierArticle(int *ref, float *poids, float *volume, float *prix): interface_resp.c'],['../interface__resp_8h.html#af075e50ffce501b901ff31b1fb73262f',1,'affichModifierArticle(int *ref, float *poids, float *volume, float *prix): interface_resp.c']]], + ['affichsupprimerarticle_8',['affichsupprimerarticle',['../interface__resp_8c.html#a47ca5882a75fd3b919ba02b028582473',1,'affichSupprimerArticle(int *ref): interface_resp.c'],['../interface__resp_8h.html#a47ca5882a75fd3b919ba02b028582473',1,'affichSupprimerArticle(int *ref): interface_resp.c']]], + ['affichunarticle_9',['affichunarticle',['../interface__resp_8c.html#a5e9ce25cbd73f9d4732b84eb5ab59d13',1,'affichUnArticle(int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique): interface_resp.c'],['../interface__resp_8h.html#a5e9ce25cbd73f9d4732b84eb5ab59d13',1,'affichUnArticle(int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique): interface_resp.c']]], + ['affichunclient_10',['affichunclient',['../interface__resp_8c.html#aa29059c1470e490b32fdf483b5570c88',1,'affichUnClient(int tNumClient[], float tCagnotte[], int tSus[], int tLogique): interface_resp.c'],['../interface__resp_8h.html#aa29059c1470e490b32fdf483b5570c88',1,'affichUnClient(int tNumClient[], float tCagnotte[], int tSus[], int tLogique): interface_resp.c']]], + ['ajouter_5farticle_5fau_5fpanier_11',['ajouter_article_au_panier',['../client_8c.html#a08acbb5bd9bf4235f8d5cdd2edb0749a',1,'ajouter_article_au_panier(int numeroClient, int references[], float poids[], float volume[], float prixUnitaire[], int numeros[], float cagnottes[], int suspendues[], int nombreArticles, int nombreClients, float volumeCoffre, float chargeMaximale, int panier[], int quantites[], int *taillePanier): client.c'],['../client_8h.html#a08acbb5bd9bf4235f8d5cdd2edb0749a',1,'ajouter_article_au_panier(int numeroClient, int references[], float poids[], float volume[], float prixUnitaire[], int numeros[], float cagnottes[], int suspendues[], int nombreArticles, int nombreClients, float volumeCoffre, float chargeMaximale, int panier[], int quantites[], int *taillePanier): client.c']]], + ['ajouterarticle_12',['ajouterarticle',['../responsable_8c.html#abce68a203cf18b85ebdad34e468815f0',1,'ajouterArticle(int tRef[], float tPoids[], float tVol[], float tPrix[], int *tLogique, int tPhysique, int ref, float poids, float volume, float prix): responsable.c'],['../responsable_8h.html#abce68a203cf18b85ebdad34e468815f0',1,'ajouterArticle(int tRef[], float tPoids[], float tVol[], float tPrix[], int *tLogique, int tPhysique, int ref, float poids, float volume, float prix): responsable.c']]], + ['ajouterclient_13',['ajouterclient',['../responsable_8c.html#a185476dbf2dae604d3deb6a3085580a2',1,'ajouterClient(int tNumClient[], float tCagnotte[], int tSus[], int *tLogique, int tPhysique): responsable.c'],['../responsable_8h.html#a185476dbf2dae604d3deb6a3085580a2',1,'ajouterClient(int tNumClient[], float tCagnotte[], int tSus[], int *tLogique, int tPhysique): responsable.c']]] +]; diff --git a/docs/html/search/functions_1.js b/docs/html/search/functions_1.js new file mode 100644 index 0000000..cbae7ee --- /dev/null +++ b/docs/html/search/functions_1.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['chargementarticles_0',['chargementarticles',['../responsable_8c.html#a937ddfa15445cc5d2336130fb6567ce1',1,'chargementArticles(int tRef[], float tPoids[], float tVol[], float tPrix[], int tPhysique): responsable.c'],['../responsable_8h.html#a937ddfa15445cc5d2336130fb6567ce1',1,'chargementArticles(int tRef[], float tPoids[], float tVol[], float tPrix[], int tPhysique): responsable.c']]], + ['charger_5fclients_1',['charger_clients',['../client_8c.html#a8bc792436cb2773b638667f7a898a625',1,'charger_clients(int numeros[], float cagnottes[], int suspendues[], int tPhysique): client.c'],['../client_8h.html#a8bc792436cb2773b638667f7a898a625',1,'charger_clients(int numeros[], float cagnottes[], int suspendues[], int tPhysique): client.c']]], + ['choixinterface_2',['choixInterface',['../main_8c.html#a5fdac9110609b2cc4b43c68b643af452',1,'main.c']]] +]; diff --git a/docs/html/search/functions_2.js b/docs/html/search/functions_2.js new file mode 100644 index 0000000..bdee9be --- /dev/null +++ b/docs/html/search/functions_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['deduire_5fcagnotte_0',['deduire_cagnotte',['../client_8c.html#a7203df964d63cb07d7b19912d5e3c3bd',1,'deduire_cagnotte(int numeroClient, float montant, int numeros[], float cagnottes[], int nombreClients, int suspendus[]): client.c'],['../client_8h.html#a7203df964d63cb07d7b19912d5e3c3bd',1,'deduire_cagnotte(int numeroClient, float montant, int numeros[], float cagnottes[], int nombreClients, int suspendus[]): client.c']]] +]; diff --git a/docs/html/search/functions_3.js b/docs/html/search/functions_3.js new file mode 100644 index 0000000..2a654ce --- /dev/null +++ b/docs/html/search/functions_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['global_5fclient_0',['global_client',['../interface__client_8c.html#aace0a1bcc32fda795f57fa76de7ec276',1,'global_client(): interface_client.c'],['../interface__client_8h.html#aace0a1bcc32fda795f57fa76de7ec276',1,'global_client(): interface_client.c']]], + ['global_5fresp_1',['global_resp',['../interface__resp_8c.html#a421ebe0511c91fb6431aed873aa01e35',1,'global_resp(): interface_resp.c'],['../interface__resp_8h.html#a421ebe0511c91fb6431aed873aa01e35',1,'global_resp(): interface_resp.c']]] +]; diff --git a/docs/html/search/functions_4.js b/docs/html/search/functions_4.js new file mode 100644 index 0000000..31318a5 --- /dev/null +++ b/docs/html/search/functions_4.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['main_0',['main',['../main_8c.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main.c']]], + ['menu_5fclient_1',['menu_client',['../interface__client_8c.html#a49de18c6560633af132a56085d28a8ba',1,'menu_client(int *choix): interface_client.c'],['../interface__client_8h.html#a49de18c6560633af132a56085d28a8ba',1,'menu_client(int *choix): interface_client.c']]], + ['menu_5fresp_2',['menu_resp',['../interface__resp_8c.html#a1f14dc8f23be75e1a5c0e7ce0c77f597',1,'menu_resp(int *choix): interface_resp.c'],['../interface__resp_8h.html#a1f14dc8f23be75e1a5c0e7ce0c77f597',1,'menu_resp(int *choix): interface_resp.c']]], + ['modifier_5fquantite_5farticle_5fpanier_3',['modifier_quantite_article_panier',['../client_8c.html#affb9999893c1599e32ff604b5b50899d',1,'modifier_quantite_article_panier(int panier[], int quantites[], int *taillePanier): client.c'],['../client_8h.html#affb9999893c1599e32ff604b5b50899d',1,'modifier_quantite_article_panier(int panier[], int quantites[], int *taillePanier): client.c']]], + ['modifierarticle_4',['modifierarticle',['../responsable_8c.html#ab02f9ff38b359630bc980bae859f7512',1,'modifierArticle(int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique): responsable.c'],['../responsable_8h.html#ab02f9ff38b359630bc980bae859f7512',1,'modifierArticle(int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique): responsable.c']]] +]; diff --git a/docs/html/search/functions_5.js b/docs/html/search/functions_5.js new file mode 100644 index 0000000..e6d0ad7 --- /dev/null +++ b/docs/html/search/functions_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['problemrecherchearticle_0',['problemRechercheArticle',['../interface__resp_8h.html#a80d8c0f53cf692db395b729a229f2df8',1,'interface_resp.h']]] +]; diff --git a/docs/html/search/functions_6.js b/docs/html/search/functions_6.js new file mode 100644 index 0000000..b8962b8 --- /dev/null +++ b/docs/html/search/functions_6.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['rechercherefarticle_0',['rechercherefarticle',['../responsable_8c.html#a33f342ec6aaff14efce87b42350d9bee',1,'rechercheRefArticle(int tRef[], int ref, int *index, int tLogique): responsable.c'],['../responsable_8h.html#a33f342ec6aaff14efce87b42350d9bee',1,'rechercheRefArticle(int tRef[], int ref, int *index, int tLogique): responsable.c']]], + ['reinitialiser_5fpanier_1',['reinitialiser_panier',['../client_8c.html#acbac92090885f76ac2ea79c3449af58e',1,'reinitialiser_panier(int panier[], int quantites[], int *taillePanier): client.c'],['../client_8h.html#acbac92090885f76ac2ea79c3449af58e',1,'reinitialiser_panier(int panier[], int quantites[], int *taillePanier): client.c']]] +]; diff --git a/docs/html/search/functions_7.js b/docs/html/search/functions_7.js new file mode 100644 index 0000000..6b3abd1 --- /dev/null +++ b/docs/html/search/functions_7.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['sauvegardarticles_0',['sauvegardarticles',['../responsable_8c.html#ac9e79c89d04823f4b1b5572c9865e57d',1,'sauvegardArticles(int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique): responsable.c'],['../responsable_8h.html#ac9e79c89d04823f4b1b5572c9865e57d',1,'sauvegardArticles(int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique): responsable.c']]], + ['supprimer_5farticle_5fdu_5fpanier_1',['supprimer_article_du_panier',['../client_8c.html#ae12d225761d8ad5a091665228bfe676e',1,'supprimer_article_du_panier(int panier[], int quantites[], int *taillePanier): client.c'],['../client_8h.html#ae12d225761d8ad5a091665228bfe676e',1,'supprimer_article_du_panier(int panier[], int quantites[], int *taillePanier): client.c']]], + ['supprimerarticle_2',['supprimerarticle',['../responsable_8c.html#a0f8076a332f73d1edca58cfaeb42167e',1,'supprimerArticle(int tRef[], float tPoids[], float tVol[], float tPrix[], int *tLogique): responsable.c'],['../responsable_8h.html#a0f8076a332f73d1edca58cfaeb42167e',1,'supprimerArticle(int tRef[], float tPoids[], float tVol[], float tPrix[], int *tLogique): responsable.c']]] +]; diff --git a/docs/html/search/mag.svg b/docs/html/search/mag.svg new file mode 100644 index 0000000..ffb6cf0 --- /dev/null +++ b/docs/html/search/mag.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/docs/html/search/mag_d.svg b/docs/html/search/mag_d.svg new file mode 100644 index 0000000..4122773 --- /dev/null +++ b/docs/html/search/mag_d.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/docs/html/search/mag_sel.svg b/docs/html/search/mag_sel.svg new file mode 100644 index 0000000..553dba8 --- /dev/null +++ b/docs/html/search/mag_sel.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/docs/html/search/mag_seld.svg b/docs/html/search/mag_seld.svg new file mode 100644 index 0000000..c906f84 --- /dev/null +++ b/docs/html/search/mag_seld.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/docs/html/search/search.css b/docs/html/search/search.css new file mode 100644 index 0000000..19f76f9 --- /dev/null +++ b/docs/html/search/search.css @@ -0,0 +1,291 @@ +/*---------------- Search Box positioning */ + +#main-menu > li:last-child { + /* This
  • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search box styling */ + +.SRPage * { + font-weight: normal; + line-height: normal; +} + +dark-mode-toggle { + margin-left: 5px; + display: flex; + float: right; +} + +#MSearchBox { + display: inline-block; + white-space : nowrap; + background: var(--search-background-color); + border-radius: 0.65em; + box-shadow: var(--search-box-shadow); + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + width: 20px; + height: 19px; + background-image: var(--search-magnification-select-image); + margin: 0 0 0 0.3em; + padding: 0; +} + +#MSearchSelectExt { + display: inline-block; + vertical-align: middle; + width: 10px; + height: 19px; + background-image: var(--search-magnification-image); + margin: 0 0 0 0.5em; + padding: 0; +} + + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 19px; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: var(--search-foreground-color); + outline: none; + font-family: var(--font-family-search); + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + +@media(hover: none) { + /* to avoid zooming on iOS */ + #MSearchField { + font-size: 16px; + } +} + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: var(--search-active-color); +} + + + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-filter-border-color); + background-color: var(--search-filter-background-color); + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt var(--font-family-search); + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: var(--font-family-monospace); + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: var(--search-filter-foreground-color); + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: var(--search-filter-foreground-color); + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: var(--search-filter-highlight-text-color); + background-color: var(--search-filter-highlight-bg-color); + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + /*width: 60ex;*/ + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-results-border-color); + background-color: var(--search-results-background-color); + z-index:10000; + width: 300px; + height: 400px; + overflow: auto; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +div.SRPage { + margin: 5px 2px; + background-color: var(--search-results-background-color); +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + font-size: 8pt; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: var(--font-family-search); +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: var(--font-family-search); +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: var(--nav-gradient-active-image-parent); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/docs/html/search/search.js b/docs/html/search/search.js new file mode 100644 index 0000000..6fd40c6 --- /dev/null +++ b/docs/html/search/search.js @@ -0,0 +1,840 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + e.stopPropagation(); + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var jsFile; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; + } + + var loadJS = function(url, impl, loc){ + var scriptTag = document.createElement('script'); + scriptTag.src = url; + scriptTag.onload = impl; + scriptTag.onreadystatechange = impl; + loc.appendChild(scriptTag); + } + + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + var domSearchBox = this.DOMSearchBox(); + var domPopupSearchResults = this.DOMPopupSearchResults(); + var domSearchClose = this.DOMSearchClose(); + var resultsPath = this.resultsPath; + + var handleResults = function() { + document.getElementById("Loading").style.display="none"; + if (typeof searchData !== 'undefined') { + createResults(resultsPath); + document.getElementById("NoMatches").style.display="none"; + } + + if (idx!=-1) { + searchResults.Search(searchValue); + } else { // no file with search results => force empty search results + searchResults.Search('===='); + } + + if (domPopupSearchResultsWindow.style.display!='block') + { + domSearchClose.style.display = 'inline-block'; + var left = getXPos(domSearchBox) + 150; + var top = getYPos(domSearchBox) + 20; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + var maxWidth = document.body.clientWidth; + var maxHeight = document.body.clientHeight; + var width = 300; + if (left<10) left=10; + if (width+left+8>maxWidth) width=maxWidth-left-8; + var height = 400; + if (height+top+8>maxHeight) height=maxHeight-top-8; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResultsWindow.style.height = height + 'px'; + } + } + + if (jsFile) { + loadJS(jsFile, handleResults, this.DOMPopupSearchResultsWindow()); + } else { + handleResults(); + } + + this.lastSearchValue = searchValue; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + this.searchActive = true; + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + this.DOMSearchField().value = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults(resultsPath) +{ + var results = document.getElementById("SRResults"); + results.innerHTML = ''; + for (var e=0; eli>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:var(--nav-menu-button-color);-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:var(--nav-gradient-image)}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:var(--font-family-nav);font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:var(--nav-text-normal-shadow);color:var(--nav-text-normal-color);outline:0}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:var(--nav-menu-toggle-color);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:var(--nav-menu-background-color)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:var(--nav-menu-background-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:var(--nav-gradient-image);line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:var(--nav-text-normal-color) transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:var(--nav-separator-image);background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a:hover span.sub-arrow{border-color:var(--nav-text-hover-color) transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent var(--nav-menu-background-color) transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:var(--nav-menu-background-color);-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent var(--nav-menu-foreground-color);border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:var(--nav-menu-foreground-color);background-image:none;border:0 !important;color:var(--nav-menu-foreground-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent var(--nav-text-hover-color)}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:var(--nav-menu-background-color);height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent var(--nav-menu-foreground-color) transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:var(--nav-menu-foreground-color) transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:var(--nav-gradient-image)}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:var(--nav-menu-background-color)}} \ No newline at end of file diff --git a/docs/latex/Makefile b/docs/latex/Makefile new file mode 100644 index 0000000..7f82972 --- /dev/null +++ b/docs/latex/Makefile @@ -0,0 +1,27 @@ +LATEX_CMD?=pdflatex +MKIDX_CMD?=makeindex +BIBTEX_CMD?=bibtex +LATEX_COUNT?=8 +MANUAL_FILE?=refman + +all: $(MANUAL_FILE).pdf + +pdf: $(MANUAL_FILE).pdf + +$(MANUAL_FILE).pdf: clean $(MANUAL_FILE).tex + $(LATEX_CMD) $(MANUAL_FILE) + $(MKIDX_CMD) $(MANUAL_FILE).idx + $(LATEX_CMD) $(MANUAL_FILE) + latex_count=$(LATEX_COUNT) ; \ + while grep -E -s 'Rerun (LaTeX|to get cross-references right|to get bibliographical references right)' $(MANUAL_FILE).log && [ $$latex_count -gt 0 ] ;\ + do \ + echo "Rerunning latex...." ;\ + $(LATEX_CMD) $(MANUAL_FILE) ;\ + latex_count=`expr $$latex_count - 1` ;\ + done + $(MKIDX_CMD) $(MANUAL_FILE).idx + $(LATEX_CMD) $(MANUAL_FILE) + + +clean: + rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl $(MANUAL_FILE).pdf diff --git a/docs/latex/client_8c.tex b/docs/latex/client_8c.tex new file mode 100644 index 0000000..05b5778 --- /dev/null +++ b/docs/latex/client_8c.tex @@ -0,0 +1,233 @@ +\doxysection{src/app/core\+\_\+logic/client.c File Reference} +\hypertarget{client_8c}{}\label{client_8c}\index{src/app/core\_logic/client.c@{src/app/core\_logic/client.c}} + + +Fonctions liées à la gestion des clients et de leur panier. + + +{\ttfamily \#include $<$stdio.\+h$>$}\newline +{\ttfamily \#include "{}client.\+h"{}}\newline +\doxysubsubsection*{Macros} +\begin{DoxyCompactItemize} +\item +\Hypertarget{client_8c_ad6a5b5050a3ed6cffbb52fe15c39e587}\label{client_8c_ad6a5b5050a3ed6cffbb52fe15c39e587} +\#define {\bfseries MAX\+\_\+\+ARTICLES}~100 +\item +\Hypertarget{client_8c_a0a8f91f93d75a07f0ae45077db45b3eb}\label{client_8c_a0a8f91f93d75a07f0ae45077db45b3eb} +\#define {\bfseries MAX\+\_\+\+CLIENTS}~100 +\end{DoxyCompactItemize} +\doxysubsubsection*{Functions} +\begin{DoxyCompactItemize} +\item +int \mbox{\hyperlink{client_8c_a8bc792436cb2773b638667f7a898a625}{charger\+\_\+clients}} (int numeros\mbox{[}$\,$\mbox{]}, float cagnottes\mbox{[}$\,$\mbox{]}, int suspendues\mbox{[}$\,$\mbox{]}, int t\+Physique) +\begin{DoxyCompactList}\small\item\em Charge les données des clients à partir d\textquotesingle{}un fichier. \end{DoxyCompactList}\item +void \mbox{\hyperlink{client_8c_a08acbb5bd9bf4235f8d5cdd2edb0749a}{ajouter\+\_\+article\+\_\+au\+\_\+panier}} (int numero\+Client, int references\mbox{[}$\,$\mbox{]}, float poids\mbox{[}$\,$\mbox{]}, float volume\mbox{[}$\,$\mbox{]}, float prix\+Unitaire\mbox{[}$\,$\mbox{]}, int numeros\mbox{[}$\,$\mbox{]}, float cagnottes\mbox{[}$\,$\mbox{]}, int suspendues\mbox{[}$\,$\mbox{]}, int nombre\+Articles, int nombre\+Clients, float volume\+Coffre, float charge\+Maximale, int panier\mbox{[}$\,$\mbox{]}, int quantites\mbox{[}$\,$\mbox{]}, int \texorpdfstring{$\ast$}{*}taille\+Panier) +\begin{DoxyCompactList}\small\item\em Ajoute un article au panier du client. \end{DoxyCompactList}\item +void \mbox{\hyperlink{client_8c_ae12d225761d8ad5a091665228bfe676e}{supprimer\+\_\+article\+\_\+du\+\_\+panier}} (int panier\mbox{[}$\,$\mbox{]}, int quantites\mbox{[}$\,$\mbox{]}, int \texorpdfstring{$\ast$}{*}taille\+Panier) +\begin{DoxyCompactList}\small\item\em Supprime un article du panier du client. \end{DoxyCompactList}\item +void \mbox{\hyperlink{client_8c_a927a335cb51f714f0e6e89c49f2d0258}{affiche\+\_\+recap\+\_\+panier}} (int panier\mbox{[}$\,$\mbox{]}, int taille\+Panier, int references\mbox{[}$\,$\mbox{]}, float poids\mbox{[}$\,$\mbox{]}, float volume\mbox{[}$\,$\mbox{]}, float prix\+Unitaire\mbox{[}$\,$\mbox{]}, int quantites\mbox{[}$\,$\mbox{]}) +\begin{DoxyCompactList}\small\item\em Affiche un récapitulatif du contenu du panier. \end{DoxyCompactList}\item +void \mbox{\hyperlink{client_8c_affb9999893c1599e32ff604b5b50899d}{modifier\+\_\+quantite\+\_\+article\+\_\+panier}} (int panier\mbox{[}$\,$\mbox{]}, int quantites\mbox{[}$\,$\mbox{]}, int \texorpdfstring{$\ast$}{*}taille\+Panier) +\begin{DoxyCompactList}\small\item\em Modifie la quantité d\textquotesingle{}un article dans le panier du client. \end{DoxyCompactList}\item +void \mbox{\hyperlink{client_8c_acbac92090885f76ac2ea79c3449af58e}{reinitialiser\+\_\+panier}} (int panier\mbox{[}$\,$\mbox{]}, int quantites\mbox{[}$\,$\mbox{]}, int \texorpdfstring{$\ast$}{*}taille\+Panier) +\begin{DoxyCompactList}\small\item\em Réinitialise le panier du client. \end{DoxyCompactList}\item +void \mbox{\hyperlink{client_8c_a7203df964d63cb07d7b19912d5e3c3bd}{deduire\+\_\+cagnotte}} (int numero\+Client, float montant, int numeros\mbox{[}$\,$\mbox{]}, float cagnottes\mbox{[}$\,$\mbox{]}, int nombre\+Clients, int suspendus\mbox{[}$\,$\mbox{]}) +\begin{DoxyCompactList}\small\item\em Déduit un montant de la cagnotte du client. \end{DoxyCompactList}\end{DoxyCompactItemize} + + +\doxysubsection{Detailed Description} +Fonctions liées à la gestion des clients et de leur panier. + + + +\doxysubsection{Function Documentation} +\Hypertarget{client_8c_a927a335cb51f714f0e6e89c49f2d0258}\label{client_8c_a927a335cb51f714f0e6e89c49f2d0258} +\index{client.c@{client.c}!affiche\_recap\_panier@{affiche\_recap\_panier}} +\index{affiche\_recap\_panier@{affiche\_recap\_panier}!client.c@{client.c}} +\doxysubsubsection{\texorpdfstring{affiche\_recap\_panier()}{affiche\_recap\_panier()}} +{\footnotesize\ttfamily void affiche\+\_\+recap\+\_\+panier (\begin{DoxyParamCaption}\item[{int}]{panier\mbox{[}$\,$\mbox{]}, }\item[{int}]{taille\+Panier, }\item[{int}]{references\mbox{[}$\,$\mbox{]}, }\item[{float}]{poids\mbox{[}$\,$\mbox{]}, }\item[{float}]{volume\mbox{[}$\,$\mbox{]}, }\item[{float}]{prix\+Unitaire\mbox{[}$\,$\mbox{]}, }\item[{int}]{quantites\mbox{[}$\,$\mbox{]} }\end{DoxyParamCaption})} + + + +Affiche un récapitulatif du contenu du panier. + +Cette fonction permet d\textquotesingle{}afficher un récapitulatif du contenu du panier. + + +\begin{DoxyParams}{Parameters} +{\em panier} & -\/ Tableau des références des articles dans le panier. \\ +\hline +{\em taille\+Panier} & -\/ Taille du panier. \\ +\hline +{\em references} & -\/ Tableau des références des articles. \\ +\hline +{\em poids} & -\/ Tableau des poids des articles. \\ +\hline +{\em volume} & -\/ Tableau des volumes des articles. \\ +\hline +{\em prix\+Unitaire} & -\/ Tableau des prix unitaires des articles. \\ +\hline +{\em quantites} & -\/ Tableau des quantités de chaque article dans le panier. \\ +\hline +\end{DoxyParams} +\Hypertarget{client_8c_a08acbb5bd9bf4235f8d5cdd2edb0749a}\label{client_8c_a08acbb5bd9bf4235f8d5cdd2edb0749a} +\index{client.c@{client.c}!ajouter\_article\_au\_panier@{ajouter\_article\_au\_panier}} +\index{ajouter\_article\_au\_panier@{ajouter\_article\_au\_panier}!client.c@{client.c}} +\doxysubsubsection{\texorpdfstring{ajouter\_article\_au\_panier()}{ajouter\_article\_au\_panier()}} +{\footnotesize\ttfamily void ajouter\+\_\+article\+\_\+au\+\_\+panier (\begin{DoxyParamCaption}\item[{int}]{numero\+Client, }\item[{int}]{references\mbox{[}$\,$\mbox{]}, }\item[{float}]{poids\mbox{[}$\,$\mbox{]}, }\item[{float}]{volume\mbox{[}$\,$\mbox{]}, }\item[{float}]{prix\+Unitaire\mbox{[}$\,$\mbox{]}, }\item[{int}]{numeros\mbox{[}$\,$\mbox{]}, }\item[{float}]{cagnottes\mbox{[}$\,$\mbox{]}, }\item[{int}]{suspendues\mbox{[}$\,$\mbox{]}, }\item[{int}]{nombre\+Articles, }\item[{int}]{nombre\+Clients, }\item[{float}]{volume\+Coffre, }\item[{float}]{charge\+Maximale, }\item[{int}]{panier\mbox{[}$\,$\mbox{]}, }\item[{int}]{quantites\mbox{[}$\,$\mbox{]}, }\item[{int \texorpdfstring{$\ast$}{*}}]{taille\+Panier }\end{DoxyParamCaption})} + + + +Ajoute un article au panier du client. + +Cette fonction permet d\textquotesingle{}ajouter un article au panier du client. + + +\begin{DoxyParams}{Parameters} +{\em numero\+Client} & -\/ Numéro du client. \\ +\hline +{\em references} & -\/ Tableau des références des articles. \\ +\hline +{\em poids} & -\/ Tableau des poids des articles. \\ +\hline +{\em volume} & -\/ Tableau des volumes des articles. \\ +\hline +{\em prix\+Unitaire} & -\/ Tableau des prix unitaires des articles. \\ +\hline +{\em numeros} & -\/ Tableau des numéros de clients. \\ +\hline +{\em cagnottes} & -\/ Tableau des cagnottes des clients. \\ +\hline +{\em suspendues} & -\/ Tableau des états de suspension des clients. \\ +\hline +{\em nombre\+Articles} & -\/ Nombre d\textquotesingle{}articles disponibles. \\ +\hline +{\em nombre\+Clients} & -\/ Nombre de clients. \\ +\hline +{\em volume\+Coffre} & -\/ Volume total du coffre. \\ +\hline +{\em charge\+Maximale} & -\/ Charge maximale du coffre. \\ +\hline +{\em panier} & -\/ Tableau des références des articles dans le panier. \\ +\hline +{\em quantites} & -\/ Tableau des quantités de chaque article dans le panier. \\ +\hline +{\em taille\+Panier} & -\/ Taille du panier. \\ +\hline +\end{DoxyParams} +\Hypertarget{client_8c_a8bc792436cb2773b638667f7a898a625}\label{client_8c_a8bc792436cb2773b638667f7a898a625} +\index{client.c@{client.c}!charger\_clients@{charger\_clients}} +\index{charger\_clients@{charger\_clients}!client.c@{client.c}} +\doxysubsubsection{\texorpdfstring{charger\_clients()}{charger\_clients()}} +{\footnotesize\ttfamily int charger\+\_\+clients (\begin{DoxyParamCaption}\item[{int}]{numeros\mbox{[}$\,$\mbox{]}, }\item[{float}]{cagnottes\mbox{[}$\,$\mbox{]}, }\item[{int}]{suspendues\mbox{[}$\,$\mbox{]}, }\item[{int}]{t\+Physique }\end{DoxyParamCaption})} + + + +Charge les données des clients à partir d\textquotesingle{}un fichier. + +Cette fonction permet de charger les données des clients à partir d\textquotesingle{}un fichier. + + +\begin{DoxyParams}{Parameters} +{\em numeros} & -\/ Tableau des numéros de clients. \\ +\hline +{\em cagnottes} & -\/ Tableau des cagnottes des clients. \\ +\hline +{\em suspendues} & -\/ Tableau des états de suspension des clients. \\ +\hline +{\em t\+Physique} & -\/ Taille du tableau physique. \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +Le nombre de clients chargés ou -\/1 en cas d\textquotesingle{}erreur. +\end{DoxyReturn} +\Hypertarget{client_8c_a7203df964d63cb07d7b19912d5e3c3bd}\label{client_8c_a7203df964d63cb07d7b19912d5e3c3bd} +\index{client.c@{client.c}!deduire\_cagnotte@{deduire\_cagnotte}} +\index{deduire\_cagnotte@{deduire\_cagnotte}!client.c@{client.c}} +\doxysubsubsection{\texorpdfstring{deduire\_cagnotte()}{deduire\_cagnotte()}} +{\footnotesize\ttfamily void deduire\+\_\+cagnotte (\begin{DoxyParamCaption}\item[{int}]{numero\+Client, }\item[{float}]{montant, }\item[{int}]{numeros\mbox{[}$\,$\mbox{]}, }\item[{float}]{cagnottes\mbox{[}$\,$\mbox{]}, }\item[{int}]{nombre\+Clients, }\item[{int}]{suspendus\mbox{[}$\,$\mbox{]} }\end{DoxyParamCaption})} + + + +Déduit un montant de la cagnotte du client. + +Cette fonction permet de déduire un montant de la cagnotte du client. + + +\begin{DoxyParams}{Parameters} +{\em numero\+Client} & -\/ Numéro du client. \\ +\hline +{\em montant} & -\/ Montant à déduire de la cagnotte. \\ +\hline +{\em numeros} & -\/ Tableau des numéros de clients. \\ +\hline +{\em cagnottes} & -\/ Tableau des cagnottes des clients. \\ +\hline +{\em nombre\+Clients} & -\/ Nombre de clients. \\ +\hline +{\em suspendus} & -\/ Tableau des états de suspension des clients. \\ +\hline +\end{DoxyParams} +\Hypertarget{client_8c_affb9999893c1599e32ff604b5b50899d}\label{client_8c_affb9999893c1599e32ff604b5b50899d} +\index{client.c@{client.c}!modifier\_quantite\_article\_panier@{modifier\_quantite\_article\_panier}} +\index{modifier\_quantite\_article\_panier@{modifier\_quantite\_article\_panier}!client.c@{client.c}} +\doxysubsubsection{\texorpdfstring{modifier\_quantite\_article\_panier()}{modifier\_quantite\_article\_panier()}} +{\footnotesize\ttfamily void modifier\+\_\+quantite\+\_\+article\+\_\+panier (\begin{DoxyParamCaption}\item[{int}]{panier\mbox{[}$\,$\mbox{]}, }\item[{int}]{quantites\mbox{[}$\,$\mbox{]}, }\item[{int \texorpdfstring{$\ast$}{*}}]{taille\+Panier }\end{DoxyParamCaption})} + + + +Modifie la quantité d\textquotesingle{}un article dans le panier du client. + +Cette fonction permet de modifier la quantité d\textquotesingle{}un article dans le panier du client. + + +\begin{DoxyParams}{Parameters} +{\em panier} & -\/ Tableau des références des articles dans le panier. \\ +\hline +{\em quantites} & -\/ Tableau des quantités de chaque article dans le panier. \\ +\hline +{\em taille\+Panier} & -\/ Taille du panier. \\ +\hline +\end{DoxyParams} +\Hypertarget{client_8c_acbac92090885f76ac2ea79c3449af58e}\label{client_8c_acbac92090885f76ac2ea79c3449af58e} +\index{client.c@{client.c}!reinitialiser\_panier@{reinitialiser\_panier}} +\index{reinitialiser\_panier@{reinitialiser\_panier}!client.c@{client.c}} +\doxysubsubsection{\texorpdfstring{reinitialiser\_panier()}{reinitialiser\_panier()}} +{\footnotesize\ttfamily void reinitialiser\+\_\+panier (\begin{DoxyParamCaption}\item[{int}]{panier\mbox{[}$\,$\mbox{]}, }\item[{int}]{quantites\mbox{[}$\,$\mbox{]}, }\item[{int \texorpdfstring{$\ast$}{*}}]{taille\+Panier }\end{DoxyParamCaption})} + + + +Réinitialise le panier du client. + +Cette fonction permet de réinitialiser le panier du client. + + +\begin{DoxyParams}{Parameters} +{\em panier} & -\/ Tableau des références des articles dans le panier. \\ +\hline +{\em quantites} & -\/ Tableau des quantités de chaque article dans le panier. \\ +\hline +{\em taille\+Panier} & -\/ Taille du panier. \\ +\hline +\end{DoxyParams} +\Hypertarget{client_8c_ae12d225761d8ad5a091665228bfe676e}\label{client_8c_ae12d225761d8ad5a091665228bfe676e} +\index{client.c@{client.c}!supprimer\_article\_du\_panier@{supprimer\_article\_du\_panier}} +\index{supprimer\_article\_du\_panier@{supprimer\_article\_du\_panier}!client.c@{client.c}} +\doxysubsubsection{\texorpdfstring{supprimer\_article\_du\_panier()}{supprimer\_article\_du\_panier()}} +{\footnotesize\ttfamily void supprimer\+\_\+article\+\_\+du\+\_\+panier (\begin{DoxyParamCaption}\item[{int}]{panier\mbox{[}$\,$\mbox{]}, }\item[{int}]{quantites\mbox{[}$\,$\mbox{]}, }\item[{int \texorpdfstring{$\ast$}{*}}]{taille\+Panier }\end{DoxyParamCaption})} + + + +Supprime un article du panier du client. + +Cette fonction permet de supprimer un article du panier du client. + + +\begin{DoxyParams}{Parameters} +{\em panier} & -\/ Tableau des références des articles dans le panier. \\ +\hline +{\em quantites} & -\/ Tableau des quantités de chaque article dans le panier. \\ +\hline +{\em taille\+Panier} & -\/ Taille du panier. \\ +\hline +\end{DoxyParams} diff --git a/docs/latex/client_8h.tex b/docs/latex/client_8h.tex new file mode 100644 index 0000000..e5743ec --- /dev/null +++ b/docs/latex/client_8h.tex @@ -0,0 +1,330 @@ +\doxysection{src/app/core\+\_\+logic/client.h File Reference} +\hypertarget{client_8h}{}\label{client_8h}\index{src/app/core\_logic/client.h@{src/app/core\_logic/client.h}} + + +Fonctions liées à la gestion des clients et de leur panier. + + +{\ttfamily \#include $<$stdio.\+h$>$}\newline +{\ttfamily \#include $<$stdlib.\+h$>$}\newline +\doxysubsubsection*{Functions} +\begin{DoxyCompactItemize} +\item +int \mbox{\hyperlink{client_8h_a8bc792436cb2773b638667f7a898a625}{charger\+\_\+clients}} (int numeros\mbox{[}$\,$\mbox{]}, float cagnottes\mbox{[}$\,$\mbox{]}, int suspendues\mbox{[}$\,$\mbox{]}, int t\+Physique) +\begin{DoxyCompactList}\small\item\em Charge les données des clients à partir d\textquotesingle{}un fichier. \end{DoxyCompactList}\item +void \mbox{\hyperlink{client_8h_a08acbb5bd9bf4235f8d5cdd2edb0749a}{ajouter\+\_\+article\+\_\+au\+\_\+panier}} (int numero\+Client, int references\mbox{[}$\,$\mbox{]}, float poids\mbox{[}$\,$\mbox{]}, float volume\mbox{[}$\,$\mbox{]}, float prix\+Unitaire\mbox{[}$\,$\mbox{]}, int numeros\mbox{[}$\,$\mbox{]}, float cagnottes\mbox{[}$\,$\mbox{]}, int suspendues\mbox{[}$\,$\mbox{]}, int nombre\+Articles, int nombre\+Clients, float volume\+Coffre, float charge\+Maximale, int panier\mbox{[}$\,$\mbox{]}, int quantites\mbox{[}$\,$\mbox{]}, int \texorpdfstring{$\ast$}{*}taille\+Panier) +\begin{DoxyCompactList}\small\item\em Ajoute un article au panier du client. \end{DoxyCompactList}\item +void \mbox{\hyperlink{client_8h_ae12d225761d8ad5a091665228bfe676e}{supprimer\+\_\+article\+\_\+du\+\_\+panier}} (int panier\mbox{[}$\,$\mbox{]}, int quantites\mbox{[}$\,$\mbox{]}, int \texorpdfstring{$\ast$}{*}taille\+Panier) +\begin{DoxyCompactList}\small\item\em Supprime un article du panier du client. \end{DoxyCompactList}\item +void \mbox{\hyperlink{client_8h_a927a335cb51f714f0e6e89c49f2d0258}{affiche\+\_\+recap\+\_\+panier}} (int panier\mbox{[}$\,$\mbox{]}, int taille\+Panier, int references\mbox{[}$\,$\mbox{]}, float poids\mbox{[}$\,$\mbox{]}, float volume\mbox{[}$\,$\mbox{]}, float prix\+Unitaire\mbox{[}$\,$\mbox{]}, int quantites\mbox{[}$\,$\mbox{]}) +\begin{DoxyCompactList}\small\item\em Affiche un récapitulatif du contenu du panier. \end{DoxyCompactList}\item +void \mbox{\hyperlink{client_8h_affb9999893c1599e32ff604b5b50899d}{modifier\+\_\+quantite\+\_\+article\+\_\+panier}} (int panier\mbox{[}$\,$\mbox{]}, int quantites\mbox{[}$\,$\mbox{]}, int \texorpdfstring{$\ast$}{*}taille\+Panier) +\begin{DoxyCompactList}\small\item\em Modifie la quantité d\textquotesingle{}un article dans le panier du client. \end{DoxyCompactList}\item +void \mbox{\hyperlink{client_8h_acbac92090885f76ac2ea79c3449af58e}{reinitialiser\+\_\+panier}} (int panier\mbox{[}$\,$\mbox{]}, int quantites\mbox{[}$\,$\mbox{]}, int \texorpdfstring{$\ast$}{*}taille\+Panier) +\begin{DoxyCompactList}\small\item\em Réinitialise le panier du client. \end{DoxyCompactList}\item +void \mbox{\hyperlink{client_8h_a7203df964d63cb07d7b19912d5e3c3bd}{deduire\+\_\+cagnotte}} (int numero\+Client, float montant, int numeros\mbox{[}$\,$\mbox{]}, float cagnottes\mbox{[}$\,$\mbox{]}, int nombre\+Clients, int suspendus\mbox{[}$\,$\mbox{]}) +\begin{DoxyCompactList}\small\item\em Déduit un montant de la cagnotte du client. \end{DoxyCompactList}\end{DoxyCompactItemize} + + +\doxysubsection{Detailed Description} +Fonctions liées à la gestion des clients et de leur panier. + + + +\doxysubsection{Function Documentation} +\Hypertarget{client_8h_a927a335cb51f714f0e6e89c49f2d0258}\label{client_8h_a927a335cb51f714f0e6e89c49f2d0258} +\index{client.h@{client.h}!affiche\_recap\_panier@{affiche\_recap\_panier}} +\index{affiche\_recap\_panier@{affiche\_recap\_panier}!client.h@{client.h}} +\doxysubsubsection{\texorpdfstring{affiche\_recap\_panier()}{affiche\_recap\_panier()}} +{\footnotesize\ttfamily void affiche\+\_\+recap\+\_\+panier (\begin{DoxyParamCaption}\item[{int}]{panier\mbox{[}$\,$\mbox{]}, }\item[{int}]{taille\+Panier, }\item[{int}]{references\mbox{[}$\,$\mbox{]}, }\item[{float}]{poids\mbox{[}$\,$\mbox{]}, }\item[{float}]{volume\mbox{[}$\,$\mbox{]}, }\item[{float}]{prix\+Unitaire\mbox{[}$\,$\mbox{]}, }\item[{int}]{quantites\mbox{[}$\,$\mbox{]} }\end{DoxyParamCaption})} + + + +Affiche un récapitulatif du contenu du panier. + + +\begin{DoxyParams}{Parameters} +{\em panier} & -\/ Tableau des références des articles dans le panier. \\ +\hline +{\em taille\+Panier} & -\/ Taille du panier. \\ +\hline +{\em references} & -\/ Tableau des références des articles. \\ +\hline +{\em poids} & -\/ Tableau des poids des articles. \\ +\hline +{\em volume} & -\/ Tableau des volumes des articles. \\ +\hline +{\em prix\+Unitaire} & -\/ Tableau des prix unitaires des articles. \\ +\hline +{\em quantites} & -\/ Tableau des quantités de chaque article dans le panier.\\ +\hline +\end{DoxyParams} +Cette fonction permet d\textquotesingle{}afficher un récapitulatif du contenu du panier. + + +\begin{DoxyParams}{Parameters} +{\em panier} & -\/ Tableau des références des articles dans le panier. \\ +\hline +{\em taille\+Panier} & -\/ Taille du panier. \\ +\hline +{\em references} & -\/ Tableau des références des articles. \\ +\hline +{\em poids} & -\/ Tableau des poids des articles. \\ +\hline +{\em volume} & -\/ Tableau des volumes des articles. \\ +\hline +{\em prix\+Unitaire} & -\/ Tableau des prix unitaires des articles. \\ +\hline +{\em quantites} & -\/ Tableau des quantités de chaque article dans le panier. \\ +\hline +\end{DoxyParams} +\Hypertarget{client_8h_a08acbb5bd9bf4235f8d5cdd2edb0749a}\label{client_8h_a08acbb5bd9bf4235f8d5cdd2edb0749a} +\index{client.h@{client.h}!ajouter\_article\_au\_panier@{ajouter\_article\_au\_panier}} +\index{ajouter\_article\_au\_panier@{ajouter\_article\_au\_panier}!client.h@{client.h}} +\doxysubsubsection{\texorpdfstring{ajouter\_article\_au\_panier()}{ajouter\_article\_au\_panier()}} +{\footnotesize\ttfamily void ajouter\+\_\+article\+\_\+au\+\_\+panier (\begin{DoxyParamCaption}\item[{int}]{numero\+Client, }\item[{int}]{references\mbox{[}$\,$\mbox{]}, }\item[{float}]{poids\mbox{[}$\,$\mbox{]}, }\item[{float}]{volume\mbox{[}$\,$\mbox{]}, }\item[{float}]{prix\+Unitaire\mbox{[}$\,$\mbox{]}, }\item[{int}]{numeros\mbox{[}$\,$\mbox{]}, }\item[{float}]{cagnottes\mbox{[}$\,$\mbox{]}, }\item[{int}]{suspendues\mbox{[}$\,$\mbox{]}, }\item[{int}]{nombre\+Articles, }\item[{int}]{nombre\+Clients, }\item[{float}]{volume\+Coffre, }\item[{float}]{charge\+Maximale, }\item[{int}]{panier\mbox{[}$\,$\mbox{]}, }\item[{int}]{quantites\mbox{[}$\,$\mbox{]}, }\item[{int \texorpdfstring{$\ast$}{*}}]{taille\+Panier }\end{DoxyParamCaption})} + + + +Ajoute un article au panier du client. + + +\begin{DoxyParams}{Parameters} +{\em numero\+Client} & -\/ Numéro du client. \\ +\hline +{\em references} & -\/ Tableau des références des articles. \\ +\hline +{\em poids} & -\/ Tableau des poids des articles. \\ +\hline +{\em volume} & -\/ Tableau des volumes des articles. \\ +\hline +{\em prix\+Unitaire} & -\/ Tableau des prix unitaires des articles. \\ +\hline +{\em numeros} & -\/ Tableau des numéros de clients. \\ +\hline +{\em cagnottes} & -\/ Tableau des cagnottes des clients. \\ +\hline +{\em suspendues} & -\/ Tableau des états de suspension des clients. \\ +\hline +{\em nombre\+Articles} & -\/ Nombre d\textquotesingle{}articles disponibles. \\ +\hline +{\em nombre\+Clients} & -\/ Nombre de clients. \\ +\hline +{\em volume\+Coffre} & -\/ Volume total du coffre. \\ +\hline +{\em charge\+Maximale} & -\/ Charge maximale du coffre. \\ +\hline +{\em panier} & -\/ Tableau des références des articles dans le panier. \\ +\hline +{\em quantites} & -\/ Tableau des quantités de chaque article dans le panier. \\ +\hline +{\em taille\+Panier} & -\/ Taille du panier.\\ +\hline +\end{DoxyParams} +Cette fonction permet d\textquotesingle{}ajouter un article au panier du client. + + +\begin{DoxyParams}{Parameters} +{\em numero\+Client} & -\/ Numéro du client. \\ +\hline +{\em references} & -\/ Tableau des références des articles. \\ +\hline +{\em poids} & -\/ Tableau des poids des articles. \\ +\hline +{\em volume} & -\/ Tableau des volumes des articles. \\ +\hline +{\em prix\+Unitaire} & -\/ Tableau des prix unitaires des articles. \\ +\hline +{\em numeros} & -\/ Tableau des numéros de clients. \\ +\hline +{\em cagnottes} & -\/ Tableau des cagnottes des clients. \\ +\hline +{\em suspendues} & -\/ Tableau des états de suspension des clients. \\ +\hline +{\em nombre\+Articles} & -\/ Nombre d\textquotesingle{}articles disponibles. \\ +\hline +{\em nombre\+Clients} & -\/ Nombre de clients. \\ +\hline +{\em volume\+Coffre} & -\/ Volume total du coffre. \\ +\hline +{\em charge\+Maximale} & -\/ Charge maximale du coffre. \\ +\hline +{\em panier} & -\/ Tableau des références des articles dans le panier. \\ +\hline +{\em quantites} & -\/ Tableau des quantités de chaque article dans le panier. \\ +\hline +{\em taille\+Panier} & -\/ Taille du panier. \\ +\hline +\end{DoxyParams} +\Hypertarget{client_8h_a8bc792436cb2773b638667f7a898a625}\label{client_8h_a8bc792436cb2773b638667f7a898a625} +\index{client.h@{client.h}!charger\_clients@{charger\_clients}} +\index{charger\_clients@{charger\_clients}!client.h@{client.h}} +\doxysubsubsection{\texorpdfstring{charger\_clients()}{charger\_clients()}} +{\footnotesize\ttfamily int charger\+\_\+clients (\begin{DoxyParamCaption}\item[{int}]{numeros\mbox{[}$\,$\mbox{]}, }\item[{float}]{cagnottes\mbox{[}$\,$\mbox{]}, }\item[{int}]{suspendues\mbox{[}$\,$\mbox{]}, }\item[{int}]{t\+Physique }\end{DoxyParamCaption})} + + + +Charge les données des clients à partir d\textquotesingle{}un fichier. + + +\begin{DoxyParams}{Parameters} +{\em numeros} & -\/ Tableau des numéros de clients. \\ +\hline +{\em cagnottes} & -\/ Tableau des cagnottes des clients. \\ +\hline +{\em suspendues} & -\/ Tableau des états de suspension des clients. \\ +\hline +{\em t\+Physique} & -\/ Taille du tableau physique. \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +Le nombre de clients chargés ou -\/1 en cas d\textquotesingle{}erreur. +\end{DoxyReturn} +Cette fonction permet de charger les données des clients à partir d\textquotesingle{}un fichier. + + +\begin{DoxyParams}{Parameters} +{\em numeros} & -\/ Tableau des numéros de clients. \\ +\hline +{\em cagnottes} & -\/ Tableau des cagnottes des clients. \\ +\hline +{\em suspendues} & -\/ Tableau des états de suspension des clients. \\ +\hline +{\em t\+Physique} & -\/ Taille du tableau physique. \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +Le nombre de clients chargés ou -\/1 en cas d\textquotesingle{}erreur. +\end{DoxyReturn} +\Hypertarget{client_8h_a7203df964d63cb07d7b19912d5e3c3bd}\label{client_8h_a7203df964d63cb07d7b19912d5e3c3bd} +\index{client.h@{client.h}!deduire\_cagnotte@{deduire\_cagnotte}} +\index{deduire\_cagnotte@{deduire\_cagnotte}!client.h@{client.h}} +\doxysubsubsection{\texorpdfstring{deduire\_cagnotte()}{deduire\_cagnotte()}} +{\footnotesize\ttfamily void deduire\+\_\+cagnotte (\begin{DoxyParamCaption}\item[{int}]{numero\+Client, }\item[{float}]{montant, }\item[{int}]{numeros\mbox{[}$\,$\mbox{]}, }\item[{float}]{cagnottes\mbox{[}$\,$\mbox{]}, }\item[{int}]{nombre\+Clients, }\item[{int}]{suspendus\mbox{[}$\,$\mbox{]} }\end{DoxyParamCaption})} + + + +Déduit un montant de la cagnotte du client. + + +\begin{DoxyParams}{Parameters} +{\em numero\+Client} & -\/ Numéro du client. \\ +\hline +{\em montant} & -\/ Montant à déduire de la cagnotte. \\ +\hline +{\em numeros} & -\/ Tableau des numéros de clients. \\ +\hline +{\em cagnottes} & -\/ Tableau des cagnottes des clients. \\ +\hline +{\em nombre\+Clients} & -\/ Nombre de clients. \\ +\hline +{\em suspendus} & -\/ Tableau des états de suspension des clients.\\ +\hline +\end{DoxyParams} +Cette fonction permet de déduire un montant de la cagnotte du client. + + +\begin{DoxyParams}{Parameters} +{\em numero\+Client} & -\/ Numéro du client. \\ +\hline +{\em montant} & -\/ Montant à déduire de la cagnotte. \\ +\hline +{\em numeros} & -\/ Tableau des numéros de clients. \\ +\hline +{\em cagnottes} & -\/ Tableau des cagnottes des clients. \\ +\hline +{\em nombre\+Clients} & -\/ Nombre de clients. \\ +\hline +{\em suspendus} & -\/ Tableau des états de suspension des clients. \\ +\hline +\end{DoxyParams} +\Hypertarget{client_8h_affb9999893c1599e32ff604b5b50899d}\label{client_8h_affb9999893c1599e32ff604b5b50899d} +\index{client.h@{client.h}!modifier\_quantite\_article\_panier@{modifier\_quantite\_article\_panier}} +\index{modifier\_quantite\_article\_panier@{modifier\_quantite\_article\_panier}!client.h@{client.h}} +\doxysubsubsection{\texorpdfstring{modifier\_quantite\_article\_panier()}{modifier\_quantite\_article\_panier()}} +{\footnotesize\ttfamily void modifier\+\_\+quantite\+\_\+article\+\_\+panier (\begin{DoxyParamCaption}\item[{int}]{panier\mbox{[}$\,$\mbox{]}, }\item[{int}]{quantites\mbox{[}$\,$\mbox{]}, }\item[{int \texorpdfstring{$\ast$}{*}}]{taille\+Panier }\end{DoxyParamCaption})} + + + +Modifie la quantité d\textquotesingle{}un article dans le panier du client. + + +\begin{DoxyParams}{Parameters} +{\em panier} & -\/ Tableau des références des articles dans le panier. \\ +\hline +{\em quantites} & -\/ Tableau des quantités de chaque article dans le panier. \\ +\hline +{\em taille\+Panier} & -\/ Taille du panier.\\ +\hline +\end{DoxyParams} +Cette fonction permet de modifier la quantité d\textquotesingle{}un article dans le panier du client. + + +\begin{DoxyParams}{Parameters} +{\em panier} & -\/ Tableau des références des articles dans le panier. \\ +\hline +{\em quantites} & -\/ Tableau des quantités de chaque article dans le panier. \\ +\hline +{\em taille\+Panier} & -\/ Taille du panier. \\ +\hline +\end{DoxyParams} +\Hypertarget{client_8h_acbac92090885f76ac2ea79c3449af58e}\label{client_8h_acbac92090885f76ac2ea79c3449af58e} +\index{client.h@{client.h}!reinitialiser\_panier@{reinitialiser\_panier}} +\index{reinitialiser\_panier@{reinitialiser\_panier}!client.h@{client.h}} +\doxysubsubsection{\texorpdfstring{reinitialiser\_panier()}{reinitialiser\_panier()}} +{\footnotesize\ttfamily void reinitialiser\+\_\+panier (\begin{DoxyParamCaption}\item[{int}]{panier\mbox{[}$\,$\mbox{]}, }\item[{int}]{quantites\mbox{[}$\,$\mbox{]}, }\item[{int \texorpdfstring{$\ast$}{*}}]{taille\+Panier }\end{DoxyParamCaption})} + + + +Réinitialise le panier du client. + + +\begin{DoxyParams}{Parameters} +{\em panier} & -\/ Tableau des références des articles dans le panier. \\ +\hline +{\em quantites} & -\/ Tableau des quantités de chaque article dans le panier. \\ +\hline +{\em taille\+Panier} & -\/ Taille du panier.\\ +\hline +\end{DoxyParams} +Cette fonction permet de réinitialiser le panier du client. + + +\begin{DoxyParams}{Parameters} +{\em panier} & -\/ Tableau des références des articles dans le panier. \\ +\hline +{\em quantites} & -\/ Tableau des quantités de chaque article dans le panier. \\ +\hline +{\em taille\+Panier} & -\/ Taille du panier. \\ +\hline +\end{DoxyParams} +\Hypertarget{client_8h_ae12d225761d8ad5a091665228bfe676e}\label{client_8h_ae12d225761d8ad5a091665228bfe676e} +\index{client.h@{client.h}!supprimer\_article\_du\_panier@{supprimer\_article\_du\_panier}} +\index{supprimer\_article\_du\_panier@{supprimer\_article\_du\_panier}!client.h@{client.h}} +\doxysubsubsection{\texorpdfstring{supprimer\_article\_du\_panier()}{supprimer\_article\_du\_panier()}} +{\footnotesize\ttfamily void supprimer\+\_\+article\+\_\+du\+\_\+panier (\begin{DoxyParamCaption}\item[{int}]{panier\mbox{[}$\,$\mbox{]}, }\item[{int}]{quantites\mbox{[}$\,$\mbox{]}, }\item[{int \texorpdfstring{$\ast$}{*}}]{taille\+Panier }\end{DoxyParamCaption})} + + + +Supprime un article du panier du client. + + +\begin{DoxyParams}{Parameters} +{\em panier} & -\/ Tableau des références des articles dans le panier. \\ +\hline +{\em quantites} & -\/ Tableau des quantités de chaque article dans le panier. \\ +\hline +{\em taille\+Panier} & -\/ Taille du panier.\\ +\hline +\end{DoxyParams} +Cette fonction permet de supprimer un article du panier du client. + + +\begin{DoxyParams}{Parameters} +{\em panier} & -\/ Tableau des références des articles dans le panier. \\ +\hline +{\em quantites} & -\/ Tableau des quantités de chaque article dans le panier. \\ +\hline +{\em taille\+Panier} & -\/ Taille du panier. \\ +\hline +\end{DoxyParams} diff --git a/docs/latex/client_8h_source.tex b/docs/latex/client_8h_source.tex new file mode 100644 index 0000000..8cdcf61 --- /dev/null +++ b/docs/latex/client_8h_source.tex @@ -0,0 +1,30 @@ +\doxysection{client.\+h} +\hypertarget{client_8h_source}{}\label{client_8h_source}\index{src/app/core\_logic/client.h@{src/app/core\_logic/client.h}} +\mbox{\hyperlink{client_8h}{Go to the documentation of this file.}} +\begin{DoxyCode}{0} +\DoxyCodeLine{00001\ \textcolor{preprocessor}{\#ifndef\ SAE\_101\_CLIENT\_H}} +\DoxyCodeLine{00002\ \textcolor{preprocessor}{\#define\ SAE\_101\_CLIENT\_H}} +\DoxyCodeLine{00003\ } +\DoxyCodeLine{00004\ \textcolor{preprocessor}{\#include\ }} +\DoxyCodeLine{00005\ \textcolor{preprocessor}{\#include\ }} +\DoxyCodeLine{00006\ } +\DoxyCodeLine{00021\ \textcolor{keywordtype}{int}\ \mbox{\hyperlink{client_8h_a8bc792436cb2773b638667f7a898a625}{charger\_clients}}(\textcolor{keywordtype}{int}\ numeros[],\ \textcolor{keywordtype}{float}\ cagnottes[],\ \textcolor{keywordtype}{int}\ suspendues[],\ \textcolor{keywordtype}{int}\ tPhysique);} +\DoxyCodeLine{00022\ } +\DoxyCodeLine{00042\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{client_8h_a08acbb5bd9bf4235f8d5cdd2edb0749a}{ajouter\_article\_au\_panier}}(\textcolor{keywordtype}{int}\ numeroClient,\ \textcolor{keywordtype}{int}\ references[],\ \textcolor{keywordtype}{float}\ poids[],\ \textcolor{keywordtype}{float}\ volume[],\ \textcolor{keywordtype}{float}\ prixUnitaire[],} +\DoxyCodeLine{00043\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{int}\ numeros[],\ \textcolor{keywordtype}{float}\ cagnottes[],\ \textcolor{keywordtype}{int}\ suspendues[],\ \textcolor{keywordtype}{int}\ nombreArticles,\ \textcolor{keywordtype}{int}\ nombreClients,} +\DoxyCodeLine{00044\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{float}\ volumeCoffre,\ \textcolor{keywordtype}{float}\ chargeMaximale,\ \textcolor{keywordtype}{int}\ panier[],\ \textcolor{keywordtype}{int}\ quantites[],\ \textcolor{keywordtype}{int}\ *taillePanier);} +\DoxyCodeLine{00045\ } +\DoxyCodeLine{00053\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{client_8h_ae12d225761d8ad5a091665228bfe676e}{supprimer\_article\_du\_panier}}(\textcolor{keywordtype}{int}\ panier[],\ \textcolor{keywordtype}{int}\ quantites[],\ \textcolor{keywordtype}{int}\ *taillePanier);} +\DoxyCodeLine{00054\ } +\DoxyCodeLine{00066\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{client_8h_a927a335cb51f714f0e6e89c49f2d0258}{affiche\_recap\_panier}}(\textcolor{keywordtype}{int}\ panier[],\ \textcolor{keywordtype}{int}\ taillePanier,\ \textcolor{keywordtype}{int}\ references[],\ \textcolor{keywordtype}{float}\ poids[],\ \textcolor{keywordtype}{float}\ volume[],} +\DoxyCodeLine{00067\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{float}\ prixUnitaire[],\ \textcolor{keywordtype}{int}\ quantites[]);} +\DoxyCodeLine{00068\ } +\DoxyCodeLine{00076\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{client_8h_affb9999893c1599e32ff604b5b50899d}{modifier\_quantite\_article\_panier}}(\textcolor{keywordtype}{int}\ panier[],\ \textcolor{keywordtype}{int}\ quantites[],\ \textcolor{keywordtype}{int}\ *taillePanier);} +\DoxyCodeLine{00077\ } +\DoxyCodeLine{00085\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{client_8h_acbac92090885f76ac2ea79c3449af58e}{reinitialiser\_panier}}(\textcolor{keywordtype}{int}\ panier[],\ \textcolor{keywordtype}{int}\ quantites[],\ \textcolor{keywordtype}{int}\ *taillePanier);} +\DoxyCodeLine{00086\ } +\DoxyCodeLine{00097\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{client_8h_a7203df964d63cb07d7b19912d5e3c3bd}{deduire\_cagnotte}}(\textcolor{keywordtype}{int}\ numeroClient,\ \textcolor{keywordtype}{float}\ montant,\ \textcolor{keywordtype}{int}\ numeros[],\ \textcolor{keywordtype}{float}\ cagnottes[],\ \textcolor{keywordtype}{int}\ nombreClients,\ \textcolor{keywordtype}{int}\ suspendus[]);} +\DoxyCodeLine{00098\ } +\DoxyCodeLine{00099\ \textcolor{preprocessor}{\#endif\ }\textcolor{comment}{//\ SAE\_101\_CLIENT\_H}} + +\end{DoxyCode} diff --git a/docs/latex/doxygen.sty b/docs/latex/doxygen.sty new file mode 100644 index 0000000..4bfc17f --- /dev/null +++ b/docs/latex/doxygen.sty @@ -0,0 +1,694 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{doxygen} + +% Packages used by this style file +\RequirePackage{alltt} +%%\RequirePackage{array} %% moved to refman.tex due to workaround for LaTex 2019 version and unmaintained tabu package +\RequirePackage{calc} +\RequirePackage{float} +%%\RequirePackage{ifthen} %% moved to refman.tex due to workaround for LaTex 2019 version and unmaintained tabu package +\RequirePackage{verbatim} +\RequirePackage[table]{xcolor} +\RequirePackage{longtable_doxygen} +\RequirePackage{tabu_doxygen} +\RequirePackage{fancyvrb} +\RequirePackage{tabularx} +\RequirePackage{multicol} +\RequirePackage{multirow} +\RequirePackage{hanging} +\RequirePackage{ifpdf} +\RequirePackage{adjustbox} +\RequirePackage{amssymb} +\RequirePackage{stackengine} +\RequirePackage{enumitem} +\RequirePackage{alphalph} +\RequirePackage[normalem]{ulem} % for strikeout, but don't modify emphasis + +%---------- Internal commands used in this style file ---------------- + +\newcommand{\ensurespace}[1]{% + \begingroup% + \setlength{\dimen@}{#1}% + \vskip\z@\@plus\dimen@% + \penalty -100\vskip\z@\@plus -\dimen@% + \vskip\dimen@% + \penalty 9999% + \vskip -\dimen@% + \vskip\z@skip% hide the previous |\vskip| from |\addvspace| + \endgroup% +} + +\newcommand{\DoxyHorRuler}[1]{% + \setlength{\parskip}{0ex plus 0ex minus 0ex}% + \ifthenelse{#1=0}% + {% + \hrule% + }% + {% + \hrulefilll% + }% +} +\newcommand{\DoxyLabelFont}{} +\newcommand{\entrylabel}[1]{% + {% + \parbox[b]{\labelwidth-4pt}{% + \makebox[0pt][l]{\DoxyLabelFont#1}% + \vspace{1.5\baselineskip}% + }% + }% +} + +\newenvironment{DoxyDesc}[1]{% + \ensurespace{4\baselineskip}% + \begin{list}{}{% + \settowidth{\labelwidth}{20pt}% + %\setlength{\parsep}{0pt}% + \setlength{\itemsep}{0pt}% + \setlength{\leftmargin}{\labelwidth+\labelsep}% + \renewcommand{\makelabel}{\entrylabel}% + }% + \item[#1]% +}{% + \end{list}% +} + +\newsavebox{\xrefbox} +\newlength{\xreflength} +\newcommand{\xreflabel}[1]{% + \sbox{\xrefbox}{#1}% + \setlength{\xreflength}{\wd\xrefbox}% + \ifthenelse{\xreflength>\labelwidth}{% + \begin{minipage}{\textwidth}% + \setlength{\parindent}{0pt}% + \hangindent=15pt\bfseries #1\vspace{1.2\itemsep}% + \end{minipage}% + }{% + \parbox[b]{\labelwidth}{\makebox[0pt][l]{\textbf{#1}}}% + }% +} + +%---------- Commands used by doxygen LaTeX output generator ---------- + +% Used by
     ... 
    +\newenvironment{DoxyPre}{% + \small% + \begin{alltt}% +}{% + \end{alltt}% + \normalsize% +} +% Necessary for redefining not defined characters, i.e. "Replacement Character" in tex output. +\newlength{\CodeWidthChar} +\newlength{\CodeHeightChar} +\settowidth{\CodeWidthChar}{?} +\settoheight{\CodeHeightChar}{?} +% Necessary for hanging indent +\newlength{\DoxyCodeWidth} + +\newcommand\DoxyCodeLine[1]{ + \ifthenelse{\equal{\detokenize{#1}}{}} + { + \vspace*{\baselineskip} + } + { + \hangpara{\DoxyCodeWidth}{1}{#1}\par + } +} + +\newcommand\NiceSpace{% + \discretionary{}{\kern\fontdimen2\font}{\kern\fontdimen2\font}% +} + +% Used by @code ... @endcode +\newenvironment{DoxyCode}[1]{% + \par% + \scriptsize% + \normalfont\ttfamily% + \rightskip0pt plus 1fil% + \settowidth{\DoxyCodeWidth}{000000}% + \settowidth{\CodeWidthChar}{?}% + \settoheight{\CodeHeightChar}{?}% + \setlength{\parskip}{0ex plus 0ex minus 0ex}% + \ifthenelse{\equal{#1}{0}} + { + {\lccode`~32 \lowercase{\global\let~}\NiceSpace}\obeyspaces% + } + { + {\lccode`~32 \lowercase{\global\let~}}\obeyspaces% + } + +}{% + \normalfont% + \normalsize% + \settowidth{\CodeWidthChar}{?}% + \settoheight{\CodeHeightChar}{?}% +} + +% Redefining not defined characters, i.e. "Replacement Character" in tex output. +\def\ucr{\adjustbox{width=\CodeWidthChar,height=\CodeHeightChar}{\stackinset{c}{}{c}{-.2pt}{% + \textcolor{white}{\sffamily\bfseries\small ?}}{% + \rotatebox{45}{$\blacksquare$}}}} + +% Used by @example, @include, @includelineno and @dontinclude +\newenvironment{DoxyCodeInclude}[1]{% + \DoxyCode{#1}% +}{% + \endDoxyCode% +} + +% Used by @verbatim ... @endverbatim +\newenvironment{DoxyVerb}{% + \par% + \footnotesize% + \verbatim% +}{% + \endverbatim% + \normalsize% +} + +% Used by @verbinclude +\newenvironment{DoxyVerbInclude}{% + \DoxyVerb% +}{% + \endDoxyVerb% +} + +% Used by numbered lists (using '-#' or
      ...
    ) +\setlistdepth{12} +\newlist{DoxyEnumerate}{enumerate}{12} +\setlist[DoxyEnumerate,1]{label=\arabic*.} +\setlist[DoxyEnumerate,2]{label=(\enumalphalphcnt*)} +\setlist[DoxyEnumerate,3]{label=\roman*.} +\setlist[DoxyEnumerate,4]{label=\enumAlphAlphcnt*.} +\setlist[DoxyEnumerate,5]{label=\arabic*.} +\setlist[DoxyEnumerate,6]{label=(\enumalphalphcnt*)} +\setlist[DoxyEnumerate,7]{label=\roman*.} +\setlist[DoxyEnumerate,8]{label=\enumAlphAlphcnt*.} +\setlist[DoxyEnumerate,9]{label=\arabic*.} +\setlist[DoxyEnumerate,10]{label=(\enumalphalphcnt*)} +\setlist[DoxyEnumerate,11]{label=\roman*.} +\setlist[DoxyEnumerate,12]{label=\enumAlphAlphcnt*.} + +% Used by bullet lists (using '-', @li, @arg, or
      ...
    ) +\setlistdepth{12} +\newlist{DoxyItemize}{itemize}{12} +\setlist[DoxyItemize]{label=\textperiodcentered} + +\setlist[DoxyItemize,1]{label=\textbullet} +\setlist[DoxyItemize,2]{label=\normalfont\bfseries \textendash} +\setlist[DoxyItemize,3]{label=\textasteriskcentered} +\setlist[DoxyItemize,4]{label=\textperiodcentered} + +% Used by description lists (using
    ...
    ) +\newenvironment{DoxyDescription}{% + \description% +}{% + \enddescription% +} + +% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc +% (only if caption is specified) +\newenvironment{DoxyImage}{% + \begin{figure}[H]% + \centering% +}{% + \end{figure}% +} + +% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc +% (only if no caption is specified) +\newenvironment{DoxyImageNoCaption}{% + \begin{center}% +}{% + \end{center}% +} + +% Used by @image +% (only if inline is specified) +\newenvironment{DoxyInlineImage}{% +}{% +} + +% Used by @attention +\newenvironment{DoxyAttention}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @author and @authors +\newenvironment{DoxyAuthor}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @date +\newenvironment{DoxyDate}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @invariant +\newenvironment{DoxyInvariant}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @note +\newenvironment{DoxyNote}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @post +\newenvironment{DoxyPostcond}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @pre +\newenvironment{DoxyPrecond}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @copyright +\newenvironment{DoxyCopyright}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @remark +\newenvironment{DoxyRemark}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @return and @returns +\newenvironment{DoxyReturn}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @since +\newenvironment{DoxySince}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @see +\newenvironment{DoxySeeAlso}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @version +\newenvironment{DoxyVersion}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @warning +\newenvironment{DoxyWarning}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @par and @paragraph +\newenvironment{DoxyParagraph}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by parameter lists +\newenvironment{DoxyParams}[2][]{% + \tabulinesep=1mm% + \par% + \ifthenelse{\equal{#1}{}}% + {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|}}% name + description + {\ifthenelse{\equal{#1}{1}}% + {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + name + desc + {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + type + name + desc + } + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used for fields of simple structs +\newenvironment{DoxyFields}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|X[-1,l]|}% + \multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used for fields simple class style enums +\newenvironment{DoxyEnumFields}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used for parameters within a detailed function description +\newenvironment{DoxyParamCaption}{% + \renewcommand{\item}[2][]{\\ \hspace*{2.0cm} ##1 {\em ##2}}% +}{% +} + +% Used by return value lists +\newenvironment{DoxyRetVals}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used by exception lists +\newenvironment{DoxyExceptions}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used by template parameter lists +\newenvironment{DoxyTemplParams}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used for member lists +\newenvironment{DoxyCompactItemize}{% + \begin{itemize}% + \setlength{\itemsep}{-3pt}% + \setlength{\parsep}{0pt}% + \setlength{\topsep}{0pt}% + \setlength{\partopsep}{0pt}% +}{% + \end{itemize}% +} + +% Used for member descriptions +\newenvironment{DoxyCompactList}{% + \begin{list}{}{% + \setlength{\leftmargin}{0.5cm}% + \setlength{\itemsep}{0pt}% + \setlength{\parsep}{0pt}% + \setlength{\topsep}{0pt}% + \renewcommand{\makelabel}{\hfill}% + }% +}{% + \end{list}% +} + +% Used for reference lists (@bug, @deprecated, @todo, etc.) +\newenvironment{DoxyRefList}{% + \begin{list}{}{% + \setlength{\labelwidth}{10pt}% + \setlength{\leftmargin}{\labelwidth}% + \addtolength{\leftmargin}{\labelsep}% + \renewcommand{\makelabel}{\xreflabel}% + }% +}{% + \end{list}% +} + +% Used by @bug, @deprecated, @todo, etc. +\newenvironment{DoxyRefDesc}[1]{% + \begin{list}{}{% + \renewcommand\makelabel[1]{\textbf{##1}}% + \settowidth\labelwidth{\makelabel{#1}}% + \setlength\leftmargin{\labelwidth+\labelsep}% + }% +}{% + \end{list}% +} + +% Used by parameter lists and simple sections +\newenvironment{Desc} +{\begin{list}{}{% + \settowidth{\labelwidth}{20pt}% + \setlength{\parsep}{0pt}% + \setlength{\itemsep}{0pt}% + \setlength{\leftmargin}{\labelwidth+\labelsep}% + \renewcommand{\makelabel}{\entrylabel}% + } +}{% + \end{list}% +} + +% Used by tables +\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp}% +\newenvironment{TabularC}[1]% +{\tabulinesep=1mm +\begin{longtabu*}spread 0pt [c]{*#1{|X[-1]}|}}% +{\end{longtabu*}\par}% + +\newenvironment{TabularNC}[1]% +{\begin{tabu}spread 0pt [l]{*#1{|X[-1]}|}}% +{\end{tabu}\par}% + +% Used for member group headers +\newenvironment{Indent}{% + \begin{list}{}{% + \setlength{\leftmargin}{0.5cm}% + }% + \item[]\ignorespaces% +}{% + \unskip% + \end{list}% +} + +% Used when hyperlinks are turned on +\newcommand{\doxylink}[2]{% + \mbox{\hyperlink{#1}{#2}}% +} + +% Used when hyperlinks are turned on +% Third argument is the SectionType, see the doxygen internal +% documentation for the values (relevant: Page ... Subsubsection). +\newcommand{\doxysectlink}[3]{% + \mbox{\hyperlink{#1}{#2}}% +} +% Used when hyperlinks are turned off +\newcommand{\doxyref}[3]{% + \textbf{#1} (\textnormal{#2}\,\pageref{#3})% +} + +% Used when hyperlinks are turned off +% Fourth argument is the SectionType, see the doxygen internal +% documentation for the values (relevant: Page ... Subsubsection). +\newcommand{\doxysectref}[4]{% + \textbf{#1} (\textnormal{#2}\,\pageref{#3})% +} + +% Used to link to a table when hyperlinks are turned on +\newcommand{\doxytablelink}[2]{% + \ref{#1}% +} + +% Used to link to a table when hyperlinks are turned off +\newcommand{\doxytableref}[3]{% + \ref{#3}% +} + +% Used by @addindex +\newcommand{\lcurly}{\{} +\newcommand{\rcurly}{\}} + +% Colors used for syntax highlighting +\definecolor{comment}{rgb}{0.5,0.0,0.0} +\definecolor{keyword}{rgb}{0.0,0.5,0.0} +\definecolor{keywordtype}{rgb}{0.38,0.25,0.125} +\definecolor{keywordflow}{rgb}{0.88,0.5,0.0} +\definecolor{preprocessor}{rgb}{0.5,0.38,0.125} +\definecolor{stringliteral}{rgb}{0.0,0.125,0.25} +\definecolor{charliteral}{rgb}{0.0,0.5,0.5} +\definecolor{xmlcdata}{rgb}{0.0,0.0,0.0} +\definecolor{vhdldigit}{rgb}{1.0,0.0,1.0} +\definecolor{vhdlkeyword}{rgb}{0.43,0.0,0.43} +\definecolor{vhdllogic}{rgb}{1.0,0.0,0.0} +\definecolor{vhdlchar}{rgb}{0.0,0.0,0.0} + +% Color used for table heading +\newcommand{\tableheadbgcolor}{lightgray}% + +% Version of hypertarget with correct landing location +\newcommand{\Hypertarget}[1]{\Hy@raisedlink{\hypertarget{#1}{}}} + +% possibility to have sections etc. be within the margins +% unfortunately had to copy part of book.cls and add \raggedright +\makeatletter +\newcounter{subsubsubsection}[subsubsection] +\newcounter{subsubsubsubsection}[subsubsubsection] +\newcounter{subsubsubsubsubsection}[subsubsubsubsection] +\newcounter{subsubsubsubsubsubsection}[subsubsubsubsubsection] +\renewcommand{\thesubsubsubsection}{\thesubsubsection.\arabic{subsubsubsection}} +\renewcommand{\thesubsubsubsubsection}{\thesubsubsubsection.\arabic{subsubsubsubsection}} +\renewcommand{\thesubsubsubsubsubsection}{\thesubsubsubsubsection.\arabic{subsubsubsubsubsection}} +\renewcommand{\thesubsubsubsubsubsubsection}{\thesubsubsubsubsubsection.\arabic{subsubsubsubsubsubsection}} +\newcommand{\subsubsubsectionmark}[1]{} +\newcommand{\subsubsubsubsectionmark}[1]{} +\newcommand{\subsubsubsubsubsectionmark}[1]{} +\newcommand{\subsubsubsubsubsubsectionmark}[1]{} +\def\toclevel@subsubsubsection{4} +\def\toclevel@subsubsubsubsection{5} +\def\toclevel@subsubsubsubsubsection{6} +\def\toclevel@subsubsubsubsubsubsection{7} +\def\toclevel@paragraph{8} +\def\toclevel@subparagraph{9} + +\newcommand\doxysection{\@startsection {section}{1}{\z@}% + {-3.5ex \@plus -1ex \@minus -.2ex}% + {2.3ex \@plus.2ex}% + {\raggedright\normalfont\Large\bfseries}} +\newcommand\doxysubsection{\@startsection{subsection}{2}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\large\bfseries}} +\newcommand\doxysubsubsection{\@startsection{subsubsection}{3}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\normalsize\bfseries}} +\newcommand\doxysubsubsubsection{\@startsection{subsubsubsection}{4}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\normalsize\bfseries}} +\newcommand\doxysubsubsubsubsection{\@startsection{subsubsubsubsection}{5}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\normalsize\bfseries}} +\newcommand\doxysubsubsubsubsubsection{\@startsection{subsubsubsubsubsection}{6}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\normalsize\bfseries}} +\newcommand\doxysubsubsubsubsubsubsection{\@startsection{subsubsubsubsubsubsection}{7}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\normalsize\bfseries}} +\newcommand\doxyparagraph{\@startsection{paragraph}{8}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\normalsize\bfseries}} +\newcommand\doxysubparagraph{\@startsection{subparagraph}{9}{\parindent}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\normalsize\bfseries}} + +\newcommand\l@subsubsubsection{\@dottedtocline{4}{6.1em}{7.8em}} +\newcommand\l@subsubsubsubsection{\@dottedtocline{5}{6.1em}{9.4em}} +\newcommand\l@subsubsubsubsubsection{\@dottedtocline{6}{6.1em}{11em}} +\newcommand\l@subsubsubsubsubsubsection{\@dottedtocline{7}{6.1em}{12.6em}} +\renewcommand\l@paragraph{\@dottedtocline{8}{6.1em}{14.2em}} +\renewcommand\l@subparagraph{\@dottedtocline{9}{6.1em}{15.8em}} +\makeatother +% the sectsty doesn't look to be maintained but gives, in our case, some warning like: +% LaTeX Warning: Command \underline has changed. +% Check if current package is valid. +% unfortunately had to copy the relevant part +\newcommand*{\doxypartfont} [1] + {\gdef\SS@partnumberfont{\SS@sectid{0}\SS@nopart\SS@makeulinepartchap#1} + \gdef\SS@parttitlefont{\SS@sectid{0}\SS@titlepart\SS@makeulinepartchap#1}} +\newcommand*{\doxychapterfont} [1] + {\gdef\SS@chapnumfont{\SS@sectid{1}\SS@nopart\SS@makeulinepartchap#1} + \gdef\SS@chaptitlefont{\SS@sectid{1}\SS@titlepart\SS@makeulinepartchap#1}} +\newcommand*{\doxysectionfont} [1] + {\gdef\SS@sectfont{\SS@sectid{2}\SS@rr\SS@makeulinesect#1}} +\newcommand*{\doxysubsectionfont} [1] + {\gdef\SS@subsectfont{\SS@sectid{3}\SS@rr\SS@makeulinesect#1}} +\newcommand*{\doxysubsubsectionfont} [1] + {\gdef\SS@subsubsectfont{\SS@sectid{4}\SS@rr\SS@makeulinesect#1}} +\newcommand*{\doxyparagraphfont} [1] + {\gdef\SS@parafont{\SS@sectid{5}\SS@rr\SS@makeulinesect#1}} +\newcommand*{\doxysubparagraphfont} [1] + {\gdef\SS@subparafont{\SS@sectid{6}\SS@rr\SS@makeulinesect#1}} +\newcommand*{\doxyminisecfont} [1] + {\gdef\SS@minisecfont{\SS@sectid{7}\SS@rr\SS@makeulinepartchap#1}} +\newcommand*{\doxyallsectionsfont} [1] {\doxypartfont{#1}% + \doxychapterfont{#1}% + \doxysectionfont{#1}% + \doxysubsectionfont{#1}% + \doxysubsubsectionfont{#1}% + \doxyparagraphfont{#1}% + \doxysubparagraphfont{#1}% + \doxyminisecfont{#1}}% +% Define caption that is also suitable in a table +\makeatletter +\def\doxyfigcaption{% +\H@refstepcounter{figure}% +\@dblarg{\@caption{figure}}} +\makeatother + +% Define alpha enumarative names for counters > 26 +\makeatletter +\def\enumalphalphcnt#1{\expandafter\@enumalphalphcnt\csname c@#1\endcsname} +\def\@enumalphalphcnt#1{\alphalph{#1}} +\def\enumAlphAlphcnt#1{\expandafter\@enumAlphAlphcnt\csname c@#1\endcsname} +\def\@enumAlphAlphcnt#1{\AlphAlph{#1}} +\makeatother +\AddEnumerateCounter{\enumalphalphcnt}{\@enumalphalphcnt}{aa} +\AddEnumerateCounter{\enumAlphAlphcnt}{\@enumAlphAlphcnt}{AA} diff --git a/docs/latex/etoc_doxygen.sty b/docs/latex/etoc_doxygen.sty new file mode 100644 index 0000000..5f7e127 --- /dev/null +++ b/docs/latex/etoc_doxygen.sty @@ -0,0 +1,2178 @@ +%% +%% This is file etoc_doxygen.sty +%% +%% Apart from this header notice and the renaming from etoc to +%% etoc_doxygen (also in \ProvidesPackage) it is an identical +%% copy of +%% +%% etoc.sty +%% +%% at version 1.2b of 2023/07/01. +%% +%% This file has been provided to Doxygen team courtesy of the +%% author for benefit of users having a LaTeX installation not +%% yet providing version 1.2a or later of etoc, whose +%% deeplevels feature is required. +%% +%% The original source etoc.dtx (only of the latest version at +%% any given time) is available at +%% +%% https://ctan.org/pkg/etoc +%% +%% and contains the terms for copying and modification as well +%% as author contact information. +%% +%% In brief any modified versions of this file must be renamed +%% with new filenames distinct from etoc.sty. +%% +%% Package: etoc +%% Version: 1.2b +%% License: LPPL 1.3c +%% Copyright (C) 2012-2023 Jean-Francois B. +\NeedsTeXFormat{LaTeX2e}[2003/12/01] +\ProvidesPackage{etoc_doxygen}[2023/07/01 v1.2b Completely customisable TOCs (JFB)] +\newif\ifEtoc@oldLaTeX +\@ifl@t@r\fmtversion{2020/10/01} + {} + {\Etoc@oldLaTeXtrue + \PackageInfo{etoc}{Old LaTeX (\fmtversion) detected!\MessageBreak + Since 1.1a (2023/01/14), etoc prefers LaTeX at least\MessageBreak + as recent as 2020-10-01, for reasons of the .toc file,\MessageBreak + and used to require it (from 1.1a to 1.2).\MessageBreak + This etoc (1.2b) does not *require* it, but has not been\MessageBreak + tested thoroughly on old LaTeX (especially if document\MessageBreak + does not use hyperref) and retrofitting was done only\MessageBreak + on basis of author partial remembrances of old context.\MessageBreak + Reported}} +\RequirePackage{kvoptions} +\SetupKeyvalOptions{prefix=Etoc@} +\newif\ifEtoc@lof +\DeclareVoidOption{lof}{\Etoc@loftrue + \PackageInfo{etoc}{Experimental support for \string\locallistoffigures.\MessageBreak + Barely tested, use at own risk}% +} +\newif\ifEtoc@lot +\DeclareVoidOption{lot}{\Etoc@lottrue + \PackageInfo{etoc}{Experimental support for \string\locallistoftables.\MessageBreak + Barely tested, use at own risk}% +} +\@ifclassloaded{memoir}{ +\PackageInfo{etoc} + {As this is with memoir class, all `...totoc' options\MessageBreak + are set true by default. Reported} +\DeclareBoolOption[true]{maintoctotoc} +\DeclareBoolOption[true]{localtoctotoc} +\DeclareBoolOption[true]{localloftotoc} +\DeclareBoolOption[true]{locallottotoc} +}{ +\DeclareBoolOption[false]{maintoctotoc} +\DeclareBoolOption[false]{localtoctotoc} +\DeclareBoolOption[false]{localloftotoc} +\DeclareBoolOption[false]{locallottotoc} +} +\DeclareBoolOption[true]{ouroboros} +\DeclareBoolOption[false]{deeplevels} +\DeclareDefaultOption{\PackageWarning{etoc}{Option `\CurrentOption' is unknown.}} +\ProcessKeyvalOptions* +\DisableKeyvalOption[action=error,package=etoc]{etoc}{lof} +\DisableKeyvalOption[action=error,package=etoc]{etoc}{lot} +\DisableKeyvalOption[action=error,package=etoc]{etoc}{deeplevels} +\def\etocsetup#1{\setkeys{etoc}{#1}} +\def\etocifmaintoctotoc{\ifEtoc@maintoctotoc + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} +\def\etociflocaltoctotoc{\ifEtoc@localtoctotoc + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} +\def\etociflocalloftotoc{\ifEtoc@localloftotoc + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} +\def\etociflocallottotoc{\ifEtoc@locallottotoc + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} +\RequirePackage{multicol} +\def\etoc@{\etoc@} +\long\def\Etoc@gobtoetoc@ #1\etoc@{} +\newtoks\Etoc@toctoks +\def\Etoc@par{\par} +\def\etocinline{\def\Etoc@par{}} +\let\etocnopar\etocinline +\def\etocdisplay{\def\Etoc@par{\par}} +\let\Etoc@global\@empty +\def\etocglobaldefs{\let\Etoc@global\global\let\tof@global\global} +\def\etoclocaldefs {\let\Etoc@global\@empty\let\tof@global\@empty} +\newif\ifEtoc@numbered +\newif\ifEtoc@hyperref +\newif\ifEtoc@parskip +\newif\ifEtoc@tocwithid +\newif\ifEtoc@standardlines +\newif\ifEtoc@etocstyle +\newif\ifEtoc@classstyle +\newif\ifEtoc@keeporiginaltoc +\newif\ifEtoc@skipprefix +\newif\ifEtoc@isfirst +\newif\ifEtoc@localtoc +\newif\ifEtoc@skipthisone +\newif\ifEtoc@stoptoc +\newif\ifEtoc@notactive +\newif\ifEtoc@mustclosegroup +\newif\ifEtoc@isemptytoc +\newif\ifEtoc@checksemptiness +\def\etocchecksemptiness {\Etoc@checksemptinesstrue } +\def\etocdoesnotcheckemptiness {\Etoc@checksemptinessfalse } +\newif\ifEtoc@notocifnotoc +\def\etocnotocifnotoc {\Etoc@checksemptinesstrue\Etoc@notocifnotoctrue } +\newcounter{etoc@tocid} +\def\Etoc@tocext{toc} +\def\Etoc@lofext{lof} +\def\Etoc@lotext{lot} +\let\Etoc@currext\Etoc@tocext +\def\etocifislocal{\ifEtoc@localtoc\expandafter\@firstoftwo\else + \expandafter\@secondoftwo\fi + } +\def\etocifislocaltoc{\etocifislocal{\ifx\Etoc@currext\Etoc@tocext + \expandafter\@firstoftwo\else + \expandafter\@secondoftwo\fi}% + {\@secondoftwo}% + } +\def\etocifislocallof{\etocifislocal{\ifx\Etoc@currext\Etoc@lofext + \expandafter\@firstoftwo\else + \expandafter\@secondoftwo\fi}% + {\@secondoftwo}% + } +\def\etocifislocallot{\etocifislocal{\ifx\Etoc@currext\Etoc@lotext + \expandafter\@firstoftwo\else + \expandafter\@secondoftwo\fi}% + {\@secondoftwo}% + } +\expandafter\def\csname Etoc@-3@@\endcsname {-\thr@@} +\expandafter\def\csname Etoc@-2@@\endcsname {-\tw@} +\expandafter\let\csname Etoc@-1@@\endcsname \m@ne +\expandafter\let\csname Etoc@0@@\endcsname \z@ +\expandafter\let\csname Etoc@1@@\endcsname \@ne +\expandafter\let\csname Etoc@2@@\endcsname \tw@ +\expandafter\let\csname Etoc@3@@\endcsname \thr@@ +\expandafter\chardef\csname Etoc@4@@\endcsname 4 +\expandafter\chardef\csname Etoc@5@@\endcsname 5 +\expandafter\chardef\csname Etoc@6@@\endcsname 6 +\ifEtoc@deeplevels + \expandafter\chardef\csname Etoc@7@@\endcsname 7 + \expandafter\chardef\csname Etoc@8@@\endcsname 8 + \expandafter\chardef\csname Etoc@9@@\endcsname 9 + \expandafter\chardef\csname Etoc@10@@\endcsname 10 + \expandafter\chardef\csname Etoc@11@@\endcsname 11 + \expandafter\chardef\csname Etoc@12@@\endcsname 12 +\fi +\expandafter\let\expandafter\Etoc@maxlevel + \csname Etoc@\ifEtoc@deeplevels12\else6\fi @@\endcsname +\edef\etocthemaxlevel{\number\Etoc@maxlevel} +\@ifclassloaded{memoir}{\def\Etoc@minf{-\thr@@}}{\def\Etoc@minf{-\tw@}} +\let\Etoc@none@@ \Etoc@minf +\expandafter\let\expandafter\Etoc@all@@ + \csname Etoc@\ifEtoc@deeplevels11\else5\fi @@\endcsname +\let\Etoc@dolevels\@empty +\def\Etoc@newlevel #1{\expandafter\def\expandafter\Etoc@dolevels\expandafter + {\Etoc@dolevels\Etoc@do{#1}}} +\ifdefined\expanded + \def\etocsetlevel#1#2{\expanded{\noexpand\etoc@setlevel{#1}{#2}}}% +\else + \def\etocsetlevel#1#2{{\edef\Etoc@tmp{\noexpand\etoc@setlevel{#1}{#2}}\expandafter}\Etoc@tmp}% +\fi +\def\etoc@setlevel#1#2{% + \edef\Etoc@tmp{\the\numexpr#2}% + \if1\ifnum\Etoc@tmp>\Etoc@maxlevel0\fi\unless\ifnum\Etoc@minf<\Etoc@tmp;\fi1% + \ifEtoc@deeplevels + \in@{.#1,}{.none,.all,.figure,.table,.-3,.-2,.-1,.0,.1,.2,.3,.4,.5,.6,% + .7,.8,.9,.10,.11,.12,}% + \else + \in@{.#1,}{.none,.all,.figure,.table,.-3,.-2,.-1,.0,.1,.2,.3,.4,.5,.6,}% + \fi + \ifin@\else\if\@car#1\@nil @\in@true\fi\fi + \ifin@ + \PackageWarning{etoc} + {Sorry, but `#1' is forbidden as level name.\MessageBreak + \if\@car#1\@nil @% + (because of the @ as first character)\MessageBreak\fi + Reported}% + \else + \etocifunknownlevelTF{#1}{\Etoc@newlevel{#1}}{}% + \expandafter\let\csname Etoc@#1@@\expandafter\endcsname + \csname Etoc@\Etoc@tmp @@\endcsname + \expandafter\edef\csname Etoc@@#1@@\endcsname + {\expandafter\noexpand\csname Etoc@#1@@\endcsname}% + \expandafter\edef\csname toclevel@@#1\endcsname + {\expandafter\noexpand\csname toclevel@#1\endcsname}% + \fi + \else + \PackageWarning{etoc} + {Argument `\detokenize{#2}' of \string\etocsetlevel\space should + represent one of\MessageBreak + \ifnum\Etoc@minf=-\thr@@-2, \fi-1, 0, 1, 2, \ifEtoc@deeplevels ...\else3, 4\fi, + \the\numexpr\Etoc@maxlevel-1, or \number\Etoc@maxlevel\space + but evaluates to \Etoc@tmp.\MessageBreak + The level of `#1' will be set to \number\Etoc@maxlevel.\MessageBreak + Tables of contents will ignore `#1' as long\MessageBreak + as its level is \number\Etoc@maxlevel\space (=\string\etocthemaxlevel).% + \MessageBreak + Reported}% + \etocifunknownlevelTF{#1}{\Etoc@newlevel{#1}}{}% + \expandafter\let\csname Etoc@#1@@\endcsname\Etoc@maxlevel + \fi +} +\def\etoclevel#1{\csname Etoc@#1@@\endcsname} +\def\etocthelevel#1{\number\csname Etoc@#1@@\endcsname} +\def\etocifunknownlevelTF#1{\@ifundefined{Etoc@#1@@}} +\@ifclassloaded{memoir}{\etocsetlevel{book}{-2}}{} +\etocsetlevel{part}{-1} +\etocsetlevel{chapter}{0} +\etocsetlevel{section}{1} +\etocsetlevel{subsection}{2} +\etocsetlevel{subsubsection}{3} +\etocsetlevel{paragraph}{4} +\etocsetlevel{subparagraph}{5} +\ifdefined\c@chapter + \etocsetlevel{appendix}{0} +\else + \etocsetlevel{appendix}{1} +\fi +\def\Etoc@do#1{\@namedef{l@@#1}{\csname l@#1\endcsname}} +\Etoc@dolevels +\let\Etoc@figure@@\Etoc@maxlevel +\let\Etoc@table@@ \Etoc@maxlevel +\let\Etoc@gobblethreeorfour\@gobblefour +\ifdefined\@gobblethree + \let\Etoc@gobblethree\@gobblethree +\else + \long\def\Etoc@gobblethree#1#2#3{}% +\fi +\AtBeginDocument{% +\@ifpackageloaded{parskip}{\Etoc@parskiptrue}{}% +\@ifpackageloaded{hyperref} + {\Etoc@hyperreftrue} + {\ifEtoc@oldLaTeX + \let\Etoc@gobblethreeorfour\Etoc@gobblethree + \let\Etoc@etoccontentsline@fourargs\Etoc@etoccontentsline@ + \long\def\Etoc@etoccontentsline@#1#2#3{% + \Etoc@etoccontentsline@fourargs{#1}{#2}{#3}{}% + }% + \fi + }% +} +\def\etocskipfirstprefix {\global\Etoc@skipprefixtrue } +\def\Etoc@updatestackofends#1\etoc@{\gdef\Etoc@stackofends{#1}} +\def\Etoc@stackofends{{-3}{}} +\def\Etoc@doendsandbegin{% + \expandafter\Etoc@traversestackofends\Etoc@stackofends\etoc@ +} +\def\Etoc@traversestackofends#1{% + \ifnum#1>\Etoc@level + \csname Etoc@end@#1\endcsname + \expandafter\Etoc@traversestackofends + \else + \Etoc@traversestackofends@done{#1}% + \fi +} +\def\Etoc@traversestackofends@done#1#2{#2% + \ifnum#1<\Etoc@level + \csname Etoc@begin@\the\numexpr\Etoc@level\endcsname + \Etoc@global\Etoc@isfirsttrue + \edef\Etoc@tmp{{\the\numexpr\Etoc@level}}% + \else + \Etoc@global\Etoc@isfirstfalse + \let\Etoc@tmp\@empty + \fi + \expandafter\Etoc@updatestackofends\Etoc@tmp{#1}% +} +\def\Etoc@etoccontentsline #1{% + \let\Etoc@next\Etoc@gobblethreeorfour + \ifnum\csname Etoc@#1@@\endcsname=\Etoc@maxlevel + \else + \Etoc@skipthisonefalse + \global\expandafter\let\expandafter\Etoc@level\csname Etoc@#1@@\endcsname + \if @\@car#1\@nil\else\global\let\Etoc@virtualtop\Etoc@level\fi + \ifEtoc@localtoc + \ifEtoc@stoptoc + \Etoc@skipthisonetrue + \else + \ifEtoc@notactive + \Etoc@skipthisonetrue + \else + \unless\ifnum\Etoc@level>\etoclocaltop + \Etoc@skipthisonetrue + \global\Etoc@stoptoctrue + \fi + \fi + \fi + \fi + \ifEtoc@skipthisone + \else + \unless\ifnum\Etoc@level>\c@tocdepth + \ifEtoc@standardlines + \let\Etoc@next\Etoc@savedcontentsline + \else + \let\Etoc@next\Etoc@etoccontentsline@ + \fi + \fi + \fi + \fi + \Etoc@next{#1}% +} +\def\Etoc@etoccontentsline@ #1#2#3#4{% + \Etoc@doendsandbegin + \Etoc@global\edef\Etoc@prefix {\expandafter\noexpand + \csname Etoc@prefix@\the\numexpr\Etoc@level\endcsname }% + \Etoc@global\edef\Etoc@contents{\expandafter\noexpand + \csname Etoc@contents@\the\numexpr\Etoc@level\endcsname }% + \ifEtoc@skipprefix \Etoc@global\def\Etoc@prefix{\@empty}\fi + \global\Etoc@skipprefixfalse + \Etoc@lxyz{#2}{#3}{#4}% + \Etoc@prefix + \Etoc@contents +} +\def\Etoc@lxyz #1#2#3{% + \ifEtoc@hyperref + \Etoc@global\def\etocthelink##1{\hyperlink{#3}{##1}}% + \else + \Etoc@global\let\etocthelink\@firstofone + \fi + \Etoc@global\def\etocthepage {#2}% + \ifEtoc@hyperref + \ifx\etocthepage\@empty + \Etoc@global\let\etocthelinkedpage\@empty + \else + \Etoc@global\def\etocthelinkedpage{\hyperlink {#3}{#2}}% + \fi + \else + \Etoc@global\let\etocthelinkedpage\etocthepage + \fi + \Etoc@global\def\etocthename{#1}% + \futurelet\Etoc@getnb@token\Etoc@@getnb #1\hspace\etoc@ + \ifEtoc@hyperref + \def\Etoc@tmp##1##2{\Etoc@global\def##2{\hyperlink{#3}{##1}}}% + \expandafter\Etoc@tmp\expandafter{\etocthename}\etocthelinkedname + \ifEtoc@numbered + \expandafter\Etoc@tmp\expandafter{\etocthenumber}\etocthelinkednumber + \else + \Etoc@global\let\etocthelinkednumber\@empty + \fi + \else + \Etoc@global\let\etocthelinkedname \etocthename + \Etoc@global\let\etocthelinkednumber\etocthenumber + \fi + \Etoc@global\expandafter\let\csname etoclink \endcsname \etocthelink + \Etoc@global\expandafter\let\csname etocname \endcsname \etocthename + \Etoc@global\expandafter\let\csname etocnumber \endcsname\etocthenumber + \Etoc@global\expandafter\let\csname etocpage \endcsname \etocthepage + \ifEtoc@hyperref + \Etoc@lxyz@linktoc + \fi +} +\def\Etoc@lxyz@linktoc{% + \ifcase\Hy@linktoc + \or + \Etoc@global\expandafter\let\csname etocname \endcsname\etocthelinkedname + \Etoc@global\expandafter\let\csname etocnumber \endcsname\etocthelinkednumber + \or % page + \Etoc@global\expandafter\let\csname etocpage \endcsname\etocthelinkedpage + \else % all + \Etoc@global\expandafter\let\csname etocname \endcsname\etocthelinkedname + \Etoc@global\expandafter\let\csname etocnumber \endcsname\etocthelinkednumber + \Etoc@global\expandafter\let\csname etocpage \endcsname\etocthelinkedpage + \fi +} +\def\Etoc@@getnb {% + \let\Etoc@next\Etoc@getnb + \ifx\Etoc@getnb@token\@sptoken\let\Etoc@next\Etoc@getnb@nonbr\fi + \ifx\Etoc@getnb@token\bgroup \let\Etoc@next\Etoc@getnb@nonbr\fi + \Etoc@next +} +\def\Etoc@getnb #1{% + \in@{#1}{\numberline\chapternumberline\partnumberline\booknumberline}% + \ifin@ + \let\Etoc@next\Etoc@getnb@nmbrd + \else + \ifnum\Etoc@level=\m@ne + \let\Etoc@next\Etoc@@getit + \else + \let\Etoc@next\Etoc@getnb@nonbr + \fi + \in@{#1}{\nonumberline}% + \ifin@ + \let\Etoc@next\Etoc@getnb@nonumberline + \fi + \fi + \Etoc@next #1% +} +\def\Etoc@getnb@nmbrd #1#2{% + \Etoc@global\Etoc@numberedtrue + \Etoc@global\def\etocthenumber {#2}% + \Etoc@getnb@nmbrd@getname\@empty +}% +\def\Etoc@getnb@nmbrd@getname #1\hspace\etoc@ {% + \Etoc@global\expandafter\def\expandafter\etocthename\expandafter{#1}% +} +\def\Etoc@getnb@nonbr #1\etoc@ {% + \Etoc@global\Etoc@numberedfalse + \Etoc@global\let\etocthenumber \@empty +} +\def\Etoc@getnb@nonumberline #1\hspace\etoc@ {% + \Etoc@global\Etoc@numberedfalse + \Etoc@global\let\etocthenumber \@empty + \Etoc@global\expandafter\def\expandafter\etocthename\expandafter{\@gobble#1}% +} +\def\Etoc@@getit #1\hspace#2{% + \ifx\etoc@#2% + \Etoc@global\Etoc@numberedfalse + \Etoc@global\let\etocthenumber \@empty + \else + \Etoc@global\Etoc@numberedtrue + \Etoc@global\def\etocthenumber {#1}% + \expandafter\Etoc@getit@getname \expandafter\@empty + \fi +} +\def\Etoc@getit@getname #1\hspace\etoc@ {% + \Etoc@global\expandafter\def\expandafter\etocthename\expandafter{#1}% +} +\let\etocthename \@empty +\let\etocthenumber \@empty +\let\etocthepage \@empty +\let\etocthelinkedname \@empty +\let\etocthelinkednumber \@empty +\let\etocthelinkedpage \@empty +\let\etocthelink \@firstofone +\DeclareRobustCommand*{\etocname} {} +\DeclareRobustCommand*{\etocnumber}{} +\DeclareRobustCommand*{\etocpage} {} +\DeclareRobustCommand*{\etoclink} {\@firstofone} +\DeclareRobustCommand*{\etocifnumbered} + {\ifEtoc@numbered\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi} +\expandafter\let\expandafter\etocxifnumbered\csname etocifnumbered \endcsname +\DeclareRobustCommand*{\etociffirst} + {\ifEtoc@isfirst\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi} +\expandafter\let\expandafter\etocxiffirst\csname etociffirst \endcsname +\def\Etoc@readtoc {% + \ifeof \Etoc@tf + \else + \read \Etoc@tf to \Etoc@buffer + \Etoc@toctoks=\expandafter\expandafter\expandafter + {\expandafter\the\expandafter\Etoc@toctoks\Etoc@buffer}% + \expandafter\Etoc@readtoc + \fi +} +\Etoc@toctoks {}% (superfluous, but for clarity) +\AtBeginDocument{\IfFileExists{\jobname.toc} + {{\endlinechar=\m@ne + \makeatletter + \newread\Etoc@tf + \openin\Etoc@tf\@filef@und + \Etoc@readtoc + \global\Etoc@toctoks=\expandafter{\the\Etoc@toctoks}% + \closein\Etoc@tf}} + {\typeout{No file \jobname.toc.}}} +\def\Etoc@openouttoc{% + \ifEtoc@hyperref + \ifx\hyper@last\@undefined + \IfFileExists{\jobname .toc} + {\Hy@WarningNoLine + {old toc file detected; run LaTeX again (cheers from `etoc')}% + \global\Etoc@toctoks={}% + } + {}% + \fi + \fi + \if@filesw + \newwrite \tf@toc + \immediate \openout \tf@toc \jobname .toc\relax + \fi + \global\let\Etoc@openouttoc\empty +} +\def\Etoc@toctoc{% + \gdef\Etoc@stackofends{{-3}{}}% + \global\let\Etoc@level\Etoc@minf + \global\let\Etoc@virtualtop\Etoc@minf + \the\Etoc@toctoks + \ifEtoc@notactive + \else + \gdef\Etoc@level{-\thr@@}% + \Etoc@doendsandbegin + \fi +} +\def\Etoc@@startlocaltoc#1#2{% + \ifEtoc@localtoc + \ifnum #1=#2\relax + \global\let\etoclocaltop\Etoc@virtualtop + \Etoc@@startlocaltochook + \etoclocaltableofcontentshook + \ifEtoc@etocstyle + \etocetoclocaltocmaketitle + \fi + \ifx\Etoc@aftertitlehook\@empty + \else + \ifEtoc@localtoctotoc + \ifEtoc@ouroboros + \else + \let\Etoc@tmp\contentsline + \def\contentsline{\let\contentsline\Etoc@tmp\Etoc@gobblethreeorfour}% + \fi + \fi + \fi + \global\Etoc@notactivefalse + \fi + \fi +} +\let\etoc@startlocaltoc\@gobble +\let\Etoc@@startlocaltoc@toc\Etoc@@startlocaltoc +\let\Etoc@@startlocaltochook\@empty +\unless\ifEtoc@deeplevels + \def\etocdivisionnameatlevel#1{% + \ifcase\numexpr#1\relax + \ifdefined\c@chapter chapter\else section\fi% + \or section% + \or subsection% + \or subsubsection% + \or paragraph% + \or subparagraph% + \or empty% + \else\ifnum\numexpr#1<\m@ne + book% + \else + part% + \fi + \fi + } +\else + \def\etocdivisionnameatlevel#1{% + \ifcase\numexpr#1\relax + \ifdefined\c@chapter chapter\else section\fi% + \or section% + \or subsection% + \or subsubsection% + \or subsubsubsection% + \or subsubsubsubsection% + \or subsubsubsubsubsection% + \or subsubsubsubsubsubsection% + \or paragraph% + \or subparagraph% + \else\ifnum\numexpr#1>\z@ + empty% + \else\ifnum\numexpr#1=\m@ne + part% + \else + book% + \fi\fi + \fi + } +\fi +\def\etoclocalheadtotoc#1#2{\addcontentsline{toc}{@#1}{#2}} +\def\etocglobalheadtotoc{\addcontentsline{toc}} +\providecommand*\UseName{\@nameuse} +\def\etocetoclocaltocmaketitle{% + \UseName{\etocdivisionnameatlevel{\etoclocaltop+1}}*{\localcontentsname}% + \if@noskipsec\leavevmode\par\fi + \etociflocaltoctotoc + {\etocifisstarred + {}% star variant, do not add to toc + {\etoclocalheadtotoc + {\etocdivisionnameatlevel{\etoclocaltop+1}}% + {\localcontentsname}% + }% + }% + {}% +}% +\def\localcontentsname {\contentsname}% +\let\etoclocaltableofcontentshook\@empty +\if1\ifEtoc@lof0\fi\ifEtoc@lot0\fi1% +\else +\AtBeginDocument{% + \let\Etoc@originaladdcontentsline\addcontentsline + \def\addcontentsline{\Etoc@hackedaddcontentsline}% +}% +\fi +\ifEtoc@lof + \ifEtoc@lot + \def\Etoc@hackedaddcontentsline#1{% + \expanded{\noexpand\in@{.#1,}}{.lof,.lot,}% + \ifin@\expandafter\Etoc@hackedaddcontentsline@i + \else\expandafter\Etoc@originaladdcontentsline + \fi {#1}} + \else + \def\Etoc@hackedaddcontentsline#1{% + \expanded{\noexpand\in@{.#1,}}{.lof,}% + \ifin@\expandafter\Etoc@hackedaddcontentsline@i + \else\expandafter\Etoc@originaladdcontentsline + \fi {#1}} + \fi +\else + \def\Etoc@hackedaddcontentsline#1{% + \expanded{\noexpand\in@{.#1,}}{.lot,}% + \ifin@\expandafter\Etoc@hackedaddcontentsline@i + \else\expandafter\Etoc@originaladdcontentsline + \fi {#1}} +\fi +\def\Etoc@hackedaddcontentsline@i#1#2#3{% + \expanded{\noexpand\in@{.#1;#2,}}{.lof;figure,.lot;table,}% + \ifin@ + \addtocontents {toc}{% + \protect\contentsline{#2}{#3}{\thepage}{\ifEtoc@hyperref\@currentHref\fi}% + \ifdefined\protected@file@percent\protected@file@percent\fi + }% + \fi + \Etoc@originaladdcontentsline{#1}{#2}{#3}% +} +\unless\ifdefined\expanded + \def\Etoc@hackedaddcontentsline#1{% + {\edef\Etoc@tmp{\noexpand\in@{.#1,}{\ifEtoc@lof.lof,\fi\ifEtoc@lot.lot,\fi}}\expandafter}% + \Etoc@tmp + \ifin@\expandafter\Etoc@hackedaddcontentsline@i + \else\expandafter\Etoc@originaladdcontentsline + \fi {#1}% + } + \def\Etoc@hackedaddcontentsline@i#1#2#3{% + {\edef\Etoc@tmp{\noexpand\in@{.#1;#2,}}\expandafter}% + \Etoc@tmp{.lof;figure,.lot;table,}% + \ifin@ + \addtocontents {toc}{% + \protect\contentsline{#2}{#3}{\thepage}{\ifEtoc@hyperref\@currentHref\fi}% + \ifdefined\protected@file@percent\protected@file@percent\fi + }% + \fi + \Etoc@originaladdcontentsline{#1}{#2}{#3}% + } +\fi +\def\Etoc@@startlocallistof#1#2#3{% + \ifEtoc@localtoc + \ifnum #2=#3\relax + \global\let\etoclocaltop\Etoc@virtualtop + \global\Etoc@notactivefalse + \Etoc@@startlocaltochook + \csname etoclocallistof#1shook\endcsname + \ifEtoc@etocstyle + \csname etocetoclistof#1smaketitle\endcsname + \fi + \fi + \fi +} +\def\Etoc@@startlocallistof@setlevels#1{% + \ifnum\etoclocaltop<\z@ + \expandafter\let\csname Etoc@#1@@\endcsname\@ne + \else + \expandafter\let\csname Etoc@#1@@\expandafter\endcsname + \csname Etoc@\the\numexpr\etoclocaltop+\@ne @@\endcsname + \fi + \def\Etoc@do##1{% + \ifnum\etoclevel{##1}>\etoclocaltop + \expandafter\let\csname Etoc@##1@@\endcsname\Etoc@maxlevel + \fi}% + \Etoc@dolevels +} +\def\etoclocallistoffigureshook{\etocstandardlines} +\def\etoclocallistoftableshook {\etocstandardlines} +\def\locallistfigurename{\listfigurename} +\def\locallisttablename {\listtablename} +\def\etocetoclistoffiguresmaketitle{% + \UseName{\etocdivisionnameatlevel{\etoclocaltop+1}}*{\locallistfigurename}% + \ifnum\etoclocaltop>\tw@\mbox{}\par\fi + \etociflocalloftotoc + {\etocifisstarred + {}% star variant, do not add to toc + {\etoclocalheadtotoc + {\etocdivisionnameatlevel{\etoclocaltop+1}}% + {\locallistfigurename}% + }% + }% + {}% +}% +\def\etocetoclistoftablesmaketitle{% + \UseName{\etocdivisionnameatlevel{\etoclocaltop+1}}*{\locallisttablename}% + \ifnum\etoclocaltop>\tw@\mbox{}\par\fi + \etociflocallottotoc + {\etocifisstarred + {}% star variant, do not add to toc + {\etoclocalheadtotoc + {\etocdivisionnameatlevel{\etoclocaltop+1}}% + {\locallisttablename}% + }% + }% + {}% +}% +\let\Etoc@listofreset\@empty +\ifEtoc@lof + \def\locallistoffigures{% + \def\Etoc@listofreset{% + \let\Etoc@currext\Etoc@tocext + \let\Etoc@@startlocaltoc\Etoc@@startlocaltoc@toc + \let\Etoc@@startlocaltochook\@empty + \let\Etoc@listofreset\@empty + \let\Etoc@listofhook\@empty + }% + \let\Etoc@currext\Etoc@lofext + \def\Etoc@@startlocaltoc{\Etoc@@startlocallistof{figure}}% + \def\Etoc@@startlocaltochook{\Etoc@@startlocallistof@setlevels{figure}}% + \def\Etoc@listofhook{% + \def\Etoc@do####1{% + \expandafter\let\csname Etoc@@####1@@\endcsname\Etoc@maxlevel + }% + \Etoc@dolevels + }% + \localtableofcontents + } +\else + \def\locallistoffigures{% + \PackageError{etoc}{% + \string\locallistoffigures \on@line\space but\MessageBreak + package was loaded without `lof' option}% + {Try again with \string\usepackage[lof]{etoc}}% + } +\fi +\ifEtoc@lot + \def\locallistoftables{% + \def\Etoc@listofreset{% + \let\Etoc@currext\Etoc@tocext + \let\Etoc@@startlocaltoc\Etoc@@startlocaltoc@toc + \let\Etoc@@startlocaltochook\@empty + \let\Etoc@listofreset\@empty + \let\Etoc@listofhook\@empty + }% + \let\Etoc@currext\Etoc@lotext + \def\Etoc@@startlocaltoc{\Etoc@@startlocallistof{table}}% + \def\Etoc@@startlocaltochook{\Etoc@@startlocallistof@setlevels{table}}% + \def\Etoc@listofhook{% + \def\Etoc@do####1{% + \expandafter\let\csname Etoc@@####1@@\endcsname\Etoc@maxlevel + }% + \Etoc@dolevels + }% + \localtableofcontents + } +\else + \def\locallistoftables{% + \PackageError{etoc}{% + \string\locallistoftable \on@line\space but\MessageBreak + package was loaded without `lot' option}% + {Try again with \string\usepackage[lot]{etoc}}% + } +\fi +\def\Etoc@checkifempty {% + \global\Etoc@isemptytoctrue + \global\Etoc@stoptocfalse + \global\let\Etoc@level\Etoc@minf + \global\let\Etoc@virtualtop\Etoc@minf + \gdef\Etoc@stackofends{{-3}{}}% + \begingroup + \ifEtoc@localtoc + \def\etoc@startlocaltoc##1{% + \ifnum##1=\Etoc@tocid\relax + \global\let\etoclocaltop\Etoc@virtualtop + \Etoc@@startlocaltochook + \global\Etoc@notactivefalse + \fi + }% + \let\contentsline\Etoc@testingcontentslinelocal + \else + \let\contentsline\Etoc@testingcontentsline + \fi + \Etoc@storetocdepth + \let\Etoc@setlocaltop@doendsandbegin\@empty + \the\Etoc@toctoks + \Etoc@restoretocdepth + \endgroup +} +\DeclareRobustCommand*\etocifwasempty + {\ifEtoc@isemptytoc\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi } +\expandafter\let\expandafter\etocxifwasempty\csname etocifwasempty \endcsname +\def\Etoc@testingcontentslinelocal #1{% + \ifEtoc@stoptoc + \else + \ifnum\csname Etoc@#1@@\endcsname=\Etoc@maxlevel + \else + \global\expandafter\let\expandafter\Etoc@level\csname Etoc@#1@@\endcsname + \if @\@car#1\@nil\else\global\let\Etoc@virtualtop\Etoc@level\fi + \ifEtoc@notactive + \else + \ifnum\Etoc@level>\etoclocaltop + \unless\ifnum\Etoc@level>\c@tocdepth + \global\Etoc@isemptytocfalse + \global\Etoc@stoptoctrue + \fi + \else + \global\Etoc@stoptoctrue + \fi + \fi + \fi + \fi + \Etoc@gobblethreeorfour{}% +} +\def\Etoc@testingcontentsline #1{% + \ifEtoc@stoptoc + \else + \ifnum\csname Etoc@#1@@\endcsname=\Etoc@maxlevel + \else + \unless\ifnum\csname Etoc@#1@@\endcsname>\c@tocdepth + \global\Etoc@isemptytocfalse + \global\Etoc@stoptoctrue + \fi + \fi + \fi + \Etoc@gobblethreeorfour{}% +} +\def\Etoc@localtableofcontents#1{% + \gdef\etoclocaltop{-\@m}% + \Etoc@localtoctrue + \global\Etoc@isemptytocfalse + \edef\Etoc@tocid{#1}% + \ifnum\Etoc@tocid<\@ne + \setbox0\hbox{\ref{Unknown toc ref \@secondoftwo#1. \space Rerun LaTeX}}% + \global\Etoc@stoptoctrue + \gdef\etoclocaltop{-\thr@@}% + \Etoc@tableofcontents + \expandafter\Etoc@gobtoetoc@ + \fi + \global\Etoc@notactivetrue + \ifEtoc@checksemptiness + \Etoc@checkifempty + \fi + \ifEtoc@isemptytoc + \ifEtoc@notactive + \setbox0\hbox{\ref{Unknown toc ID \number\Etoc@tocid. \space Rerun LaTeX}}% + \global\Etoc@isemptytocfalse + \global\Etoc@stoptoctrue + \gdef\etoclocaltop{-\thr@@}% + \Etoc@tableofcontents + \expandafter\expandafter\expandafter\Etoc@gobtoetoc@ + \fi + \else + \global\Etoc@stoptocfalse + \global\Etoc@notactivetrue + \edef\etoc@startlocaltoc##1% + {\noexpand\Etoc@@startlocaltoc{##1}{\Etoc@tocid}}% + \Etoc@tableofcontents + \fi + \@gobble\etoc@ + \endgroup\ifEtoc@mustclosegroup\endgroup\fi + \Etoc@tocdepthreset + \Etoc@listofreset + \etocaftertochook +}% \Etoc@localtableofcontents +\def\Etoc@getref #1{% + \@ifundefined{r@#1} + {0} + {\expandafter\Etoc@getref@i\romannumeral-`0% + \expandafter\expandafter\expandafter + \@car\csname r@#1\endcsname0\@nil\@etoc + }% +} +\def\Etoc@getref@i#1#2\@etoc{\ifnum9<1\string#1 #1#2\else 0\fi} +\def\Etoc@ref#1{\Etoc@localtableofcontents{\Etoc@getref{#1}}} +\def\Etoc@label#1{\label{#1}\futurelet\Etoc@nexttoken\Etoc@t@bleofcontents} +\@firstofone{\def\Etoc@again} {\futurelet\Etoc@nexttoken\Etoc@t@bleofcontents} +\def\Etoc@dothis #1#2\etoc@ {\fi #1} +\def\Etoc@t@bleofcontents{% + \gdef\etoclocaltop{-\@M}% + \ifx\Etoc@nexttoken\label\Etoc@dothis{\expandafter\Etoc@label\@gobble}\fi + \ifx\Etoc@nexttoken\@sptoken\Etoc@dothis{\Etoc@again}\fi + \ifx\Etoc@nexttoken\ref\Etoc@dothis{\expandafter\Etoc@ref\@gobble}\fi + \ifEtoc@tocwithid\Etoc@dothis{\Etoc@localtableofcontents{\c@etoc@tocid}}\fi + \global\Etoc@isemptytocfalse + \ifEtoc@checksemptiness\Etoc@checkifempty\fi + \ifEtoc@isemptytoc + \ifEtoc@notocifnotoc + \expandafter\expandafter\expandafter\@gobble + \fi + \fi + \Etoc@tableofcontents + \endgroup + \ifEtoc@mustclosegroup\endgroup\fi + \Etoc@tocdepthreset + \Etoc@listofreset + \etocaftertochook + \@gobble\etoc@ + }% \Etoc@t@bleofcontents +\def\Etoc@table@fcontents{% + \refstepcounter{etoc@tocid}% + \Etoc@tocwithidfalse + \futurelet\Etoc@nexttoken\Etoc@t@bleofcontents +} +\def\Etoc@localtable@fcontents{% + \refstepcounter{etoc@tocid}% + \addtocontents{toc}{\string\etoc@startlocaltoc{\the\c@etoc@tocid}}% + \Etoc@tocwithidtrue + \futurelet\Etoc@nexttoken\Etoc@t@bleofcontents +} +\def\etoctableofcontents{% + \Etoc@openouttoc + \Etoc@tocdepthset + \begingroup + \@ifstar + {\let\Etoc@aftertitlehook\@empty\Etoc@table@fcontents} + {\def\Etoc@aftertitlehook{\etocaftertitlehook}\Etoc@table@fcontents}% +}% \etoctableofcontents +\def\etocifisstarred{\ifx\Etoc@aftertitlehook\@empty + \expandafter\@firstoftwo\else + \expandafter\@secondoftwo + \fi} +\let\etocoriginaltableofcontents\tableofcontents +\let\tableofcontents\etoctableofcontents +\let\Etoc@listofhook\@empty +\newcommand*\localtableofcontents{% + \Etoc@openouttoc + \Etoc@tocdepthset + \begingroup + \Etoc@listofhook + \@ifstar + {\let\Etoc@aftertitlehook\@empty\Etoc@localtable@fcontents} + {\def\Etoc@aftertitlehook{\etocaftertitlehook}\Etoc@localtable@fcontents}% +}% \localtableofcontents +\newcommand*\localtableofcontentswithrelativedepth[1]{% + \def\Etoc@@startlocaltochook{% + \global\c@tocdepth\numexpr\etoclocaltop+#1\relax + }% + \def\Etoc@listofreset{\let\Etoc@@startlocaltochook\@empty + \let\Etoc@listofreset\@empty}% + \localtableofcontents +}% \localtableofcontentswithrelativedepth +\newcommand\etocsettocstyle[2]{% + \Etoc@etocstylefalse + \Etoc@classstylefalse + \def\Etoc@tableofcontents@user@before{#1}% + \def\Etoc@tableofcontents@user@after {#2}% +}% +\def\etocstoretocstyleinto#1{% +%% \@ifdefinable#1{% + \edef#1{\noexpand\Etoc@etocstylefalse\noexpand\Etoc@classstylefalse + \def\noexpand\Etoc@tableofcontents@user@before{% + \unexpanded\expandafter{\Etoc@tableofcontents@user@before}% + }% + \def\noexpand\Etoc@tableofcontents@user@after{% + \unexpanded\expandafter{\Etoc@tableofcontents@user@after}% + }% + }% +%% }% +}% +\def\Etoc@tableofcontents {% + \Etoc@tableofcontents@etoc@before + \ifEtoc@localtoc\ifEtoc@etocstyle\expandafter\expandafter\expandafter\@gobble\fi\fi + \Etoc@tableofcontents@user@before + \Etoc@tableofcontents@contents + \ifEtoc@localtoc\ifEtoc@etocstyle\expandafter\expandafter\expandafter\@gobble\fi\fi + \Etoc@tableofcontents@user@after + \Etoc@tableofcontents@etoc@after + \@gobble\etoc@ +} +\def\Etoc@tableofcontents@etoc@before{% + \ifnum\c@tocdepth>\Etoc@minf + \else + \expandafter\Etoc@gobtoetoc@ + \fi + \Etoc@par + \Etoc@beforetitlehook + \etocbeforetitlehook + \Etoc@storetocdepth + \let\Etoc@savedcontentsline\contentsline + \let\contentsline\Etoc@etoccontentsline + \ifEtoc@standardlines + \else + \def\Etoc@do##1{% + \expandafter\def\csname etocsaved##1tocline\endcsname + {\PackageError{etoc}{% + \expandafter\string\csname etocsaved##1tocline\endcsname\space + has been deprecated\MessageBreak + at 1.1a and is removed at 1.2.\MessageBreak + Use \expandafter\string\csname l@##1\endcsname\space directly.\MessageBreak + Reported \on@line}% + {I will use \expandafter\string + \csname l@##1\endcsname\space myself for this time.% + }% + \csname l@##1\endcsname + }% + }% + \Etoc@dolevels + \fi +}% +\def\Etoc@tableofcontents@contents{% + \Etoc@tocdepthset + \ifEtoc@parskip\parskip\z@skip\fi + \Etoc@aftertitlehook + \gdef\etoclocaltop{-\thr@@}% + \Etoc@toctoc + \etocaftercontentshook +}% +\def\Etoc@tableofcontents@etoc@after{% + \@nobreakfalse + \Etoc@restoretocdepth + \ifx\Etoc@global\global + \@ifundefined{tof@finish} + {} + {\ifx\tof@finish\@empty + \else + \global\let\contentsline\Etoc@savedcontentsline + \fi + }% + \fi +} +\def\etocsetstyle#1{\ifcsname Etoc@#1@@\endcsname + \expandafter\Etoc@setstyle@a + \else + \expandafter\Etoc@setstyle@error + \fi {#1}% +} +\def\Etoc@setstyle@error #1{% + \PackageWarning{etoc}{`#1' is unknown to etoc. \space Did you\MessageBreak + forget some \string\etocsetlevel{#1}{}?\MessageBreak + Reported}% + \@gobblefour +} +\def\Etoc@setstyle@a #1{% + \edef\Etoc@tmp{\the\numexpr\csname Etoc@#1@@\endcsname}% + \if1\unless\ifnum\Etoc@tmp<\Etoc@maxlevel 0\fi + \unless\ifnum\Etoc@tmp>\Etoc@minf 0\fi1% + \Etoc@standardlinesfalse + \expandafter\Etoc@setstyle@b\expandafter\Etoc@tmp + \else + \ifnum\Etoc@tmp=\Etoc@maxlevel + \in@{.#1,}{.figure,.table,}% + \ifin@ + \PackageWarning{etoc} + {You can not use \string\etocsetstyle\space with `#1'.\MessageBreak + Check the package documentation (in particular about\MessageBreak + \string\etoclocallistoffigureshook/\string\etoclocallistoftableshook)% + \MessageBreak on how to customize + figure and table entries in local\MessageBreak lists. Reported}% + \else + \PackageInfo{etoc} + {Attempt to set the style of `#1',\MessageBreak + whose level is currently the maximal one \etocthemaxlevel,\MessageBreak + which is never displayed. \space This will be ignored\MessageBreak + but note that we do quit compatibility mode.\MessageBreak + Reported}% + \Etoc@standardlinesfalse + \fi + \else + \PackageWarning{etoc}{This should not happen. Reported}% + \fi + \expandafter\@gobblefour + \fi +} +\long\def\Etoc@setstyle@b#1#2#3#4#5{% + \expandafter\def\csname Etoc@begin@#1\endcsname {#2}% + \expandafter\def\csname Etoc@prefix@#1\endcsname {#3}% + \expandafter\def\csname Etoc@contents@#1\endcsname {#4}% + \expandafter\def\csname Etoc@end@#1\endcsname {#5}% +} +\def\Etoc@setstyle@e#1{% + \expandafter\let\csname Etoc@begin@#1\endcsname \@empty + \expandafter\let\csname Etoc@prefix@#1\endcsname \@empty + \expandafter\let\csname Etoc@contents@#1\endcsname \@empty + \expandafter\let\csname Etoc@end@#1\endcsname \@empty +} +\def\Etoc@storelines@a#1{% + \noexpand\Etoc@setstyle@b{#1}% + {\expandafter\Etoc@expandonce\csname Etoc@begin@#1\endcsname}% + {\expandafter\Etoc@expandonce\csname Etoc@prefix@#1\endcsname}% + {\expandafter\Etoc@expandonce\csname Etoc@contents@#1\endcsname}% + {\expandafter\Etoc@expandonce\csname Etoc@end@#1\endcsname}% +} +\def\Etoc@expandonce#1{\unexpanded\expandafter{#1}} +\def\etocstorelinestylesinto#1{% + \edef#1{\Etoc@storelines@a{-2}\Etoc@storelines@a{-1}\Etoc@storelines@a{0}% + \Etoc@storelines@a {1}\Etoc@storelines@a {2}\Etoc@storelines@a{3}% + \Etoc@storelines@a {4}\Etoc@storelines@a {5}% + \ifEtoc@deeplevels + \Etoc@storelines@a{6}\Etoc@storelines@a{7}\Etoc@storelines@a{8}% + \Etoc@storelines@a{9}\Etoc@storelines@a{10}\Etoc@storelines@a{11}% + \fi + }% +} +\def\etocstorethislinestyleinto#1#2{% + \edef#2{\expandafter\Etoc@storelines@a\expandafter{\number\etoclevel{#1}}}% +}% +\def\etocfontminustwo {\normalfont \LARGE \bfseries} +\def\etocfontminusone {\normalfont \large \bfseries} +\def\etocfontzero {\normalfont \large \bfseries} +\def\etocfontone {\normalfont \normalsize \bfseries} +\def\etocfonttwo {\normalfont \normalsize} +\def\etocfontthree {\normalfont \footnotesize} +\def\etocsepminustwo {4ex \@plus .5ex \@minus .5ex} +\def\etocsepminusone {4ex \@plus .5ex \@minus .5ex} +\def\etocsepzero {2.5ex \@plus .4ex \@minus .4ex} +\def\etocsepone {1.5ex \@plus .3ex \@minus .3ex} +\def\etocseptwo {.5ex \@plus .1ex \@minus .1ex} +\def\etocsepthree {.25ex \@plus .05ex \@minus .05ex} +\def\etocbaselinespreadminustwo {1} +\def\etocbaselinespreadminusone {1} +\def\etocbaselinespreadzero {1} +\def\etocbaselinespreadone {1} +\def\etocbaselinespreadtwo {1} +\def\etocbaselinespreadthree {.9} +\def\etocminustwoleftmargin {1.5em plus 0.5fil} +\def\etocminustworightmargin {1.5em plus -0.5fil} +\def\etocminusoneleftmargin {1em} +\def\etocminusonerightmargin {1em} +\def\etoctoclineleaders + {\hbox{\normalfont\normalsize\hb@xt@2ex {\hss.\hss}}} +\def\etocabbrevpagename {p.~} +\def\etocpartname {Part} +\def\etocbookname {Book} +\def\etocdefaultlines{% + \Etoc@standardlinesfalse + \etocdefaultlines@setbook + \etocdefaultlines@setpart + \etocdefaultlines@setchapter + \etocdefaultlines@setsection + \etocdefaultlines@setsubsection + \etocdefaultlines@setsubsubsection + \etocdefaultlines@setdeeperones +} +\def\etocnoprotrusion{\leavevmode\kern-\p@\kern\p@} +\@ifclassloaded{memoir}{% + \def\etocdefaultlines@setbook{% + \Etoc@setstyle@b + {-2}% + {\addpenalty\@M\etocskipfirstprefix} + {\addpenalty\@secpenalty} + {\begingroup + \etocfontminustwo + \addvspace{\etocsepminustwo}% + \parindent \z@ + \leftskip \etocminustwoleftmargin + \rightskip \etocminustworightmargin + \parfillskip \@flushglue + \vbox{\etocifnumbered{\etoclink{\etocbookname\enspace\etocthenumber:\quad}}{}% + \etocname + \baselineskip\etocbaselinespreadminustwo\baselineskip + \par}% + \addpenalty\@M\addvspace{\etocsepminusone}% + \endgroup} + {}% + } + }{\let\etocdefaultlines@setbook\@empty} +\def\etocdefaultlines@setpart{% +\Etoc@setstyle@b + {-1}% + {\addpenalty\@M\etocskipfirstprefix} + {\addpenalty\@secpenalty} + {\begingroup + \etocfontminusone + \addvspace{\etocsepminusone}% + \parindent \z@ + \leftskip \etocminusoneleftmargin + \rightskip \etocminusonerightmargin + \parfillskip \@flushglue + \vbox{\etocifnumbered{\etoclink{\etocpartname\enspace\etocthenumber.\quad}}{}% + \etocname + \baselineskip\etocbaselinespreadminusone\baselineskip + \par}% + \addpenalty\@M\addvspace{\etocsepzero}% + \endgroup} + {}% +} +\def\etocdefaultlines@setchapter{% +\Etoc@setstyle@b + {0}% + {\addpenalty\@M\etocskipfirstprefix} + {\addpenalty\@itempenalty} + {\begingroup + \etocfontzero + \addvspace{\etocsepzero}% + \parindent \z@ \parfillskip \@flushglue + \vbox{\etocifnumbered{\etocnumber.\enspace}{}\etocname + \baselineskip\etocbaselinespreadzero\baselineskip + \par}% + \endgroup} + {\addpenalty{-\@highpenalty}\addvspace{\etocsepminusone}}% +} +\def\etocdefaultlines@setsection{% +\Etoc@setstyle@b + {1}% + {\addpenalty\@M\etocskipfirstprefix} + {\addpenalty\@itempenalty} + {\begingroup + \etocfontone + \addvspace{\etocsepone}% + \parindent \z@ \parfillskip \z@ + \setbox\z@\vbox{\parfillskip\@flushglue + \etocname\par + \setbox\tw@\lastbox + \global\setbox\@ne\hbox{\unhbox\tw@\ }}% + \dimen\z@=\wd\@ne + \setbox\z@=\etoctoclineleaders + \advance\dimen\z@\wd\z@ + \etocifnumbered + {\setbox\tw@\hbox{\etocnumber, \etocabbrevpagename\etocpage\etocnoprotrusion}} + {\setbox\tw@\hbox{\etocabbrevpagename\etocpage\etocnoprotrusion}}% + \advance\dimen\z@\wd\tw@ + \ifdim\dimen\z@ < \linewidth + \vbox{\etocname~% + \leaders\box\z@\hfil\box\tw@ + \baselineskip\etocbaselinespreadone\baselineskip + \par}% + \else + \vbox{\etocname~% + \leaders\copy\z@\hfil\break + \hbox{}\leaders\box\z@\hfil\box\tw@ + \baselineskip\etocbaselinespreadone\baselineskip + \par}% + \fi + \endgroup} + {\addpenalty\@secpenalty\addvspace{\etocsepzero}}% +} +\def\etocdefaultlines@setsubsection{% +\Etoc@setstyle@b + {2}% + {\addpenalty\@medpenalty\etocskipfirstprefix} + {\addpenalty\@itempenalty} + {\begingroup + \etocfonttwo + \addvspace{\etocseptwo}% + \parindent \z@ \parfillskip \z@ + \setbox\z@\vbox{\parfillskip\@flushglue + \etocname\par\setbox\tw@\lastbox + \global\setbox\@ne\hbox{\unhbox\tw@}}% + \dimen\z@=\wd\@ne + \setbox\z@=\etoctoclineleaders + \advance\dimen\z@\wd\z@ + \etocifnumbered + {\setbox\tw@\hbox{\etocnumber, \etocabbrevpagename\etocpage\etocnoprotrusion}} + {\setbox\tw@\hbox{\etocabbrevpagename\etocpage\etocnoprotrusion}}% + \advance\dimen\z@\wd\tw@ + \ifdim\dimen\z@ < \linewidth + \vbox{\etocname~% + \leaders\box\z@\hfil\box\tw@ + \baselineskip\etocbaselinespreadtwo\baselineskip + \par}% + \else + \vbox{\etocname~% + \leaders\copy\z@\hfil\break + \hbox{}\leaders\box\z@\hfil\box\tw@ + \baselineskip\etocbaselinespreadtwo\baselineskip + \par}% + \fi + \endgroup} + {\addpenalty\@secpenalty\addvspace{\etocsepone}}% +} +\def\etocdefaultlines@setsubsubsection{% +\Etoc@setstyle@b + {3}% + {\addpenalty\@M + \etocfontthree + \vspace{\etocsepthree}% + \noindent + \etocskipfirstprefix} + {\allowbreak\,--\,} + {\etocname} + {.\hfil + \begingroup + \baselineskip\etocbaselinespreadthree\baselineskip + \par + \endgroup + \addpenalty{-\@highpenalty}} +} +\def\etocdefaultlines@setdeeperones{% +\Etoc@setstyle@e{4}% +\Etoc@setstyle@e{5}% +\ifEtoc@deeplevels + \Etoc@setstyle@e{6}% + \Etoc@setstyle@e{7}% + \Etoc@setstyle@e{8}% + \Etoc@setstyle@e{9}% + \Etoc@setstyle@e{10}% + \Etoc@setstyle@e{11}% +\fi +} +\def\etocabovetocskip{3.5ex \@plus 1ex \@minus .2ex} +\def\etocbelowtocskip{3.5ex \@plus 1ex \@minus .2ex} +\def\etoccolumnsep{2em} +\def\etocmulticolsep{0ex} +\def\etocmulticolpretolerance{-1} +\def\etocmulticoltolerance{200} +\def\etocdefaultnbcol{2} +\def\etocinnertopsep{2ex} +\newcommand\etocmulticolstyle[2][\etocdefaultnbcol]{% +\etocsettocstyle + {\let\etocoldpar\par + \addvspace{\etocabovetocskip}% + \ifnum #1>\@ne + \expandafter\@firstoftwo + \else \expandafter\@secondoftwo + \fi + {\multicolpretolerance\etocmulticolpretolerance + \multicoltolerance\etocmulticoltolerance + \setlength{\columnsep}{\etoccolumnsep}% + \setlength{\multicolsep}{\etocmulticolsep}% + \begin{multicols}{#1}[#2\etocoldpar\addvspace{\etocinnertopsep}]} + {#2\ifvmode\else\begingroup\interlinepenalty\@M\parskip\z@skip + \@@par\endgroup + \fi + \nobreak\addvspace{\etocinnertopsep}% + \pretolerance\etocmulticolpretolerance + \tolerance\etocmulticoltolerance}% + }% + {\ifnum #1>\@ne + \expandafter\@firstofone + \else \expandafter\@gobble + \fi + {\end{multicols}}% + \addvspace{\etocbelowtocskip}}% +} +\def\etocinnerbottomsep{3.5ex} +\def\etocinnerleftsep{2em} +\def\etocinnerrightsep{2em} +\def\etoctoprule{\hrule} +\def\etocleftrule{\vrule} +\def\etocrightrule{\vrule} +\def\etocbottomrule{\hrule} +\def\etoctoprulecolorcmd{\relax} +\def\etocbottomrulecolorcmd{\relax} +\def\etocleftrulecolorcmd{\relax} +\def\etocrightrulecolorcmd{\relax} +\def\etoc@ruledheading #1{% + \hb@xt@\linewidth{\color@begingroup + \hss #1\hss\hskip-\linewidth + \etoctoprulecolorcmd\leaders\etoctoprule\hss + \phantom{#1}% + \leaders\etoctoprule\hss\color@endgroup}% + \nointerlineskip\nobreak\vskip\etocinnertopsep} +\newcommand*\etocruledstyle[2][\etocdefaultnbcol]{% +\etocsettocstyle + {\addvspace{\etocabovetocskip}% + \ifnum #1>\@ne + \expandafter\@firstoftwo + \else \expandafter\@secondoftwo + \fi + {\multicolpretolerance\etocmulticolpretolerance + \multicoltolerance\etocmulticoltolerance + \setlength{\columnsep}{\etoccolumnsep}% + \setlength{\multicolsep}{\etocmulticolsep}% + \begin{multicols}{#1}[\etoc@ruledheading{#2}]} + {\etoc@ruledheading{#2}% + \pretolerance\etocmulticolpretolerance + \tolerance\etocmulticoltolerance}} + {\ifnum #1>\@ne\expandafter\@firstofone + \else \expandafter\@gobble + \fi + {\end{multicols}}% + \addvspace{\etocbelowtocskip}}} +\def\etocframedmphook{\relax} +\long\def\etocbkgcolorcmd{\relax} +\long\def\Etoc@relax{\relax} +\newbox\etoc@framed@titlebox +\newbox\etoc@framed@contentsbox +\newcommand*\etocframedstyle[2][\etocdefaultnbcol]{% +\etocsettocstyle{% + \addvspace{\etocabovetocskip}% + \sbox\z@{#2}% + \dimen\z@\dp\z@ + \ifdim\wd\z@<\linewidth \dp\z@\z@ \else \dimen\z@\z@ \fi + \setbox\etoc@framed@titlebox=\hb@xt@\linewidth{\color@begingroup + \hss + \ifx\etocbkgcolorcmd\Etoc@relax + \else + \sbox\tw@{\color{white}% + \vrule\@width\wd\z@\@height\ht\z@\@depth\dimen\z@}% + \ifdim\wd\z@<\linewidth \dp\tw@\z@\fi + \box\tw@ + \hskip-\wd\z@ + \fi + \copy\z@ + \hss + \hskip-\linewidth + \etoctoprulecolorcmd\leaders\etoctoprule\hss + \hskip\wd\z@ + \etoctoprulecolorcmd\leaders\etoctoprule\hss\color@endgroup}% + \setbox\z@\hbox{\etocleftrule\etocrightrule}% + \dimen\tw@\linewidth\advance\dimen\tw@-\wd\z@ + \advance\dimen\tw@-\etocinnerleftsep + \advance\dimen\tw@-\etocinnerrightsep + \setbox\etoc@framed@contentsbox=\vbox\bgroup + \hsize\dimen\tw@ + \kern\dimen\z@ + \vskip\etocinnertopsep + \hbox\bgroup + \begin{minipage}{\hsize}% + \etocframedmphook + \ifnum #1>\@ne + \expandafter\@firstoftwo + \else \expandafter\@secondoftwo + \fi + {\multicolpretolerance\etocmulticolpretolerance + \multicoltolerance\etocmulticoltolerance + \setlength{\columnsep}{\etoccolumnsep}% + \setlength{\multicolsep}{\etocmulticolsep}% + \begin{multicols}{#1}} + {\pretolerance\etocmulticolpretolerance + \tolerance\etocmulticoltolerance}} + {\ifnum #1>\@ne\expandafter\@firstofone + \else \expandafter\@gobble + \fi + {\end{multicols}\unskip }% + \end{minipage}% + \egroup + \vskip\etocinnerbottomsep + \egroup + \vbox{\hsize\linewidth + \ifx\etocbkgcolorcmd\Etoc@relax + \else + \kern\ht\etoc@framed@titlebox + \kern\dp\etoc@framed@titlebox + \hb@xt@\linewidth{\color@begingroup + \etocleftrulecolorcmd\etocleftrule + \etocbkgcolorcmd + \leaders\vrule + \@height\ht\etoc@framed@contentsbox + \@depth\dp\etoc@framed@contentsbox + \hss + \etocrightrulecolorcmd\etocrightrule + \color@endgroup}\nointerlineskip + \vskip-\dp\etoc@framed@contentsbox + \vskip-\ht\etoc@framed@contentsbox + \vskip-\dp\etoc@framed@titlebox + \vskip-\ht\etoc@framed@titlebox + \fi + \box\etoc@framed@titlebox\nointerlineskip + \hb@xt@\linewidth{\color@begingroup + {\etocleftrulecolorcmd\etocleftrule}% + \hss\box\etoc@framed@contentsbox\hss + \etocrightrulecolorcmd\etocrightrule\color@endgroup} + \nointerlineskip + \vskip\ht\etoc@framed@contentsbox + \vskip\dp\etoc@framed@contentsbox + \hb@xt@\linewidth{\color@begingroup\etocbottomrulecolorcmd + \leaders\etocbottomrule\hss\color@endgroup}} + \addvspace{\etocbelowtocskip}}} +\newcommand\etoc@multicoltoc[2][\etocdefaultnbcol]{% + \etocmulticolstyle[#1]{#2}% + \tableofcontents} +\newcommand\etoc@multicoltoci[2][\etocdefaultnbcol]{% + \etocmulticolstyle[#1]{#2}% + \tableofcontents*} +\newcommand\etoc@local@multicoltoc[2][\etocdefaultnbcol]{% + \etocmulticolstyle[#1]{#2}% + \localtableofcontents} +\newcommand\etoc@local@multicoltoci[2][\etocdefaultnbcol]{% + \etocmulticolstyle[#1]{#2}% + \localtableofcontents*} +\newcommand*\etoc@ruledtoc[2][\etocdefaultnbcol]{% + \etocruledstyle[#1]{#2}% + \tableofcontents} +\newcommand*\etoc@ruledtoci[2][\etocdefaultnbcol]{% + \etocruledstyle[#1]{#2}% + \tableofcontents*} +\newcommand*\etoc@local@ruledtoc[2][\etocdefaultnbcol]{% + \etocruledstyle[#1]{#2}% + \localtableofcontents} +\newcommand*\etoc@local@ruledtoci[2][\etocdefaultnbcol]{% + \etocruledstyle[#1]{#2}% + \localtableofcontents*} +\newcommand*\etoc@framedtoc[2][\etocdefaultnbcol]{% + \etocframedstyle[#1]{#2}% + \tableofcontents} +\newcommand*\etoc@framedtoci[2][\etocdefaultnbcol]{% + \etocframedstyle[#1]{#2}% + \tableofcontents*} +\newcommand*\etoc@local@framedtoc[2][\etocdefaultnbcol]{% + \etocframedstyle[#1]{#2}% + \localtableofcontents} +\newcommand*\etoc@local@framedtoci[2][\etocdefaultnbcol]{% + \etocframedstyle[#1]{#2}% + \localtableofcontents*} +\def\etocmulticol{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@multicoltoci} + {\etoc@multicoltoc}} +\def\etocruled{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@ruledtoci} + {\etoc@ruledtoc}} +\def\etocframed{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@framedtoci} + {\etoc@framedtoc}} +\def\etoclocalmulticol{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@local@multicoltoci} + {\etoc@local@multicoltoc}} +\def\etoclocalruled{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@local@ruledtoci} + {\etoc@local@ruledtoc}} +\def\etoclocalframed{\begingroup + \Etoc@mustclosegrouptrue + \@ifstar + {\etoc@local@framedtoci} + {\etoc@local@framedtoc}} +\def\etocmemoirtoctotocfmt #1#2{% + \PackageWarning{etoc} + {\string\etocmemoirtoctotocfmt\space is deprecated.\MessageBreak + Use in its place \string\etocsettoclineforclasstoc,\MessageBreak + and \string\etocsettoclineforclasslistof{toc} (or {lof}, {lot}). + I will do this now.\MessageBreak + Reported}% + \etocsettoclineforclasstoc{#1}{#2}% + \etocsettoclineforclasslistof{toc}{#1}{#2}% +} +\def\etocsettoclineforclasstoc #1#2{% + \def\etocclassmaintocaddtotoc{\etocglobalheadtotoc{#1}{#2}}% +} +\def\etocsettoclineforclasslistof #1#2#3{% + \@namedef{etocclasslocal#1addtotoc}{\etoclocalheadtotoc{#2}{#3}}% +} +\let\etocclasslocaltocaddtotoc\@empty +\let\etocclasslocallofaddtotoc\@empty +\let\etocclasslocallotaddtotoc\@empty +\ifdefined\c@chapter + \def\etocclasslocaltocmaketitle{\section*{\localcontentsname}} + \def\etocclasslocallofmaketitle{\section*{\locallistfigurename}} + \def\etocclasslocallotmaketitle{\section*{\locallisttablename}} + \etocsettoclineforclasstoc {chapter}{\contentsname} + \etocsettoclineforclasslistof{toc}{section}{\localcontentsname} + \etocsettoclineforclasslistof{lof}{section}{\locallistfigurename} + \etocsettoclineforclasslistof{lot}{section}{\locallisttablename} +\else + \def\etocclasslocaltocmaketitle{\subsection*{\localcontentsname}}% + \def\etocclasslocallofmaketitle{\subsection*{\locallistfigurename}}% + \def\etocclasslocallotmaketitle{\subsection*{\locallisttablename}}% + \etocsettoclineforclasstoc {section}{\contentsname} + \etocsettoclineforclasslistof{toc}{subsection}{\localcontentsname} + \etocsettoclineforclasslistof{lof}{subsection}{\locallistfigurename} + \etocsettoclineforclasslistof{lot}{subsection}{\locallisttablename} +\fi +\def\etocclasslocalperhapsaddtotoc #1{% + \etocifisstarred + {} + {\csname ifEtoc@local#1totoc\endcsname + \csname etocclasslocal#1addtotoc\endcsname + \fi + }% +} +\def\etocarticlestyle{% + \etocsettocstyle + {\ifEtoc@localtoc + \@nameuse{etocclasslocal\Etoc@currext maketitle}% + \etocclasslocalperhapsaddtotoc\Etoc@currext + \else + \section *{\contentsname + \@mkboth {\MakeUppercase \contentsname} + {\MakeUppercase \contentsname}}% + \etocifisstarred{}{\etocifmaintoctotoc{\etocclassmaintocaddtotoc}{}}% + \fi + } + {}% +} +\def\etocarticlestylenomarks{% + \etocsettocstyle + {\ifEtoc@localtoc + \@nameuse{etocclasslocal\Etoc@currext maketitle}% + \etocclasslocalperhapsaddtotoc\Etoc@currext + \else + \section *{\contentsname}% + \etocifisstarred{}{\etocifmaintoctotoc{\etocclassmaintocaddtotoc}{}}% + \fi + } + {}% +} +\def\etocbookstyle{% + \etocsettocstyle + {\if@twocolumn \@restonecoltrue \onecolumn \else \@restonecolfalse \fi + \ifEtoc@localtoc + \@nameuse{etocclasslocal\Etoc@currext maketitle}% + \etocclasslocalperhapsaddtotoc\Etoc@currext + \else + \chapter *{\contentsname + \@mkboth {\MakeUppercase \contentsname} + {\MakeUppercase \contentsname}}% + \etocifisstarred{}{\etocifmaintoctotoc{\etocclassmaintocaddtotoc}{}}% + \fi + }% + {\if@restonecol \twocolumn \fi}% +} +\def\etocbookstylenomarks{% + \etocsettocstyle + {\if@twocolumn \@restonecoltrue \onecolumn \else \@restonecolfalse \fi + \ifEtoc@localtoc + \@nameuse{etocclasslocal\Etoc@currext maketitle}% + \etocclasslocalperhapsaddtotoc\Etoc@currext + \else + \chapter *{\contentsname}% + \etocifisstarred{}{\etocifmaintoctotoc{\etocclassmaintocaddtotoc}{}}% + \fi + }% + {\if@restonecol \twocolumn \fi}% +} +\let\etocreportstyle\etocbookstyle +\let\etocreportstylenomarks\etocbookstylenomarks +\def\etocmemoirstyle{% + \etocsettocstyle + {\ensureonecol \par \begingroup \phantomsection + \ifx\Etoc@aftertitlehook\@empty + \else + \ifmem@em@starred@listof + \else + \ifEtoc@localtoc + \etocclasslocalperhapsaddtotoc\Etoc@currext + \else + \ifEtoc@maintoctotoc + \etocclassmaintocaddtotoc + \fi + \fi + \fi + \fi + \ifEtoc@localtoc + \@namedef{@\Etoc@currext maketitle}{% + \@nameuse{etocclasslocal\Etoc@currext maketitle}% + }% + \fi + \@nameuse {@\Etoc@currext maketitle} %<< space token here from memoir code + \ifx\Etoc@aftertitlehook\@empty + \else + \Etoc@aftertitlehook \let \Etoc@aftertitlehook \relax + \fi + \parskip \cftparskip \@nameuse {cft\Etoc@currext beforelisthook}% + }% + {\@nameuse {cft\Etoc@currext afterlisthook}% + \endgroup\restorefromonecol + }% +} +\let\Etoc@beforetitlehook\@empty +\if1\@ifclassloaded{scrartcl}0{\@ifclassloaded{scrbook}0{\@ifclassloaded{scrreprt}01}}% +\expandafter\@gobble +\else + \ifdefined\setuptoc + \def\Etoc@beforetitlehook{% + \ifEtoc@localtoc + \etocclasslocalperhapsaddtotoc\Etoc@currext + \setuptoc{\Etoc@currext}{leveldown}% + \else + \etocifisstarred{}{\etocifmaintoctotoc{\setuptoc{toc}{totoc}}}% + \fi + }% + \fi +\expandafter\@firstofone +\fi +{\def\etocclasslocalperhapsaddtotoc #1{% + \etocifisstarred + {}% + {\csname ifEtoc@local#1totoc\endcsname + \setuptoc{\Etoc@currext}{totoc}% + \fi + }% + }% +} +\ifdefined\Iftocfeature + \def\etoc@Iftocfeature{\Iftocfeature}% +\else + \def\etoc@Iftocfeature{\iftocfeature}% +\fi +\def\etocscrartclstyle{% + \etocsettocstyle + {\ifx\Etoc@currext\Etoc@tocext + \expandafter\@firstofone + \else + \expandafter\@gobble + \fi + {\let\if@dynlist\if@tocleft}% + \edef\@currext{\Etoc@currext}% + \@ifundefined{listof\@currext name}% + {\def\list@fname{\listofname~\@currext}}% + {\expandafter\let\expandafter\list@fname + \csname listof\@currext name\endcsname}% + \etoc@Iftocfeature {\@currext}{onecolumn} + {\etoc@Iftocfeature {\@currext}{leveldown} + {} + {\if@twocolumn \aftergroup \twocolumn \onecolumn \fi }} + {}% + \etoc@Iftocfeature {\@currext}{numberline}% + {\def \nonumberline {\numberline {}}}{}% + \expandafter\tocbasic@listhead\expandafter {\list@fname}% + \begingroup \expandafter \expandafter \expandafter + \endgroup \expandafter + \ifx + \csname microtypesetup\endcsname \relax + \else + \etoc@Iftocfeature {\@currext}{noprotrusion}{} + {\microtypesetup {protrusion=false}% + \PackageInfo {tocbasic}% + {character protrusion at \@currext\space deactivated}}% + \fi + \etoc@Iftocfeature{\@currext}{noparskipfake}{}{% + \ifvmode \@tempskipa\lastskip \vskip-\lastskip + \addtolength{\@tempskipa}{\parskip}\vskip\@tempskipa\fi + }% + \setlength {\parskip }{\z@ }% + \setlength {\parindent }{\z@ }% + \setlength {\parfillskip }{\z@ \@plus 1fil}% + \csname tocbasic@@before@hook\endcsname + \csname tb@\@currext @before@hook\endcsname + }% end of before_toc + {% start of after_toc + \providecommand\tocbasic@end@toc@file{}\tocbasic@end@toc@file + \edef\@currext{\Etoc@currext}% + \csname tb@\@currext @after@hook\endcsname + \csname tocbasic@@after@hook\endcsname + }% end of after_toc +} +\let\etocscrbookstyle\etocscrartclstyle +\let\etocscrreprtstyle\etocscrartclstyle +\def\etocclasstocstyle{\etocarticlestyle} +\newcommand*\etocmarkboth[1]{% + \@mkboth{\MakeUppercase{#1}}{\MakeUppercase{#1}}} +\newcommand*\etocmarkbothnouc[1]{\@mkboth{#1}{#1}} +\newcommand\etoctocstyle[3][section]{\etocmulticolstyle[#2]% + {\csname #1\endcsname *{#3}}} +\newcommand\etoctocstylewithmarks[4][section]{\etocmulticolstyle[#2]% + {\csname #1\endcsname *{#3\etocmarkboth{#4}}}} +\newcommand\etoctocstylewithmarksnouc[4][section]{\etocmulticolstyle[#2]% + {\csname #1\endcsname *{#3\etocmarkbothnouc{#4}}}} +\def\Etoc@redefetocstylesforchapters{% + \renewcommand\etoctocstylewithmarks[4][chapter]{% + \etocmulticolstyle[##2]{\csname ##1\endcsname *{##3\etocmarkboth{##4}}}% + } + \renewcommand\etoctocstylewithmarksnouc[4][chapter]{% + \etocmulticolstyle[##2]{\csname ##1\endcsname *{##3\etocmarkbothnouc{##4}}}% + } + \renewcommand\etoctocstyle[3][chapter]{% + \etocmulticolstyle[##2]{\csname ##1\endcsname *{##3}} + } +} +\@ifclassloaded{scrartcl} + {\renewcommand*\etocclasstocstyle{\etocscrartclstyle}}{} +\@ifclassloaded{book} + {\renewcommand*\etocfontone{\normalfont\normalsize} + \renewcommand*\etocclasstocstyle{\etocbookstyle} + \Etoc@redefetocstylesforchapters}{} +\@ifclassloaded{report} + {\renewcommand*\etocfontone{\normalfont\normalsize} + \renewcommand*\etocclasstocstyle{\etocreportstyle} + \Etoc@redefetocstylesforchapters}{} +\@ifclassloaded{scrbook} + {\renewcommand*\etocfontone{\normalfont\normalsize} + \renewcommand*\etocclasstocstyle{\etocscrbookstyle} + \Etoc@redefetocstylesforchapters}{} +\@ifclassloaded{scrreprt} + {\renewcommand*\etocfontone{\normalfont\normalsize} + \renewcommand*\etocclasstocstyle{\etocscrreprtstyle} + \Etoc@redefetocstylesforchapters}{} +\@ifclassloaded{memoir} + {\renewcommand*\etocfontone{\normalfont\normalsize} + \renewcommand*\etocclasstocstyle{\etocmemoirstyle} + \Etoc@redefetocstylesforchapters}{} +\def\etoctocloftstyle {% + \etocsettocstyle{% + \@cfttocstart + \par + \begingroup + \parindent\z@ \parskip\cftparskip + \@nameuse{@cftmake\Etoc@currext title}% + \ifEtoc@localtoc + \etoctocloftlocalperhapsaddtotoc\Etoc@currext + \else + \etocifisstarred {}{\ifEtoc@maintoctotoc\@cftdobibtoc\fi}% + \fi + }% + {% + \endgroup + \@cfttocfinish + }% +} +\def\etoctocloftlocalperhapsaddtotoc#1{% + \etocifisstarred + {}% + {\csname ifEtoc@local#1totoc\endcsname + \ifdefined\c@chapter\def\@tocextra{@section}\else\def\@tocextra{@subsection}\fi + \csname @cftdobib#1\endcsname + \fi + }% +} +\def\etoctocbibindstyle {% + \etocsettocstyle {% + \toc@start + \ifEtoc@localtoc + \@nameuse{etocclasslocal\Etoc@currext maketitle}% + \etocclasslocalperhapsaddtotoc\Etoc@currext + \else + \etoc@tocbibind@dotoctitle + \fi + }% + {\toc@finish}% +} +\def\etoc@tocbibind@dotoctitle {% + \if@bibchapter + \etocifisstarred + {\chapter*{\contentsname}\prw@mkboth{\contentsname} % id. + }% + {\ifEtoc@maintoctotoc + \toc@chapter{\contentsname} %<-space from original + \else + \chapter*{\contentsname}\prw@mkboth{\contentsname} % id. + \fi + }% + \else + \etocifisstarred + {\@nameuse{\@tocextra}*{\contentsname\prw@mkboth{\contentsname}} %<-space + } + {\ifEtoc@maintoctotoc + \toc@section{\@tocextra}{\contentsname} %<-space from original + \else + \@nameuse{\@tocextra}*{\contentsname\prw@mkboth{\contentsname}} % id. + \fi + }% + \fi +}% +\@ifclassloaded{memoir} +{} +{% memoir not loaded + \@ifpackageloaded{tocloft} + {\if@cftnctoc\else + \ifEtoc@keeporiginaltoc + \else + \AtBeginDocument{\let\tableofcontents\etoctableofcontents}% + \fi + \fi } + {\AtBeginDocument + {\@ifpackageloaded{tocloft} + {\if@cftnctoc\else + \PackageWarningNoLine {etoc} + {Package `tocloft' was loaded after `etoc'.\MessageBreak + To prevent it from overwriting \protect\tableofcontents, it will\MessageBreak + be tricked into believing to have been loaded with its\MessageBreak + option `titles'. \space But this will cause the `tocloft'\MessageBreak + customization of the titles of the main list of figures\MessageBreak + and list of tables to not apply either.\MessageBreak + You should load `tocloft' before `etoc'.}% + \AtEndDocument{\PackageWarning{etoc} + {Please load `tocloft' before `etoc'!\@gobbletwo}}% + \fi + \@cftnctoctrue }% + {}% + }% + }% +} +\@ifclassloaded{memoir} +{} +{% memoir not loaded + \AtBeginDocument{% + \@ifpackageloaded{tocloft} + {% + \def\etocclasstocstyle{% + \etoctocloftstyle + \Etoc@classstyletrue + }% + \ifEtoc@etocstyle + \ifEtoc@classstyle + \etocclasstocstyle + \Etoc@etocstyletrue + \fi + \else + \ifEtoc@classstyle + \etocclasstocstyle + \fi + \fi + }% + {% no tocloft + \@ifpackageloaded {tocbibind} + {\if@dotoctoc + \def\etocclasstocstyle{% + \etoctocbibindstyle + \Etoc@classstyletrue + }% + \ifEtoc@etocstyle + \ifEtoc@classstyle + \etocclasstocstyle + \Etoc@etocstyletrue + \fi + \else + \ifEtoc@classstyle + \etocclasstocstyle + \fi + \fi + \ifEtoc@keeporiginaltoc + \else + \let\tableofcontents\etoctableofcontents + \fi + }% + {}% + }% + \@ifpackageloaded{tocbibind} + {% tocbibind, perhaps with tocloft + \if@dotoctoc + \ifEtoc@keeporiginaltoc + \else + \let\tableofcontents\etoctableofcontents + \fi + \etocsetup{maintoctotoc,localtoctotoc}% + \PackageInfo{etoc}{% + Setting (or re-setting) the options `maintoctotoc' and\MessageBreak + `localtoctotoc' to true as tocbibind was detected and\MessageBreak + found to be configured for `TOC to toc'.\MessageBreak + Reported at begin document}% + \fi + \if@dotoclof + \ifEtoc@lof + \etocsetup{localloftotoc}% + \PackageInfo{etoc}{% + Setting (or re-setting) `localloftotoc=true' as the\MessageBreak + package tocbibind was detected and is configured for\MessageBreak + `LOF to toc'. Reported at begin document}% + \fi + \fi + \if@dotoclot + \ifEtoc@lot + \etocsetup{locallottotoc}% + \PackageInfo{etoc}{% + Setting (or re-setting) `locallottotoc=true' as the\MessageBreak + package tocbibind was detected and is configured for\MessageBreak + `LOT to toc'. Reported at begin document}% + \fi + \fi + }% end of tocbibind branch + {}% + }% end of at begin document +}% end of not with memoir branch +\def\Etoc@addtocontents #1#2{% + \addtocontents {toc}{% + \protect\contentsline{#1}{#2}{\thepage}{\ifEtoc@hyperref\@currentHref\fi}% + \ifdefined\protected@file@percent\protected@file@percent\fi + }% +} +\def\Etoc@addcontentsline@ #1#2#3{% + \@namedef{toclevel@#1}{#3}\addcontentsline {toc}{#1}{#2}% +} +\DeclareRobustCommand*{\etoctoccontentsline} + {\@ifstar{\Etoc@addcontentsline@}{\Etoc@addtocontents}} +\def\Etoc@addtocontents@immediately#1#2{% + \begingroup + \let\Etoc@originalwrite\write + \def\write{\immediate\Etoc@originalwrite}% + \Etoc@addtocontents{#1}{#2}% + \endgroup +} +\def\Etoc@addcontentsline@@immediately#1#2#3{% + \begingroup + \let\Etoc@originalwrite\write + \def\write{\immediate\Etoc@originalwrite}% + \Etoc@addcontentsline@{#1}{#2}{#3}% + \endgoroup +} +\DeclareRobustCommand*{\etocimmediatetoccontentsline} + {\@ifstar{\Etoc@addcontentsline@@immediately}{\Etoc@addtocontents@immediately}} +\def\Etoc@storetocdepth {\xdef\Etoc@savedtocdepth{\number\c@tocdepth}} +\def\Etoc@restoretocdepth {\global\c@tocdepth\Etoc@savedtocdepth\relax} +\def\etocobeytoctocdepth {\def\etoc@settocdepth + {\afterassignment\Etoc@@nottoodeep \global\c@tocdepth}} +\def\Etoc@@nottoodeep {\ifnum\Etoc@savedtocdepth<\c@tocdepth + \global\c@tocdepth\Etoc@savedtocdepth\relax\fi } +\def\etocignoretoctocdepth {\let\etoc@settocdepth\@gobble } +\def\etocsettocdepth {\futurelet\Etoc@nexttoken\Etoc@set@tocdepth } +\def\Etoc@set@tocdepth {\ifx\Etoc@nexttoken\bgroup + \expandafter\Etoc@set@tocdepth@ + \else\expandafter\Etoc@set@toctocdepth + \fi } +\def\Etoc@set@tocdepth@ #1{\@ifundefined {Etoc@#1@@} + {\PackageWarning{etoc} + {Unknown sectioning unit #1, \protect\etocsettocdepth\space ignored}} + {\global\c@tocdepth\csname Etoc@#1@@\endcsname}% +} +\def\Etoc@set@toctocdepth #1#{\Etoc@set@toctocdepth@ } +\def\Etoc@set@toctocdepth@ #1{% + \@ifundefined{Etoc@#1@@}% + {\PackageWarning{etoc} + {Unknown sectioning depth #1, \protect\etocsettocdepth.toc ignored}}% + {\addtocontents {toc} + {\protect\etoc@settocdepth\expandafter\protect\csname Etoc@#1@@\endcsname}}% +} +\def\etocimmediatesettocdepth #1#{\Etoc@set@toctocdepth@immediately} +\def\Etoc@set@toctocdepth@immediately #1{% + \@ifundefined{Etoc@#1@@}% + {\PackageWarning{etoc} + {Unknown sectioning depth #1, \protect\etocimmediatesettocdepth.toc ignored}}% + {\begingroup + \let\Etoc@originalwrite\write + \def\write{\immediate\Etoc@originalwrite}% + \addtocontents {toc} + {\protect\etoc@settocdepth\expandafter\protect + \csname Etoc@#1@@\endcsname}% + \endgroup + }% +} +\def\etocdepthtag #1#{\Etoc@depthtag } +\def\Etoc@depthtag #1{\addtocontents {toc}{\protect\etoc@depthtag {#1}}} +\def\etocimmediatedepthtag #1#{\Etoc@depthtag@immediately } +\def\Etoc@depthtag@immediately #1{% + \begingroup + \let\Etoc@originalwrite\write + \def\write{\immediate\Etoc@originalwrite}% + \addtocontents {toc}{\protect\etoc@depthtag {#1}}% + \endgroup +} +\def\etocignoredepthtags {\let\etoc@depthtag \@gobble } +\def\etocobeydepthtags {\let\etoc@depthtag \Etoc@depthtag@ } +\def\Etoc@depthtag@ #1{\@ifundefined{Etoc@depthof@#1}% + {}% ignore in silence if tag has no associated depth + {\afterassignment\Etoc@@nottoodeep + \global\c@tocdepth\csname Etoc@depthof@#1\endcsname}% +} +\def\etocsettagdepth #1#2{\@ifundefined{Etoc@#2@@}% + {\PackageWarning{etoc} + {Unknown sectioning depth #2, \protect\etocsettagdepth\space ignored}}% + {\@namedef{Etoc@depthof@#1}{\@nameuse{Etoc@#2@@}}}% +} +\def\Etoc@tocvsec@err #1{\PackageError {etoc} + {The command \protect#1\space is incompatible with `etoc'} + {Use \protect\etocsettocdepth.toc as replacement}% +}% +\AtBeginDocument {% + \@ifclassloaded{memoir} + {\PackageInfo {etoc} + {Regarding `memoir' class command \protect\settocdepth, consider\MessageBreak + \protect\etocsettocdepth.toc as a drop-in replacement with more\MessageBreak + capabilities (see `etoc' manual). \space + Also, \protect\etocsettocdepth\MessageBreak + and \protect\etocsetnexttocdepth\space should be used in place of\MessageBreak + `memoir' command \protect\maxtocdepth\@gobble}% + }% + {\@ifpackageloaded {tocvsec2}{% + \def\maxtocdepth #1{\Etoc@tocvsec@err \maxtocdepth }% + \def\settocdepth #1{\Etoc@tocvsec@err \settocdepth }% + \def\resettocdepth {\@ifstar {\Etoc@tocvsec@err \resettocdepth }% + {\Etoc@tocvsec@err \resettocdepth }% + }% + \def\save@tocdepth #1#2#3{}% + \let\reset@tocdepth\relax + \let\remax@tocdepth\relax + \let\tableofcontents\etoctableofcontents + \PackageWarningNoLine {etoc} + {Package `tocvsec2' detected and its modification of\MessageBreak + \protect\tableofcontents\space reverted. \space Use + \protect\etocsettocdepth.toc\MessageBreak as a replacement + for `tocvsec2' toc-related commands}% + }% tocvsec2 loaded + {}% tocvsec2 not loaded + }% +}% +\def\invisibletableofcontents {\etocsetnexttocdepth {-3}\tableofcontents }% +\def\invisiblelocaltableofcontents + {\etocsetnexttocdepth {-3}\localtableofcontents }% +\def\etocsetnexttocdepth #1{% + \@ifundefined{Etoc@#1@@} + {\PackageWarning{etoc} + {Unknown sectioning unit #1, \protect\etocsetnextocdepth\space ignored}} + {\Etoc@setnexttocdepth{\csname Etoc@#1@@\endcsname}}% +}% +\def\Etoc@setnexttocdepth#1{% + \def\Etoc@tocdepthset{% + \Etoc@tocdepthreset + \edef\Etoc@tocdepthreset {% + \global\c@tocdepth\the\c@tocdepth\space + \global\let\noexpand\Etoc@tocdepthreset\noexpand\@empty + }% + \global\c@tocdepth#1% + \global\let\Etoc@tocdepthset\@empty + }% +}% +\let\Etoc@tocdepthreset\@empty +\let\Etoc@tocdepthset \@empty +\def\etocsetlocaltop #1#{\Etoc@set@localtop}% +\def\Etoc@set@localtop #1{% + \@ifundefined{Etoc@#1@@}% + {\PackageWarning{etoc} + {Unknown sectioning depth #1, \protect\etocsetlocaltop.toc ignored}}% + {\addtocontents {toc} + {\protect\etoc@setlocaltop\expandafter\protect\csname Etoc@#1@@\endcsname}}% +}% +\def\etocimmediatesetlocaltop #1#{\Etoc@set@localtop@immediately}% +\def\Etoc@set@localtop@immediately #1{% + \@ifundefined{Etoc@#1@@}% + {\PackageWarning{etoc} + {Unknown sectioning depth #1, \protect\etocimmediatesetlocaltop.toc ignored}}% + {\begingroup + \let\Etoc@originalwrite\write + \def\write{\immediate\Etoc@originalwrite}% + \addtocontents {toc} + {\protect\etoc@setlocaltop\expandafter\protect + \csname Etoc@#1@@\endcsname}% + \endgroup + }% +}% +\def\etoc@setlocaltop #1{% + \ifnum#1=\Etoc@maxlevel + \Etoc@skipthisonetrue + \else + \Etoc@skipthisonefalse + \global\let\Etoc@level #1% + \global\let\Etoc@virtualtop #1% + \ifEtoc@localtoc + \ifEtoc@stoptoc + \Etoc@skipthisonetrue + \else + \ifEtoc@notactive + \Etoc@skipthisonetrue + \else + \unless\ifnum\Etoc@level>\etoclocaltop + \Etoc@skipthisonetrue + \global\Etoc@stoptoctrue + \fi + \fi + \fi + \fi + \fi + \let\Etoc@next\@empty + \ifEtoc@skipthisone + \else + \ifnum\Etoc@level>\c@tocdepth + \else + \ifEtoc@standardlines + \else + \let\Etoc@next\Etoc@setlocaltop@doendsandbegin + \fi + \fi + \fi + \Etoc@next +}% +\def\Etoc@setlocaltop@doendsandbegin{% + \Etoc@doendsandbegin + \global\Etoc@skipprefixfalse +} +\addtocontents {toc}{\protect\@ifundefined{etoctocstyle}% + {\let\protect\etoc@startlocaltoc\protect\@gobble + \let\protect\etoc@settocdepth\protect\@gobble + \let\protect\etoc@depthtag\protect\@gobble + \let\protect\etoc@setlocaltop\protect\@gobble}{}}% +\def\etocstandardlines {\Etoc@standardlinestrue} +\def\etoctoclines {\Etoc@standardlinesfalse} +\etocdefaultlines +\etocstandardlines +\def\etocstandarddisplaystyle{% + \PackageWarningNoLine{etoc}{% + \string\etocstandarddisplaystyle \on@line\MessageBreak + is deprecated. \space Please use \string\etocclasstocstyle}% +} +\expandafter\def\expandafter\etocclasstocstyle\expandafter{% + \etocclasstocstyle + \Etoc@classstyletrue +} +\def\etocetoclocaltocstyle{\Etoc@etocstyletrue} +\def\etocusertocstyle{\Etoc@etocstylefalse} +\etocclasstocstyle +\etocetoclocaltocstyle +\etocobeytoctocdepth +\etocobeydepthtags +\let\etocbeforetitlehook \@empty +\let\etocaftertitlehook \@empty +\let\etocaftercontentshook \@empty +\let\etocaftertochook \@empty +\def\etockeeporiginaltableofcontents + {\Etoc@keeporiginaltoctrue\let\tableofcontents\etocoriginaltableofcontents}% +\endinput +%% +%% End of file `etoc.sty'. diff --git a/docs/latex/files.tex b/docs/latex/files.tex new file mode 100644 index 0000000..d112b4e --- /dev/null +++ b/docs/latex/files.tex @@ -0,0 +1,12 @@ +\doxysection{File List} +Here is a list of all documented files with brief descriptions\+:\begin{DoxyCompactList} +\item\contentsline{section}{src/\mbox{\hyperlink{main_8c}{main.\+c}} \\*Programme principal pour choisir une interface et lancer l\textquotesingle{}application }{\pageref{main_8c}}{} +\item\contentsline{section}{src/app/core\+\_\+logic/\mbox{\hyperlink{client_8c}{client.\+c}} \\*Fonctions liées à la gestion des clients et de leur panier }{\pageref{client_8c}}{} +\item\contentsline{section}{src/app/core\+\_\+logic/\mbox{\hyperlink{client_8h}{client.\+h}} \\*Fonctions liées à la gestion des clients et de leur panier }{\pageref{client_8h}}{} +\item\contentsline{section}{src/app/core\+\_\+logic/\mbox{\hyperlink{responsable_8c}{responsable.\+c}} \\*Définition des fonctions de \doxylink{responsable_8c}{responsable.\+c} }{\pageref{responsable_8c}}{} +\item\contentsline{section}{src/app/core\+\_\+logic/\mbox{\hyperlink{responsable_8h}{responsable.\+h}} \\*Déclaration des fonctions de \doxylink{responsable_8c}{responsable.\+c} }{\pageref{responsable_8h}}{} +\item\contentsline{section}{src/app/interface/\mbox{\hyperlink{interface__client_8c}{interface\+\_\+client.\+c}} \\*Implémentation des fonctions liées à l\textquotesingle{}interface client }{\pageref{interface__client_8c}}{} +\item\contentsline{section}{src/app/interface/\mbox{\hyperlink{interface__client_8h}{interface\+\_\+client.\+h}} \\*En-\/tête des fonctions liées à l\textquotesingle{}interface client }{\pageref{interface__client_8h}}{} +\item\contentsline{section}{src/app/interface/\mbox{\hyperlink{interface__resp_8c}{interface\+\_\+resp.\+c}} \\*Implémentation des fonctions liées à l\textquotesingle{}interface du responsable }{\pageref{interface__resp_8c}}{} +\item\contentsline{section}{src/app/interface/\mbox{\hyperlink{interface__resp_8h}{interface\+\_\+resp.\+h}} \\*En-\/tête des fonctions liées à l\textquotesingle{}interface du responsable }{\pageref{interface__resp_8h}}{} +\end{DoxyCompactList} diff --git a/docs/latex/interface__client_8c.tex b/docs/latex/interface__client_8c.tex new file mode 100644 index 0000000..84785bc --- /dev/null +++ b/docs/latex/interface__client_8c.tex @@ -0,0 +1,62 @@ +\doxysection{src/app/interface/interface\+\_\+client.c File Reference} +\hypertarget{interface__client_8c}{}\label{interface__client_8c}\index{src/app/interface/interface\_client.c@{src/app/interface/interface\_client.c}} + + +Implémentation des fonctions liées à l\textquotesingle{}interface client. + + +{\ttfamily \#include "{}interface\+\_\+client.\+h"{}}\newline +{\ttfamily \#include "{}app/core\+\_\+logic/client.\+h"{}}\newline +{\ttfamily \#include "{}app/core\+\_\+logic/responsable.\+h"{}}\newline +\doxysubsubsection*{Macros} +\begin{DoxyCompactItemize} +\item +\Hypertarget{interface__client_8c_ad6a5b5050a3ed6cffbb52fe15c39e587}\label{interface__client_8c_ad6a5b5050a3ed6cffbb52fe15c39e587} +\#define {\bfseries MAX\+\_\+\+ARTICLES}~100 +\item +\Hypertarget{interface__client_8c_a0a8f91f93d75a07f0ae45077db45b3eb}\label{interface__client_8c_a0a8f91f93d75a07f0ae45077db45b3eb} +\#define {\bfseries MAX\+\_\+\+CLIENTS}~100 +\end{DoxyCompactItemize} +\doxysubsubsection*{Functions} +\begin{DoxyCompactItemize} +\item +\Hypertarget{interface__client_8c_a98012af1d373da58fa7dc041f97216bc}\label{interface__client_8c_a98012af1d373da58fa7dc041f97216bc} +void {\bfseries affiche\+\_\+client} () +\begin{DoxyCompactList}\small\item\em Affiche le menu principal de l\textquotesingle{}interface client. \end{DoxyCompactList}\item +void \mbox{\hyperlink{interface__client_8c_a49de18c6560633af132a56085d28a8ba}{menu\+\_\+client}} (int \texorpdfstring{$\ast$}{*}choix) +\begin{DoxyCompactList}\small\item\em Laisse l\textquotesingle{}utilisateur choisir une option du menu. \end{DoxyCompactList}\item +void \mbox{\hyperlink{interface__client_8c_aace0a1bcc32fda795f57fa76de7ec276}{global\+\_\+client}} () +\begin{DoxyCompactList}\small\item\em Fonction principale de l\textquotesingle{}interface client. \end{DoxyCompactList}\end{DoxyCompactItemize} + + +\doxysubsection{Detailed Description} +Implémentation des fonctions liées à l\textquotesingle{}interface client. + + + +\doxysubsection{Function Documentation} +\Hypertarget{interface__client_8c_aace0a1bcc32fda795f57fa76de7ec276}\label{interface__client_8c_aace0a1bcc32fda795f57fa76de7ec276} +\index{interface\_client.c@{interface\_client.c}!global\_client@{global\_client}} +\index{global\_client@{global\_client}!interface\_client.c@{interface\_client.c}} +\doxysubsubsection{\texorpdfstring{global\_client()}{global\_client()}} +{\footnotesize\ttfamily void global\+\_\+client (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})} + + + +Fonction principale de l\textquotesingle{}interface client. + +Cette fonction permet aux clients d\textquotesingle{}utiliser l\textquotesingle{}application pour gérer leur panier et effectuer des opérations telles que l\textquotesingle{}ajout, la suppression ou la modification d\textquotesingle{}articles dans le panier. \Hypertarget{interface__client_8c_a49de18c6560633af132a56085d28a8ba}\label{interface__client_8c_a49de18c6560633af132a56085d28a8ba} +\index{interface\_client.c@{interface\_client.c}!menu\_client@{menu\_client}} +\index{menu\_client@{menu\_client}!interface\_client.c@{interface\_client.c}} +\doxysubsubsection{\texorpdfstring{menu\_client()}{menu\_client()}} +{\footnotesize\ttfamily void menu\+\_\+client (\begin{DoxyParamCaption}\item[{int \texorpdfstring{$\ast$}{*}}]{choix }\end{DoxyParamCaption})} + + + +Laisse l\textquotesingle{}utilisateur choisir une option du menu. + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in,out}} & {\em choix} & -\/ L\textquotesingle{}option choisie par l\textquotesingle{}utilisateur. \\ +\hline +\end{DoxyParams} diff --git a/docs/latex/interface__client_8h.tex b/docs/latex/interface__client_8h.tex new file mode 100644 index 0000000..6cb7e35 --- /dev/null +++ b/docs/latex/interface__client_8h.tex @@ -0,0 +1,51 @@ +\doxysection{src/app/interface/interface\+\_\+client.h File Reference} +\hypertarget{interface__client_8h}{}\label{interface__client_8h}\index{src/app/interface/interface\_client.h@{src/app/interface/interface\_client.h}} + + +En-\/tête des fonctions liées à l\textquotesingle{}interface client. + + +{\ttfamily \#include $<$stdio.\+h$>$}\newline +\doxysubsubsection*{Functions} +\begin{DoxyCompactItemize} +\item +\Hypertarget{interface__client_8h_a98012af1d373da58fa7dc041f97216bc}\label{interface__client_8h_a98012af1d373da58fa7dc041f97216bc} +void {\bfseries affiche\+\_\+client} () +\begin{DoxyCompactList}\small\item\em Affiche le menu principal de l\textquotesingle{}interface client. \end{DoxyCompactList}\item +void \mbox{\hyperlink{interface__client_8h_a49de18c6560633af132a56085d28a8ba}{menu\+\_\+client}} (int \texorpdfstring{$\ast$}{*}choix) +\begin{DoxyCompactList}\small\item\em Laisse l\textquotesingle{}utilisateur choisir une option du menu. \end{DoxyCompactList}\item +void \mbox{\hyperlink{interface__client_8h_aace0a1bcc32fda795f57fa76de7ec276}{global\+\_\+client}} () +\begin{DoxyCompactList}\small\item\em Fonction principale de l\textquotesingle{}interface client. \end{DoxyCompactList}\end{DoxyCompactItemize} + + +\doxysubsection{Detailed Description} +En-\/tête des fonctions liées à l\textquotesingle{}interface client. + + + +\doxysubsection{Function Documentation} +\Hypertarget{interface__client_8h_aace0a1bcc32fda795f57fa76de7ec276}\label{interface__client_8h_aace0a1bcc32fda795f57fa76de7ec276} +\index{interface\_client.h@{interface\_client.h}!global\_client@{global\_client}} +\index{global\_client@{global\_client}!interface\_client.h@{interface\_client.h}} +\doxysubsubsection{\texorpdfstring{global\_client()}{global\_client()}} +{\footnotesize\ttfamily void global\+\_\+client (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})} + + + +Fonction principale de l\textquotesingle{}interface client. + +Cette fonction permet aux clients d\textquotesingle{}utiliser l\textquotesingle{}application pour gérer leur panier et effectuer des opérations telles que l\textquotesingle{}ajout, la suppression ou la modification d\textquotesingle{}articles dans le panier. \Hypertarget{interface__client_8h_a49de18c6560633af132a56085d28a8ba}\label{interface__client_8h_a49de18c6560633af132a56085d28a8ba} +\index{interface\_client.h@{interface\_client.h}!menu\_client@{menu\_client}} +\index{menu\_client@{menu\_client}!interface\_client.h@{interface\_client.h}} +\doxysubsubsection{\texorpdfstring{menu\_client()}{menu\_client()}} +{\footnotesize\ttfamily void menu\+\_\+client (\begin{DoxyParamCaption}\item[{int \texorpdfstring{$\ast$}{*}}]{choix }\end{DoxyParamCaption})} + + + +Laisse l\textquotesingle{}utilisateur choisir une option du menu. + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in,out}} & {\em choix} & -\/ L\textquotesingle{}option choisie par l\textquotesingle{}utilisateur. \\ +\hline +\end{DoxyParams} diff --git a/docs/latex/interface__client_8h_source.tex b/docs/latex/interface__client_8h_source.tex new file mode 100644 index 0000000..d0f6163 --- /dev/null +++ b/docs/latex/interface__client_8h_source.tex @@ -0,0 +1,14 @@ +\doxysection{interface\+\_\+client.\+h} +\hypertarget{interface__client_8h_source}{}\label{interface__client_8h_source}\index{src/app/interface/interface\_client.h@{src/app/interface/interface\_client.h}} +\mbox{\hyperlink{interface__client_8h}{Go to the documentation of this file.}} +\begin{DoxyCode}{0} +\DoxyCodeLine{00001\ } +\DoxyCodeLine{00006\ \textcolor{preprocessor}{\#include\ }} +\DoxyCodeLine{00007\ } +\DoxyCodeLine{00011\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{interface__client_8h_a98012af1d373da58fa7dc041f97216bc}{affiche\_client}}();} +\DoxyCodeLine{00012\ } +\DoxyCodeLine{00018\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{interface__client_8h_a49de18c6560633af132a56085d28a8ba}{menu\_client}}(\textcolor{keywordtype}{int}\ *choix);} +\DoxyCodeLine{00019\ } +\DoxyCodeLine{00027\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{interface__client_8h_aace0a1bcc32fda795f57fa76de7ec276}{global\_client}}();} + +\end{DoxyCode} diff --git a/docs/latex/interface__resp_8c.tex b/docs/latex/interface__resp_8c.tex new file mode 100644 index 0000000..83a8fea --- /dev/null +++ b/docs/latex/interface__resp_8c.tex @@ -0,0 +1,258 @@ +\doxysection{src/app/interface/interface\+\_\+resp.c File Reference} +\hypertarget{interface__resp_8c}{}\label{interface__resp_8c}\index{src/app/interface/interface\_resp.c@{src/app/interface/interface\_resp.c}} + + +Implémentation des fonctions liées à l\textquotesingle{}interface du responsable. + + +{\ttfamily \#include $<$stdio.\+h$>$}\newline +{\ttfamily \#include $<$stdlib.\+h$>$}\newline +{\ttfamily \#include "{}interface\+\_\+resp.\+h"{}}\newline +{\ttfamily \#include "{}app/core\+\_\+logic/responsable.\+h"{}}\newline +{\ttfamily \#include "{}app/core\+\_\+logic/client.\+h"{}}\newline +\doxysubsubsection*{Macros} +\begin{DoxyCompactItemize} +\item +\Hypertarget{interface__resp_8c_a0a8f91f93d75a07f0ae45077db45b3eb}\label{interface__resp_8c_a0a8f91f93d75a07f0ae45077db45b3eb} +\#define {\bfseries MAX\+\_\+\+CLIENTS}~100 +\item +\Hypertarget{interface__resp_8c_ad6a5b5050a3ed6cffbb52fe15c39e587}\label{interface__resp_8c_ad6a5b5050a3ed6cffbb52fe15c39e587} +\#define {\bfseries MAX\+\_\+\+ARTICLES}~100 +\end{DoxyCompactItemize} +\doxysubsubsection*{Functions} +\begin{DoxyCompactItemize} +\item +\Hypertarget{interface__resp_8c_abb1a25ae1531e0857856843b41805528}\label{interface__resp_8c_abb1a25ae1531e0857856843b41805528} +void {\bfseries affiche\+\_\+resp} (void) +\begin{DoxyCompactList}\small\item\em Affiche le menu principal de l\textquotesingle{}interface du responsable. \end{DoxyCompactList}\item +void \mbox{\hyperlink{interface__resp_8c_af518981f5e0d4575a6b7bae3f22e9985}{affich\+Articles}} (int t\+Ref\mbox{[}$\,$\mbox{]}, float t\+Poids\mbox{[}$\,$\mbox{]}, float t\+Vol\mbox{[}$\,$\mbox{]}, float t\+Prix\mbox{[}$\,$\mbox{]}, int t\+Logique) +\begin{DoxyCompactList}\small\item\em Affiche la liste des articles. \end{DoxyCompactList}\item +void \mbox{\hyperlink{interface__resp_8c_a5e9ce25cbd73f9d4732b84eb5ab59d13}{affich\+Un\+Article}} (int t\+Ref\mbox{[}$\,$\mbox{]}, float t\+Poids\mbox{[}$\,$\mbox{]}, float t\+Vol\mbox{[}$\,$\mbox{]}, float t\+Prix\mbox{[}$\,$\mbox{]}, int t\+Logique) +\begin{DoxyCompactList}\small\item\em Affiche un article spécifique. \end{DoxyCompactList}\item +void \mbox{\hyperlink{interface__resp_8c_aa29059c1470e490b32fdf483b5570c88}{affich\+Un\+Client}} (int t\+Num\+Client\mbox{[}$\,$\mbox{]}, float t\+Cagnotte\mbox{[}$\,$\mbox{]}, int t\+Sus\mbox{[}$\,$\mbox{]}, int t\+Logique) +\begin{DoxyCompactList}\small\item\em Affiche un client spécifique. \end{DoxyCompactList}\item +void \mbox{\hyperlink{interface__resp_8c_a7c0531c63ea490d0b674960483e9ba27}{affich\+Clients}} (int t\+Num\+Client\mbox{[}$\,$\mbox{]}, float t\+Cagnotte\mbox{[}$\,$\mbox{]}, int t\+Sus\mbox{[}$\,$\mbox{]}, int t\+Logique) +\begin{DoxyCompactList}\small\item\em Affiche la liste des clients. \end{DoxyCompactList}\item +void \mbox{\hyperlink{interface__resp_8c_a9e01225a96daa69eb466e03fd1108c0a}{affich\+Ajout\+Article}} (int \texorpdfstring{$\ast$}{*}ref, float \texorpdfstring{$\ast$}{*}poids, float \texorpdfstring{$\ast$}{*}volume, float \texorpdfstring{$\ast$}{*}prix) +\begin{DoxyCompactList}\small\item\em Affiche les informations pour ajouter un nouvel article. \end{DoxyCompactList}\item +void \mbox{\hyperlink{interface__resp_8c_a47ca5882a75fd3b919ba02b028582473}{affich\+Supprimer\+Article}} (int \texorpdfstring{$\ast$}{*}ref) +\begin{DoxyCompactList}\small\item\em Affiche les informations pour supprimer un article. \end{DoxyCompactList}\item +void \mbox{\hyperlink{interface__resp_8c_af075e50ffce501b901ff31b1fb73262f}{affich\+Modifier\+Article}} (int \texorpdfstring{$\ast$}{*}ref, float \texorpdfstring{$\ast$}{*}poids, float \texorpdfstring{$\ast$}{*}volume, float \texorpdfstring{$\ast$}{*}prix) +\begin{DoxyCompactList}\small\item\em Affiche les informations pour modifier un article. \end{DoxyCompactList}\item +void \mbox{\hyperlink{interface__resp_8c_a964d2d2bc5b9aa544e6187ed6cbc961c}{affich\+Ajout\+Client}} (int t\+Num\+Client\mbox{[}$\,$\mbox{]}, int t\+Logique, int \texorpdfstring{$\ast$}{*}numC) +\begin{DoxyCompactList}\small\item\em Affiche les informations pour ajouter un nouveau client. \end{DoxyCompactList}\item +void \mbox{\hyperlink{interface__resp_8c_a1f14dc8f23be75e1a5c0e7ce0c77f597}{menu\+\_\+resp}} (int \texorpdfstring{$\ast$}{*}choix) +\begin{DoxyCompactList}\small\item\em Fonction de menu pour le responsable. \end{DoxyCompactList}\item +void \mbox{\hyperlink{interface__resp_8c_a421ebe0511c91fb6431aed873aa01e35}{global\+\_\+resp}} () +\begin{DoxyCompactList}\small\item\em Fonction principale de l\textquotesingle{}interface du responsable. \end{DoxyCompactList}\end{DoxyCompactItemize} + + +\doxysubsection{Detailed Description} +Implémentation des fonctions liées à l\textquotesingle{}interface du responsable. + + + +\doxysubsection{Function Documentation} +\Hypertarget{interface__resp_8c_a9e01225a96daa69eb466e03fd1108c0a}\label{interface__resp_8c_a9e01225a96daa69eb466e03fd1108c0a} +\index{interface\_resp.c@{interface\_resp.c}!affichAjoutArticle@{affichAjoutArticle}} +\index{affichAjoutArticle@{affichAjoutArticle}!interface\_resp.c@{interface\_resp.c}} +\doxysubsubsection{\texorpdfstring{affichAjoutArticle()}{affichAjoutArticle()}} +{\footnotesize\ttfamily void affich\+Ajout\+Article (\begin{DoxyParamCaption}\item[{int \texorpdfstring{$\ast$}{*}}]{ref, }\item[{float \texorpdfstring{$\ast$}{*}}]{poids, }\item[{float \texorpdfstring{$\ast$}{*}}]{volume, }\item[{float \texorpdfstring{$\ast$}{*}}]{prix }\end{DoxyParamCaption})} + + + +Affiche les informations pour ajouter un nouvel article. + +Affiche les informations nécessaires pour ajouter un nouvel article. + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in,out}} & {\em ref} & -\/ Référence du nouvel article. \\ +\hline +\mbox{\texttt{ in,out}} & {\em poids} & -\/ Poids du nouvel article. \\ +\hline +\mbox{\texttt{ in,out}} & {\em volume} & -\/ Volume du nouvel article. \\ +\hline +\mbox{\texttt{ in,out}} & {\em prix} & -\/ Prix du nouvel article. \\ +\hline +\end{DoxyParams} +\Hypertarget{interface__resp_8c_a964d2d2bc5b9aa544e6187ed6cbc961c}\label{interface__resp_8c_a964d2d2bc5b9aa544e6187ed6cbc961c} +\index{interface\_resp.c@{interface\_resp.c}!affichAjoutClient@{affichAjoutClient}} +\index{affichAjoutClient@{affichAjoutClient}!interface\_resp.c@{interface\_resp.c}} +\doxysubsubsection{\texorpdfstring{affichAjoutClient()}{affichAjoutClient()}} +{\footnotesize\ttfamily void affich\+Ajout\+Client (\begin{DoxyParamCaption}\item[{int}]{t\+Num\+Client\mbox{[}$\,$\mbox{]}, }\item[{int}]{t\+Logique, }\item[{int \texorpdfstring{$\ast$}{*}}]{numC }\end{DoxyParamCaption})} + + + +Affiche les informations pour ajouter un nouveau client. + +Affiche les informations nécessaires pour ajouter un nouveau client. + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em t\+Num\+Client} & -\/ Tableau des numéros de client. \\ +\hline +\mbox{\texttt{ in}} & {\em t\+Logique} & -\/ Taille logique des tableaux. \\ +\hline +\mbox{\texttt{ in,out}} & {\em numC} & -\/ Numéro du nouveau client. \\ +\hline +\end{DoxyParams} +\Hypertarget{interface__resp_8c_af518981f5e0d4575a6b7bae3f22e9985}\label{interface__resp_8c_af518981f5e0d4575a6b7bae3f22e9985} +\index{interface\_resp.c@{interface\_resp.c}!affichArticles@{affichArticles}} +\index{affichArticles@{affichArticles}!interface\_resp.c@{interface\_resp.c}} +\doxysubsubsection{\texorpdfstring{affichArticles()}{affichArticles()}} +{\footnotesize\ttfamily void affich\+Articles (\begin{DoxyParamCaption}\item[{int}]{t\+Ref\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Poids\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Vol\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Prix\mbox{[}$\,$\mbox{]}, }\item[{int}]{t\+Logique }\end{DoxyParamCaption})} + + + +Affiche la liste des articles. + + +\begin{DoxyParams}{Parameters} +{\em t\+Ref} & -\/ Tableau des références d\textquotesingle{}articles. \\ +\hline +{\em t\+Poids} & -\/ Tableau des poids d\textquotesingle{}articles. \\ +\hline +{\em t\+Vol} & -\/ Tableau des volumes d\textquotesingle{}articles. \\ +\hline +{\em t\+Prix} & -\/ Tableau des prix d\textquotesingle{}articles. \\ +\hline +{\em t\+Logique} & -\/ Taille logique des tableaux. \\ +\hline +\end{DoxyParams} +\Hypertarget{interface__resp_8c_a7c0531c63ea490d0b674960483e9ba27}\label{interface__resp_8c_a7c0531c63ea490d0b674960483e9ba27} +\index{interface\_resp.c@{interface\_resp.c}!affichClients@{affichClients}} +\index{affichClients@{affichClients}!interface\_resp.c@{interface\_resp.c}} +\doxysubsubsection{\texorpdfstring{affichClients()}{affichClients()}} +{\footnotesize\ttfamily void affich\+Clients (\begin{DoxyParamCaption}\item[{int}]{t\+Num\+Client\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Cagnotte\mbox{[}$\,$\mbox{]}, }\item[{int}]{t\+Sus\mbox{[}$\,$\mbox{]}, }\item[{int}]{t\+Logique }\end{DoxyParamCaption})} + + + +Affiche la liste des clients. + + +\begin{DoxyParams}{Parameters} +{\em t\+Num\+Client} & -\/ Tableau des numéros de client. \\ +\hline +{\em t\+Cagnotte} & -\/ Tableau des cagnottes des clients. \\ +\hline +{\em t\+Sus} & -\/ Tableau d\textquotesingle{}états des clients. \\ +\hline +{\em t\+Logique} & -\/ Taille logique des tableaux. \\ +\hline +\end{DoxyParams} +\Hypertarget{interface__resp_8c_af075e50ffce501b901ff31b1fb73262f}\label{interface__resp_8c_af075e50ffce501b901ff31b1fb73262f} +\index{interface\_resp.c@{interface\_resp.c}!affichModifierArticle@{affichModifierArticle}} +\index{affichModifierArticle@{affichModifierArticle}!interface\_resp.c@{interface\_resp.c}} +\doxysubsubsection{\texorpdfstring{affichModifierArticle()}{affichModifierArticle()}} +{\footnotesize\ttfamily void affich\+Modifier\+Article (\begin{DoxyParamCaption}\item[{int \texorpdfstring{$\ast$}{*}}]{ref, }\item[{float \texorpdfstring{$\ast$}{*}}]{poids, }\item[{float \texorpdfstring{$\ast$}{*}}]{volume, }\item[{float \texorpdfstring{$\ast$}{*}}]{prix }\end{DoxyParamCaption})} + + + +Affiche les informations pour modifier un article. + +Affiche les informations nécessaires pour modifier un article. + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in,out}} & {\em ref} & -\/ Référence de l\textquotesingle{}article à modifier. \\ +\hline +\mbox{\texttt{ in,out}} & {\em poids} & -\/ Nouveau poids de l\textquotesingle{}article. \\ +\hline +\mbox{\texttt{ in,out}} & {\em volume} & -\/ Nouveau volume de l\textquotesingle{}article. \\ +\hline +\mbox{\texttt{ in,out}} & {\em prix} & -\/ Nouveau prix de l\textquotesingle{}article. \\ +\hline +\end{DoxyParams} +\Hypertarget{interface__resp_8c_a47ca5882a75fd3b919ba02b028582473}\label{interface__resp_8c_a47ca5882a75fd3b919ba02b028582473} +\index{interface\_resp.c@{interface\_resp.c}!affichSupprimerArticle@{affichSupprimerArticle}} +\index{affichSupprimerArticle@{affichSupprimerArticle}!interface\_resp.c@{interface\_resp.c}} +\doxysubsubsection{\texorpdfstring{affichSupprimerArticle()}{affichSupprimerArticle()}} +{\footnotesize\ttfamily void affich\+Supprimer\+Article (\begin{DoxyParamCaption}\item[{int \texorpdfstring{$\ast$}{*}}]{ref }\end{DoxyParamCaption})} + + + +Affiche les informations pour supprimer un article. + +Affiche les informations nécessaires pour supprimer un article. + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in,out}} & {\em ref} & -\/ Référence de l\textquotesingle{}article à supprimer. \\ +\hline +\end{DoxyParams} +\Hypertarget{interface__resp_8c_a5e9ce25cbd73f9d4732b84eb5ab59d13}\label{interface__resp_8c_a5e9ce25cbd73f9d4732b84eb5ab59d13} +\index{interface\_resp.c@{interface\_resp.c}!affichUnArticle@{affichUnArticle}} +\index{affichUnArticle@{affichUnArticle}!interface\_resp.c@{interface\_resp.c}} +\doxysubsubsection{\texorpdfstring{affichUnArticle()}{affichUnArticle()}} +{\footnotesize\ttfamily void affich\+Un\+Article (\begin{DoxyParamCaption}\item[{int}]{t\+Ref\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Poids\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Vol\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Prix\mbox{[}$\,$\mbox{]}, }\item[{int}]{t\+Logique }\end{DoxyParamCaption})} + + + +Affiche un article spécifique. + +Affiche les informations d\textquotesingle{}un article spécifique. + + +\begin{DoxyParams}{Parameters} +{\em t\+Ref} & -\/ Tableau des références d\textquotesingle{}articles. \\ +\hline +{\em t\+Poids} & -\/ Tableau des poids d\textquotesingle{}articles. \\ +\hline +{\em t\+Vol} & -\/ Tableau des volumes d\textquotesingle{}articles. \\ +\hline +{\em t\+Prix} & -\/ Tableau des prix d\textquotesingle{}articles. \\ +\hline +{\em t\+Logique} & -\/ Taille logique des tableaux. \\ +\hline +\end{DoxyParams} +\Hypertarget{interface__resp_8c_aa29059c1470e490b32fdf483b5570c88}\label{interface__resp_8c_aa29059c1470e490b32fdf483b5570c88} +\index{interface\_resp.c@{interface\_resp.c}!affichUnClient@{affichUnClient}} +\index{affichUnClient@{affichUnClient}!interface\_resp.c@{interface\_resp.c}} +\doxysubsubsection{\texorpdfstring{affichUnClient()}{affichUnClient()}} +{\footnotesize\ttfamily void affich\+Un\+Client (\begin{DoxyParamCaption}\item[{int}]{t\+Num\+Client\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Cagnotte\mbox{[}$\,$\mbox{]}, }\item[{int}]{t\+Sus\mbox{[}$\,$\mbox{]}, }\item[{int}]{t\+Logique }\end{DoxyParamCaption})} + + + +Affiche un client spécifique. + +Affiche les informations d\textquotesingle{}un client spécifique. + + +\begin{DoxyParams}{Parameters} +{\em t\+Num\+Client} & -\/ Tableau des numéros de client. \\ +\hline +{\em t\+Cagnotte} & -\/ Tableau des cagnottes des clients. \\ +\hline +{\em t\+Sus} & -\/ Tableau d\textquotesingle{}états des clients. \\ +\hline +{\em t\+Logique} & -\/ Taille logique des tableaux. \\ +\hline +\end{DoxyParams} +\Hypertarget{interface__resp_8c_a421ebe0511c91fb6431aed873aa01e35}\label{interface__resp_8c_a421ebe0511c91fb6431aed873aa01e35} +\index{interface\_resp.c@{interface\_resp.c}!global\_resp@{global\_resp}} +\index{global\_resp@{global\_resp}!interface\_resp.c@{interface\_resp.c}} +\doxysubsubsection{\texorpdfstring{global\_resp()}{global\_resp()}} +{\footnotesize\ttfamily void global\+\_\+resp (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})} + + + +Fonction principale de l\textquotesingle{}interface du responsable. + +Cette fonction permet au responsable d\textquotesingle{}effectuer diverses actions telles que la gestion des articles et des clients. \Hypertarget{interface__resp_8c_a1f14dc8f23be75e1a5c0e7ce0c77f597}\label{interface__resp_8c_a1f14dc8f23be75e1a5c0e7ce0c77f597} +\index{interface\_resp.c@{interface\_resp.c}!menu\_resp@{menu\_resp}} +\index{menu\_resp@{menu\_resp}!interface\_resp.c@{interface\_resp.c}} +\doxysubsubsection{\texorpdfstring{menu\_resp()}{menu\_resp()}} +{\footnotesize\ttfamily void menu\+\_\+resp (\begin{DoxyParamCaption}\item[{int \texorpdfstring{$\ast$}{*}}]{choix }\end{DoxyParamCaption})} + + + +Fonction de menu pour le responsable. + +Laisse le responsable choisir une option du menu. + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in,out}} & {\em choix} & -\/ L\textquotesingle{}option choisie par le responsable. \\ +\hline +\end{DoxyParams} diff --git a/docs/latex/interface__resp_8h.tex b/docs/latex/interface__resp_8h.tex new file mode 100644 index 0000000..6dccbb7 --- /dev/null +++ b/docs/latex/interface__resp_8h.tex @@ -0,0 +1,330 @@ +\doxysection{src/app/interface/interface\+\_\+resp.h File Reference} +\hypertarget{interface__resp_8h}{}\label{interface__resp_8h}\index{src/app/interface/interface\_resp.h@{src/app/interface/interface\_resp.h}} + + +En-\/tête des fonctions liées à l\textquotesingle{}interface du responsable. + + +\doxysubsubsection*{Functions} +\begin{DoxyCompactItemize} +\item +void \mbox{\hyperlink{interface__resp_8h_af518981f5e0d4575a6b7bae3f22e9985}{affich\+Articles}} (int t\+Ref\mbox{[}$\,$\mbox{]}, float t\+Poids\mbox{[}$\,$\mbox{]}, float t\+Vol\mbox{[}$\,$\mbox{]}, float t\+Prix\mbox{[}$\,$\mbox{]}, int t\+Logique) +\begin{DoxyCompactList}\small\item\em Affiche la liste des articles. \end{DoxyCompactList}\item +void \mbox{\hyperlink{interface__resp_8h_a5e9ce25cbd73f9d4732b84eb5ab59d13}{affich\+Un\+Article}} (int t\+Ref\mbox{[}$\,$\mbox{]}, float t\+Poids\mbox{[}$\,$\mbox{]}, float t\+Vol\mbox{[}$\,$\mbox{]}, float t\+Prix\mbox{[}$\,$\mbox{]}, int t\+Logique) +\begin{DoxyCompactList}\small\item\em Affiche les informations d\textquotesingle{}un article spécifique. \end{DoxyCompactList}\item +void \mbox{\hyperlink{interface__resp_8h_aa29059c1470e490b32fdf483b5570c88}{affich\+Un\+Client}} (int t\+Num\+Client\mbox{[}$\,$\mbox{]}, float t\+Cagnotte\mbox{[}$\,$\mbox{]}, int t\+Sus\mbox{[}$\,$\mbox{]}, int t\+Logique) +\begin{DoxyCompactList}\small\item\em Affiche les informations d\textquotesingle{}un client spécifique. \end{DoxyCompactList}\item +void \mbox{\hyperlink{interface__resp_8h_a7c0531c63ea490d0b674960483e9ba27}{affich\+Clients}} (int t\+Num\+Client\mbox{[}$\,$\mbox{]}, float t\+Cagnotte\mbox{[}$\,$\mbox{]}, int t\+Sus\mbox{[}$\,$\mbox{]}, int t\+Logique) +\begin{DoxyCompactList}\small\item\em Affiche la liste des clients. \end{DoxyCompactList}\item +void \mbox{\hyperlink{interface__resp_8h_a9e01225a96daa69eb466e03fd1108c0a}{affich\+Ajout\+Article}} (int \texorpdfstring{$\ast$}{*}ref, float \texorpdfstring{$\ast$}{*}poids, float \texorpdfstring{$\ast$}{*}volume, float \texorpdfstring{$\ast$}{*}prix) +\begin{DoxyCompactList}\small\item\em Affiche les informations nécessaires pour ajouter un nouvel article. \end{DoxyCompactList}\item +void \mbox{\hyperlink{interface__resp_8h_a47ca5882a75fd3b919ba02b028582473}{affich\+Supprimer\+Article}} (int \texorpdfstring{$\ast$}{*}ref) +\begin{DoxyCompactList}\small\item\em Affiche les informations nécessaires pour supprimer un article. \end{DoxyCompactList}\item +void \mbox{\hyperlink{interface__resp_8h_af075e50ffce501b901ff31b1fb73262f}{affich\+Modifier\+Article}} (int \texorpdfstring{$\ast$}{*}ref, float \texorpdfstring{$\ast$}{*}poids, float \texorpdfstring{$\ast$}{*}volume, float \texorpdfstring{$\ast$}{*}prix) +\begin{DoxyCompactList}\small\item\em Affiche les informations nécessaires pour modifier un article. \end{DoxyCompactList}\item +\Hypertarget{interface__resp_8h_a80d8c0f53cf692db395b729a229f2df8}\label{interface__resp_8h_a80d8c0f53cf692db395b729a229f2df8} +void {\bfseries problem\+Recherche\+Article} () +\begin{DoxyCompactList}\small\item\em Affiche un message en cas de problème lors de la recherche d\textquotesingle{}un article. \end{DoxyCompactList}\item +void \mbox{\hyperlink{interface__resp_8h_a964d2d2bc5b9aa544e6187ed6cbc961c}{affich\+Ajout\+Client}} (int t\+Num\+Client\mbox{[}$\,$\mbox{]}, int t\+Logique, int \texorpdfstring{$\ast$}{*}numC) +\begin{DoxyCompactList}\small\item\em Affiche les informations nécessaires pour ajouter un nouveau client. \end{DoxyCompactList}\item +void \mbox{\hyperlink{interface__resp_8h_a1f14dc8f23be75e1a5c0e7ce0c77f597}{menu\+\_\+resp}} (int \texorpdfstring{$\ast$}{*}choix) +\begin{DoxyCompactList}\small\item\em Laisse le responsable choisir une option du menu. \end{DoxyCompactList}\item +void \mbox{\hyperlink{interface__resp_8h_a421ebe0511c91fb6431aed873aa01e35}{global\+\_\+resp}} () +\begin{DoxyCompactList}\small\item\em Fonction principale de l\textquotesingle{}interface du responsable. \end{DoxyCompactList}\item +\Hypertarget{interface__resp_8h_a333cea7df6b2de2a16440aaf53d63af4}\label{interface__resp_8h_a333cea7df6b2de2a16440aaf53d63af4} +void {\bfseries affiche\+\_\+resp} () +\begin{DoxyCompactList}\small\item\em Affiche le menu principal de l\textquotesingle{}interface du responsable. \end{DoxyCompactList}\end{DoxyCompactItemize} + + +\doxysubsection{Detailed Description} +En-\/tête des fonctions liées à l\textquotesingle{}interface du responsable. + + + +\doxysubsection{Function Documentation} +\Hypertarget{interface__resp_8h_a9e01225a96daa69eb466e03fd1108c0a}\label{interface__resp_8h_a9e01225a96daa69eb466e03fd1108c0a} +\index{interface\_resp.h@{interface\_resp.h}!affichAjoutArticle@{affichAjoutArticle}} +\index{affichAjoutArticle@{affichAjoutArticle}!interface\_resp.h@{interface\_resp.h}} +\doxysubsubsection{\texorpdfstring{affichAjoutArticle()}{affichAjoutArticle()}} +{\footnotesize\ttfamily void affich\+Ajout\+Article (\begin{DoxyParamCaption}\item[{int \texorpdfstring{$\ast$}{*}}]{ref, }\item[{float \texorpdfstring{$\ast$}{*}}]{poids, }\item[{float \texorpdfstring{$\ast$}{*}}]{volume, }\item[{float \texorpdfstring{$\ast$}{*}}]{prix }\end{DoxyParamCaption})} + + + +Affiche les informations nécessaires pour ajouter un nouvel article. + + +\begin{DoxyParams}{Parameters} +{\em ref} & -\/ Référence du nouvel article. \\ +\hline +{\em poids} & -\/ Poids du nouvel article. \\ +\hline +{\em volume} & -\/ Volume du nouvel article. \\ +\hline +{\em prix} & -\/ Prix du nouvel article.\\ +\hline +\end{DoxyParams} +Affiche les informations nécessaires pour ajouter un nouvel article. + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in,out}} & {\em ref} & -\/ Référence du nouvel article. \\ +\hline +\mbox{\texttt{ in,out}} & {\em poids} & -\/ Poids du nouvel article. \\ +\hline +\mbox{\texttt{ in,out}} & {\em volume} & -\/ Volume du nouvel article. \\ +\hline +\mbox{\texttt{ in,out}} & {\em prix} & -\/ Prix du nouvel article. \\ +\hline +\end{DoxyParams} +\Hypertarget{interface__resp_8h_a964d2d2bc5b9aa544e6187ed6cbc961c}\label{interface__resp_8h_a964d2d2bc5b9aa544e6187ed6cbc961c} +\index{interface\_resp.h@{interface\_resp.h}!affichAjoutClient@{affichAjoutClient}} +\index{affichAjoutClient@{affichAjoutClient}!interface\_resp.h@{interface\_resp.h}} +\doxysubsubsection{\texorpdfstring{affichAjoutClient()}{affichAjoutClient()}} +{\footnotesize\ttfamily void affich\+Ajout\+Client (\begin{DoxyParamCaption}\item[{int}]{t\+Num\+Client\mbox{[}$\,$\mbox{]}, }\item[{int}]{t\+Logique, }\item[{int \texorpdfstring{$\ast$}{*}}]{numC }\end{DoxyParamCaption})} + + + +Affiche les informations nécessaires pour ajouter un nouveau client. + + +\begin{DoxyParams}{Parameters} +{\em t\+Num\+Client} & -\/ Tableau des numéros de clients. \\ +\hline +{\em t\+Logique} & -\/ Nombre de clients actuellement enregistrés. \\ +\hline +{\em numC} & -\/ Numéro du nouveau client.\\ +\hline +\end{DoxyParams} +Affiche les informations nécessaires pour ajouter un nouveau client. + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in}} & {\em t\+Num\+Client} & -\/ Tableau des numéros de client. \\ +\hline +\mbox{\texttt{ in}} & {\em t\+Logique} & -\/ Taille logique des tableaux. \\ +\hline +\mbox{\texttt{ in,out}} & {\em numC} & -\/ Numéro du nouveau client. \\ +\hline +\end{DoxyParams} +\Hypertarget{interface__resp_8h_af518981f5e0d4575a6b7bae3f22e9985}\label{interface__resp_8h_af518981f5e0d4575a6b7bae3f22e9985} +\index{interface\_resp.h@{interface\_resp.h}!affichArticles@{affichArticles}} +\index{affichArticles@{affichArticles}!interface\_resp.h@{interface\_resp.h}} +\doxysubsubsection{\texorpdfstring{affichArticles()}{affichArticles()}} +{\footnotesize\ttfamily void affich\+Articles (\begin{DoxyParamCaption}\item[{int}]{t\+Ref\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Poids\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Vol\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Prix\mbox{[}$\,$\mbox{]}, }\item[{int}]{t\+Logique }\end{DoxyParamCaption})} + + + +Affiche la liste des articles. + + +\begin{DoxyParams}{Parameters} +{\em t\+Ref} & -\/ Tableau des références des articles. \\ +\hline +{\em t\+Poids} & -\/ Tableau des poids des articles. \\ +\hline +{\em t\+Vol} & -\/ Tableau des volumes des articles. \\ +\hline +{\em t\+Prix} & -\/ Tableau des prix des articles. \\ +\hline +{\em t\+Logique} & -\/ Nombre d\textquotesingle{}articles actuellement enregistrés.\\ +\hline +{\em t\+Ref} & -\/ Tableau des références d\textquotesingle{}articles. \\ +\hline +{\em t\+Poids} & -\/ Tableau des poids d\textquotesingle{}articles. \\ +\hline +{\em t\+Vol} & -\/ Tableau des volumes d\textquotesingle{}articles. \\ +\hline +{\em t\+Prix} & -\/ Tableau des prix d\textquotesingle{}articles. \\ +\hline +{\em t\+Logique} & -\/ Taille logique des tableaux. \\ +\hline +\end{DoxyParams} +\Hypertarget{interface__resp_8h_a7c0531c63ea490d0b674960483e9ba27}\label{interface__resp_8h_a7c0531c63ea490d0b674960483e9ba27} +\index{interface\_resp.h@{interface\_resp.h}!affichClients@{affichClients}} +\index{affichClients@{affichClients}!interface\_resp.h@{interface\_resp.h}} +\doxysubsubsection{\texorpdfstring{affichClients()}{affichClients()}} +{\footnotesize\ttfamily void affich\+Clients (\begin{DoxyParamCaption}\item[{int}]{t\+Num\+Client\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Cagnotte\mbox{[}$\,$\mbox{]}, }\item[{int}]{t\+Sus\mbox{[}$\,$\mbox{]}, }\item[{int}]{t\+Logique }\end{DoxyParamCaption})} + + + +Affiche la liste des clients. + + +\begin{DoxyParams}{Parameters} +{\em t\+Num\+Client} & -\/ Tableau des numéros de clients. \\ +\hline +{\em t\+Cagnotte} & -\/ Tableau des cagnottes des clients. \\ +\hline +{\em t\+Sus} & -\/ Tableau des états de suspension des clients. \\ +\hline +{\em t\+Logique} & -\/ Nombre de clients actuellement enregistrés.\\ +\hline +{\em t\+Num\+Client} & -\/ Tableau des numéros de client. \\ +\hline +{\em t\+Cagnotte} & -\/ Tableau des cagnottes des clients. \\ +\hline +{\em t\+Sus} & -\/ Tableau d\textquotesingle{}états des clients. \\ +\hline +{\em t\+Logique} & -\/ Taille logique des tableaux. \\ +\hline +\end{DoxyParams} +\Hypertarget{interface__resp_8h_af075e50ffce501b901ff31b1fb73262f}\label{interface__resp_8h_af075e50ffce501b901ff31b1fb73262f} +\index{interface\_resp.h@{interface\_resp.h}!affichModifierArticle@{affichModifierArticle}} +\index{affichModifierArticle@{affichModifierArticle}!interface\_resp.h@{interface\_resp.h}} +\doxysubsubsection{\texorpdfstring{affichModifierArticle()}{affichModifierArticle()}} +{\footnotesize\ttfamily void affich\+Modifier\+Article (\begin{DoxyParamCaption}\item[{int \texorpdfstring{$\ast$}{*}}]{ref, }\item[{float \texorpdfstring{$\ast$}{*}}]{poids, }\item[{float \texorpdfstring{$\ast$}{*}}]{volume, }\item[{float \texorpdfstring{$\ast$}{*}}]{prix }\end{DoxyParamCaption})} + + + +Affiche les informations nécessaires pour modifier un article. + + +\begin{DoxyParams}{Parameters} +{\em ref} & -\/ Référence de l\textquotesingle{}article à modifier. \\ +\hline +{\em poids} & -\/ Nouveau poids de l\textquotesingle{}article. \\ +\hline +{\em volume} & -\/ Nouveau volume de l\textquotesingle{}article. \\ +\hline +{\em prix} & -\/ Nouveau prix de l\textquotesingle{}article.\\ +\hline +\end{DoxyParams} +Affiche les informations nécessaires pour modifier un article. + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in,out}} & {\em ref} & -\/ Référence de l\textquotesingle{}article à modifier. \\ +\hline +\mbox{\texttt{ in,out}} & {\em poids} & -\/ Nouveau poids de l\textquotesingle{}article. \\ +\hline +\mbox{\texttt{ in,out}} & {\em volume} & -\/ Nouveau volume de l\textquotesingle{}article. \\ +\hline +\mbox{\texttt{ in,out}} & {\em prix} & -\/ Nouveau prix de l\textquotesingle{}article. \\ +\hline +\end{DoxyParams} +\Hypertarget{interface__resp_8h_a47ca5882a75fd3b919ba02b028582473}\label{interface__resp_8h_a47ca5882a75fd3b919ba02b028582473} +\index{interface\_resp.h@{interface\_resp.h}!affichSupprimerArticle@{affichSupprimerArticle}} +\index{affichSupprimerArticle@{affichSupprimerArticle}!interface\_resp.h@{interface\_resp.h}} +\doxysubsubsection{\texorpdfstring{affichSupprimerArticle()}{affichSupprimerArticle()}} +{\footnotesize\ttfamily void affich\+Supprimer\+Article (\begin{DoxyParamCaption}\item[{int \texorpdfstring{$\ast$}{*}}]{ref }\end{DoxyParamCaption})} + + + +Affiche les informations nécessaires pour supprimer un article. + + +\begin{DoxyParams}{Parameters} +{\em ref} & -\/ Référence de l\textquotesingle{}article à supprimer.\\ +\hline +\end{DoxyParams} +Affiche les informations nécessaires pour supprimer un article. + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in,out}} & {\em ref} & -\/ Référence de l\textquotesingle{}article à supprimer. \\ +\hline +\end{DoxyParams} +\Hypertarget{interface__resp_8h_a5e9ce25cbd73f9d4732b84eb5ab59d13}\label{interface__resp_8h_a5e9ce25cbd73f9d4732b84eb5ab59d13} +\index{interface\_resp.h@{interface\_resp.h}!affichUnArticle@{affichUnArticle}} +\index{affichUnArticle@{affichUnArticle}!interface\_resp.h@{interface\_resp.h}} +\doxysubsubsection{\texorpdfstring{affichUnArticle()}{affichUnArticle()}} +{\footnotesize\ttfamily void affich\+Un\+Article (\begin{DoxyParamCaption}\item[{int}]{t\+Ref\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Poids\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Vol\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Prix\mbox{[}$\,$\mbox{]}, }\item[{int}]{t\+Logique }\end{DoxyParamCaption})} + + + +Affiche les informations d\textquotesingle{}un article spécifique. + + +\begin{DoxyParams}{Parameters} +{\em t\+Ref} & -\/ Tableau des références des articles. \\ +\hline +{\em t\+Poids} & -\/ Tableau des poids des articles. \\ +\hline +{\em t\+Vol} & -\/ Tableau des volumes des articles. \\ +\hline +{\em t\+Prix} & -\/ Tableau des prix des articles. \\ +\hline +{\em t\+Logique} & -\/ Nombre d\textquotesingle{}articles actuellement enregistrés.\\ +\hline +\end{DoxyParams} +Affiche les informations d\textquotesingle{}un article spécifique. + + +\begin{DoxyParams}{Parameters} +{\em t\+Ref} & -\/ Tableau des références d\textquotesingle{}articles. \\ +\hline +{\em t\+Poids} & -\/ Tableau des poids d\textquotesingle{}articles. \\ +\hline +{\em t\+Vol} & -\/ Tableau des volumes d\textquotesingle{}articles. \\ +\hline +{\em t\+Prix} & -\/ Tableau des prix d\textquotesingle{}articles. \\ +\hline +{\em t\+Logique} & -\/ Taille logique des tableaux. \\ +\hline +\end{DoxyParams} +\Hypertarget{interface__resp_8h_aa29059c1470e490b32fdf483b5570c88}\label{interface__resp_8h_aa29059c1470e490b32fdf483b5570c88} +\index{interface\_resp.h@{interface\_resp.h}!affichUnClient@{affichUnClient}} +\index{affichUnClient@{affichUnClient}!interface\_resp.h@{interface\_resp.h}} +\doxysubsubsection{\texorpdfstring{affichUnClient()}{affichUnClient()}} +{\footnotesize\ttfamily void affich\+Un\+Client (\begin{DoxyParamCaption}\item[{int}]{t\+Num\+Client\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Cagnotte\mbox{[}$\,$\mbox{]}, }\item[{int}]{t\+Sus\mbox{[}$\,$\mbox{]}, }\item[{int}]{t\+Logique }\end{DoxyParamCaption})} + + + +Affiche les informations d\textquotesingle{}un client spécifique. + + +\begin{DoxyParams}{Parameters} +{\em t\+Num\+Client} & -\/ Tableau des numéros de clients. \\ +\hline +{\em t\+Cagnotte} & -\/ Tableau des cagnottes des clients. \\ +\hline +{\em t\+Sus} & -\/ Tableau des états de suspension des clients. \\ +\hline +{\em t\+Logique} & -\/ Nombre de clients actuellement enregistrés.\\ +\hline +\end{DoxyParams} +Affiche les informations d\textquotesingle{}un client spécifique. + + +\begin{DoxyParams}{Parameters} +{\em t\+Num\+Client} & -\/ Tableau des numéros de client. \\ +\hline +{\em t\+Cagnotte} & -\/ Tableau des cagnottes des clients. \\ +\hline +{\em t\+Sus} & -\/ Tableau d\textquotesingle{}états des clients. \\ +\hline +{\em t\+Logique} & -\/ Taille logique des tableaux. \\ +\hline +\end{DoxyParams} +\Hypertarget{interface__resp_8h_a421ebe0511c91fb6431aed873aa01e35}\label{interface__resp_8h_a421ebe0511c91fb6431aed873aa01e35} +\index{interface\_resp.h@{interface\_resp.h}!global\_resp@{global\_resp}} +\index{global\_resp@{global\_resp}!interface\_resp.h@{interface\_resp.h}} +\doxysubsubsection{\texorpdfstring{global\_resp()}{global\_resp()}} +{\footnotesize\ttfamily void global\+\_\+resp (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})} + + + +Fonction principale de l\textquotesingle{}interface du responsable. + +Cette fonction permet au responsable d\textquotesingle{}effectuer diverses actions telles que la gestion des articles et des clients. \Hypertarget{interface__resp_8h_a1f14dc8f23be75e1a5c0e7ce0c77f597}\label{interface__resp_8h_a1f14dc8f23be75e1a5c0e7ce0c77f597} +\index{interface\_resp.h@{interface\_resp.h}!menu\_resp@{menu\_resp}} +\index{menu\_resp@{menu\_resp}!interface\_resp.h@{interface\_resp.h}} +\doxysubsubsection{\texorpdfstring{menu\_resp()}{menu\_resp()}} +{\footnotesize\ttfamily void menu\+\_\+resp (\begin{DoxyParamCaption}\item[{int \texorpdfstring{$\ast$}{*}}]{choix }\end{DoxyParamCaption})} + + + +Laisse le responsable choisir une option du menu. + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in,out}} & {\em choix} & -\/ L\textquotesingle{}option choisie par le responsable.\\ +\hline +\end{DoxyParams} +Laisse le responsable choisir une option du menu. + + +\begin{DoxyParams}[1]{Parameters} +\mbox{\texttt{ in,out}} & {\em choix} & -\/ L\textquotesingle{}option choisie par le responsable. \\ +\hline +\end{DoxyParams} diff --git a/docs/latex/interface__resp_8h_source.tex b/docs/latex/interface__resp_8h_source.tex new file mode 100644 index 0000000..2b0cd67 --- /dev/null +++ b/docs/latex/interface__resp_8h_source.tex @@ -0,0 +1,30 @@ +\doxysection{interface\+\_\+resp.\+h} +\hypertarget{interface__resp_8h_source}{}\label{interface__resp_8h_source}\index{src/app/interface/interface\_resp.h@{src/app/interface/interface\_resp.h}} +\mbox{\hyperlink{interface__resp_8h}{Go to the documentation of this file.}} +\begin{DoxyCode}{0} +\DoxyCodeLine{00001\ } +\DoxyCodeLine{00015\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{interface__resp_8h_af518981f5e0d4575a6b7bae3f22e9985}{affichArticles}}(\textcolor{keywordtype}{int}\ tRef[],\ \textcolor{keywordtype}{float}\ tPoids[],\ \textcolor{keywordtype}{float}\ tVol[],\ \textcolor{keywordtype}{float}\ tPrix[],\ \textcolor{keywordtype}{int}\ tLogique);} +\DoxyCodeLine{00016\ } +\DoxyCodeLine{00026\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{interface__resp_8h_a5e9ce25cbd73f9d4732b84eb5ab59d13}{affichUnArticle}}(\textcolor{keywordtype}{int}\ tRef[],\ \textcolor{keywordtype}{float}\ tPoids[],\ \textcolor{keywordtype}{float}\ tVol[],\ \textcolor{keywordtype}{float}\ tPrix[],\ \textcolor{keywordtype}{int}\ tLogique);} +\DoxyCodeLine{00027\ } +\DoxyCodeLine{00036\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{interface__resp_8h_aa29059c1470e490b32fdf483b5570c88}{affichUnClient}}(\textcolor{keywordtype}{int}\ tNumClient[],\ \textcolor{keywordtype}{float}\ tCagnotte[],\ \textcolor{keywordtype}{int}\ tSus[],\ \textcolor{keywordtype}{int}\ tLogique);} +\DoxyCodeLine{00037\ } +\DoxyCodeLine{00046\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{interface__resp_8h_a7c0531c63ea490d0b674960483e9ba27}{affichClients}}(\textcolor{keywordtype}{int}\ tNumClient[],\ \textcolor{keywordtype}{float}\ tCagnotte[],\ \textcolor{keywordtype}{int}\ tSus[],\ \textcolor{keywordtype}{int}\ tLogique);} +\DoxyCodeLine{00047\ } +\DoxyCodeLine{00056\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{interface__resp_8h_a9e01225a96daa69eb466e03fd1108c0a}{affichAjoutArticle}}(\textcolor{keywordtype}{int}\ *ref,\ \textcolor{keywordtype}{float}\ *poids,\ \textcolor{keywordtype}{float}\ *volume,\ \textcolor{keywordtype}{float}\ *prix);} +\DoxyCodeLine{00057\ } +\DoxyCodeLine{00063\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{interface__resp_8h_a47ca5882a75fd3b919ba02b028582473}{affichSupprimerArticle}}(\textcolor{keywordtype}{int}\ *ref);} +\DoxyCodeLine{00064\ } +\DoxyCodeLine{00073\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{interface__resp_8h_af075e50ffce501b901ff31b1fb73262f}{affichModifierArticle}}(\textcolor{keywordtype}{int}\ *ref,\ \textcolor{keywordtype}{float}\ *poids,\ \textcolor{keywordtype}{float}\ *volume,\ \textcolor{keywordtype}{float}\ *prix);} +\DoxyCodeLine{00074\ } +\DoxyCodeLine{00078\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{interface__resp_8h_a80d8c0f53cf692db395b729a229f2df8}{problemRechercheArticle}}();} +\DoxyCodeLine{00079\ } +\DoxyCodeLine{00087\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{interface__resp_8h_a964d2d2bc5b9aa544e6187ed6cbc961c}{affichAjoutClient}}(\textcolor{keywordtype}{int}\ tNumClient[],\ \textcolor{keywordtype}{int}\ tLogique,\ \textcolor{keywordtype}{int}\ *numC);} +\DoxyCodeLine{00088\ } +\DoxyCodeLine{00094\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{interface__resp_8h_a1f14dc8f23be75e1a5c0e7ce0c77f597}{menu\_resp}}(\textcolor{keywordtype}{int}\ *choix);} +\DoxyCodeLine{00095\ } +\DoxyCodeLine{00101\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{interface__resp_8h_a421ebe0511c91fb6431aed873aa01e35}{global\_resp}}();} +\DoxyCodeLine{00102\ } +\DoxyCodeLine{00106\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{interface__resp_8h_a333cea7df6b2de2a16440aaf53d63af4}{affiche\_resp}}();} + +\end{DoxyCode} diff --git a/docs/latex/longtable_doxygen.sty b/docs/latex/longtable_doxygen.sty new file mode 100644 index 0000000..e94b78b --- /dev/null +++ b/docs/latex/longtable_doxygen.sty @@ -0,0 +1,456 @@ +%% +%% This is file `longtable.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% longtable.dtx (with options: `package') +%% +%% This is a generated file. +%% +%% The source is maintained by the LaTeX Project team and bug +%% reports for it can be opened at http://latex-project.org/bugs.html +%% (but please observe conditions on bug reports sent to that address!) +%% +%% Copyright 1993-2016 +%% The LaTeX3 Project and any individual authors listed elsewhere +%% in this file. +%% +%% This file was generated from file(s) of the Standard LaTeX `Tools Bundle'. +%% -------------------------------------------------------------------------- +%% +%% It may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3c +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3c or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This file may only be distributed together with a copy of the LaTeX +%% `Tools Bundle'. You may however distribute the LaTeX `Tools Bundle' +%% without such generated files. +%% +%% The list of all files belonging to the LaTeX `Tools Bundle' is +%% given in the file `manifest.txt'. +%% +%% File: longtable.dtx Copyright (C) 1990-2001 David Carlisle +\NeedsTeXFormat{LaTeX2e}[1995/06/01] +\ProvidesPackage{longtable_doxygen} + [2014/10/28 v4.11 Multi-page Table package (DPC) - frozen version for doxygen] +\def\LT@err{\PackageError{longtable}} +\def\LT@warn{\PackageWarning{longtable}} +\def\LT@final@warn{% + \AtEndDocument{% + \LT@warn{Table \@width s have changed. Rerun LaTeX.\@gobbletwo}}% + \global\let\LT@final@warn\relax} +\DeclareOption{errorshow}{% + \def\LT@warn{\PackageInfo{longtable}}} +\DeclareOption{pausing}{% + \def\LT@warn#1{% + \LT@err{#1}{This is not really an error}}} +\DeclareOption{set}{} +\DeclareOption{final}{} +\ProcessOptions +\newskip\LTleft \LTleft=\fill +\newskip\LTright \LTright=\fill +\newskip\LTpre \LTpre=\bigskipamount +\newskip\LTpost \LTpost=\bigskipamount +\newcount\LTchunksize \LTchunksize=20 +\let\c@LTchunksize\LTchunksize +\newdimen\LTcapwidth \LTcapwidth=4in +\newbox\LT@head +\newbox\LT@firsthead +\newbox\LT@foot +\newbox\LT@lastfoot +\newcount\LT@cols +\newcount\LT@rows +\newcounter{LT@tables} +\newcounter{LT@chunks}[LT@tables] +\ifx\c@table\undefined + \newcounter{table} + \def\fnum@table{\tablename~\thetable} +\fi +\ifx\tablename\undefined + \def\tablename{Table} +\fi +\newtoks\LT@p@ftn +\mathchardef\LT@end@pen=30000 +\def\longtable{% + \par + \ifx\multicols\@undefined + \else + \ifnum\col@number>\@ne + \@twocolumntrue + \fi + \fi + \if@twocolumn + \LT@err{longtable not in 1-column mode}\@ehc + \fi + \begingroup + \@ifnextchar[\LT@array{\LT@array[x]}} +\def\LT@array[#1]#2{% + \refstepcounter{table}\stepcounter{LT@tables}% + \if l#1% + \LTleft\z@ \LTright\fill + \else\if r#1% + \LTleft\fill \LTright\z@ + \else\if c#1% + \LTleft\fill \LTright\fill + \fi\fi\fi + \let\LT@mcol\multicolumn + \let\LT@@tabarray\@tabarray + \let\LT@@hl\hline + \def\@tabarray{% + \let\hline\LT@@hl + \LT@@tabarray}% + \let\\\LT@tabularcr\let\tabularnewline\\% + \def\newpage{\noalign{\break}}% + \def\pagebreak{\noalign{\ifnum`}=0\fi\@testopt{\LT@no@pgbk-}4}% + \def\nopagebreak{\noalign{\ifnum`}=0\fi\@testopt\LT@no@pgbk4}% + \let\hline\LT@hline \let\kill\LT@kill\let\caption\LT@caption + \@tempdima\ht\strutbox + \let\@endpbox\LT@endpbox + \ifx\extrarowheight\@undefined + \let\@acol\@tabacol + \let\@classz\@tabclassz \let\@classiv\@tabclassiv + \def\@startpbox{\vtop\LT@startpbox}% + \let\@@startpbox\@startpbox + \let\@@endpbox\@endpbox + \let\LT@LL@FM@cr\@tabularcr + \else + \advance\@tempdima\extrarowheight + \col@sep\tabcolsep + \let\@startpbox\LT@startpbox\let\LT@LL@FM@cr\@arraycr + \fi + \setbox\@arstrutbox\hbox{\vrule + \@height \arraystretch \@tempdima + \@depth \arraystretch \dp \strutbox + \@width \z@}% + \let\@sharp##\let\protect\relax + \begingroup + \@mkpream{#2}% + \xdef\LT@bchunk{% + \global\advance\c@LT@chunks\@ne + \global\LT@rows\z@\setbox\z@\vbox\bgroup + \LT@setprevdepth + \tabskip\LTleft \noexpand\halign to\hsize\bgroup + \tabskip\z@ \@arstrut \@preamble \tabskip\LTright \cr}% + \endgroup + \expandafter\LT@nofcols\LT@bchunk&\LT@nofcols + \LT@make@row + \m@th\let\par\@empty + \everycr{}\lineskip\z@\baselineskip\z@ + \LT@bchunk} +\def\LT@no@pgbk#1[#2]{\penalty #1\@getpen{#2}\ifnum`{=0\fi}} +\def\LT@start{% + \let\LT@start\endgraf + \endgraf\penalty\z@\vskip\LTpre + \dimen@\pagetotal + \advance\dimen@ \ht\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi + \advance\dimen@ \dp\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi + \advance\dimen@ \ht\LT@foot + \dimen@ii\vfuzz + \vfuzz\maxdimen + \setbox\tw@\copy\z@ + \setbox\tw@\vsplit\tw@ to \ht\@arstrutbox + \setbox\tw@\vbox{\unvbox\tw@}% + \vfuzz\dimen@ii + \advance\dimen@ \ht + \ifdim\ht\@arstrutbox>\ht\tw@\@arstrutbox\else\tw@\fi + \advance\dimen@\dp + \ifdim\dp\@arstrutbox>\dp\tw@\@arstrutbox\else\tw@\fi + \advance\dimen@ -\pagegoal + \ifdim \dimen@>\z@\vfil\break\fi + \global\@colroom\@colht + \ifvoid\LT@foot\else + \advance\vsize-\ht\LT@foot + \global\advance\@colroom-\ht\LT@foot + \dimen@\pagegoal\advance\dimen@-\ht\LT@foot\pagegoal\dimen@ + \maxdepth\z@ + \fi + \ifvoid\LT@firsthead\copy\LT@head\else\box\LT@firsthead\fi\nobreak + \output{\LT@output}} +\def\endlongtable{% + \crcr + \noalign{% + \let\LT@entry\LT@entry@chop + \xdef\LT@save@row{\LT@save@row}}% + \LT@echunk + \LT@start + \unvbox\z@ + \LT@get@widths + \if@filesw + {\let\LT@entry\LT@entry@write\immediate\write\@auxout{% + \gdef\expandafter\noexpand + \csname LT@\romannumeral\c@LT@tables\endcsname + {\LT@save@row}}}% + \fi + \ifx\LT@save@row\LT@@save@row + \else + \LT@warn{Column \@width s have changed\MessageBreak + in table \thetable}% + \LT@final@warn + \fi + \endgraf\penalty -\LT@end@pen + \endgroup + \global\@mparbottom\z@ + \pagegoal\vsize + \endgraf\penalty\z@\addvspace\LTpost + \ifvoid\footins\else\insert\footins{}\fi} +\def\LT@nofcols#1&{% + \futurelet\@let@token\LT@n@fcols} +\def\LT@n@fcols{% + \advance\LT@cols\@ne + \ifx\@let@token\LT@nofcols + \expandafter\@gobble + \else + \expandafter\LT@nofcols + \fi} +\def\LT@tabularcr{% + \relax\iffalse{\fi\ifnum0=`}\fi + \@ifstar + {\def\crcr{\LT@crcr\noalign{\nobreak}}\let\cr\crcr + \LT@t@bularcr}% + {\LT@t@bularcr}} +\let\LT@crcr\crcr +\let\LT@setprevdepth\relax +\def\LT@t@bularcr{% + \global\advance\LT@rows\@ne + \ifnum\LT@rows=\LTchunksize + \gdef\LT@setprevdepth{% + \prevdepth\z@\global + \global\let\LT@setprevdepth\relax}% + \expandafter\LT@xtabularcr + \else + \ifnum0=`{}\fi + \expandafter\LT@LL@FM@cr + \fi} +\def\LT@xtabularcr{% + \@ifnextchar[\LT@argtabularcr\LT@ntabularcr} +\def\LT@ntabularcr{% + \ifnum0=`{}\fi + \LT@echunk + \LT@start + \unvbox\z@ + \LT@get@widths + \LT@bchunk} +\def\LT@argtabularcr[#1]{% + \ifnum0=`{}\fi + \ifdim #1>\z@ + \unskip\@xargarraycr{#1}% + \else + \@yargarraycr{#1}% + \fi + \LT@echunk + \LT@start + \unvbox\z@ + \LT@get@widths + \LT@bchunk} +\def\LT@echunk{% + \crcr\LT@save@row\cr\egroup + \global\setbox\@ne\lastbox + \unskip + \egroup} +\def\LT@entry#1#2{% + \ifhmode\@firstofone{&}\fi\omit + \ifnum#1=\c@LT@chunks + \else + \kern#2\relax + \fi} +\def\LT@entry@chop#1#2{% + \noexpand\LT@entry + {\ifnum#1>\c@LT@chunks + 1}{0pt% + \else + #1}{#2% + \fi}} +\def\LT@entry@write{% + \noexpand\LT@entry^^J% + \@spaces} +\def\LT@kill{% + \LT@echunk + \LT@get@widths + \expandafter\LT@rebox\LT@bchunk} +\def\LT@rebox#1\bgroup{% + #1\bgroup + \unvbox\z@ + \unskip + \setbox\z@\lastbox} +\def\LT@blank@row{% + \xdef\LT@save@row{\expandafter\LT@build@blank + \romannumeral\number\LT@cols 001 }} +\def\LT@build@blank#1{% + \if#1m% + \noexpand\LT@entry{1}{0pt}% + \expandafter\LT@build@blank + \fi} +\def\LT@make@row{% + \global\expandafter\let\expandafter\LT@save@row + \csname LT@\romannumeral\c@LT@tables\endcsname + \ifx\LT@save@row\relax + \LT@blank@row + \else + {\let\LT@entry\or + \if!% + \ifcase\expandafter\expandafter\expandafter\LT@cols + \expandafter\@gobble\LT@save@row + \or + \else + \relax + \fi + !% + \else + \aftergroup\LT@blank@row + \fi}% + \fi} +\let\setlongtables\relax +\def\LT@get@widths{% + \setbox\tw@\hbox{% + \unhbox\@ne + \let\LT@old@row\LT@save@row + \global\let\LT@save@row\@empty + \count@\LT@cols + \loop + \unskip + \setbox\tw@\lastbox + \ifhbox\tw@ + \LT@def@row + \advance\count@\m@ne + \repeat}% + \ifx\LT@@save@row\@undefined + \let\LT@@save@row\LT@save@row + \fi} +\def\LT@def@row{% + \let\LT@entry\or + \edef\@tempa{% + \ifcase\expandafter\count@\LT@old@row + \else + {1}{0pt}% + \fi}% + \let\LT@entry\relax + \xdef\LT@save@row{% + \LT@entry + \expandafter\LT@max@sel\@tempa + \LT@save@row}} +\def\LT@max@sel#1#2{% + {\ifdim#2=\wd\tw@ + #1% + \else + \number\c@LT@chunks + \fi}% + {\the\wd\tw@}} +\def\LT@hline{% + \noalign{\ifnum0=`}\fi + \penalty\@M + \futurelet\@let@token\LT@@hline} +\def\LT@@hline{% + \ifx\@let@token\hline + \global\let\@gtempa\@gobble + \gdef\LT@sep{\penalty-\@medpenalty\vskip\doublerulesep}% + \else + \global\let\@gtempa\@empty + \gdef\LT@sep{\penalty-\@lowpenalty\vskip-\arrayrulewidth}% + \fi + \ifnum0=`{\fi}% + \multispan\LT@cols + \unskip\leaders\hrule\@height\arrayrulewidth\hfill\cr + \noalign{\LT@sep}% + \multispan\LT@cols + \unskip\leaders\hrule\@height\arrayrulewidth\hfill\cr + \noalign{\penalty\@M}% + \@gtempa} +\def\LT@caption{% + \noalign\bgroup + \@ifnextchar[{\egroup\LT@c@ption\@firstofone}\LT@capti@n} +\def\LT@c@ption#1[#2]#3{% + \LT@makecaption#1\fnum@table{#3}% + \def\@tempa{#2}% + \ifx\@tempa\@empty\else + {\let\\\space + \addcontentsline{lot}{table}{\protect\numberline{\thetable}{#2}}}% + \fi} +\def\LT@capti@n{% + \@ifstar + {\egroup\LT@c@ption\@gobble[]}% + {\egroup\@xdblarg{\LT@c@ption\@firstofone}}} +\def\LT@makecaption#1#2#3{% + \LT@mcol\LT@cols c{\hbox to\z@{\hss\parbox[t]\LTcapwidth{% + \sbox\@tempboxa{#1{#2: }#3}% + \ifdim\wd\@tempboxa>\hsize + #1{#2: }#3% + \else + \hbox to\hsize{\hfil\box\@tempboxa\hfil}% + \fi + \endgraf\vskip\baselineskip}% + \hss}}} +\def\LT@output{% + \ifnum\outputpenalty <-\@Mi + \ifnum\outputpenalty > -\LT@end@pen + \LT@err{floats and marginpars not allowed in a longtable}\@ehc + \else + \setbox\z@\vbox{\unvbox\@cclv}% + \ifdim \ht\LT@lastfoot>\ht\LT@foot + \dimen@\pagegoal + \advance\dimen@-\ht\LT@lastfoot + \ifdim\dimen@<\ht\z@ + \setbox\@cclv\vbox{\unvbox\z@\copy\LT@foot\vss}% + \@makecol + \@outputpage + \setbox\z@\vbox{\box\LT@head}% + \fi + \fi + \global\@colroom\@colht + \global\vsize\@colht + \vbox + {\unvbox\z@\box\ifvoid\LT@lastfoot\LT@foot\else\LT@lastfoot\fi}% + \fi + \else + \setbox\@cclv\vbox{\unvbox\@cclv\copy\LT@foot\vss}% + \@makecol + \@outputpage + \global\vsize\@colroom + \copy\LT@head\nobreak + \fi} +\def\LT@end@hd@ft#1{% + \LT@echunk + \ifx\LT@start\endgraf + \LT@err + {Longtable head or foot not at start of table}% + {Increase LTchunksize}% + \fi + \setbox#1\box\z@ + \LT@get@widths + \LT@bchunk} +\def\endfirsthead{\LT@end@hd@ft\LT@firsthead} +\def\endhead{\LT@end@hd@ft\LT@head} +\def\endfoot{\LT@end@hd@ft\LT@foot} +\def\endlastfoot{\LT@end@hd@ft\LT@lastfoot} +\def\LT@startpbox#1{% + \bgroup + \let\@footnotetext\LT@p@ftntext + \setlength\hsize{#1}% + \@arrayparboxrestore + \vrule \@height \ht\@arstrutbox \@width \z@} +\def\LT@endpbox{% + \@finalstrut\@arstrutbox + \egroup + \the\LT@p@ftn + \global\LT@p@ftn{}% + \hfil} +%% added \long to prevent: +% LaTeX Warning: Command \LT@p@ftntext has changed. +% +% from the original repository (https://github.com/latex3/latex2e/blob/develop/required/tools/longtable.dtx): +% \changes{v4.15}{2021/03/28} +% {make long for gh/364} +% Inside the `p' column, just save up the footnote text in a token +% register. +\long\def\LT@p@ftntext#1{% + \edef\@tempa{\the\LT@p@ftn\noexpand\footnotetext[\the\c@footnote]}% + \global\LT@p@ftn\expandafter{\@tempa{#1}}}% + +\@namedef{ver@longtable.sty}{2014/10/28 v4.11 Multi-page Table package (DPC) - frozen version for doxygen} +\endinput +%% +%% End of file `longtable.sty'. diff --git a/docs/latex/main_8c.tex b/docs/latex/main_8c.tex new file mode 100644 index 0000000..b162cdf --- /dev/null +++ b/docs/latex/main_8c.tex @@ -0,0 +1,58 @@ +\doxysection{src/main.c File Reference} +\hypertarget{main_8c}{}\label{main_8c}\index{src/main.c@{src/main.c}} + + +Programme principal pour choisir une interface et lancer l\textquotesingle{}application. + + +{\ttfamily \#include $<$stdio.\+h$>$}\newline +{\ttfamily \#include $<$stdlib.\+h$>$}\newline +{\ttfamily \#include "{}app/interface/interface\+\_\+client.\+h"{}}\newline +{\ttfamily \#include "{}app/interface/interface\+\_\+resp.\+h"{}}\newline +{\ttfamily \#include "{}app/core\+\_\+logic/client.\+h"{}}\newline +{\ttfamily \#include "{}app/core\+\_\+logic/responsable.\+h"{}}\newline +\doxysubsubsection*{Functions} +\begin{DoxyCompactItemize} +\item +int \mbox{\hyperlink{main_8c_a5fdac9110609b2cc4b43c68b643af452}{choix\+Interface}} (void) +\begin{DoxyCompactList}\small\item\em Fonction permettant à l\textquotesingle{}utilisateur de choisir une interface. \end{DoxyCompactList}\item +int \mbox{\hyperlink{main_8c_ae66f6b31b5ad750f1fe042a706a4e3d4}{main}} () +\begin{DoxyCompactList}\small\item\em Fonction principale du programme. \end{DoxyCompactList}\end{DoxyCompactItemize} + + +\doxysubsection{Detailed Description} +Programme principal pour choisir une interface et lancer l\textquotesingle{}application. + + + +\doxysubsection{Function Documentation} +\Hypertarget{main_8c_a5fdac9110609b2cc4b43c68b643af452}\label{main_8c_a5fdac9110609b2cc4b43c68b643af452} +\index{main.c@{main.c}!choixInterface@{choixInterface}} +\index{choixInterface@{choixInterface}!main.c@{main.c}} +\doxysubsubsection{\texorpdfstring{choixInterface()}{choixInterface()}} +{\footnotesize\ttfamily int choix\+Interface (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})} + + + +Fonction permettant à l\textquotesingle{}utilisateur de choisir une interface. + +L\textquotesingle{}utilisateur peut choisir entre l\textquotesingle{}interface "{}responsable"{} ou "{}client"{} en saisissant 1 ou 2. Cette fonction vérifie que l\textquotesingle{}entrée de l\textquotesingle{}utilisateur est valide. + +\begin{DoxyReturn}{Returns} +Le choix de l\textquotesingle{}interface (1 pour responsable, 2 pour client). +\end{DoxyReturn} +\Hypertarget{main_8c_ae66f6b31b5ad750f1fe042a706a4e3d4}\label{main_8c_ae66f6b31b5ad750f1fe042a706a4e3d4} +\index{main.c@{main.c}!main@{main}} +\index{main@{main}!main.c@{main.c}} +\doxysubsubsection{\texorpdfstring{main()}{main()}} +{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})} + + + +Fonction principale du programme. + +Cette fonction permet à l\textquotesingle{}utilisateur de choisir une interface à lancer (responsable ou client) en utilisant la fonction \doxylink{main_8c_a5fdac9110609b2cc4b43c68b643af452}{choix\+Interface()}, puis elle lance l\textquotesingle{}interface correspondante. + +\begin{DoxyReturn}{Returns} +0 si le programme s\textquotesingle{}est exécuté avec succès. +\end{DoxyReturn} diff --git a/docs/latex/refman.tex b/docs/latex/refman.tex new file mode 100644 index 0000000..3c42a89 --- /dev/null +++ b/docs/latex/refman.tex @@ -0,0 +1,234 @@ + % Handle batch mode + % to overcome problems with too many open files + \let\mypdfximage\pdfximage\def\pdfximage{\immediate\mypdfximage} + \pdfminorversion=7 + % Set document class depending on configuration + \documentclass[twoside]{book} + %% moved from doxygen.sty due to workaround for LaTex 2019 version and unmaintained tabu package + \usepackage{ifthen} + \ifx\requestedLaTeXdate\undefined + \usepackage{array} + \else + \usepackage{array}[=2016-10-06] + \fi + %% + % Packages required by doxygen + \makeatletter + \providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion} + % suppress package identification of infwarerr as it contains the word "warning" + \let\@@protected@wlog\protected@wlog + \def\protected@wlog#1{\wlog{package info suppressed}} + \RequirePackage{infwarerr} + \let\protected@wlog\@@protected@wlog + \makeatother + \IfFormatAtLeastTF{2016/01/01}{}{\usepackage{fixltx2e}} % for \textsubscript + \IfFormatAtLeastTF{2015/01/01}{\pdfsuppresswarningpagegroup=1}{} + \usepackage{doxygen} + \usepackage{graphicx} + \usepackage[utf8]{inputenc} + \usepackage{makeidx} + \PassOptionsToPackage{warn}{textcomp} + \usepackage{textcomp} + \usepackage[nointegrals]{wasysym} + \usepackage{ifxetex} + % NLS support packages + % Define default fonts + % Font selection + \usepackage[T1]{fontenc} + % set main and monospaced font + \usepackage[scaled=.90]{helvet} +\usepackage{courier} +\renewcommand{\familydefault}{\sfdefault} + \doxyallsectionsfont{% + \fontseries{bc}\selectfont% + \color{darkgray}% + } + \renewcommand{\DoxyLabelFont}{% + \fontseries{bc}\selectfont% + \color{darkgray}% + } + \newcommand{\+}{\discretionary{\mbox{\scriptsize$\hookleftarrow$}}{}{}} + % Arguments of doxygenemoji: + % 1) '::' form of the emoji, already LaTeX-escaped + % 2) file with the name of the emoji without the .png extension + % in case image exist use this otherwise use the '::' form + \newcommand{\doxygenemoji}[2]{% + \IfFileExists{./#2.png}{\raisebox{-0.1em}{\includegraphics[height=0.9em]{./#2.png}}}{#1}% + } + % Page & text layout + \usepackage{geometry} + \geometry{% + a4paper,% + top=2.5cm,% + bottom=2.5cm,% + left=2.5cm,% + right=2.5cm% + } + \usepackage{changepage} + % Allow a bit of overflow to go unnoticed by other means + \tolerance=750 + \hfuzz=15pt + \hbadness=750 + \setlength{\emergencystretch}{15pt} + \setlength{\parindent}{0cm} + \newcommand{\doxynormalparskip}{\setlength{\parskip}{3ex plus 2ex minus 2ex}} + \newcommand{\doxytocparskip}{\setlength{\parskip}{1ex plus 0ex minus 0ex}} + \doxynormalparskip + % Redefine paragraph/subparagraph environments, using sectsty fonts + \makeatletter + \renewcommand{\paragraph}{% + \@startsection{paragraph}{4}{0ex}{-1.0ex}{1.0ex}{% + \normalfont\normalsize\bfseries\SS@parafont% + }% + } + \renewcommand{\subparagraph}{% + \@startsection{subparagraph}{5}{0ex}{-1.0ex}{1.0ex}{% + \normalfont\normalsize\bfseries\SS@subparafont% + }% + } + \makeatother + \makeatletter + \newcommand\hrulefilll{\leavevmode\leaders\hrule\hskip 0pt plus 1filll\kern\z@} + \makeatother + % Headers & footers + \usepackage{fancyhdr} + \pagestyle{fancyplain} + \renewcommand{\footrulewidth}{0.4pt} + \fancypagestyle{fancyplain}{ + \fancyhf{} + \fancyhead[LE, RO]{\bfseries\thepage} + \fancyhead[LO]{\bfseries\rightmark} + \fancyhead[RE]{\bfseries\leftmark} + \fancyfoot[LO, RE]{\bfseries\scriptsize Generated by Doxygen } + } + \fancypagestyle{plain}{ + \fancyhf{} + \fancyfoot[LO, RE]{\bfseries\scriptsize Generated by Doxygen } + \renewcommand{\headrulewidth}{0pt} + } + \pagestyle{fancyplain} + \renewcommand{\chaptermark}[1]{% + \markboth{#1}{}% + } + \renewcommand{\sectionmark}[1]{% + \markright{\thesection\ #1}% + } + % ToC, LoF, LoT, bibliography, and index + % Indices & bibliography + \usepackage{natbib} + \usepackage[titles]{tocloft} + \setcounter{tocdepth}{3} + \setcounter{secnumdepth}{5} + % creating indexes + \makeindex + \usepackage{newunicodechar} + \makeatletter + \def\doxynewunicodechar#1#2{% + \@tempswafalse + \edef\nuc@tempa{\detokenize{#1}}% + \if\relax\nuc@tempa\relax + \nuc@emptyargerr + \else + \edef\@tempb{\expandafter\@car\nuc@tempa\@nil}% + \nuc@check + \if@tempswa + \@namedef{u8:\nuc@tempa}{#2}% + \fi + \fi + } + \makeatother + \doxynewunicodechar{⁻}{${}^{-}$}% Superscript minus + \doxynewunicodechar{²}{${}^{2}$}% Superscript two + \doxynewunicodechar{³}{${}^{3}$}% Superscript three + % Hyperlinks + % Hyperlinks (required, but should be loaded last) + \ifpdf + \usepackage[pdftex,pagebackref=true]{hyperref} + \else + \ifxetex + \usepackage[pagebackref=true]{hyperref} + \else + \usepackage[ps2pdf,pagebackref=true]{hyperref} + \fi + \fi + \hypersetup{% + colorlinks=true,% + linkcolor=blue,% + citecolor=blue,% + unicode,% + pdftitle={My Project},% + pdfsubject={}% + } + % Custom commands used by the header + % Custom commands + \newcommand{\clearemptydoublepage}{% + \newpage{\pagestyle{empty}\cleardoublepage}% + } + % caption style definition + \usepackage{caption} + \captionsetup{labelsep=space,justification=centering,font={bf},singlelinecheck=off,skip=4pt,position=top} + % in page table of contents + \IfFormatAtLeastTF{2023/05/01}{\usepackage[deeplevels]{etoc}}{\usepackage[deeplevels]{etoc_doxygen}} + \etocsettocstyle{\doxytocparskip}{\doxynormalparskip} + \etocsetlevel{subsubsubsection}{4} + \etocsetlevel{subsubsubsubsection}{5} + \etocsetlevel{subsubsubsubsubsection}{6} + \etocsetlevel{subsubsubsubsubsubsection}{7} + \etocsetlevel{paragraph}{8} + \etocsetlevel{subparagraph}{9} + % prevent numbers overlap the titles in toc + \renewcommand{\numberline}[1]{#1~} +% End of preamble, now comes the document contents +%===== C O N T E N T S ===== +\begin{document} + \raggedbottom + % Titlepage & ToC + % To avoid duplicate page anchors due to reuse of same numbers for + % the index (be it as roman numbers) + \hypersetup{pageanchor=false, + bookmarksnumbered=true, + pdfencoding=unicode + } + \pagenumbering{alph} + \begin{titlepage} + \vspace*{7cm} + \begin{center}% + {\Large My Project}\\ + \vspace*{1cm} + {\large Generated by Doxygen 1.9.8}\\ + \end{center} + \end{titlepage} + \clearemptydoublepage + \pagenumbering{roman} + \tableofcontents + \clearemptydoublepage + \pagenumbering{arabic} + % re-enable anchors again + \hypersetup{pageanchor=true} +%--- Begin generated contents --- +\chapter{File Index} +\input{files} +\chapter{File Documentation} +\input{client_8c} +\input{client_8h} +\input{client_8h_source} +\input{responsable_8c} +\input{responsable_8h} +\input{responsable_8h_source} +\input{interface__client_8c} +\input{interface__client_8h} +\input{interface__client_8h_source} +\input{interface__resp_8c} +\input{interface__resp_8h} +\input{interface__resp_8h_source} +\input{main_8c} +%--- End generated contents --- +% Index + \backmatter + \newpage + \phantomsection + \clearemptydoublepage + \addcontentsline{toc}{chapter}{\indexname} + \printindex +% Required for some languages (in combination with latexdocumentpre from the header) +\end{document} diff --git a/docs/latex/responsable_8c.tex b/docs/latex/responsable_8c.tex new file mode 100644 index 0000000..706bc51 --- /dev/null +++ b/docs/latex/responsable_8c.tex @@ -0,0 +1,225 @@ +\doxysection{src/app/core\+\_\+logic/responsable.c File Reference} +\hypertarget{responsable_8c}{}\label{responsable_8c}\index{src/app/core\_logic/responsable.c@{src/app/core\_logic/responsable.c}} + + +Définition des fonctions de \doxylink{responsable_8c}{responsable.\+c}. + + +{\ttfamily \#include $<$stdio.\+h$>$}\newline +{\ttfamily \#include $<$stdlib.\+h$>$}\newline +{\ttfamily \#include "{}responsable.\+h"{}}\newline +{\ttfamily \#include "{}../interface/interface\+\_\+resp.\+h"{}}\newline +\doxysubsubsection*{Functions} +\begin{DoxyCompactItemize} +\item +int \mbox{\hyperlink{responsable_8c_a937ddfa15445cc5d2336130fb6567ce1}{chargement\+Articles}} (int t\+Ref\mbox{[}$\,$\mbox{]}, float t\+Poids\mbox{[}$\,$\mbox{]}, float t\+Vol\mbox{[}$\,$\mbox{]}, float t\+Prix\mbox{[}$\,$\mbox{]}, int t\+Physique) +\begin{DoxyCompactList}\small\item\em Charge les informations des articles à partir d\textquotesingle{}un fichier dans des tableaux. \end{DoxyCompactList}\item +void \mbox{\hyperlink{responsable_8c_ac9e79c89d04823f4b1b5572c9865e57d}{sauvegard\+Articles}} (int t\+Ref\mbox{[}$\,$\mbox{]}, float t\+Poids\mbox{[}$\,$\mbox{]}, float t\+Vol\mbox{[}$\,$\mbox{]}, float t\+Prix\mbox{[}$\,$\mbox{]}, int t\+Logique) +\begin{DoxyCompactList}\small\item\em Sauvegarde les informations des articles dans un fichier. \end{DoxyCompactList}\item +int \mbox{\hyperlink{responsable_8c_abce68a203cf18b85ebdad34e468815f0}{ajouter\+Article}} (int t\+Ref\mbox{[}$\,$\mbox{]}, float t\+Poids\mbox{[}$\,$\mbox{]}, float t\+Vol\mbox{[}$\,$\mbox{]}, float t\+Prix\mbox{[}$\,$\mbox{]}, int \texorpdfstring{$\ast$}{*}t\+Logique, int t\+Physique, int ref, float poids, float volume, float prix) +\begin{DoxyCompactList}\small\item\em Ajoute un nouvel article aux tableaux d\textquotesingle{}articles. \end{DoxyCompactList}\item +void \mbox{\hyperlink{responsable_8c_a33f342ec6aaff14efce87b42350d9bee}{recherche\+Ref\+Article}} (int t\+Ref\mbox{[}$\,$\mbox{]}, int ref, int \texorpdfstring{$\ast$}{*}index, int t\+Logique) +\begin{DoxyCompactList}\small\item\em Recherche une référence d\textquotesingle{}article dans le tableau t\+Ref. \end{DoxyCompactList}\item +void \mbox{\hyperlink{responsable_8c_a0f8076a332f73d1edca58cfaeb42167e}{supprimer\+Article}} (int t\+Ref\mbox{[}$\,$\mbox{]}, float t\+Poids\mbox{[}$\,$\mbox{]}, float t\+Vol\mbox{[}$\,$\mbox{]}, float t\+Prix\mbox{[}$\,$\mbox{]}, int \texorpdfstring{$\ast$}{*}t\+Logique) +\begin{DoxyCompactList}\small\item\em Supprime un article des tableaux d\textquotesingle{}articles. \end{DoxyCompactList}\item +void \mbox{\hyperlink{responsable_8c_ab02f9ff38b359630bc980bae859f7512}{modifier\+Article}} (int t\+Ref\mbox{[}$\,$\mbox{]}, float t\+Poids\mbox{[}$\,$\mbox{]}, float t\+Vol\mbox{[}$\,$\mbox{]}, float t\+Prix\mbox{[}$\,$\mbox{]}, int t\+Logique) +\begin{DoxyCompactList}\small\item\em Modifie les informations d\textquotesingle{}un article existant. \end{DoxyCompactList}\item +void \mbox{\hyperlink{responsable_8c_a185476dbf2dae604d3deb6a3085580a2}{ajouter\+Client}} (int t\+Num\+Client\mbox{[}$\,$\mbox{]}, float t\+Cagnotte\mbox{[}$\,$\mbox{]}, int t\+Sus\mbox{[}$\,$\mbox{]}, int \texorpdfstring{$\ast$}{*}t\+Logique, int t\+Physique) +\begin{DoxyCompactList}\small\item\em Ajoute un nouveau client aux tableaux de clients. \end{DoxyCompactList}\end{DoxyCompactItemize} + + +\doxysubsection{Detailed Description} +Définition des fonctions de \doxylink{responsable_8c}{responsable.\+c}. + + + +\doxysubsection{Function Documentation} +\Hypertarget{responsable_8c_abce68a203cf18b85ebdad34e468815f0}\label{responsable_8c_abce68a203cf18b85ebdad34e468815f0} +\index{responsable.c@{responsable.c}!ajouterArticle@{ajouterArticle}} +\index{ajouterArticle@{ajouterArticle}!responsable.c@{responsable.c}} +\doxysubsubsection{\texorpdfstring{ajouterArticle()}{ajouterArticle()}} +{\footnotesize\ttfamily int ajouter\+Article (\begin{DoxyParamCaption}\item[{int}]{t\+Ref\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Poids\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Vol\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Prix\mbox{[}$\,$\mbox{]}, }\item[{int \texorpdfstring{$\ast$}{*}}]{t\+Logique, }\item[{int}]{t\+Physique, }\item[{int}]{ref, }\item[{float}]{poids, }\item[{float}]{volume, }\item[{float}]{prix }\end{DoxyParamCaption})} + + + +Ajoute un nouvel article aux tableaux d\textquotesingle{}articles. + +Cette fonction ajoute un nouvel article aux tableaux t\+Ref, t\+Poids, t\+Vol, et t\+Prix et incrémente la taille logique. + + +\begin{DoxyParams}{Parameters} +{\em t\+Ref} & Tableau des références d\textquotesingle{}articles. \\ +\hline +{\em t\+Poids} & Tableau des poids des articles. \\ +\hline +{\em t\+Vol} & Tableau des volumes des articles. \\ +\hline +{\em t\+Prix} & Tableau des prix unitaires des articles. \\ +\hline +{\em t\+Logique} & Taille logique des tableaux. \\ +\hline +{\em t\+Physique} & Taille physique des tableaux. \\ +\hline +{\em ref} & Référence du nouvel article. \\ +\hline +{\em poids} & Poids du nouvel article. \\ +\hline +{\em volume} & Volume du nouvel article. \\ +\hline +{\em prix} & Prix unitaire du nouvel article. \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +0 en cas de succès, -\/2 si le tableau est plein. +\end{DoxyReturn} +\Hypertarget{responsable_8c_a185476dbf2dae604d3deb6a3085580a2}\label{responsable_8c_a185476dbf2dae604d3deb6a3085580a2} +\index{responsable.c@{responsable.c}!ajouterClient@{ajouterClient}} +\index{ajouterClient@{ajouterClient}!responsable.c@{responsable.c}} +\doxysubsubsection{\texorpdfstring{ajouterClient()}{ajouterClient()}} +{\footnotesize\ttfamily void ajouter\+Client (\begin{DoxyParamCaption}\item[{int}]{t\+Num\+Client\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Cagnotte\mbox{[}$\,$\mbox{]}, }\item[{int}]{t\+Sus\mbox{[}$\,$\mbox{]}, }\item[{int \texorpdfstring{$\ast$}{*}}]{t\+Logique, }\item[{int}]{t\+Physique }\end{DoxyParamCaption})} + + + +Ajoute un nouveau client aux tableaux de clients. + +Cette fonction ajoute un nouveau client aux tableaux t\+Num\+Client, t\+Cagnotte et t\+Sus et incrémente la taille logique. + + +\begin{DoxyParams}{Parameters} +{\em t\+Num\+Client} & Tableau des numéros de client. \\ +\hline +{\em t\+Cagnotte} & Tableau des cagnottes des clients. \\ +\hline +{\em t\+Sus} & Tableau des états de suspension des clients. \\ +\hline +{\em t\+Logique} & Pointeur vers la taille logique des tableaux. \\ +\hline +{\em t\+Physique} & Taille physique des tableaux. \\ +\hline +\end{DoxyParams} +\Hypertarget{responsable_8c_a937ddfa15445cc5d2336130fb6567ce1}\label{responsable_8c_a937ddfa15445cc5d2336130fb6567ce1} +\index{responsable.c@{responsable.c}!chargementArticles@{chargementArticles}} +\index{chargementArticles@{chargementArticles}!responsable.c@{responsable.c}} +\doxysubsubsection{\texorpdfstring{chargementArticles()}{chargementArticles()}} +{\footnotesize\ttfamily int chargement\+Articles (\begin{DoxyParamCaption}\item[{int}]{t\+Ref\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Poids\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Vol\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Prix\mbox{[}$\,$\mbox{]}, }\item[{int}]{t\+Physique }\end{DoxyParamCaption})} + + + +Charge les informations des articles à partir d\textquotesingle{}un fichier dans des tableaux. + +Cette fonction lit les informations des articles à partir du fichier "{}donnee/articles.\+txt"{} et les stocke dans les tableaux t\+Ref, t\+Poids, t\+Vol, et t\+Prix. + + +\begin{DoxyParams}{Parameters} +{\em t\+Ref} & Tableau des références d\textquotesingle{}articles. \\ +\hline +{\em t\+Poids} & Tableau des poids des articles. \\ +\hline +{\em t\+Vol} & Tableau des volumes des articles. \\ +\hline +{\em t\+Prix} & Tableau des prix unitaires des articles. \\ +\hline +{\em t\+Physique} & Taille physique des tableaux. \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +Le nombre d\textquotesingle{}articles chargés avec succès ou -\/1 en cas d\textquotesingle{}erreur. +\end{DoxyReturn} +\Hypertarget{responsable_8c_ab02f9ff38b359630bc980bae859f7512}\label{responsable_8c_ab02f9ff38b359630bc980bae859f7512} +\index{responsable.c@{responsable.c}!modifierArticle@{modifierArticle}} +\index{modifierArticle@{modifierArticle}!responsable.c@{responsable.c}} +\doxysubsubsection{\texorpdfstring{modifierArticle()}{modifierArticle()}} +{\footnotesize\ttfamily void modifier\+Article (\begin{DoxyParamCaption}\item[{int}]{t\+Ref\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Poids\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Vol\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Prix\mbox{[}$\,$\mbox{]}, }\item[{int}]{t\+Logique }\end{DoxyParamCaption})} + + + +Modifie les informations d\textquotesingle{}un article existant. + +Cette fonction permet de modifier les informations (poids, volume, prix) d\textquotesingle{}un article existant. + + +\begin{DoxyParams}{Parameters} +{\em t\+Ref} & Tableau des références d\textquotesingle{}articles. \\ +\hline +{\em t\+Poids} & Tableau des poids des articles. \\ +\hline +{\em t\+Vol} & Tableau des volumes des articles. \\ +\hline +{\em t\+Prix} & Tableau des prix unitaires des articles. \\ +\hline +{\em t\+Logique} & Taille logique des tableaux. \\ +\hline +\end{DoxyParams} +\Hypertarget{responsable_8c_a33f342ec6aaff14efce87b42350d9bee}\label{responsable_8c_a33f342ec6aaff14efce87b42350d9bee} +\index{responsable.c@{responsable.c}!rechercheRefArticle@{rechercheRefArticle}} +\index{rechercheRefArticle@{rechercheRefArticle}!responsable.c@{responsable.c}} +\doxysubsubsection{\texorpdfstring{rechercheRefArticle()}{rechercheRefArticle()}} +{\footnotesize\ttfamily void recherche\+Ref\+Article (\begin{DoxyParamCaption}\item[{int}]{t\+Ref\mbox{[}$\,$\mbox{]}, }\item[{int}]{ref, }\item[{int \texorpdfstring{$\ast$}{*}}]{index, }\item[{int}]{t\+Logique }\end{DoxyParamCaption})} + + + +Recherche une référence d\textquotesingle{}article dans le tableau t\+Ref. + +Cette fonction recherche une référence d\textquotesingle{}article dans le tableau t\+Ref et renvoie l\textquotesingle{}index si l\textquotesingle{}article est trouvé. + + +\begin{DoxyParams}{Parameters} +{\em t\+Ref} & Tableau des références d\textquotesingle{}articles. \\ +\hline +{\em ref} & Référence de l\textquotesingle{}article à rechercher. \\ +\hline +{\em index} & Pointeur vers la variable pour stocker l\textquotesingle{}index de l\textquotesingle{}article trouvé. \\ +\hline +{\em t\+Logique} & Taille logique des tableaux. \\ +\hline +\end{DoxyParams} +\Hypertarget{responsable_8c_ac9e79c89d04823f4b1b5572c9865e57d}\label{responsable_8c_ac9e79c89d04823f4b1b5572c9865e57d} +\index{responsable.c@{responsable.c}!sauvegardArticles@{sauvegardArticles}} +\index{sauvegardArticles@{sauvegardArticles}!responsable.c@{responsable.c}} +\doxysubsubsection{\texorpdfstring{sauvegardArticles()}{sauvegardArticles()}} +{\footnotesize\ttfamily void sauvegard\+Articles (\begin{DoxyParamCaption}\item[{int}]{t\+Ref\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Poids\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Vol\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Prix\mbox{[}$\,$\mbox{]}, }\item[{int}]{t\+Logique }\end{DoxyParamCaption})} + + + +Sauvegarde les informations des articles dans un fichier. + +Cette fonction sauvegarde les informations des articles depuis les tableaux t\+Ref, t\+Poids, t\+Vol et t\+Prix dans le fichier "{}donnee/articles.\+txt"{}. + + +\begin{DoxyParams}{Parameters} +{\em t\+Ref} & Tableau des références d\textquotesingle{}articles. \\ +\hline +{\em t\+Poids} & Tableau des poids des articles. \\ +\hline +{\em t\+Vol} & Tableau des volumes des articles. \\ +\hline +{\em t\+Prix} & Tableau des prix unitaires des articles. \\ +\hline +{\em t\+Logique} & Taille logique des tableaux. \\ +\hline +\end{DoxyParams} +\Hypertarget{responsable_8c_a0f8076a332f73d1edca58cfaeb42167e}\label{responsable_8c_a0f8076a332f73d1edca58cfaeb42167e} +\index{responsable.c@{responsable.c}!supprimerArticle@{supprimerArticle}} +\index{supprimerArticle@{supprimerArticle}!responsable.c@{responsable.c}} +\doxysubsubsection{\texorpdfstring{supprimerArticle()}{supprimerArticle()}} +{\footnotesize\ttfamily void supprimer\+Article (\begin{DoxyParamCaption}\item[{int}]{t\+Ref\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Poids\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Vol\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Prix\mbox{[}$\,$\mbox{]}, }\item[{int \texorpdfstring{$\ast$}{*}}]{t\+Logique }\end{DoxyParamCaption})} + + + +Supprime un article des tableaux d\textquotesingle{}articles. + +Cette fonction supprime un article des tableaux t\+Ref, t\+Poids, t\+Vol, et t\+Prix et met à jour la taille logique. + + +\begin{DoxyParams}{Parameters} +{\em t\+Ref} & Tableau des références d\textquotesingle{}articles. \\ +\hline +{\em t\+Poids} & Tableau des poids des articles. \\ +\hline +{\em t\+Vol} & Tableau des volumes des articles. \\ +\hline +{\em t\+Prix} & Tableau des prix unitaires des articles. \\ +\hline +{\em t\+Logique} & Pointeur vers la taille logique des tableaux. \\ +\hline +\end{DoxyParams} diff --git a/docs/latex/responsable_8h.tex b/docs/latex/responsable_8h.tex new file mode 100644 index 0000000..2ad71b9 --- /dev/null +++ b/docs/latex/responsable_8h.tex @@ -0,0 +1,222 @@ +\doxysection{src/app/core\+\_\+logic/responsable.h File Reference} +\hypertarget{responsable_8h}{}\label{responsable_8h}\index{src/app/core\_logic/responsable.h@{src/app/core\_logic/responsable.h}} + + +Déclaration des fonctions de \doxylink{responsable_8c}{responsable.\+c}. + + +{\ttfamily \#include $<$stdio.\+h$>$}\newline +\doxysubsubsection*{Functions} +\begin{DoxyCompactItemize} +\item +int \mbox{\hyperlink{responsable_8h_a937ddfa15445cc5d2336130fb6567ce1}{chargement\+Articles}} (int t\+Ref\mbox{[}$\,$\mbox{]}, float t\+Poids\mbox{[}$\,$\mbox{]}, float t\+Vol\mbox{[}$\,$\mbox{]}, float t\+Prix\mbox{[}$\,$\mbox{]}, int t\+Physique) +\begin{DoxyCompactList}\small\item\em Charge les informations des articles à partir d\textquotesingle{}un fichier dans des tableaux. \end{DoxyCompactList}\item +void \mbox{\hyperlink{responsable_8h_ac9e79c89d04823f4b1b5572c9865e57d}{sauvegard\+Articles}} (int t\+Ref\mbox{[}$\,$\mbox{]}, float t\+Poids\mbox{[}$\,$\mbox{]}, float t\+Vol\mbox{[}$\,$\mbox{]}, float t\+Prix\mbox{[}$\,$\mbox{]}, int t\+Logique) +\begin{DoxyCompactList}\small\item\em Sauvegarde les informations des articles dans un fichier. \end{DoxyCompactList}\item +int \mbox{\hyperlink{responsable_8h_abce68a203cf18b85ebdad34e468815f0}{ajouter\+Article}} (int t\+Ref\mbox{[}$\,$\mbox{]}, float t\+Poids\mbox{[}$\,$\mbox{]}, float t\+Vol\mbox{[}$\,$\mbox{]}, float t\+Prix\mbox{[}$\,$\mbox{]}, int \texorpdfstring{$\ast$}{*}t\+Logique, int t\+Physique, int ref, float poids, float volume, float prix) +\begin{DoxyCompactList}\small\item\em Ajoute un nouvel article aux tableaux d\textquotesingle{}articles. \end{DoxyCompactList}\item +void \mbox{\hyperlink{responsable_8h_a33f342ec6aaff14efce87b42350d9bee}{recherche\+Ref\+Article}} (int t\+Ref\mbox{[}$\,$\mbox{]}, int ref, int \texorpdfstring{$\ast$}{*}index, int t\+Logique) +\begin{DoxyCompactList}\small\item\em Recherche une référence d\textquotesingle{}article dans le tableau t\+Ref. \end{DoxyCompactList}\item +void \mbox{\hyperlink{responsable_8h_a0f8076a332f73d1edca58cfaeb42167e}{supprimer\+Article}} (int t\+Ref\mbox{[}$\,$\mbox{]}, float t\+Poids\mbox{[}$\,$\mbox{]}, float t\+Vol\mbox{[}$\,$\mbox{]}, float t\+Prix\mbox{[}$\,$\mbox{]}, int \texorpdfstring{$\ast$}{*}t\+Logique) +\begin{DoxyCompactList}\small\item\em Supprime un article des tableaux d\textquotesingle{}articles. \end{DoxyCompactList}\item +void \mbox{\hyperlink{responsable_8h_ab02f9ff38b359630bc980bae859f7512}{modifier\+Article}} (int t\+Ref\mbox{[}$\,$\mbox{]}, float t\+Poids\mbox{[}$\,$\mbox{]}, float t\+Vol\mbox{[}$\,$\mbox{]}, float t\+Prix\mbox{[}$\,$\mbox{]}, int t\+Logique) +\begin{DoxyCompactList}\small\item\em Modifie les informations d\textquotesingle{}un article existant. \end{DoxyCompactList}\item +void \mbox{\hyperlink{responsable_8h_a185476dbf2dae604d3deb6a3085580a2}{ajouter\+Client}} (int t\+Num\+Client\mbox{[}$\,$\mbox{]}, float t\+Cagnotte\mbox{[}$\,$\mbox{]}, int t\+Sus\mbox{[}$\,$\mbox{]}, int \texorpdfstring{$\ast$}{*}t\+Logique, int t\+Physique) +\begin{DoxyCompactList}\small\item\em Ajoute un nouveau client aux tableaux de clients. \end{DoxyCompactList}\end{DoxyCompactItemize} + + +\doxysubsection{Detailed Description} +Déclaration des fonctions de \doxylink{responsable_8c}{responsable.\+c}. + + + +\doxysubsection{Function Documentation} +\Hypertarget{responsable_8h_abce68a203cf18b85ebdad34e468815f0}\label{responsable_8h_abce68a203cf18b85ebdad34e468815f0} +\index{responsable.h@{responsable.h}!ajouterArticle@{ajouterArticle}} +\index{ajouterArticle@{ajouterArticle}!responsable.h@{responsable.h}} +\doxysubsubsection{\texorpdfstring{ajouterArticle()}{ajouterArticle()}} +{\footnotesize\ttfamily int ajouter\+Article (\begin{DoxyParamCaption}\item[{int}]{t\+Ref\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Poids\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Vol\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Prix\mbox{[}$\,$\mbox{]}, }\item[{int \texorpdfstring{$\ast$}{*}}]{t\+Logique, }\item[{int}]{t\+Physique, }\item[{int}]{ref, }\item[{float}]{poids, }\item[{float}]{volume, }\item[{float}]{prix }\end{DoxyParamCaption})} + + + +Ajoute un nouvel article aux tableaux d\textquotesingle{}articles. + +Cette fonction ajoute un nouvel article aux tableaux t\+Ref, t\+Poids, t\+Vol, et t\+Prix et incrémente la taille logique. + + +\begin{DoxyParams}{Parameters} +{\em t\+Ref} & Tableau des références d\textquotesingle{}articles. \\ +\hline +{\em t\+Poids} & Tableau des poids des articles. \\ +\hline +{\em t\+Vol} & Tableau des volumes des articles. \\ +\hline +{\em t\+Prix} & Tableau des prix unitaires des articles. \\ +\hline +{\em t\+Logique} & Taille logique des tableaux. \\ +\hline +{\em t\+Physique} & Taille physique des tableaux. \\ +\hline +{\em ref} & Référence du nouvel article. \\ +\hline +{\em poids} & Poids du nouvel article. \\ +\hline +{\em volume} & Volume du nouvel article. \\ +\hline +{\em prix} & Prix unitaire du nouvel article. \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +0 en cas de succès, -\/2 si le tableau est plein. +\end{DoxyReturn} +\Hypertarget{responsable_8h_a185476dbf2dae604d3deb6a3085580a2}\label{responsable_8h_a185476dbf2dae604d3deb6a3085580a2} +\index{responsable.h@{responsable.h}!ajouterClient@{ajouterClient}} +\index{ajouterClient@{ajouterClient}!responsable.h@{responsable.h}} +\doxysubsubsection{\texorpdfstring{ajouterClient()}{ajouterClient()}} +{\footnotesize\ttfamily void ajouter\+Client (\begin{DoxyParamCaption}\item[{int}]{t\+Num\+Client\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Cagnotte\mbox{[}$\,$\mbox{]}, }\item[{int}]{t\+Sus\mbox{[}$\,$\mbox{]}, }\item[{int \texorpdfstring{$\ast$}{*}}]{t\+Logique, }\item[{int}]{t\+Physique }\end{DoxyParamCaption})} + + + +Ajoute un nouveau client aux tableaux de clients. + +Cette fonction ajoute un nouveau client aux tableaux t\+Num\+Client, t\+Cagnotte et t\+Sus et incrémente la taille logique. + + +\begin{DoxyParams}{Parameters} +{\em t\+Num\+Client} & Tableau des numéros de client. \\ +\hline +{\em t\+Cagnotte} & Tableau des cagnottes des clients. \\ +\hline +{\em t\+Sus} & Tableau des états de suspension des clients. \\ +\hline +{\em t\+Logique} & Pointeur vers la taille logique des tableaux. \\ +\hline +{\em t\+Physique} & Taille physique des tableaux. \\ +\hline +\end{DoxyParams} +\Hypertarget{responsable_8h_a937ddfa15445cc5d2336130fb6567ce1}\label{responsable_8h_a937ddfa15445cc5d2336130fb6567ce1} +\index{responsable.h@{responsable.h}!chargementArticles@{chargementArticles}} +\index{chargementArticles@{chargementArticles}!responsable.h@{responsable.h}} +\doxysubsubsection{\texorpdfstring{chargementArticles()}{chargementArticles()}} +{\footnotesize\ttfamily int chargement\+Articles (\begin{DoxyParamCaption}\item[{int}]{t\+Ref\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Poids\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Vol\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Prix\mbox{[}$\,$\mbox{]}, }\item[{int}]{t\+Physique }\end{DoxyParamCaption})} + + + +Charge les informations des articles à partir d\textquotesingle{}un fichier dans des tableaux. + +Cette fonction lit les informations des articles à partir du fichier "{}donnee/articles.\+txt"{} et les stocke dans les tableaux t\+Ref, t\+Poids, t\+Vol, et t\+Prix. + + +\begin{DoxyParams}{Parameters} +{\em t\+Ref} & Tableau des références d\textquotesingle{}articles. \\ +\hline +{\em t\+Poids} & Tableau des poids des articles. \\ +\hline +{\em t\+Vol} & Tableau des volumes des articles. \\ +\hline +{\em t\+Prix} & Tableau des prix unitaires des articles. \\ +\hline +{\em t\+Physique} & Taille physique des tableaux. \\ +\hline +\end{DoxyParams} +\begin{DoxyReturn}{Returns} +Le nombre d\textquotesingle{}articles chargés avec succès ou -\/1 en cas d\textquotesingle{}erreur. +\end{DoxyReturn} +\Hypertarget{responsable_8h_ab02f9ff38b359630bc980bae859f7512}\label{responsable_8h_ab02f9ff38b359630bc980bae859f7512} +\index{responsable.h@{responsable.h}!modifierArticle@{modifierArticle}} +\index{modifierArticle@{modifierArticle}!responsable.h@{responsable.h}} +\doxysubsubsection{\texorpdfstring{modifierArticle()}{modifierArticle()}} +{\footnotesize\ttfamily void modifier\+Article (\begin{DoxyParamCaption}\item[{int}]{t\+Ref\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Poids\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Vol\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Prix\mbox{[}$\,$\mbox{]}, }\item[{int}]{t\+Logique }\end{DoxyParamCaption})} + + + +Modifie les informations d\textquotesingle{}un article existant. + +Cette fonction permet de modifier les informations (poids, volume, prix) d\textquotesingle{}un article existant. + + +\begin{DoxyParams}{Parameters} +{\em t\+Ref} & Tableau des références d\textquotesingle{}articles. \\ +\hline +{\em t\+Poids} & Tableau des poids des articles. \\ +\hline +{\em t\+Vol} & Tableau des volumes des articles. \\ +\hline +{\em t\+Prix} & Tableau des prix unitaires des articles. \\ +\hline +{\em t\+Logique} & Taille logique des tableaux. \\ +\hline +\end{DoxyParams} +\Hypertarget{responsable_8h_a33f342ec6aaff14efce87b42350d9bee}\label{responsable_8h_a33f342ec6aaff14efce87b42350d9bee} +\index{responsable.h@{responsable.h}!rechercheRefArticle@{rechercheRefArticle}} +\index{rechercheRefArticle@{rechercheRefArticle}!responsable.h@{responsable.h}} +\doxysubsubsection{\texorpdfstring{rechercheRefArticle()}{rechercheRefArticle()}} +{\footnotesize\ttfamily void recherche\+Ref\+Article (\begin{DoxyParamCaption}\item[{int}]{t\+Ref\mbox{[}$\,$\mbox{]}, }\item[{int}]{ref, }\item[{int \texorpdfstring{$\ast$}{*}}]{index, }\item[{int}]{t\+Logique }\end{DoxyParamCaption})} + + + +Recherche une référence d\textquotesingle{}article dans le tableau t\+Ref. + +Cette fonction recherche une référence d\textquotesingle{}article dans le tableau t\+Ref et renvoie l\textquotesingle{}index si l\textquotesingle{}article est trouvé. + + +\begin{DoxyParams}{Parameters} +{\em t\+Ref} & Tableau des références d\textquotesingle{}articles. \\ +\hline +{\em ref} & Référence de l\textquotesingle{}article à rechercher. \\ +\hline +{\em index} & Pointeur vers la variable pour stocker l\textquotesingle{}index de l\textquotesingle{}article trouvé. \\ +\hline +{\em t\+Logique} & Taille logique des tableaux. \\ +\hline +\end{DoxyParams} +\Hypertarget{responsable_8h_ac9e79c89d04823f4b1b5572c9865e57d}\label{responsable_8h_ac9e79c89d04823f4b1b5572c9865e57d} +\index{responsable.h@{responsable.h}!sauvegardArticles@{sauvegardArticles}} +\index{sauvegardArticles@{sauvegardArticles}!responsable.h@{responsable.h}} +\doxysubsubsection{\texorpdfstring{sauvegardArticles()}{sauvegardArticles()}} +{\footnotesize\ttfamily void sauvegard\+Articles (\begin{DoxyParamCaption}\item[{int}]{t\+Ref\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Poids\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Vol\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Prix\mbox{[}$\,$\mbox{]}, }\item[{int}]{t\+Logique }\end{DoxyParamCaption})} + + + +Sauvegarde les informations des articles dans un fichier. + +Cette fonction sauvegarde les informations des articles depuis les tableaux t\+Ref, t\+Poids, t\+Vol et t\+Prix dans le fichier "{}donnee/articles.\+txt"{}. + + +\begin{DoxyParams}{Parameters} +{\em t\+Ref} & Tableau des références d\textquotesingle{}articles. \\ +\hline +{\em t\+Poids} & Tableau des poids des articles. \\ +\hline +{\em t\+Vol} & Tableau des volumes des articles. \\ +\hline +{\em t\+Prix} & Tableau des prix unitaires des articles. \\ +\hline +{\em t\+Logique} & Taille logique des tableaux. \\ +\hline +\end{DoxyParams} +\Hypertarget{responsable_8h_a0f8076a332f73d1edca58cfaeb42167e}\label{responsable_8h_a0f8076a332f73d1edca58cfaeb42167e} +\index{responsable.h@{responsable.h}!supprimerArticle@{supprimerArticle}} +\index{supprimerArticle@{supprimerArticle}!responsable.h@{responsable.h}} +\doxysubsubsection{\texorpdfstring{supprimerArticle()}{supprimerArticle()}} +{\footnotesize\ttfamily void supprimer\+Article (\begin{DoxyParamCaption}\item[{int}]{t\+Ref\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Poids\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Vol\mbox{[}$\,$\mbox{]}, }\item[{float}]{t\+Prix\mbox{[}$\,$\mbox{]}, }\item[{int \texorpdfstring{$\ast$}{*}}]{t\+Logique }\end{DoxyParamCaption})} + + + +Supprime un article des tableaux d\textquotesingle{}articles. + +Cette fonction supprime un article des tableaux t\+Ref, t\+Poids, t\+Vol, et t\+Prix et met à jour la taille logique. + + +\begin{DoxyParams}{Parameters} +{\em t\+Ref} & Tableau des références d\textquotesingle{}articles. \\ +\hline +{\em t\+Poids} & Tableau des poids des articles. \\ +\hline +{\em t\+Vol} & Tableau des volumes des articles. \\ +\hline +{\em t\+Prix} & Tableau des prix unitaires des articles. \\ +\hline +{\em t\+Logique} & Pointeur vers la taille logique des tableaux. \\ +\hline +\end{DoxyParams} diff --git a/docs/latex/responsable_8h_source.tex b/docs/latex/responsable_8h_source.tex new file mode 100644 index 0000000..286c85d --- /dev/null +++ b/docs/latex/responsable_8h_source.tex @@ -0,0 +1,22 @@ +\doxysection{responsable.\+h} +\hypertarget{responsable_8h_source}{}\label{responsable_8h_source}\index{src/app/core\_logic/responsable.h@{src/app/core\_logic/responsable.h}} +\mbox{\hyperlink{responsable_8h}{Go to the documentation of this file.}} +\begin{DoxyCode}{0} +\DoxyCodeLine{00001\ } +\DoxyCodeLine{00006\ \textcolor{preprocessor}{\#include\ }} +\DoxyCodeLine{00007\ } +\DoxyCodeLine{00021\ \textcolor{keywordtype}{int}\ \mbox{\hyperlink{responsable_8h_a937ddfa15445cc5d2336130fb6567ce1}{chargementArticles}}(\textcolor{keywordtype}{int}\ tRef[],\ \textcolor{keywordtype}{float}\ tPoids[],\ \textcolor{keywordtype}{float}\ tVol[],\ \textcolor{keywordtype}{float}\ tPrix[],\ \textcolor{keywordtype}{int}\ tPhysique);} +\DoxyCodeLine{00022\ } +\DoxyCodeLine{00035\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{responsable_8h_ac9e79c89d04823f4b1b5572c9865e57d}{sauvegardArticles}}(\textcolor{keywordtype}{int}\ tRef[],\ \textcolor{keywordtype}{float}\ tPoids[],\ \textcolor{keywordtype}{float}\ tVol[],\ \textcolor{keywordtype}{float}\ tPrix[],\ \textcolor{keywordtype}{int}\ tLogique);} +\DoxyCodeLine{00036\ } +\DoxyCodeLine{00054\ \textcolor{keywordtype}{int}\ \mbox{\hyperlink{responsable_8h_abce68a203cf18b85ebdad34e468815f0}{ajouterArticle}}(\textcolor{keywordtype}{int}\ tRef[],\ \textcolor{keywordtype}{float}\ tPoids[],\ \textcolor{keywordtype}{float}\ tVol[],\ \textcolor{keywordtype}{float}\ tPrix[],\ \textcolor{keywordtype}{int}\ *tLogique,\ \textcolor{keywordtype}{int}\ tPhysique,\ \textcolor{keywordtype}{int}\ ref,\ \textcolor{keywordtype}{float}\ poids,\ \textcolor{keywordtype}{float}\ volume,\ \textcolor{keywordtype}{float}\ prix);} +\DoxyCodeLine{00055\ } +\DoxyCodeLine{00066\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{responsable_8h_a33f342ec6aaff14efce87b42350d9bee}{rechercheRefArticle}}(\textcolor{keywordtype}{int}\ tRef[],\ \textcolor{keywordtype}{int}\ ref,\ \textcolor{keywordtype}{int}\ *index,\ \textcolor{keywordtype}{int}\ tLogique);} +\DoxyCodeLine{00067\ } +\DoxyCodeLine{00079\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{responsable_8h_a0f8076a332f73d1edca58cfaeb42167e}{supprimerArticle}}(\textcolor{keywordtype}{int}\ tRef[],\ \textcolor{keywordtype}{float}\ tPoids[],\ \textcolor{keywordtype}{float}\ tVol[],\ \textcolor{keywordtype}{float}\ tPrix[],\ \textcolor{keywordtype}{int}\ *tLogique);} +\DoxyCodeLine{00080\ } +\DoxyCodeLine{00092\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{responsable_8h_ab02f9ff38b359630bc980bae859f7512}{modifierArticle}}(\textcolor{keywordtype}{int}\ tRef[],\ \textcolor{keywordtype}{float}\ tPoids[],\ \textcolor{keywordtype}{float}\ tVol[],\ \textcolor{keywordtype}{float}\ tPrix[],\ \textcolor{keywordtype}{int}\ tLogique);} +\DoxyCodeLine{00093\ } +\DoxyCodeLine{00105\ \textcolor{keywordtype}{void}\ \mbox{\hyperlink{responsable_8h_a185476dbf2dae604d3deb6a3085580a2}{ajouterClient}}(\textcolor{keywordtype}{int}\ tNumClient[],\ \textcolor{keywordtype}{float}\ tCagnotte[],\ \textcolor{keywordtype}{int}\ tSus[],\ \textcolor{keywordtype}{int}\ *tLogique,\ \textcolor{keywordtype}{int}\ tPhysique);} + +\end{DoxyCode} diff --git a/docs/latex/tabu_doxygen.sty b/docs/latex/tabu_doxygen.sty new file mode 100644 index 0000000..3f17d1d --- /dev/null +++ b/docs/latex/tabu_doxygen.sty @@ -0,0 +1,2557 @@ +%% +%% This is file `tabu.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% tabu.dtx (with options: `package') +%% +%% This is a generated file. +%% Copyright (FC) 2010-2011 - lppl +%% +%% tabu : 2011/02/26 v2.8 - tabu : Flexible LaTeX tabulars +%% +%% ********************************************************************************************** +%% \begin{tabu} { preamble } => default target: \linewidth or \linegoal +%% \begin{tabu} to { preamble } => target specified +%% \begin{tabu} spread { preamble } => target relative to the ``natural width'' +%% +%% tabu works in text and in math modes. +%% +%% X columns: automatic width adjustment + horizontal and vertical alignment +%% \begin{tabu} { X[4c] X[1c] X[-2ml] } +%% +%% Horizontal lines and / or leaders: +%% \hline\hline => double horizontal line +%% \firsthline\hline => for nested tabulars +%% \lasthline\hline => for nested tabulars +%% \tabucline[line spec]{column-column} => ``funny'' lines (dash/leader) +%% Automatic lines / leaders : +%% \everyrow{\hline\hline} +%% +%% Vertical lines and / or leaders: +%% \begin{tabu} { |[3pt red] X[4c] X[1c] X[-2ml] |[3pt blue] } +%% \begin{tabu} { |[3pt red] X[4c] X[1c] X[-2ml] |[3pt on 2pt off 4pt blue] } +%% +%% Fixed vertical spacing adjustment: +%% \extrarowheight= \extrarowdepth= +%% or: \extrarowsep= => may be prefixed by \global +%% +%% Dynamic vertical spacing adjustment: +%% \abovetabulinesep= \belowtabulinesep= +%% or: \tabulinesep= => may be prefixed by \global +%% +%% delarray.sty shortcuts: in math and text modes +%% \begin{tabu} .... \({ preamble }\) +%% +%% Algorithms reports: +%% \tracingtabu=1 \tracingtabu=2 +%% +%% ********************************************************************************************** +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either +%% version 1.3 of this license or (at your option) any later +%% version. The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% +%% This work consists of the main source file tabu.dtx +%% and the derived files +%% tabu.sty, tabu.pdf, tabu.ins +%% +%% tabu : Flexible LaTeX tabulars +%% lppl copyright 2010-2011 by FC +%% + +\NeedsTeXFormat{LaTeX2e}[2005/12/01] +\ProvidesPackage{tabu_doxygen}[2011/02/26 v2.8 - flexible LaTeX tabulars (FC), frozen version for doxygen] +\RequirePackage{array}[2008/09/09] +\RequirePackage{varwidth}[2009/03/30] +\AtEndOfPackage{\tabu@AtEnd \let\tabu@AtEnd \@undefined} +\let\tabu@AtEnd\@empty +\def\TMP@EnsureCode#1={% + \edef\tabu@AtEnd{\tabu@AtEnd + \catcode#1 \the\catcode#1}% + \catcode#1=% +}% \TMP@EnsureCode +\TMP@EnsureCode 33 = 12 % ! +\TMP@EnsureCode 58 = 12 % : (for siunitx) +\TMP@EnsureCode124 = 12 % | +\TMP@EnsureCode 36 = 3 % $ = math shift +\TMP@EnsureCode 38 = 4 % & = tab alignment character +\TMP@EnsureCode 32 = 10 % space +\TMP@EnsureCode 94 = 7 % ^ +\TMP@EnsureCode 95 = 8 % _ +%% Constants -------------------------------------------------------- +\newcount \c@taburow \def\thetaburow {\number\c@taburow} +\newcount \tabu@nbcols +\newcount \tabu@cnt +\newcount \tabu@Xcol +\let\tabu@start \@tempcnta +\let\tabu@stop \@tempcntb +\newcount \tabu@alloc \tabu@alloc=\m@ne +\newcount \tabu@nested +\def\tabu@alloc@{\global\advance\tabu@alloc \@ne \tabu@nested\tabu@alloc} +\newdimen \tabu@target +\newdimen \tabu@spreadtarget +\newdimen \tabu@naturalX +\newdimen \tabucolX +\let\tabu@DELTA \@tempdimc +\let\tabu@thick \@tempdima +\let\tabu@on \@tempdimb +\let\tabu@off \@tempdimc +\newdimen \tabu@Xsum +\newdimen \extrarowdepth +\newdimen \abovetabulinesep +\newdimen \belowtabulinesep +\newdimen \tabustrutrule \tabustrutrule \z@ +\newtoks \tabu@thebody +\newtoks \tabu@footnotes +\newsavebox \tabu@box +\newsavebox \tabu@arstrutbox +\newsavebox \tabu@hleads +\newsavebox \tabu@vleads +\newif \iftabu@colortbl +\newif \iftabu@siunitx +\newif \iftabu@measuring +\newif \iftabu@spread +\newif \iftabu@negcoef +\newif \iftabu@everyrow +\def\tabu@everyrowtrue {\global\let\iftabu@everyrow \iftrue} +\def\tabu@everyrowfalse{\global\let\iftabu@everyrow \iffalse} +\newif \iftabu@long +\newif \iftabuscantokens +\def\tabu@rescan {\tabu@verbatim \scantokens } +%% Utilities (for internal usage) ----------------------------------- +\def\tabu@gobblespace #1 {#1} +\def\tabu@gobbletoken #1#2{#1} +\def\tabu@gobbleX{\futurelet\@let@token \tabu@gobblex} +\def\tabu@gobblex{\if ^^J\noexpand\@let@token \expandafter\@gobble + \else\ifx \@sptoken\@let@token + \expandafter\tabu@gobblespace\expandafter\tabu@gobbleX + \fi\fi +}% \tabu@gobblex +\def\tabu@X{^^J} +{\obeyspaces +\global\let\tabu@spxiii= % saves an active space (for \ifx) +\gdef\tabu@@spxiii{ }} +\def\tabu@ifenvir {% only for \multicolumn + \expandafter\tabu@if@nvir\csname\@currenvir\endcsname +}% \tabu@ifenvir +\def\tabu@if@nvir #1{\csname @\ifx\tabu#1first\else + \ifx\longtabu#1first\else + second\fi\fi oftwo\endcsname +}% \tabu@ifenvir +\def\tabu@modulo #1#2{\numexpr\ifnum\numexpr#1=\z@ 0\else #1-(#1-(#2-1)/2)/(#2)*(#2)\fi} +{\catcode`\&=3 +\gdef\tabu@strtrim #1{% #1 = control sequence to trim + \ifodd 1\ifx #1\@empty \else \ifx #1\space \else 0\fi \fi + \let\tabu@c@l@r \@empty \let#1\@empty + \else \expandafter \tabu@trimspaces #1\@nnil + \fi +}% \tabu@strtrim +\gdef\tabu@trimspaces #1\@nnil{\let\tabu@c@l@r=#2\tabu@firstspace .#1& }% +\gdef\tabu@firstspace #1#2#3 &{\tabu@lastspace #2#3&} +\gdef\tabu@lastspace #1{\def #3{#1}% + \ifx #3\tabu@c@l@r \def\tabu@c@l@r{\protect\color{#1}}\expandafter\remove@to@nnil \fi + \tabu@trimspaces #1\@nnil} +}% \catcode +\def\tabu@sanitizearg #1#2{{% + \csname \ifcsname if@safe@actives\endcsname % + @safe@activestrue\else + relax\fi \endcsname + \edef#2{#1}\tabu@strtrim#2\@onelevel@sanitize#2% + \expandafter}\expandafter\def\expandafter#2\expandafter{#2}% +}% \tabu@sanitizearg +\def\tabu@textbar #1{\begingroup \endlinechar\m@ne \scantokens{\def\:{|}}% + \expandafter\endgroup \expandafter#1\:% !!! semi simple group !!! +}% \tabu@textbar +\def\tabu@everyrow@bgroup{\iftabu@everyrow \begingroup \else \noalign{\ifnum0=`}\fi \fi} +\def\tabu@everyrow@egroup{% + \iftabu@everyrow \expandafter \endgroup \the\toks@ + \else \ifnum0=`{\fi}% + \fi +}% \tabu@everyrow@egroup +\def\tabu@arstrut {\global\setbox\@arstrutbox \hbox{\vrule + height \arraystretch \dimexpr\ht\strutbox+\extrarowheight + depth \arraystretch \dimexpr\dp\strutbox+\extrarowdepth + width \z@}% +}% \tabu@arstrut +\def\tabu@rearstrut {% + \@tempdima \arraystretch\dimexpr\ht\strutbox+\extrarowheight \relax + \@tempdimb \arraystretch\dimexpr\dp\strutbox+\extrarowdepth \relax + \ifodd 1\ifdim \ht\@arstrutbox=\@tempdima + \ifdim \dp\@arstrutbox=\@tempdimb 0 \fi\fi + \tabu@mkarstrut + \fi +}% \tabu@rearstrut +\def\tabu@@DBG #1{\ifdim\tabustrutrule>\z@ \color{#1}\fi} +\def\tabu@DBG@arstrut {\global\setbox\@arstrutbox + \hbox to\z@{\hbox to\z@{\hss + {\tabu@DBG{cyan}\vrule + height \arraystretch \dimexpr\ht\strutbox+\extrarowheight + depth \z@ + width \tabustrutrule}\kern-\tabustrutrule + {\tabu@DBG{pink}\vrule + height \z@ + depth \arraystretch \dimexpr\dp\strutbox+\extrarowdepth + width \tabustrutrule}}}% +}% \tabu@DBG@arstrut +\def\tabu@save@decl{\toks\count@ \expandafter{\the\toks\expandafter\count@ + \@nextchar}}% +\def\tabu@savedecl{\ifcat$\d@llarend\else + \let\save@decl \tabu@save@decl \fi % no inversion of tokens in text mode +}% \tabu@savedecl +\def\tabu@finalstrut #1{\unskip\ifhmode\nobreak\fi\vrule height\z@ depth\z@ width\z@} +\newcommand*\tabuDisableCommands {\g@addto@macro\tabu@trialh@@k } +\let\tabu@trialh@@k \@empty +\def\tabu@nowrite #1#{{\afterassignment}\toks@} +\let\tabu@write\write +\let\tabu@immediate\immediate +\def\tabu@WRITE{\begingroup + \def\immediate\write{\aftergroup\endgroup + \tabu@immediate\tabu@write}% +}% \tabu@WRITE +\expandafter\def\expandafter\tabu@GenericError\expandafter{% + \expandafter\tabu@WRITE\GenericError} +\def\tabu@warn{\tabu@WRITE\PackageWarning{tabu}} +\def\tabu@noxfootnote [#1]{\@gobble} +\def\tabu@nocolor #1#{\@gobble} +\newcommand*\tabu@norowcolor[2][]{} +\def\tabu@maybesiunitx #1{\def\tabu@temp{#1}% + \futurelet\@let@token \tabu@m@ybesiunitx} +\def\tabu@m@ybesiunitx #1{\def\tabu@m@ybesiunitx {% + \ifx #1\@let@token \let\tabu@cellleft \@empty \let\tabu@cellright \@empty \fi + \tabu@temp}% \tabu@m@ybesiunitx +}\expandafter\tabu@m@ybesiunitx \csname siunitx_table_collect_begin:Nn\endcsname +\def\tabu@celllalign@def #1{\def\tabu@celllalign{\tabu@maybesiunitx{#1}}}% +%% Fixed vertical spacing adjustment: \extrarowsep ------------------ +\newcommand*\extrarowsep{\edef\tabu@C@extra{\the\numexpr\tabu@C@extra+1}% + \iftabu@everyrow \aftergroup\tabu@Gextra + \else \aftergroup\tabu@n@Gextra + \fi + \@ifnextchar={\tabu@gobbletoken\tabu@extra} \tabu@extra +}% \extrarowsep +\def\tabu@extra {\@ifnextchar_% + {\tabu@gobbletoken{\tabu@setextra\extrarowheight \extrarowdepth}} + {\ifx ^\@let@token \def\tabu@temp{% + \tabu@gobbletoken{\tabu@setextra\extrarowdepth \extrarowheight}}% + \else \let\tabu@temp \@empty + \afterassignment \tabu@setextrasep \extrarowdepth + \fi \tabu@temp}% +}% \tabu@extra +\def\tabu@setextra #1#2{\def\tabu@temp{\tabu@extr@#1#2}\afterassignment\tabu@temp#2} +\def\tabu@extr@ #1#2{\@ifnextchar^% + {\tabu@gobbletoken{\tabu@setextra\extrarowdepth \extrarowheight}} + {\ifx _\@let@token \def\tabu@temp{% + \tabu@gobbletoken{\tabu@setextra\extrarowheight \extrarowdepth}}% + \else \let\tabu@temp \@empty + \tabu@Gsave \tabu@G@extra \tabu@C@extra \extrarowheight \extrarowdepth + \fi \tabu@temp}% +}% \tabu@extr@ +\def\tabu@setextrasep {\extrarowheight=\extrarowdepth + \tabu@Gsave \tabu@G@extra \tabu@C@extra \extrarowheight \extrarowdepth +}% \tabu@setextrasep +\def\tabu@Gextra{\ifx \tabu@G@extra\@empty \else {\tabu@Rextra}\fi} +\def\tabu@n@Gextra{\ifx \tabu@G@extra\@empty \else \noalign{\tabu@Rextra}\fi} +\def\tabu@Rextra{\tabu@Grestore \tabu@G@extra \tabu@C@extra} +\let\tabu@C@extra \z@ +\let\tabu@G@extra \@empty +%% Dynamic vertical spacing adjustment: \tabulinesep ---------------- +\newcommand*\tabulinesep{\edef\tabu@C@linesep{\the\numexpr\tabu@C@linesep+1}% + \iftabu@everyrow \aftergroup\tabu@Glinesep + \else \aftergroup\tabu@n@Glinesep + \fi + \@ifnextchar={\tabu@gobbletoken\tabu@linesep} \tabu@linesep +}% \tabulinesep +\def\tabu@linesep {\@ifnextchar_% + {\tabu@gobbletoken{\tabu@setsep\abovetabulinesep \belowtabulinesep}} + {\ifx ^\@let@token \def\tabu@temp{% + \tabu@gobbletoken{\tabu@setsep\belowtabulinesep \abovetabulinesep}}% + \else \let\tabu@temp \@empty + \afterassignment \tabu@setlinesep \abovetabulinesep + \fi \tabu@temp}% +}% \tabu@linesep +\def\tabu@setsep #1#2{\def\tabu@temp{\tabu@sets@p#1#2}\afterassignment\tabu@temp#2} +\def\tabu@sets@p #1#2{\@ifnextchar^% + {\tabu@gobbletoken{\tabu@setsep\belowtabulinesep \abovetabulinesep}} + {\ifx _\@let@token \def\tabu@temp{% + \tabu@gobbletoken{\tabu@setsep\abovetabulinesep \belowtabulinesep}}% + \else \let\tabu@temp \@empty + \tabu@Gsave \tabu@G@linesep \tabu@C@linesep \abovetabulinesep \belowtabulinesep + \fi \tabu@temp}% +}% \tabu@sets@p +\def\tabu@setlinesep {\belowtabulinesep=\abovetabulinesep + \tabu@Gsave \tabu@G@linesep \tabu@C@linesep \abovetabulinesep \belowtabulinesep +}% \tabu@setlinesep +\def\tabu@Glinesep{\ifx \tabu@G@linesep\@empty \else {\tabu@Rlinesep}\fi} +\def\tabu@n@Glinesep{\ifx \tabu@G@linesep\@empty \else \noalign{\tabu@Rlinesep}\fi} +\def\tabu@Rlinesep{\tabu@Grestore \tabu@G@linesep \tabu@C@linesep} +\let\tabu@C@linesep \z@ +\let\tabu@G@linesep \@empty +%% \global\extrarowsep and \global\tabulinesep ------------------- +\def\tabu@Gsave #1#2#3#4{\xdef#1{#1% + \toks#2{\toks\the\currentgrouplevel{\global#3\the#3\global#4\the#4}}}% +}% \tabu@Gsave +\def\tabu@Grestore#1#2{% + \toks#2{}#1\toks\currentgrouplevel\expandafter{\expandafter}\the\toks#2\relax + \ifcat$\the\toks\currentgrouplevel$\else + \global\let#1\@empty \global\let#2\z@ + \the\toks\currentgrouplevel + \fi +}% \tabu@Grestore +%% Setting code for every row --------------------------------------- +\newcommand*\everyrow{\tabu@everyrow@bgroup + \tabu@start \z@ \tabu@stop \z@ \tabu@evrstartstop +}% \everyrow +\def\tabu@evrstartstop {\@ifnextchar^% + {\afterassignment \tabu@evrstartstop \tabu@stop=}% + {\ifx ^\@let@token + \afterassignment\tabu@evrstartstop \tabu@start=% + \else \afterassignment\tabu@everyr@w \toks@ + \fi}% +}% \tabu@evrstartstop +\def\tabu@everyr@w {% + \xdef\tabu@everyrow{% + \noexpand\tabu@everyrowfalse + \let\noalign \relax + \noexpand\tabu@rowfontreset + \iftabu@colortbl \noexpand\tabu@rc@ \fi % \taburowcolors + \let\noexpand\tabu@docline \noexpand\tabu@docline@evr + \the\toks@ + \noexpand\tabu@evrh@@k + \noexpand\tabu@rearstrut + \global\advance\c@taburow \@ne}% + \iftabu@everyrow \toks@\expandafter + {\expandafter\def\expandafter\tabu@evr@L\expandafter{\the\toks@}\ignorespaces}% + \else \xdef\tabu@evr@G{\the\toks@}% + \fi + \tabu@everyrow@egroup +}% \tabu@everyr@w +\def\tabu@evr {\def\tabu@evrh@@k} % for internal use only +\tabu@evr{} +%% line style and leaders ------------------------------------------- +\newcommand*\newtabulinestyle [1]{% + {\@for \@tempa :=#1\do{\expandafter\tabu@newlinestyle \@tempa==\@nil}}% +}% \newtabulinestyle +\def\tabu@newlinestyle #1=#2=#3\@nil{\tabu@getline {#2}% + \tabu@sanitizearg {#1}\@tempa + \ifodd 1\ifx \@tempa\@empty \ifdefined\tabu@linestyle@ 0 \fi\fi + \global\expandafter\let + \csname tabu@linestyle@\@tempa \endcsname =\tabu@thestyle \fi +}% \tabu@newlinestyle +\newcommand*\tabulinestyle [1]{\tabu@everyrow@bgroup \tabu@getline{#1}% + \iftabu@everyrow + \toks@\expandafter{\expandafter \def \expandafter + \tabu@ls@L\expandafter{\tabu@thestyle}\ignorespaces}% + \gdef\tabu@ls@{\tabu@ls@L}% + \else + \global\let\tabu@ls@G \tabu@thestyle + \gdef\tabu@ls@{\tabu@ls@G}% + \fi + \tabu@everyrow@egroup +}% \tabulinestyle +\newcommand*\taburulecolor{\tabu@everyrow@bgroup \tabu@textbar \tabu@rulecolor} +\def\tabu@rulecolor #1{\toks@{}% + \def\tabu@temp #1##1#1{\tabu@ruledrsc{##1}}\@ifnextchar #1% + \tabu@temp + \tabu@rulearc +}% \tabu@rulecolor +\def\tabu@ruledrsc #1{\edef\tabu@temp{#1}\tabu@strtrim\tabu@temp + \ifx \tabu@temp\@empty \def\tabu@temp{\tabu@rule@drsc@ {}{}}% + \else \edef\tabu@temp{\noexpand\tabu@rule@drsc@ {}{\tabu@temp}}% + \fi + \tabu@temp +}% \tabu@ruledrsc@ +\def\tabu@ruledrsc@ #1#{\tabu@rule@drsc@ {#1}} +\def\tabu@rule@drsc@ #1#2{% + \iftabu@everyrow + \ifx \\#1#2\\\toks@{\let\CT@drsc@ \relax}% + \else \toks@{\def\CT@drsc@{\color #1{#2}}}% + \fi + \else + \ifx \\#1#2\\\global\let\CT@drsc@ \relax + \else \gdef\CT@drsc@{\color #1{#2}}% + \fi + \fi + \tabu@rulearc +}% \tabu@rule@drsc@ +\def\tabu@rulearc #1#{\tabu@rule@arc@ {#1}} +\def\tabu@rule@arc@ #1#2{% + \iftabu@everyrow + \ifx \\#1#2\\\toks@\expandafter{\the\toks@ \def\CT@arc@{}}% + \else \toks@\expandafter{\the\toks@ \def\CT@arc@{\color #1{#2}}}% + \fi + \toks@\expandafter{\the\toks@ + \let\tabu@arc@L \CT@arc@ + \let\tabu@drsc@L \CT@drsc@ + \ignorespaces}% + \else + \ifx \\#1#2\\\gdef\CT@arc@{}% + \else \gdef\CT@arc@{\color #1{#2}}% + \fi + \global\let\tabu@arc@G \CT@arc@ + \global\let\tabu@drsc@G \CT@drsc@ + \fi + \tabu@everyrow@egroup +}% \tabu@rule@arc@ +\def\taburowcolors {\tabu@everyrow@bgroup \@testopt \tabu@rowcolors 1} +\def\tabu@rowcolors [#1]#2#{\tabu@rowc@lors{#1}{#2}} +\def\tabu@rowc@lors #1#2#3{% + \toks@{}\@defaultunits \count@ =\number0#2\relax \@nnil + \@defaultunits \tabu@start =\number0#1\relax \@nnil + \ifnum \count@<\tw@ \count@=\tw@ \fi + \advance\tabu@start \m@ne + \ifnum \tabu@start<\z@ \tabu@start \z@ \fi + \tabu@rowcolorseries #3\in@..\in@ \@nnil +}% \tabu@rowcolors +\def\tabu@rowcolorseries #1..#2\in@ #3\@nnil {% + \ifx \in@#1\relax + \iftabu@everyrow \toks@{\def\tabu@rc@{}\let\tabu@rc@L \tabu@rc@}% + \else \gdef\tabu@rc@{}\global\let\tabu@rc@G \tabu@rc@ + \fi + \else + \ifx \\#2\\\tabu@rowcolorserieserror \fi + \tabu@sanitizearg{#1}\tabu@temp + \tabu@sanitizearg{#2}\@tempa + \advance\count@ \m@ne + \iftabu@everyrow + \def\tabu@rc@ ##1##2##3##4{\def\tabu@rc@{% + \ifnum ##2=\c@taburow + \definecolorseries{tabu@rcseries@\the\tabu@nested}{rgb}{last}{##3}{##4}\fi + \ifnum \c@taburow<##2 \else + \ifnum \tabu@modulo {\c@taburow-##2}{##1+1}=\z@ + \resetcolorseries[{##1}]{tabu@rcseries@\the\tabu@nested}\fi + \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}% + \rowcolor{tabu@rc@\the\tabu@nested}\fi}% + }\edef\x{\noexpand\tabu@rc@ {\the\count@} + {\the\tabu@start} + {\tabu@temp} + {\@tempa}% + }\x + \toks@\expandafter{\expandafter\def\expandafter\tabu@rc@\expandafter{\tabu@rc@}}% + \toks@\expandafter{\the\toks@ \let\tabu@rc@L \tabu@rc@ \ignorespaces}% + \else % inside \noalign + \definecolorseries{tabu@rcseries@\the\tabu@nested}{rgb}{last}{\tabu@temp}{\@tempa}% + \expandafter\resetcolorseries\expandafter[\the\count@]{tabu@rcseries@\the\tabu@nested}% + \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}% + \let\noalign \relax \rowcolor{tabu@rc@\the\tabu@nested}% + \def\tabu@rc@ ##1##2{\gdef\tabu@rc@{% + \ifnum \tabu@modulo {\c@taburow-##2}{##1+1}=\@ne + \resetcolorseries[{##1}]{tabu@rcseries@\the\tabu@nested}\fi + \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}% + \rowcolor{tabu@rc@\the\tabu@nested}}% + }\edef\x{\noexpand\tabu@rc@{\the\count@}{\the\c@taburow}}\x + \global\let\tabu@rc@G \tabu@rc@ + \fi + \fi + \tabu@everyrow@egroup +}% \tabu@rowcolorseries +\tabuDisableCommands {\let\tabu@rc@ \@empty } +\def\tabu@rowcolorserieserror {\PackageError{tabu} + {Invalid syntax for \string\taburowcolors + \MessageBreak Please look at the documentation!}\@ehd +}% \tabu@rowcolorserieserror +\newcommand*\tabureset {% + \tabulinesep=\z@ \extrarowsep=\z@ \extratabsurround=\z@ + \tabulinestyle{}\everyrow{}\taburulecolor||{}\taburowcolors{}% +}% \tabureset +%% Parsing the line styles ------------------------------------------ +\def\tabu@getline #1{\begingroup + \csname \ifcsname if@safe@actives\endcsname % + @safe@activestrue\else + relax\fi \endcsname + \edef\tabu@temp{#1}\tabu@sanitizearg{#1}\@tempa + \let\tabu@thestyle \relax + \ifcsname tabu@linestyle@\@tempa \endcsname + \edef\tabu@thestyle{\endgroup + \def\tabu@thestyle{\expandafter\noexpand + \csname tabu@linestyle@\@tempa\endcsname}% + }\tabu@thestyle + \else \expandafter\tabu@definestyle \tabu@temp \@nil + \fi +}% \tabu@getline +\def\tabu@definestyle #1#2\@nil {\endlinechar \m@ne \makeatletter + \tabu@thick \maxdimen \tabu@on \maxdimen \tabu@off \maxdimen + \let\tabu@c@lon \@undefined \let\tabu@c@loff \@undefined + \ifodd 1\ifcat .#1\else\ifcat\relax #1\else 0\fi\fi % catcode 12 or non expandable cs + \def\tabu@temp{\tabu@getparam{thick}}% + \else \def\tabu@temp{\tabu@getparam{thick}\maxdimen}% + \fi + {% + \let\tabu@ \relax + \def\:{\obeyspaces \tabu@oXIII \tabu@commaXIII \edef\:}% (space active \: happy ;-)) + \scantokens{\:{\tabu@temp #1#2 \tabu@\tabu@}}% + \expandafter}\expandafter + \def\expandafter\:\expandafter{\:}% line spec rewritten now ;-) + \def\;{\def\:}% + \scantokens\expandafter{\expandafter\;\expandafter{\:}}% space is now inactive (catcode 10) + \let\tabu@ \tabu@getcolor \:% all arguments are ready now ;-) + \ifdefined\tabu@c@lon \else \let\tabu@c@lon\@empty \fi + \ifx \tabu@c@lon\@empty \def\tabu@c@lon{\CT@arc@}\fi + \ifdefined\tabu@c@loff \else \let\tabu@c@loff \@empty \fi + \ifdim \tabu@on=\maxdimen \ifdim \tabu@off<\maxdimen + \tabu@on \tabulineon \fi\fi + \ifdim \tabu@off=\maxdimen \ifdim \tabu@on<\maxdimen + \tabu@off \tabulineoff \fi\fi + \ifodd 1\ifdim \tabu@off=\maxdimen \ifdim \tabu@on=\maxdimen 0 \fi\fi + \in@true % + \else \in@false % + \fi + \ifdim\tabu@thick=\maxdimen \def\tabu@thick{\arrayrulewidth}% + \else \edef\tabu@thick{\the\tabu@thick}% + \fi + \edef \tabu@thestyle ##1##2{\endgroup + \def\tabu@thestyle{% + \ifin@ \noexpand\tabu@leadersstyle {\tabu@thick} + {\the\tabu@on}{##1} + {\the\tabu@off}{##2}% + \else \noexpand\tabu@rulesstyle + {##1\vrule width \tabu@thick}% + {##1\leaders \hrule height \tabu@thick \hfil}% + \fi}% + }\expandafter \expandafter + \expandafter \tabu@thestyle \expandafter + \expandafter \expandafter + {\expandafter\tabu@c@lon\expandafter}\expandafter{\tabu@c@loff}% +}% \tabu@definestyle +{\catcode`\O=\active \lccode`\O=`\o \catcode`\,=\active + \lowercase{\gdef\tabu@oXIII {\catcode`\o=\active \let O=\tabu@oxiii}} + \gdef\tabu@commaXIII {\catcode`\,=\active \let ,=\space} +}% \catcode +\def\tabu@oxiii #1{% + \ifcase \ifx n#1\z@ \else + \ifx f#1\@ne\else + \tw@ \fi\fi + \expandafter\tabu@onxiii + \or \expandafter\tabu@ofxiii + \else o% + \fi#1}% +\def\tabu@onxiii #1#2{% + \ifcase \ifx !#2\tw@ \else + \ifcat.\noexpand#2\z@ \else + \ifx \tabu@spxiii#2\@ne\else + \tw@ \fi\fi\fi + \tabu@getparam{on}#2\expandafter\@gobble + \or \expandafter\tabu@onxiii % (space is active) + \else o\expandafter\@firstofone + \fi{#1#2}}% +\def\tabu@ofxiii #1#2{% + \ifx #2f\expandafter\tabu@offxiii + \else o\expandafter\@firstofone + \fi{#1#2}} +\def\tabu@offxiii #1#2{% + \ifcase \ifx !#2\tw@ \else + \ifcat.\noexpand#2\z@ \else + \ifx\tabu@spxiii#2\@ne \else + \tw@ \fi\fi\fi + \tabu@getparam{off}#2\expandafter\@gobble + \or \expandafter\tabu@offxiii % (space is active) + \else o\expandafter\@firstofone + \fi{#1#2}} +\def\tabu@getparam #1{\tabu@ \csname tabu@#1\endcsname=} +\def\tabu@getcolor #1{% \tabu@ <- \tabu@getcolor after \edef + \ifx \tabu@#1\else % no more spec + \let\tabu@theparam=#1\afterassignment \tabu@getc@l@r #1\fi +}% \tabu@getcolor +\def\tabu@getc@l@r #1\tabu@ {% + \def\tabu@temp{#1}\tabu@strtrim \tabu@temp + \ifx \tabu@temp\@empty + \else%\ifcsname \string\color@\tabu@temp \endcsname % if the color exists + \ifx \tabu@theparam \tabu@off \let\tabu@c@loff \tabu@c@l@r + \else \let\tabu@c@lon \tabu@c@l@r + \fi + %\else \tabu@warncolour{\tabu@temp}% + \fi%\fi + \tabu@ % next spec +}% \tabu@getc@l@r +\def\tabu@warncolour #1{\PackageWarning{tabu} + {Color #1 is not defined. Default color used}% +}% \tabu@warncolour +\def\tabu@leadersstyle #1#2#3#4#5{\def\tabu@leaders{{#1}{#2}{#3}{#4}{#5}}% + \ifx \tabu@leaders\tabu@leaders@G \else + \tabu@LEADERS{#1}{#2}{#3}{#4}{#5}\fi +}% \tabu@leadersstyle +\def\tabu@rulesstyle #1#2{\let\tabu@leaders \@undefined + \gdef\tabu@thevrule{#1}\gdef\tabu@thehrule{#2}% +}% \tabu@rulesstyle +%% The leaders boxes ------------------------------------------------ +\def\tabu@LEADERS #1#2#3#4#5{%% width, dash, dash color, gap, gap color + {\let\color \tabu@color % => during trials -> \color = \tabu@nocolor + {% % but the leaders boxes should have colors ! + \def\@therule{\vrule}\def\@thick{height}\def\@length{width}% + \def\@box{\hbox}\def\@unbox{\unhbox}\def\@elt{\wd}% + \def\@skip{\hskip}\def\@ss{\hss}\def\tabu@leads{\tabu@hleads}% + \tabu@l@@d@rs {#1}{#2}{#3}{#4}{#5}% + \global\let\tabu@thehleaders \tabu@theleaders + }% + {% + \def\@therule{\hrule}\def\@thick{width}\def\@length{height}% + \def\@box{\vbox}\def\@unbox{\unvbox}\def\@elt{\ht}% + \def\@skip{\vskip}\def\@ss{\vss}\def\tabu@leads{\tabu@vleads}% + \tabu@l@@d@rs {#1}{#2}{#3}{#4}{#5}% + \global\let\tabu@thevleaders \tabu@theleaders + }% + \gdef\tabu@leaders@G{{#1}{#2}{#3}{#4}{#5}}% + }% +}% \tabu@LEADERS +\def\tabu@therule #1#2{\@therule \@thick#1\@length\dimexpr#2/2 \@depth\z@} +\def\tabu@l@@d@rs #1#2#3#4#5{%% width, dash, dash color, gap, gap color + \global\setbox \tabu@leads=\@box{% + {#3\tabu@therule{#1}{#2}}% + \ifx\\#5\\\@skip#4\else{#5\tabu@therule{#1}{#4*2}}\fi + {#3\tabu@therule{#1}{#2}}}% + \global\setbox\tabu@leads=\@box to\@elt\tabu@leads{\@ss + {#3\tabu@therule{#1}{#2}}\@unbox\tabu@leads}% + \edef\tabu@theleaders ##1{\def\noexpand\tabu@theleaders {% + {##1\tabu@therule{#1}{#2}}% + \xleaders \copy\tabu@leads \@ss + \tabu@therule{0pt}{-#2}{##1\tabu@therule{#1}{#2}}}% + }\tabu@theleaders{#3}% +}% \tabu@l@@d@rs +%% \tabu \endtabu \tabu* \longtabu \endlongtabu \longtabu* ---------- +\newcommand*\tabu {\tabu@longfalse + \ifmmode \def\tabu@ {\array}\def\endtabu {\endarray}% + \else \def\tabu@ {\tabu@tabular}\def\endtabu {\endtabular}\fi + \expandafter\let\csname tabu*\endcsname \tabu + \expandafter\def\csname endtabu*\endcsname{\endtabu}% + \tabu@spreadfalse \tabu@negcoeffalse \tabu@settarget +}% {tabu} +\let\tabu@tabular \tabular % +\expandafter\def\csname tabu*\endcsname{\tabuscantokenstrue \tabu} +\newcommand*\longtabu {\tabu@longtrue + \ifmmode\PackageError{tabu}{longtabu not allowed in math mode}\fi + \def\tabu@{\longtable}\def\endlongtabu{\endlongtable}% + \LTchunksize=\@M + \expandafter\let\csname tabu*\endcsname \tabu + \expandafter\def\csname endlongtabu*\endcsname{\endlongtabu}% + \let\LT@startpbox \tabu@LT@startpbox % \everypar{ array struts } + \tabu@spreadfalse \tabu@negcoeffalse \tabu@settarget +}% {longtabu} +\expandafter\def\csname longtabu*\endcsname{\tabuscantokenstrue \longtabu} +\def\tabu@nolongtabu{\PackageError{tabu} + {longtabu requires the longtable package}\@ehd} +%% Read the target and then : \tabular or \@array ------------------ +\def\tabu@settarget {\futurelet\@let@token \tabu@sett@rget } +\def\tabu@sett@rget {\tabu@target \z@ + \ifcase \ifx \bgroup\@let@token \z@ \else + \ifx \@sptoken\@let@token \@ne \else + \if t\@let@token \tw@ \else + \if s\@let@token \thr@@\else + \z@\fi\fi\fi\fi + \expandafter\tabu@begin + \or \expandafter\tabu@gobblespace\expandafter\tabu@settarget + \or \expandafter\tabu@to + \or \expandafter\tabu@spread + \fi +}% \tabu@sett@rget +\def\tabu@to to{\def\tabu@halignto{to}\tabu@gettarget} +\def\tabu@spread spread{\tabu@spreadtrue\def\tabu@halignto{spread}\tabu@gettarget} +\def\tabu@gettarget {\afterassignment\tabu@linegoaltarget \tabu@target } +\def\tabu@linegoaltarget {\futurelet\tabu@temp \tabu@linegoalt@rget } +\def\tabu@linegoalt@rget {% + \ifx \tabu@temp\LNGL@setlinegoal + \LNGL@setlinegoal \expandafter \@firstoftwo \fi % @gobbles \LNGL@setlinegoal + \tabu@begin +}% \tabu@linegoalt@rget +\def\tabu@begin #1#{% + \iftabu@measuring \expandafter\tabu@nestedmeasure \fi + \ifdim \tabu@target=\z@ \let\tabu@halignto \@empty + \else \edef\tabu@halignto{\tabu@halignto\the\tabu@target}% + \fi + \@testopt \tabu@tabu@ \tabu@aligndefault #1\@nil +}% \tabu@begin +\long\def\tabu@tabu@ [#1]#2\@nil #3{\tabu@setup + \def\tabu@align {#1}\def\tabu@savedpream{\NC@find #3}% + \tabu@ [\tabu@align ]#2{#3\tabu@rewritefirst }% +}% \tabu@tabu@ +\def\tabu@nestedmeasure {% + \ifodd 1\iftabu@spread \else \ifdim\tabu@target=\z@ \else 0 \fi\fi\relax + \tabu@spreadtrue + \else \begingroup \iffalse{\fi \ifnum0=`}\fi + \toks@{}\def\tabu@stack{b}% + \expandafter\tabu@collectbody\expandafter\tabu@quickrule + \expandafter\endgroup + \fi +}% \tabu@nestedmeasure +\def\tabu@quickrule {\indent\vrule height\z@ depth\z@ width\tabu@target} +%% \tabu@setup \tabu@init \tabu@indent +\def\tabu@setup{\tabu@alloc@ + \ifcase \tabu@nested + \ifmmode \else \iftabu@spread\else \ifdim\tabu@target=\z@ + \let\tabu@afterendpar \par + \fi\fi\fi + \def\tabu@aligndefault{c}\tabu@init \tabu@indent + \else % + \def\tabu@aligndefault{t}\let\tabudefaulttarget \linewidth + \fi + \let\tabu@thetarget \tabudefaulttarget \let\tabu@restored \@undefined + \edef\tabu@NC@list{\the\NC@list}\NC@list{\NC@do \tabu@rewritefirst}% + \everycr{}\let\@startpbox \tabu@startpbox % for nested tabu inside longtabu... + \let\@endpbox \tabu@endpbox % idem " " " " " " + \let\@tabarray \tabu@tabarray % idem " " " " " " + \tabu@setcleanup \tabu@setreset +}% \tabu@setup +\def\tabu@init{\tabu@starttimer \tabu@measuringfalse + \edef\tabu@hfuzz {\the\dimexpr\hfuzz+1sp}\global\tabu@footnotes{}% + \let\firsthline \tabu@firsthline \let\lasthline \tabu@lasthline + \let\firstline \tabu@firstline \let\lastline \tabu@lastline + \let\hline \tabu@hline \let\@xhline \tabu@xhline + \let\color \tabu@color \let\@arstrutbox \tabu@arstrutbox + \iftabu@colortbl\else\let\LT@@hline \tabu@LT@@hline \fi + \tabu@trivlist % + \let\@footnotetext \tabu@footnotetext \let\@xfootnotetext \tabu@xfootnotetext + \let\@xfootnote \tabu@xfootnote \let\centering \tabu@centering + \let\raggedright \tabu@raggedright \let\raggedleft \tabu@raggedleft + \let\tabudecimal \tabu@tabudecimal \let\Centering \tabu@Centering + \let\RaggedRight \tabu@RaggedRight \let\RaggedLeft \tabu@RaggedLeft + \let\justifying \tabu@justifying \let\rowfont \tabu@rowfont + \let\fbox \tabu@fbox \let\color@b@x \tabu@color@b@x + \let\tabu@@everycr \everycr \let\tabu@@everypar \everypar + \let\tabu@prepnext@tokORI \prepnext@tok\let\prepnext@tok \tabu@prepnext@tok + \let\tabu@multicolumnORI\multicolumn \let\multicolumn \tabu@multicolumn + \let\tabu@startpbox \@startpbox % for nested tabu inside longtabu pfff !!! + \let\tabu@endpbox \@endpbox % idem " " " " " " " + \let\tabu@tabarray \@tabarray % idem " " " " " " " + \tabu@adl@fix \let\endarray \tabu@endarray % colortbl & arydshln (delarray) + \iftabu@colortbl\CT@everycr\expandafter{\expandafter\iftabu@everyrow \the\CT@everycr \fi}\fi +}% \tabu@init +\def\tabu@indent{% correction for indentation + \ifdim \parindent>\z@\ifx \linewidth\tabudefaulttarget + \everypar\expandafter{% + \the\everypar\everypar\expandafter{\the\everypar}% + \setbox\z@=\lastbox + \ifdim\wd\z@>\z@ \edef\tabu@thetarget + {\the\dimexpr -\wd\z@+\tabudefaulttarget}\fi + \box\z@}% + \fi\fi +}% \tabu@indent +\def\tabu@setcleanup {% saves last global assignments + \ifodd 1\ifmmode \else \iftabu@long \else 0\fi\fi\relax + \def\tabu@aftergroupcleanup{% + \def\tabu@aftergroupcleanup{\aftergroup\tabu@cleanup}}% + \else + \def\tabu@aftergroupcleanup{% + \aftergroup\aftergroup\aftergroup\tabu@cleanup + \let\tabu@aftergroupcleanup \relax}% + \fi + \let\tabu@arc@Gsave \tabu@arc@G + \let\tabu@arc@G \tabu@arc@L % + \let\tabu@drsc@Gsave \tabu@drsc@G + \let\tabu@drsc@G \tabu@drsc@L % + \let\tabu@ls@Gsave \tabu@ls@G + \let\tabu@ls@G \tabu@ls@L % + \let\tabu@rc@Gsave \tabu@rc@G + \let\tabu@rc@G \tabu@rc@L % + \let\tabu@evr@Gsave \tabu@evr@G + \let\tabu@evr@G \tabu@evr@L % + \let\tabu@celllalign@save \tabu@celllalign + \let\tabu@cellralign@save \tabu@cellralign + \let\tabu@cellleft@save \tabu@cellleft + \let\tabu@cellright@save \tabu@cellright + \let\tabu@@celllalign@save \tabu@@celllalign + \let\tabu@@cellralign@save \tabu@@cellralign + \let\tabu@@cellleft@save \tabu@@cellleft + \let\tabu@@cellright@save \tabu@@cellright + \let\tabu@rowfontreset@save \tabu@rowfontreset + \let\tabu@@rowfontreset@save\tabu@@rowfontreset + \let\tabu@rowfontreset \@empty + \edef\tabu@alloc@save {\the\tabu@alloc}% restore at \tabu@reset + \edef\c@taburow@save {\the\c@taburow}% + \edef\tabu@naturalX@save {\the\tabu@naturalX}% + \let\tabu@naturalXmin@save \tabu@naturalXmin + \let\tabu@naturalXmax@save \tabu@naturalXmax + \let\tabu@mkarstrut@save \tabu@mkarstrut + \edef\tabu@clarstrut{% + \extrarowheight \the\dimexpr \ht\@arstrutbox-\ht\strutbox \relax + \extrarowdepth \the\dimexpr \dp\@arstrutbox-\dp\strutbox \relax + \let\noexpand\@arraystretch \@ne \noexpand\tabu@rearstrut}% +}% \tabu@setcleanup +\def\tabu@cleanup {\begingroup + \globaldefs\@ne \tabu@everyrowtrue + \let\tabu@arc@G \tabu@arc@Gsave + \let\CT@arc@ \tabu@arc@G + \let\tabu@drsc@G \tabu@drsc@Gsave + \let\CT@drsc@ \tabu@drsc@G + \let\tabu@ls@G \tabu@ls@Gsave + \let\tabu@ls@ \tabu@ls@G + \let\tabu@rc@G \tabu@rc@Gsave + \let\tabu@rc@ \tabu@rc@G + \let\CT@do@color \relax + \let\tabu@evr@G \tabu@evr@Gsave + \let\tabu@celllalign \tabu@celllalign@save + \let\tabu@cellralign \tabu@cellralign@save + \let\tabu@cellleft \tabu@cellleft@save + \let\tabu@cellright \tabu@cellright@save + \let\tabu@@celllalign \tabu@@celllalign@save + \let\tabu@@cellralign \tabu@@cellralign@save + \let\tabu@@cellleft \tabu@@cellleft@save + \let\tabu@@cellright \tabu@@cellright@save + \let\tabu@rowfontreset \tabu@rowfontreset@save + \let\tabu@@rowfontreset \tabu@@rowfontreset@save + \tabu@naturalX =\tabu@naturalX@save + \let\tabu@naturalXmax \tabu@naturalXmax@save + \let\tabu@naturalXmin \tabu@naturalXmin@save + \let\tabu@mkarstrut \tabu@mkarstrut@save + \c@taburow =\c@taburow@save + \ifcase \tabu@nested \tabu@alloc \m@ne\fi + \endgroup % + \ifcase \tabu@nested + \the\tabu@footnotes \global\tabu@footnotes{}% + \tabu@afterendpar \tabu@elapsedtime + \fi + \tabu@clarstrut + \everyrow\expandafter {\tabu@evr@G}% +}% \tabu@cleanup +\let\tabu@afterendpar \relax +\def\tabu@setreset {% + \edef\tabu@savedparams {% \relax for \tabu@message@save + \ifmmode \col@sep \the\arraycolsep + \else \col@sep \the\tabcolsep \fi \relax + \arrayrulewidth \the\arrayrulewidth \relax + \doublerulesep \the\doublerulesep \relax + \extratabsurround \the\extratabsurround \relax + \extrarowheight \the\extrarowheight \relax + \extrarowdepth \the\extrarowdepth \relax + \abovetabulinesep \the\abovetabulinesep \relax + \belowtabulinesep \the\belowtabulinesep \relax + \def\noexpand\arraystretch{\arraystretch}% + \ifdefined\minrowclearance \minrowclearance\the\minrowclearance\relax\fi}% + \begingroup + \@temptokena\expandafter{\tabu@savedparams}% => only for \savetabu / \usetabu + \ifx \tabu@arc@L\relax \else \tabu@setsave \tabu@arc@L \fi + \ifx \tabu@drsc@L\relax \else \tabu@setsave \tabu@drsc@L \fi + \tabu@setsave \tabu@ls@L \tabu@setsave \tabu@evr@L + \expandafter \endgroup \expandafter + \def\expandafter\tabu@saved@ \expandafter{\the\@temptokena + \let\tabu@arc@G \tabu@arc@L + \let\tabu@drsc@G \tabu@drsc@L + \let\tabu@ls@G \tabu@ls@L + \let\tabu@rc@G \tabu@rc@L + \let\tabu@evr@G \tabu@evr@L}% + \def\tabu@reset{\tabu@savedparams + \tabu@everyrowtrue \c@taburow \z@ + \let\CT@arc@ \tabu@arc@L + \let\CT@drsc@ \tabu@drsc@L + \let\tabu@ls@ \tabu@ls@L + \let\tabu@rc@ \tabu@rc@L + \global\tabu@alloc \tabu@alloc@save + \everyrow\expandafter{\tabu@evr@L}}% +}% \tabu@reset +\def\tabu@setsave #1{\expandafter\tabu@sets@ve #1\@nil{#1}} +\long\def\tabu@sets@ve #1\@nil #2{\@temptokena\expandafter{\the\@temptokena \def#2{#1}}} +%% The Rewriting Process ------------------------------------------- +\def\tabu@newcolumntype #1{% + \expandafter\tabu@new@columntype + \csname NC@find@\string#1\expandafter\endcsname + \csname NC@rewrite@\string#1\endcsname + {#1}% +}% \tabu@newcolumntype +\def\tabu@new@columntype #1#2#3{% + \def#1##1#3{\NC@{##1}}% + \let#2\relax \newcommand*#2% +}% \tabu@new@columntype +\def\tabu@privatecolumntype #1{% + \expandafter\tabu@private@columntype + \csname NC@find@\string#1\expandafter\endcsname + \csname NC@rewrite@\string#1\expandafter\endcsname + \csname tabu@NC@find@\string#1\expandafter\endcsname + \csname tabu@NC@rewrite@\string#1\endcsname + {#1}% +}% \tabu@privatecolumntype +\def\tabu@private@columntype#1#2#3#4{% + \g@addto@macro\tabu@privatecolumns{\let#1#3\let#2#4}% + \tabu@new@columntype#3#4% +}% \tabu@private@columntype +\let\tabu@privatecolumns \@empty +\newcommand*\tabucolumn [1]{\expandafter \def \expandafter + \tabu@highprioritycolumns\expandafter{\tabu@highprioritycolumns + \NC@do #1}}% +\let\tabu@highprioritycolumns \@empty +%% The | ``column'' : rewriting process -------------------------- +\tabu@privatecolumntype |{\tabu@rewritevline} +\newcommand*\tabu@rewritevline[1][]{\tabu@vlinearg{#1}% + \expandafter \NC@find \tabu@rewritten} +\def\tabu@lines #1{% + \ifx|#1\else \tabu@privatecolumntype #1{\tabu@rewritevline}\fi + \NC@list\expandafter{\the\NC@list \NC@do #1}% +}% \tabu@lines@ +\def\tabu@vlinearg #1{% + \ifx\\#1\\\def\tabu@thestyle {\tabu@ls@}% + \else\tabu@getline {#1}% + \fi + \def\tabu@rewritten ##1{\def\tabu@rewritten{!{##1\tabu@thevline}}% + }\expandafter\tabu@rewritten\expandafter{\tabu@thestyle}% + \expandafter \tabu@keepls \tabu@thestyle \@nil +}% \tabu@vlinearg +\def\tabu@keepls #1\@nil{% + \ifcat $\@cdr #1\@nil $% + \ifx \relax#1\else + \ifx \tabu@ls@#1\else + \let#1\relax + \xdef\tabu@mkpreambuffer{\tabu@mkpreambuffer + \tabu@savels\noexpand#1}\fi\fi\fi +}% \tabu@keepls +\def\tabu@thevline {\begingroup + \ifdefined\tabu@leaders + \setbox\@tempboxa=\vtop to\dimexpr + \ht\@arstrutbox+\dp\@arstrutbox{{\tabu@thevleaders}}% + \ht\@tempboxa=\ht\@arstrutbox \dp\@tempboxa=\dp\@arstrutbox + \box\@tempboxa + \else + \tabu@thevrule + \fi \endgroup +}% \tabu@thevline +\def\tabu@savels #1{% + \expandafter\let\csname\string#1\endcsname #1% + \expandafter\def\expandafter\tabu@reset\expandafter{\tabu@reset + \tabu@resetls#1}}% +\def\tabu@resetls #1{\expandafter\let\expandafter#1\csname\string#1\endcsname}% +%% \multicolumn inside tabu environment ----------------------------- +\tabu@newcolumntype \tabu@rewritemulticolumn{% + \aftergroup \tabu@endrewritemulticolumn % after \@mkpream group + \NC@list{\NC@do *}\tabu@textbar \tabu@lines + \tabu@savedecl + \tabu@privatecolumns + \NC@list\expandafter{\the\expandafter\NC@list \tabu@NC@list}% + \let\tabu@savels \relax + \NC@find +}% \tabu@rewritemulticolumn +\def\tabu@endrewritemulticolumn{\gdef\tabu@mkpreambuffer{}\endgroup} +\def\tabu@multicolumn{\tabu@ifenvir \tabu@multic@lumn \tabu@multicolumnORI} +\long\def\tabu@multic@lumn #1#2#3{\multispan{#1}\begingroup + \tabu@everyrowtrue + \NC@list{\NC@do \tabu@rewritemulticolumn}% + \expandafter\@gobbletwo % gobbles \multispan{#1} + \tabu@multicolumnORI{#1}{\tabu@rewritemulticolumn #2}% + {\iftabuscantokens \tabu@rescan \else \expandafter\@firstofone \fi + {#3}}% +}% \tabu@multic@lumn +%% The X column(s): rewriting process ----------------------------- +\tabu@privatecolumntype X[1][]{\begingroup \tabu@siunitx{\endgroup \tabu@rewriteX {#1}}} +\def\tabu@nosiunitx #1{#1{}{}\expandafter \NC@find \tabu@rewritten } +\def\tabu@siunitx #1{\@ifnextchar \bgroup + {\tabu@rewriteX@Ss{#1}} + {\tabu@nosiunitx{#1}}} +\def\tabu@rewriteX@Ss #1#2{\@temptokena{}% + \@defaultunits \let\tabu@temp =#2\relax\@nnil + \ifodd 1\ifx S\tabu@temp \else \ifx s\tabu@temp \else 0 \fi\fi + \def\NC@find{\def\NC@find >####1####2<####3\relax{#1 {####1}{####3}% + }\expandafter\NC@find \the\@temptokena \relax + }\expandafter\NC@rewrite@S \@gobble #2\relax + \else \tabu@siunitxerror + \fi + \expandafter \NC@find \tabu@rewritten +}% \tabu@rewriteX@Ss +\def\tabu@siunitxerror {\PackageError{tabu}{Not a S nor s column ! + \MessageBreak X column can only embed siunitx S or s columns}\@ehd +}% \tabu@siunitxerror +\def\tabu@rewriteX #1#2#3{\tabu@Xarg {#1}{#2}{#3}% + \iftabu@measuring + \else \tabu@measuringtrue % first X column found in the preamble + \let\@halignto \relax \let\tabu@halignto \relax + \iftabu@spread \tabu@spreadtarget \tabu@target \tabu@target \z@ + \else \tabu@spreadtarget \z@ \fi + \ifdim \tabu@target=\z@ + \setlength\tabu@target \tabu@thetarget + \tabu@message{\tabu@message@defaulttarget}% + \else \tabu@message{\tabu@message@target}\fi + \fi +}% \tabu@rewriteX +\def\tabu@rewriteXrestore #1#2#3{\let\@halignto \relax + \def\tabu@rewritten{l}} +\def\tabu@Xarg #1#2#3{% + \advance\tabu@Xcol \@ne \let\tabu@Xlcr \@empty + \let\tabu@Xdisp \@empty \let\tabu@Xmath \@empty + \ifx\\#1\\% + \def\tabu@rewritten{p}\tabucolX \p@ % + \else + \let\tabu@rewritten \@empty \let\tabu@temp \@empty \tabucolX \z@ + \tabu@Xparse {}#1\relax + \fi + \tabu@Xrewritten{#2}{#3}% +}% \tabu@Xarg +\def\tabu@Xparse #1{\futurelet\@let@token \tabu@Xtest} +\expandafter\def\expandafter\tabu@Xparsespace\space{\tabu@Xparse{}} +\def\tabu@Xtest{% + \ifcase \ifx \relax\@let@token \z@ \else + \if ,\@let@token \m@ne\else + \if p\@let@token 1\else + \if m\@let@token 2\else + \if b\@let@token 3\else + \if l\@let@token 4\else + \if c\@let@token 5\else + \if r\@let@token 6\else + \if j\@let@token 7\else + \if L\@let@token 8\else + \if C\@let@token 9\else + \if R\@let@token 10\else + \if J\@let@token 11\else + \ifx \@sptoken\@let@token 12\else + \if .\@let@token 13\else + \if -\@let@token 13\else + \ifcat $\@let@token 14\else + 15\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\relax + \or \tabu@Xtype {p}% + \or \tabu@Xtype {m}% + \or \tabu@Xtype {b}% + \or \tabu@Xalign \raggedright\relax + \or \tabu@Xalign \centering\relax + \or \tabu@Xalign \raggedleft\relax + \or \tabu@Xalign \tabu@justify\relax + \or \tabu@Xalign \RaggedRight\raggedright + \or \tabu@Xalign \Centering\centering + \or \tabu@Xalign \RaggedLeft\raggedleft + \or \tabu@Xalign \justifying\tabu@justify + \or \expandafter \tabu@Xparsespace + \or \expandafter \tabu@Xcoef + \or \expandafter \tabu@Xm@th + \or \tabu@Xcoef{}% + \else\expandafter \tabu@Xparse + \fi +}% \tabu@Xtest +\def\tabu@Xalign #1#2{% + \ifx \tabu@Xlcr\@empty \else \PackageWarning{tabu} + {Duplicate horizontal alignment specification}\fi + \ifdefined#1\def\tabu@Xlcr{#1}\let#1\relax + \else \def\tabu@Xlcr{#2}\let#2\relax\fi + \expandafter\tabu@Xparse +}% \tabu@Xalign +\def\tabu@Xtype #1{% + \ifx \tabu@rewritten\@empty \else \PackageWarning{tabu} + {Duplicate vertical alignment specification}\fi + \def\tabu@rewritten{#1}\expandafter\tabu@Xparse +}% \tabu@Xtype +\def\tabu@Xcoef#1{\edef\tabu@temp{\tabu@temp#1}% + \afterassignment\tabu@Xc@ef \tabu@cnt\number\if-#10\fi +}% \tabu@Xcoef +\def\tabu@Xc@ef{\advance\tabucolX \tabu@temp\the\tabu@cnt\p@ + \tabu@Xparse{}% +}% \tabu@Xc@ef +\def\tabu@Xm@th #1{\futurelet \@let@token \tabu@Xd@sp} +\def\tabu@Xd@sp{\let\tabu@Xmath=$% + \ifx $\@let@token \def\tabu@Xdisp{\displaystyle}% + \expandafter\tabu@Xparse + \else \expandafter\tabu@Xparse\expandafter{\expandafter}% + \fi +}% \tabu@Xd@sp +\def\tabu@Xrewritten {% + \ifx \tabu@rewritten\@empty \def\tabu@rewritten{p}\fi + \ifdim \tabucolX<\z@ \tabu@negcoeftrue + \else\ifdim \tabucolX=\z@ \tabucolX \p@ + \fi\fi + \edef\tabu@temp{{\the\tabu@Xcol}{\tabu@strippt\tabucolX}}% + \edef\tabu@Xcoefs{\tabu@Xcoefs \tabu@ \tabu@temp}% + \edef\tabu@rewritten ##1##2{\def\noexpand\tabu@rewritten{% + >{\tabu@Xlcr \ifx$\tabu@Xmath$\tabu@Xdisp\fi ##1}% + \tabu@rewritten {\tabu@hsize \tabu@temp}% + <{##2\ifx$\tabu@Xmath$\fi}}% + }\tabu@rewritten +}% \tabu@Xrewritten +\def\tabu@hsize #1#2{% + \ifdim #2\p@<\z@ + \ifdim \tabucolX=\maxdimen \tabu@wd{#1}\else + \ifdim \tabu@wd{#1}<-#2\tabucolX \tabu@wd{#1}\else -#2\tabucolX\fi + \fi + \else #2\tabucolX + \fi +}% \tabu@hsize +%% \usetabu and \preamble: rewriting process --------------------- +\tabu@privatecolumntype \usetabu [1]{% + \ifx\\#1\\\tabu@saveerr{}\else + \@ifundefined{tabu@saved@\string#1} + {\tabu@saveerr{#1}} + {\let\tabu@rewriteX \tabu@rewriteXrestore + \csname tabu@saved@\string#1\expandafter\endcsname\expandafter\@ne}% + \fi +}% \NC@rewrite@\usetabu +\tabu@privatecolumntype \preamble [1]{% + \ifx\\#1\\\tabu@saveerr{}\else + \@ifundefined{tabu@saved@\string#1} + {\tabu@saveerr{#1}} + {\csname tabu@saved@\string#1\expandafter\endcsname\expandafter\z@}% + \fi +}% \NC@rewrite@\preamble +%% Controlling the rewriting process ------------------------------- +\tabu@newcolumntype \tabu@rewritefirst{% + \iftabu@long \aftergroup \tabu@longpream % + \else \aftergroup \tabu@pream + \fi + \let\tabu@ \relax \let\tabu@hsize \relax + \let\tabu@Xcoefs \@empty \let\tabu@savels \relax + \tabu@Xcol \z@ \tabu@cnt \tw@ + \gdef\tabu@mkpreambuffer{\tabu@{}}\tabu@measuringfalse + \global\setbox\@arstrutbox \box\@arstrutbox + \NC@list{\NC@do *}\tabu@textbar \tabu@lines + \NC@list\expandafter{\the\NC@list \NC@do X}% + \iftabu@siunitx % + \NC@list\expandafter{\the\NC@list \NC@do S\NC@do s}\fi + \NC@list\expandafter{\the\expandafter\NC@list \tabu@highprioritycolumns}% + \expandafter\def\expandafter\tabu@NC@list\expandafter{% + \the\expandafter\NC@list \tabu@NC@list}% % * | X S + \NC@list\expandafter{\expandafter \NC@do \expandafter\usetabu + \expandafter \NC@do \expandafter\preamble + \the\NC@list \NC@do \tabu@rewritemiddle + \NC@do \tabu@rewritelast}% + \tabu@savedecl + \tabu@privatecolumns + \edef\tabu@prev{\the\@temptokena}\NC@find \tabu@rewritemiddle +}% NC@rewrite@\tabu@rewritefirst +\tabu@newcolumntype \tabu@rewritemiddle{% + \edef\tabu@temp{\the\@temptokena}\NC@find \tabu@rewritelast +}% \NC@rewrite@\tabu@rewritemiddle +\tabu@newcolumntype \tabu@rewritelast{% + \ifx \tabu@temp\tabu@prev \advance\tabu@cnt \m@ne + \NC@list\expandafter{\tabu@NC@list \NC@do \tabu@rewritemiddle + \NC@do \tabu@rewritelast}% + \else \let\tabu@prev\tabu@temp + \fi + \ifcase \tabu@cnt \expandafter\tabu@endrewrite + \else \expandafter\NC@find \expandafter\tabu@rewritemiddle + \fi +}% \NC@rewrite@\tabu@rewritelast +%% Choosing the strategy -------------------------------------------- +\def\tabu@endrewrite {% + \let\tabu@temp \NC@find + \ifx \@arrayright\relax \let\@arrayright \@empty \fi + \count@=% + \ifx \@finalstrut\tabu@finalstrut \z@ % outer in mode 0 print + \iftabu@measuring + \xdef\tabu@mkpreambuffer{\tabu@mkpreambuffer + \tabu@target \csname tabu@\the\tabu@nested.T\endcsname + \tabucolX \csname tabu@\the\tabu@nested.X\endcsname + \edef\@halignto {\ifx\@arrayright\@empty to\tabu@target\fi}}% + \fi + \else\iftabu@measuring 4 % X columns + \xdef\tabu@mkpreambuffer{\tabu@{\tabu@mkpreambuffer + \tabu@target \the\tabu@target + \tabu@spreadtarget \the\tabu@spreadtarget}% + \def\noexpand\tabu@Xcoefs{\tabu@Xcoefs}% + \edef\tabu@halignto{\ifx \@arrayright\@empty to\tabu@target\fi}}% + \let\tabu@Xcoefs \relax + \else\ifcase\tabu@nested \thr@@ % outer, no X + \global\let\tabu@afterendpar \relax + \else \@ne % inner, no X, outer in mode 1 or 2 + \fi + \ifdefined\tabu@usetabu + \else \ifdim\tabu@target=\z@ + \else \let\tabu@temp \tabu@extracolsep + \fi\fi + \fi + \fi + \xdef\tabu@mkpreambuffer{\count@ \the\count@ \tabu@mkpreambuffer}% + \tabu@temp +}% \tabu@endrewrite +\def\tabu@extracolsep{\@defaultunits \expandafter\let + \expandafter\tabu@temp \expandafter=\the\@temptokena \relax\@nnil + \ifx \tabu@temp\@sptoken + \expandafter\tabu@gobblespace \expandafter\tabu@extracolsep + \else + \edef\tabu@temp{\noexpand\NC@find + \if |\noexpand\tabu@temp @% + \else\if !\noexpand\tabu@temp @% + \else !% + \fi\fi + {\noexpand\extracolsep\noexpand\@flushglue}}% + \fi + \tabu@temp +}% \tabu@extrac@lsep +%% Implementing the strategy ---------------------------------------- +\long\def\tabu@pream #1\@preamble {% + \let\tabu@ \tabu@@ \tabu@mkpreambuffer \tabu@aftergroupcleanup + \NC@list\expandafter {\tabu@NC@list}% in case of nesting... + \ifdefined\tabu@usetabu \tabu@usetabu \tabu@target \z@ \fi + \let\tabu@savedpreamble \@preamble + \global\let\tabu@elapsedtime \relax + \tabu@thebody ={#1\tabu@aftergroupcleanup}% + \tabu@thebody =\expandafter{\the\expandafter\tabu@thebody + \@preamble}% + \edef\tabuthepreamble {\the\tabu@thebody}% ( no @ allowed for \scantokens ) + \tabu@select +}% \tabu@pream +\long\def\tabu@longpream #1\LT@bchunk #2\LT@bchunk{% + \let\tabu@ \tabu@@ \tabu@mkpreambuffer \tabu@aftergroupcleanup + \NC@list\expandafter {\tabu@NC@list}% in case of nesting... + \let\tabu@savedpreamble \@preamble + \global\let\tabu@elapsedtime \relax + \tabu@thebody ={#1\LT@bchunk #2\tabu@aftergroupcleanup \LT@bchunk}% + \edef\tabuthepreamble {\the\tabu@thebody}% ( no @ allowed for \scantokens ) + \tabu@select +}% \tabu@longpream +\def\tabu@select {% + \ifnum\tabu@nested>\z@ \tabuscantokensfalse \fi + \ifnum \count@=\@ne \iftabu@measuring \count@=\tw@ \fi\fi + \ifcase \count@ + \global\let\tabu@elapsedtime \relax + \tabu@seteverycr + \expandafter \tabuthepreamble % vertical adjustment (inherited from outer) + \or % exit in vertical measure + struts per cell because no X and outer in mode 3 + \tabu@evr{\tabu@verticalinit}\tabu@celllalign@def{\tabu@verticalmeasure}% + \def\tabu@cellralign{\tabu@verticalspacing}% + \tabu@seteverycr + \expandafter \tabuthepreamble + \or % exit without measure because no X and outer in mode 4 + \tabu@evr{}\tabu@celllalign@def{}\let\tabu@cellralign \@empty + \tabu@seteverycr + \expandafter \tabuthepreamble + \else % needs trials + \tabu@evr{}\tabu@celllalign@def{}\let\tabu@cellralign \@empty + \tabu@savecounters + \expandafter \tabu@setstrategy + \fi +}% \tabu@select +\def\tabu@@ {\gdef\tabu@mkpreambuffer} +%% Protections to set up before trials ------------------------------ +\def\tabu@setstrategy {\begingroup % + \tabu@trialh@@k \tabu@cnt \z@ % number of trials + \hbadness \@M \let\hbadness \@tempcnta + \hfuzz \maxdimen \let\hfuzz \@tempdima + \let\write \tabu@nowrite\let\GenericError \tabu@GenericError + \let\savetabu \@gobble \let\tabudefaulttarget \linewidth + \let\@footnotetext \@gobble \let\@xfootnote \tabu@xfootnote + \let\color \tabu@nocolor\let\rowcolor \tabu@norowcolor + \let\tabu@aftergroupcleanup \relax % only after the last trial + \tabu@mkpreambuffer + \ifnum \count@>\thr@@ \let\@halignto \@empty \tabucolX@init + \def\tabu@lasttry{\m@ne\p@}\fi + \begingroup \iffalse{\fi \ifnum0=`}\fi + \toks@{}\def\tabu@stack{b}\iftabuscantokens \endlinechar=10 \obeyspaces \fi % + \tabu@collectbody \tabu@strategy % +}% \tabu@setstrategy +\def\tabu@savecounters{% + \def\@elt ##1{\csname c@##1\endcsname\the\csname c@##1\endcsname}% + \edef\tabu@clckpt {\begingroup \globaldefs=\@ne \cl@@ckpt \endgroup}\let\@elt \relax +}% \tabu@savecounters +\def\tabucolX@init {% \tabucolX <= \tabu@target / (sum coefs > 0) + \dimen@ \z@ \tabu@Xsum \z@ \tabucolX \z@ \let\tabu@ \tabu@Xinit \tabu@Xcoefs + \ifdim \dimen@>\z@ + \@tempdima \dimexpr \tabu@target *\p@/\dimen@ + \tabu@hfuzz\relax + \ifdim \tabucolX<\@tempdima \tabucolX \@tempdima \fi + \fi +}% \tabucolX@init +\def\tabu@Xinit #1#2{\tabu@Xcol #1 \advance \tabu@Xsum + \ifdim #2\p@>\z@ #2\p@ \advance\dimen@ #2\p@ + \else -#2\p@ \tabu@negcoeftrue + \@tempdima \dimexpr \tabu@target*\p@/\dimexpr-#2\p@\relax \relax + \ifdim \tabucolX<\@tempdima \tabucolX \@tempdima \fi + \tabu@wddef{#1}{0pt}% + \fi +}% \tabu@Xinit +%% Collecting the environment body ---------------------------------- +\long\def\tabu@collectbody #1#2\end #3{% + \edef\tabu@stack{\tabu@pushbegins #2\begin\end\expandafter\@gobble\tabu@stack}% + \ifx \tabu@stack\@empty + \toks@\expandafter{\expandafter\tabu@thebody\expandafter{\the\toks@ #2}% + \def\tabu@end@envir{\end{#3}}% + \iftabuscantokens + \iftabu@long \def\tabu@endenvir {\end{#3}\tabu@gobbleX}% + \else \def\tabu@endenvir {\let\endarray \@empty + \end{#3}\tabu@gobbleX}% + \fi + \else \def\tabu@endenvir {\end{#3}}\fi}% + \let\tabu@collectbody \tabu@endofcollect + \else\def\tabu@temp{#3}% + \ifx \tabu@temp\@empty \toks@\expandafter{\the\toks@ #2\end }% + \else \ifx\tabu@temp\tabu@@spxiii \toks@\expandafter{\the\toks@ #2\end #3}% + \else \ifx\tabu@temp\tabu@X \toks@\expandafter{\the\toks@ #2\end #3}% + \else \toks@\expandafter{\the\toks@ #2\end{#3}}% + \fi\fi\fi + \fi + \tabu@collectbody{#1}% +}% \tabu@collectbody +\long\def\tabu@pushbegins#1\begin#2{\ifx\end#2\else b\expandafter\tabu@pushbegins\fi}% +\def\tabu@endofcollect #1{\ifnum0=`{}\fi + \expandafter\endgroup \the\toks@ #1% +}% \tabu@endofcollect +%% The trials: switching between strategies ------------------------- +\def\tabu@strategy {\relax % stops \count@ assignment ! + \ifcase\count@ % case 0 = print with vertical adjustment (outer is finished) + \expandafter \tabu@endoftrials + \or % case 1 = exit in vertical measure (outer in mode 3) + \expandafter\xdef\csname tabu@\the\tabu@nested.T\endcsname{\the\tabu@target}% + \expandafter\xdef\csname tabu@\the\tabu@nested.X\endcsname{\the\tabucolX}% + \expandafter \tabu@endoftrials + \or % case 2 = exit with a rule replacing the table (outer in mode 4) + \expandafter \tabu@quickend + \or % case 3 = outer is in mode 3 because of no X + \begingroup + \tabu@evr{\tabu@verticalinit}\tabu@celllalign@def{\tabu@verticalmeasure}% + \def\tabu@cellralign{\tabu@verticalspacing}% + \expandafter \tabu@measuring + \else % case 4 = horizontal measure + \begingroup + \global\let\tabu@elapsedtime \tabu@message@etime + \long\def\multicolumn##1##2##3{\multispan{##1}}% + \let\tabu@startpboxORI \@startpbox + \iftabu@spread + \def\tabu@naturalXmax {\z@}% + \let\tabu@naturalXmin \tabu@naturalXmax + \tabu@evr{\global\tabu@naturalX \z@}% + \let\@startpbox \tabu@startpboxmeasure + \else\iftabu@negcoef + \let\@startpbox \tabu@startpboxmeasure + \else \let\@startpbox \tabu@startpboxquick + \fi\fi + \expandafter \tabu@measuring + \fi +}% \tabu@strategy +\def\tabu@measuring{\expandafter \tabu@trial \expandafter + \count@ \the\count@ \tabu@endtrial +}% \tabu@measuring +\def\tabu@trial{\iftabu@long \tabu@longtrial \else \tabu@shorttrial \fi} +\def\tabu@shorttrial {\setbox\tabu@box \hbox\bgroup \tabu@seteverycr + \ifx \tabu@savecounters\relax \else + \let\tabu@savecounters \relax \tabu@clckpt \fi + $\iftabuscantokens \tabu@rescan \else \expandafter\@secondoftwo \fi + \expandafter{\expandafter \tabuthepreamble + \the\tabu@thebody + \csname tabu@adl@endtrial\endcsname + \endarray}$\egroup % got \tabu@box +}% \tabu@shorttrial +\def\tabu@longtrial {\setbox\tabu@box \hbox\bgroup \tabu@seteverycr + \ifx \tabu@savecounters\relax \else + \let\tabu@savecounters \relax \tabu@clckpt \fi + \iftabuscantokens \tabu@rescan \else \expandafter\@secondoftwo \fi + \expandafter{\expandafter \tabuthepreamble + \the\tabu@thebody + \tabuendlongtrial}\egroup % got \tabu@box +}% \tabu@longtrial +\def\tabuendlongtrial{% no @ allowed for \scantokens + \LT@echunk \global\setbox\@ne \hbox{\unhbox\@ne}\kern\wd\@ne + \LT@get@widths +}% \tabuendlongtrial +\def\tabu@adl@endtrial{% + \crcr \noalign{\global\adl@ncol \tabu@nbcols}}% anything global is crap, junky and fails ! +\def\tabu@seteverycr {\tabu@reset + \everycr \expandafter{\the\everycr \tabu@everycr}% + \let\everycr \tabu@noeverycr % +}% \tabu@seteverycr +\def\tabu@noeverycr{{\aftergroup\tabu@restoreeverycr \afterassignment}\toks@} +\def\tabu@restoreeverycr {\let\everycr \tabu@@everycr} +\def\tabu@everycr {\iftabu@everyrow \noalign{\tabu@everyrow}\fi} +\def\tabu@endoftrials {% + \iftabuscantokens \expandafter\@firstoftwo + \else \expandafter\@secondoftwo + \fi + {\expandafter \tabu@closetrialsgroup \expandafter + \tabu@rescan \expandafter{% + \expandafter\tabuthepreamble + \the\expandafter\tabu@thebody + \iftabu@long \else \endarray \fi}} + {\expandafter\tabu@closetrialsgroup \expandafter + \tabuthepreamble + \the\tabu@thebody}% + \tabu@endenvir % Finish ! +}% \tabu@endoftrials +\def\tabu@closetrialsgroup {% + \toks@\expandafter{\tabu@endenvir}% + \edef\tabu@bufferX{\endgroup + \tabucolX \the\tabucolX + \tabu@target \the\tabu@target + \tabu@cnt \the\tabu@cnt + \def\noexpand\tabu@endenvir{\the\toks@}% + %Quid de \@halignto = \tabu@halignto ?? + }% \tabu@bufferX + \tabu@bufferX + \ifcase\tabu@nested % print out (outer in mode 0) + \global\tabu@cnt \tabu@cnt + \tabu@evr{\tabu@verticaldynamicadjustment}% + \tabu@celllalign@def{\everypar{}}\let\tabu@cellralign \@empty + \let\@finalstrut \tabu@finalstrut + \else % vertical measure of nested tabu + \tabu@evr{\tabu@verticalinit}% + \tabu@celllalign@def{\tabu@verticalmeasure}% + \def\tabu@cellralign{\tabu@verticalspacing}% + \fi + \tabu@clckpt \let\@halignto \tabu@halignto + \let\@halignto \@empty + \tabu@seteverycr + \ifdim \tabustrutrule>\z@ \ifnum\tabu@nested=\z@ + \setbox\@arstrutbox \box\voidb@x % force \@arstrutbox to be rebuilt (visible struts) + \fi\fi +}% \tabu@closetrialsgroup +\def\tabu@quickend {\expandafter \endgroup \expandafter + \tabu@target \the\tabu@target \tabu@quickrule + \let\endarray \relax \tabu@endenvir +}% \tabu@quickend +\def\tabu@endtrial {\relax % stops \count@ assignment ! + \ifcase \count@ \tabu@err % case 0 = impossible here + \or \tabu@err % case 1 = impossible here + \or \tabu@err % case 2 = impossible here + \or % case 3 = outer goes into mode 0 + \def\tabu@bufferX{\endgroup}\count@ \z@ + \else % case 4 = outer goes into mode 3 + \iftabu@spread \tabu@spreadarith % inner into mode 1 (outer in mode 3) + \else \tabu@arith % or 2 (outer in mode 4) + \fi + \count@=% + \ifcase\tabu@nested \thr@@ % outer goes into mode 3 + \else\iftabu@measuring \tw@ % outer is in mode 4 + \else \@ne % outer is in mode 3 + \fi\fi + \edef\tabu@bufferX{\endgroup + \tabucolX \the\tabucolX + \tabu@target \the\tabu@target}% + \fi + \expandafter \tabu@bufferX \expandafter + \count@ \the\count@ \tabu@strategy +}% \tabu@endtrial +\def\tabu@err{\errmessage{(tabu) Internal impossible error! (\count@=\the\count@)}} +%% The algorithms: compute the widths / stop or go on --------------- +\def\tabu@arithnegcoef {% + \@tempdima \z@ \dimen@ \z@ \let\tabu@ \tabu@arith@negcoef \tabu@Xcoefs +}% \tabu@arithnegcoef +\def\tabu@arith@negcoef #1#2{% + \ifdim #2\p@>\z@ \advance\dimen@ #2\p@ % saturated by definition + \advance\@tempdima #2\tabucolX + \else + \ifdim -#2\tabucolX <\tabu@wd{#1}% c_i X < natural width <= \tabu@target-> saturated + \advance\dimen@ -#2\p@ + \advance\@tempdima -#2\tabucolX + \else + \advance\@tempdima \tabu@wd{#1}% natural width <= c_i X => neutralised + \ifdim \tabu@wd{#1}<\tabu@target \else % neutralised + \advance\dimen@ -#2\p@ % saturated (natural width = tabu@target) + \fi + \fi + \fi +}% \tabu@arith@negcoef +\def\tabu@givespace #1#2{% here \tabu@DELTA < \z@ + \ifdim \@tempdima=\z@ + \tabu@wddef{#1}{\the\dimexpr -\tabu@DELTA*\p@/\tabu@Xsum}% + \else + \tabu@wddef{#1}{\the\dimexpr \tabu@hsize{#1}{#2} + *(\p@ -\tabu@DELTA*\p@/\@tempdima)/\p@\relax}% + \fi +}% \tabu@givespace +\def\tabu@arith {\advance\tabu@cnt \@ne + \ifnum \tabu@cnt=\@ne \tabu@message{\tabu@titles}\fi + \tabu@arithnegcoef + \@tempdimb \dimexpr \wd\tabu@box -\@tempdima \relax % + \tabu@DELTA = \dimexpr \wd\tabu@box - \tabu@target \relax + \tabu@message{\tabu@message@arith}% + \ifdim \tabu@DELTA <\tabu@hfuzz + \ifdim \tabu@DELTA<\z@ % wd (tabu)<\tabu@target ? + \let\tabu@ \tabu@givespace \tabu@Xcoefs + \advance\@tempdima \@tempdimb \advance\@tempdima -\tabu@DELTA % for message + \else % already converged: nothing to do but nearly impossible... + \fi + \tabucolX \maxdimen + \tabu@measuringfalse + \else % need for narrower X columns + \tabucolX =\dimexpr (\@tempdima -\tabu@DELTA) *\p@/\tabu@Xsum \relax + \tabu@measuringtrue + \@whilesw \iftabu@measuring\fi {% + \advance\tabu@cnt \@ne + \tabu@arithnegcoef + \tabu@DELTA =\dimexpr \@tempdima+\@tempdimb -\tabu@target \relax % always < 0 here + \tabu@message{\tabu@header + \tabu@msgalign \tabucolX { }{ }{ }{ }{ }\@@ + \tabu@msgalign \@tempdima+\@tempdimb { }{ }{ }{ }{ }\@@ + \tabu@msgalign \tabu@target { }{ }{ }{ }{ }\@@ + \tabu@msgalign@PT \dimen@ { }{}{}{}{}{}{}\@@ + \ifdim -\tabu@DELTA<\tabu@hfuzz \tabu@spaces target ok\else + \tabu@msgalign \dimexpr -\tabu@DELTA *\p@/\dimen@ {}{}{}{}{}\@@ + \fi}% + \ifdim -\tabu@DELTA<\tabu@hfuzz + \advance\@tempdima \@tempdimb % for message + \tabu@measuringfalse + \else + \advance\tabucolX \dimexpr -\tabu@DELTA *\p@/\dimen@ \relax + \fi + }% + \fi + \tabu@message{\tabu@message@reached}% + \edef\tabu@bufferX{\endgroup \tabu@cnt \the\tabu@cnt + \tabucolX \the\tabucolX + \tabu@target \the\tabu@target}% +}% \tabu@arith +\def\tabu@spreadarith {% + \dimen@ \z@ \@tempdima \tabu@naturalXmax \let\tabu@ \tabu@spread@arith \tabu@Xcoefs + \edef\tabu@naturalXmin {\the\dimexpr\tabu@naturalXmin*\dimen@/\p@}% + \@tempdimc =\dimexpr \wd\tabu@box -\tabu@naturalXmax+\tabu@naturalXmin \relax + \iftabu@measuring + \tabu@target =\dimexpr \@tempdimc+\tabu@spreadtarget \relax + \edef\tabu@bufferX{\endgroup \tabucolX \the\tabucolX \tabu@target\the\tabu@target}% + \else + \tabu@message{\tabu@message@spreadarith}% + \ifdim \dimexpr \@tempdimc+\tabu@spreadtarget >\tabu@target + \tabu@message{(tabu) spread + \ifdim \@tempdimc>\tabu@target useless here: default target used% + \else too large: reduced to fit default target\fi.}% + \else + \tabu@target =\dimexpr \@tempdimc+\tabu@spreadtarget \relax + \tabu@message{(tabu) spread: New target set to \the\tabu@target^^J}% + \fi + \begingroup \let\tabu@wddef \@gobbletwo + \@tempdimb \@tempdima + \tabucolX@init + \tabu@arithnegcoef + \wd\tabu@box =\dimexpr \wd\tabu@box +\@tempdima-\@tempdimb \relax + \expandafter\endgroup \expandafter\tabucolX \the\tabucolX + \tabu@arith + \fi +}% \tabu@spreadarith +\def\tabu@spread@arith #1#2{% + \ifdim #2\p@>\z@ \advance\dimen@ #2\p@ + \else \advance\@tempdima \tabu@wd{#1}\relax + \fi +}% \tabu@spread@arith +%% Reporting in the .log file --------------------------------------- +\def\tabu@message@defaulttarget{% + \ifnum\tabu@nested=\z@^^J(tabu) Default target: + \ifx\tabudefaulttarget\linewidth \string\linewidth + \ifdim \tabu@thetarget=\linewidth \else + -\the\dimexpr\linewidth-\tabu@thetarget\fi = + \else\ifx\tabudefaulttarget\linegoal\string\linegoal= + \fi\fi + \else (tabu) Default target (nested): \fi + \the\tabu@target \on@line + \ifnum\tabu@nested=\z@ , page \the\c@page\fi} +\def\tabu@message@target {^^J(tabu) Target specified: + \the\tabu@target \on@line, page \the\c@page} +\def\tabu@message@arith {\tabu@header + \tabu@msgalign \tabucolX { }{ }{ }{ }{ }\@@ + \tabu@msgalign \wd\tabu@box { }{ }{ }{ }{ }\@@ + \tabu@msgalign \tabu@target { }{ }{ }{ }{ }\@@ + \tabu@msgalign@PT \dimen@ { }{}{}{}{}{}{}\@@ + \ifdim \tabu@DELTA<\tabu@hfuzz giving space\else + \tabu@msgalign \dimexpr (\@tempdima-\tabu@DELTA) *\p@/\tabu@Xsum -\tabucolX {}{}{}{}{}\@@ + \fi +}% \tabu@message@arith +\def\tabu@message@spreadarith {\tabu@spreadheader + \tabu@msgalign \tabu@spreadtarget { }{ }{ }{ }{}\@@ + \tabu@msgalign \wd\tabu@box { }{ }{ }{ }{}\@@ + \tabu@msgalign -\tabu@naturalXmax { }{}{}{}{}\@@ + \tabu@msgalign \tabu@naturalXmin { }{ }{ }{ }{}\@@ + \tabu@msgalign \ifdim \dimexpr\@tempdimc>\tabu@target \tabu@target + \else \@tempdimc+\tabu@spreadtarget \fi + {}{}{}{}{}\@@} +\def\tabu@message@negcoef #1#2{ + \tabu@spaces\tabu@spaces\space * #1. X[\rem@pt#2]: + \space width = \tabu@wd {#1} + \expandafter\string\csname tabu@\the\tabu@nested.W\number#1\endcsname + \ifdim -\tabu@pt#2\tabucolX<\tabu@target + < \number-\rem@pt#2 X + = \the\dimexpr -\tabu@pt#2\tabucolX \relax + \else + <= \the\tabu@target\space < \number-\rem@pt#2 X\fi} +\def\tabu@message@reached{\tabu@header + ******* Reached Target: + hfuzz = \tabu@hfuzz\on@line\space *******} +\def\tabu@message@etime{\edef\tabu@stoptime{\the\pdfelapsedtime}% + \tabu@message{(tabu)\tabu@spaces Time elapsed during measure: + \the\numexpr(\tabu@stoptime-\tabu@starttime-32767)/65536\relax sec + \the\numexpr\numexpr(\tabu@stoptime-\tabu@starttime) + -\numexpr(\tabu@stoptime-\tabu@starttime-32767)/65536\relax*65536\relax + *1000/65536\relax ms \tabu@spaces(\the\tabu@cnt\space + cycle\ifnum\tabu@cnt>\@ne s\fi)^^J^^J}} +\def\tabu@message@verticalsp {% + \ifdim \@tempdima>\tabu@ht + \ifdim \@tempdimb>\tabu@dp + \expandafter\expandafter\expandafter\string\tabu@ht = + \tabu@msgalign \@tempdima { }{ }{ }{ }{ }\@@ + \expandafter\expandafter\expandafter\string\tabu@dp = + \tabu@msgalign \@tempdimb { }{ }{ }{ }{ }\@@^^J% + \else + \expandafter\expandafter\expandafter\string\tabu@ht = + \tabu@msgalign \@tempdima { }{ }{ }{ }{ }\@@^^J% + \fi + \else\ifdim \@tempdimb>\tabu@dp + \tabu@spaces\tabu@spaces\tabu@spaces + \expandafter\expandafter\expandafter\string\tabu@dp = + \tabu@msgalign \@tempdimb { }{ }{ }{ }{ }\@@^^J\fi + \fi +}% \tabu@message@verticalsp +\edef\tabu@spaces{\@spaces} +\def\tabu@strippt{\expandafter\tabu@pt\the} +{\@makeother\P \@makeother\T\lowercase{\gdef\tabu@pt #1PT{#1}}} +\def\tabu@msgalign{\expandafter\tabu@msg@align\the\dimexpr} +\def\tabu@msgalign@PT{\expandafter\tabu@msg@align\romannumeral-`\0\tabu@strippt} +\def\do #1{% + \def\tabu@msg@align##1.##2##3##4##5##6##7##8##9\@@{% + \ifnum##1<10 #1 #1\else + \ifnum##1<100 #1 \else + \ifnum##1<\@m #1\fi\fi\fi + ##1.##2##3##4##5##6##7##8#1}% + \def\tabu@header{(tabu) \ifnum\tabu@cnt<10 #1\fi\the\tabu@cnt) }% + \def\tabu@titles{\ifnum \tabu@nested=\z@ + (tabu) Try#1 #1 tabu X #1 #1 #1tabu Width #1 #1 Target + #1 #1 #1 Coefs #1 #1 #1 Update^^J\fi}% + \def\tabu@spreadheader{% + (tabu) Try#1 #1 Spread #1 #1 tabu Width #1 #1 #1 Nat. X #1 #1 #1 #1Nat. Min. + #1 New Target^^J% + (tabu) sprd} + \def\tabu@message@save {\begingroup + \def\x ####1{\tabu@msg@align ####1{ }{ }{ }{ }{}\@@} + \def\z ####1{\expandafter\x\expandafter{\romannumeral-`\0\tabu@strippt + \dimexpr####1\p@{ }{ }}}% + \let\color \relax \def\tabu@rulesstyle ####1####2{\detokenize{####1}}% + \let\CT@arc@ \relax \let\@preamble \@gobble + \let\tabu@savedpream \@firstofone + \let\tabu@savedparams \@firstofone + \def\tabu@target ####1\relax {(tabu) target #1 #1 #1 #1 #1 = \x{####1}^^J}% + \def\tabucolX ####1\relax {(tabu) X columns width#1 = \x{####1}^^J}% + \def\tabu@nbcols ####1\relax {(tabu) Number of columns: \z{####1}^^J}% + \def\tabu@aligndefault ####1{(tabu) Default alignment: #1 #1 ####1^^J}% + \def\col@sep ####1\relax {(tabu) column sep #1 #1 #1 = \x{####1}^^J}% + \def\arrayrulewidth ####1\relax{(tabu) arrayrulewidth #1 = \x{####1}}% + \def\doublerulesep ####1\relax { doublerulesep = \x{####1}^^J}% + \def\extratabsurround####1\relax{(tabu) extratabsurround = \x{####1}^^J}% + \def\extrarowheight ####1\relax{(tabu) extrarowheight #1 = \x{####1}}% + \def\extrarowdepth ####1\relax {extrarowdepth = \x{####1}^^J}% + \def\abovetabulinesep####1\relax{(tabu) abovetabulinesep=\x{####1} }% + \def\belowtabulinesep####1\relax{ belowtabulinesep=\x{####1}^^J}% + \def\arraystretch ####1{(tabu) arraystretch #1 #1 = \z{####1}^^J}% + \def\minrowclearance####1\relax{(tabu) minrowclearance #1 = \x{####1}^^J}% + \def\tabu@arc@L ####1{(tabu) taburulecolor #1 #1 = ####1^^J}% + \def\tabu@drsc@L ####1{(tabu) tabudoublerulecolor= ####1^^J}% + \def\tabu@evr@L ####1{(tabu) everyrow #1 #1 #1 #1 = \detokenize{####1}^^J}% + \def\tabu@ls@L ####1{(tabu) line style = \detokenize{####1}^^J}% + \def\NC@find ####1\@nil{(tabu) tabu preamble#1 #1 = \detokenize{####1}^^J}% + \def\tabu@wddef####1####2{(tabu) Natural width ####1 = \x{####2}^^J}% + \let\edef \@gobbletwo \let\def \@empty \let\let \@gobbletwo + \tabu@message{% + (tabu) \string\savetabu{\tabu@temp}: \on@line^^J% + \tabu@usetabu \@nil^^J}% + \endgroup} +}\do{ } +%% Measuring the natural width (varwidth) - store the results ------- +\def\tabu@startpboxmeasure #1{\bgroup % entering \vtop + \edef\tabu@temp{\expandafter\@secondoftwo \ifx\tabu@hsize #1\else\relax\fi}% + \ifodd 1\ifx \tabu@temp\@empty 0 \else % starts with \tabu@hsize ? + \iftabu@spread \else % if spread -> measure + \ifdim \tabu@temp\p@>\z@ 0 \fi\fi\fi% if coef>0 -> do not measure + \let\@startpbox \tabu@startpboxORI % restore immediately (nesting) + \tabu@measuringtrue % for the quick option... + \tabu@Xcol =\expandafter\@firstoftwo\ifx\tabu@hsize #1\fi + \ifdim \tabu@temp\p@>\z@ \ifdim \tabu@temp\tabucolX<\tabu@target + \tabu@target=\tabu@temp\tabucolX \fi\fi + \setbox\tabu@box \hbox \bgroup + \begin{varwidth}\tabu@target + \let\FV@ListProcessLine \tabu@FV@ListProcessLine % \hbox to natural width... + \narrowragged \arraybackslash \parfillskip \@flushglue + \ifdefined\pdfadjustspacing \pdfadjustspacing\z@ \fi + \bgroup \aftergroup\tabu@endpboxmeasure + \ifdefined \cellspacetoplimit \tabu@cellspacepatch \fi + \else \expandafter\@gobble + \tabu@startpboxquick{#1}% \@gobble \bgroup + \fi +}% \tabu@startpboxmeasure +\def\tabu@cellspacepatch{\def\bcolumn##1\@nil{}\let\ecolumn\@empty + \bgroup\color@begingroup} +\def\tabu@endpboxmeasure {% + \@finalstrut \@arstrutbox + \end{varwidth}\egroup % + \ifdim \tabu@temp\p@ <\z@ % neg coef + \ifdim \tabu@wd\tabu@Xcol <\wd\tabu@box + \tabu@wddef\tabu@Xcol {\the\wd\tabu@box}% + \tabu@debug{\tabu@message@endpboxmeasure}% + \fi + \else % spread coef>0 + \global\advance \tabu@naturalX \wd\tabu@box + \@tempdima =\dimexpr \wd\tabu@box *\p@/\dimexpr \tabu@temp\p@\relax \relax + \ifdim \tabu@naturalXmax <\tabu@naturalX + \xdef\tabu@naturalXmax {\the\tabu@naturalX}\fi + \ifdim \tabu@naturalXmin <\@tempdima + \xdef\tabu@naturalXmin {\the\@tempdima}\fi + \fi + \box\tabu@box \egroup % end of \vtop (measure) restore \tabu@target +}% \tabu@endpboxmeasure +\def\tabu@wddef #1{\expandafter\xdef + \csname tabu@\the\tabu@nested.W\number#1\endcsname} +\def\tabu@wd #1{\csname tabu@\the\tabu@nested.W\number#1\endcsname} +\def\tabu@message@endpboxmeasure{\tabu@spaces\tabu@spaces<-> % <-> save natural wd + \the\tabu@Xcol. X[\tabu@temp]: + target = \the\tabucolX \space + \expandafter\expandafter\expandafter\string\tabu@wd\tabu@Xcol + =\tabu@wd\tabu@Xcol +}% \tabu@message@endpboxmeasure +\def\tabu@startpboxquick {\bgroup + \let\@startpbox \tabu@startpboxORI % restore immediately + \let\tabu \tabu@quick % \begin is expanded before... + \expandafter\@gobble \@startpbox % gobbles \bgroup +}% \tabu@startpboxquick +\def\tabu@quick {\begingroup \iffalse{\fi \ifnum0=`}\fi + \toks@{}\def\tabu@stack{b}\tabu@collectbody \tabu@endquick +}% \tabu@quick +\def\tabu@endquick {% + \ifodd 1\ifx\tabu@end@envir\tabu@endtabu \else + \ifx\tabu@end@envir\tabu@endtabus \else 0\fi\fi\relax + \endgroup + \else \let\endtabu \relax + \tabu@end@envir + \fi +}% \tabu@quick +\def\tabu@endtabu {\end{tabu}} +\def\tabu@endtabus {\end{tabu*}} +%% Measuring the heights and depths - store the results ------------- +\def\tabu@verticalmeasure{\everypar{}% + \ifnum \currentgrouptype>12 % 14=semi-simple, 15=math shift group + \setbox\tabu@box =\hbox\bgroup + \let\tabu@verticalspacing \tabu@verticalsp@lcr + \d@llarbegin % after \hbox ... + \else + \edef\tabu@temp{\ifnum\currentgrouptype=5\vtop + \else\ifnum\currentgrouptype=12\vcenter + \else\vbox\fi\fi}% + \setbox\tabu@box \hbox\bgroup$\tabu@temp \bgroup + \let\tabu@verticalspacing \tabu@verticalsp@pmb + \fi +}% \tabu@verticalmeasure +\def\tabu@verticalsp@lcr{% + \d@llarend \egroup % + \@tempdima \dimexpr \ht\tabu@box+\abovetabulinesep + \@tempdimb \dimexpr \dp\tabu@box+\belowtabulinesep \relax + \ifdim\tabustrutrule>\z@ \tabu@debug{\tabu@message@verticalsp}\fi + \ifdim \tabu@ht<\@tempdima \tabu@htdef{\the\@tempdima}\fi + \ifdim \tabu@dp<\@tempdimb \tabu@dpdef{\the\@tempdimb}\fi + \noindent\vrule height\@tempdima depth\@tempdimb +}% \tabu@verticalsp@lcr +\def\tabu@verticalsp@pmb{% inserts struts as needed + \par \expandafter\egroup + \expandafter$\expandafter + \egroup \expandafter + \@tempdimc \the\prevdepth + \@tempdima \dimexpr \ht\tabu@box+\abovetabulinesep + \@tempdimb \dimexpr \dp\tabu@box+\belowtabulinesep \relax + \ifdim\tabustrutrule>\z@ \tabu@debug{\tabu@message@verticalsp}\fi + \ifdim \tabu@ht<\@tempdima \tabu@htdef{\the\@tempdima}\fi + \ifdim \tabu@dp<\@tempdimb \tabu@dpdef{\the\@tempdimb}\fi + \let\@finalstrut \@gobble + \hrule height\@tempdima depth\@tempdimb width\hsize +%% \box\tabu@box +}% \tabu@verticalsp@pmb + +\def\tabu@verticalinit{% + \ifnum \c@taburow=\z@ \tabu@rearstrut \fi % after \tabu@reset ! + \advance\c@taburow \@ne + \tabu@htdef{\the\ht\@arstrutbox}\tabu@dpdef{\the\dp\@arstrutbox}% + \advance\c@taburow \m@ne +}% \tabu@verticalinit +\def\tabu@htdef {\expandafter\xdef \csname tabu@\the\tabu@nested.H\the\c@taburow\endcsname} +\def\tabu@ht {\csname tabu@\the\tabu@nested.H\the\c@taburow\endcsname} +\def\tabu@dpdef {\expandafter\xdef \csname tabu@\the\tabu@nested.D\the\c@taburow\endcsname} +\def\tabu@dp {\csname tabu@\the\tabu@nested.D\the\c@taburow\endcsname} +\def\tabu@verticaldynamicadjustment {% + \advance\c@taburow \@ne + \extrarowheight \dimexpr\tabu@ht - \ht\strutbox + \extrarowdepth \dimexpr\tabu@dp - \dp\strutbox + \let\arraystretch \@empty + \advance\c@taburow \m@ne +}% \tabu@verticaldynamicadjustment +\def\tabuphantomline{\crcr \noalign{% + {\globaldefs \@ne + \setbox\@arstrutbox \box\voidb@x + \let\tabu@@celllalign \tabu@celllalign + \let\tabu@@cellralign \tabu@cellralign + \let\tabu@@cellleft \tabu@cellleft + \let\tabu@@cellright \tabu@cellright + \let\tabu@@thevline \tabu@thevline + \let\tabu@celllalign \@empty + \let\tabu@cellralign \@empty + \let\tabu@cellright \@empty + \let\tabu@cellleft \@empty + \let\tabu@thevline \relax}% + \edef\tabu@temp{\tabu@multispan \tabu@nbcols{\noindent &}}% + \toks@\expandafter{\tabu@temp \noindent\tabu@everyrowfalse \cr + \noalign{\tabu@rearstrut + {\globaldefs\@ne + \let\tabu@celllalign \tabu@@celllalign + \let\tabu@cellralign \tabu@@cellralign + \let\tabu@cellleft \tabu@@cellleft + \let\tabu@cellright \tabu@@cellright + \let\tabu@thevline \tabu@@thevline}}}% + \expandafter}\the\toks@ +}% \tabuphantomline +%% \firsthline and \lasthline corrections --------------------------- +\def\tabu@firstline {\tabu@hlineAZ \tabu@firsthlinecorrection {}} +\def\tabu@firsthline{\tabu@hlineAZ \tabu@firsthlinecorrection \hline} +\def\tabu@lastline {\tabu@hlineAZ \tabu@lasthlinecorrection {}} +\def\tabu@lasthline {\tabu@hlineAZ \tabu@lasthlinecorrection \hline} +\def\tabu@hline {% replaces \hline if no colortbl (see \AtBeginDocument) + \noalign{\ifnum0=`}\fi + {\CT@arc@\hrule height\arrayrulewidth}% + \futurelet \tabu@temp \tabu@xhline +}% \tabu@hline +\def\tabu@xhline{% + \ifx \tabu@temp \hline + {\ifx \CT@drsc@\relax \vskip + \else\ifx \CT@drsc@\@empty \vskip + \else \CT@drsc@\hrule height + \fi\fi + \doublerulesep}% + \fi + \ifnum0=`{\fi}% +}% \tabu@xhline +\def\tabu@hlineAZ #1#2{\noalign{\ifnum0=`}\fi \dimen@ \z@ \count@ \z@ + \toks@{}\def\tabu@hlinecorrection{#1}\def\tabu@temp{#2}% + \tabu@hlineAZsurround +}% \tabu@hlineAZ +\newcommand*\tabu@hlineAZsurround[1][\extratabsurround]{% + \extratabsurround #1\let\tabucline \tabucline@scan + \let\hline \tabu@hlinescan \let\firsthline \hline + \let\cline \tabu@clinescan \let\lasthline \hline + \expandafter \futurelet \expandafter \tabu@temp + \expandafter \tabu@nexthlineAZ \tabu@temp +}% \tabu@hlineAZsurround +\def\tabu@hlinescan {\tabu@thick \arrayrulewidth \tabu@xhlineAZ \hline} +\def\tabu@clinescan #1{\tabu@thick \arrayrulewidth \tabu@xhlineAZ {\cline{#1}}} +\def\tabucline@scan{\@testopt \tabucline@sc@n {}} +\def\tabucline@sc@n #1[#2]{\tabu@xhlineAZ {\tabucline[{#1}]{#2}}} +\def\tabu@nexthlineAZ{% + \ifx \tabu@temp\hline \else + \ifx \tabu@temp\cline \else + \ifx \tabu@temp\tabucline \else + \tabu@hlinecorrection + \fi\fi\fi +}% \tabu@nexthlineAZ +\def\tabu@xhlineAZ #1{% + \toks@\expandafter{\the\toks@ #1}% + \@tempdimc \tabu@thick % The last line width + \ifcase\count@ \@tempdimb \tabu@thick % The first line width + \else \advance\dimen@ \dimexpr \tabu@thick+\doublerulesep \relax + \fi + \advance\count@ \@ne \futurelet \tabu@temp \tabu@nexthlineAZ +}% \tabu@xhlineAZ +\def\tabu@firsthlinecorrection{% \count@ = number of \hline -1 + \@tempdima \dimexpr \ht\@arstrutbox+\dimen@ + \edef\firsthline{% + \omit \hbox to\z@{\hss{\noexpand\tabu@DBG{yellow}\vrule + height \the\dimexpr\@tempdima+\extratabsurround + depth \dp\@arstrutbox + width \tabustrutrule}\hss}\cr + \noalign{\vskip -\the\dimexpr \@tempdima+\@tempdimb + +\dp\@arstrutbox \relax}% + \the\toks@ + }\ifnum0=`{\fi + \expandafter}\firsthline % we are then ! +}% \tabu@firsthlinecorrection +\def\tabu@lasthlinecorrection{% + \@tempdima \dimexpr \dp\@arstrutbox+\dimen@+\@tempdimb+\@tempdimc + \edef\lasthline{% + \the\toks@ + \noalign{\vskip -\the\dimexpr\dimen@+\@tempdimb+\dp\@arstrutbox}% + \omit \hbox to\z@{\hss{\noexpand\tabu@DBG{yellow}\vrule + depth \the\dimexpr \dp\@arstrutbox+\@tempdimb+\dimen@ + +\extratabsurround-\@tempdimc + height \z@ + width \tabustrutrule}\hss}\cr + }\ifnum0=`{\fi + \expandafter}\lasthline % we are then ! +}% \tabu@lasthlinecorrection +\def\tabu@LT@@hline{% + \ifx\LT@next\hline + \global\let\LT@next \@gobble + \ifx \CT@drsc@\relax + \gdef\CT@LT@sep{% + \noalign{\penalty-\@medpenalty\vskip\doublerulesep}}% + \else + \gdef\CT@LT@sep{% + \multispan\LT@cols{% + \CT@drsc@\leaders\hrule\@height\doublerulesep\hfill}\cr}% + \fi + \else + \global\let\LT@next\empty + \gdef\CT@LT@sep{% + \noalign{\penalty-\@lowpenalty\vskip-\arrayrulewidth}}% + \fi + \ifnum0=`{\fi}% + \multispan\LT@cols + {\CT@arc@\leaders\hrule\@height\arrayrulewidth\hfill}\cr + \CT@LT@sep + \multispan\LT@cols + {\CT@arc@\leaders\hrule\@height\arrayrulewidth\hfill}\cr + \noalign{\penalty\@M}% + \LT@next +}% \tabu@LT@@hline +%% Horizontal lines : \tabucline ------------------------------------ +\let\tabu@start \@tempcnta +\let\tabu@stop \@tempcntb +\newcommand*\tabucline{\noalign{\ifnum0=`}\fi \tabu@cline} +\newcommand*\tabu@cline[2][]{\tabu@startstop{#2}% + \ifnum \tabu@stop<\z@ \toks@{}% + \else \tabu@clinearg{#1}\tabu@thestyle + \edef\tabucline{\toks@{% + \ifnum \tabu@start>\z@ \omit + \tabu@multispan\tabu@start {\span\omit}&\fi + \omit \tabu@multispan\tabu@stop {\span\omit}% + \tabu@thehline\cr + }}\tabucline + \tabu@tracinglines{(tabu:tabucline) Style: #1^^J\the\toks@^^J^^J}% + \fi + \futurelet \tabu@temp \tabu@xcline +}% \tabu@cline +\def\tabu@clinearg #1{% + \ifx\\#1\\\let\tabu@thestyle \tabu@ls@ + \else \@defaultunits \expandafter\let\expandafter\@tempa + \romannumeral-`\0#1\relax \@nnil + \ifx \hbox\@tempa \tabu@clinebox{#1}% + \else\ifx \box\@tempa \tabu@clinebox{#1}% + \else\ifx \vbox\@tempa \tabu@clinebox{#1}% + \else\ifx \vtop\@tempa \tabu@clinebox{#1}% + \else\ifx \copy\@tempa \tabu@clinebox{#1}% + \else\ifx \leaders\@tempa \tabu@clineleads{#1}% + \else\ifx \cleaders\@tempa \tabu@clineleads{#1}% + \else\ifx \xleaders\@tempa \tabu@clineleads{#1}% + \else\tabu@getline {#1}% + \fi\fi\fi\fi\fi\fi\fi\fi + \fi +}% \tabu@clinearg +\def\tabu@clinebox #1{\tabu@clineleads{\xleaders#1\hss}} +\def\tabu@clineleads #1{% + \let\tabu@thestyle \relax \let\tabu@leaders \@undefined + \gdef\tabu@thehrule{#1}} +\def\tabu@thehline{\begingroup + \ifdefined\tabu@leaders + \noexpand\tabu@thehleaders + \else \noexpand\tabu@thehrule + \fi \endgroup +}% \tabu@thehline +\def\tabu@xcline{% + \ifx \tabu@temp\tabucline + \toks@\expandafter{\the\toks@ \noalign + {\ifx\CT@drsc@\relax \vskip + \else \CT@drsc@\hrule height + \fi + \doublerulesep}}% + \fi + \tabu@docline +}% \tabu@xcline +\def\tabu@docline {\ifnum0=`{\fi \expandafter}\the\toks@} +\def\tabu@docline@evr {\xdef\tabu@doclineafter{\the\toks@}% + \ifnum0=`{\fi}\aftergroup\tabu@doclineafter} +\def\tabu@multispan #1#2{% + \ifnum\numexpr#1>\@ne #2\expandafter\tabu@multispan + \else \expandafter\@gobbletwo + \fi {#1-1}{#2}% +}% \tabu@multispan +\def\tabu@startstop #1{\tabu@start@stop #1\relax 1-\tabu@nbcols \@nnil} +\def\tabu@start@stop #1-#2\@nnil{% + \@defaultunits \tabu@start\number 0#1\relax \@nnil + \@defaultunits \tabu@stop \number 0#2\relax \@nnil + \tabu@stop \ifnum \tabu@start>\tabu@nbcols \m@ne + \else\ifnum \tabu@stop=\z@ \tabu@nbcols + \else\ifnum \tabu@stop>\tabu@nbcols \tabu@nbcols + \else \tabu@stop + \fi\fi\fi + \advance\tabu@start \m@ne + \ifnum \tabu@start>\z@ \advance\tabu@stop -\tabu@start \fi +}% \tabu@start@stop +%% Numbers: siunitx S columns (and \tabudecimal) ------------------- +\def\tabu@tabudecimal #1{% + \def\tabu@decimal{#1}\@temptokena{}% + \let\tabu@getdecimal@ \tabu@getdecimal@ignorespaces + \tabu@scandecimal +}% \tabu@tabudecimal +\def\tabu@scandecimal{\futurelet \tabu@temp \tabu@getdecimal@} +\def\tabu@skipdecimal#1{#1\tabu@scandecimal} +\def\tabu@getdecimal@ignorespaces{% + \ifcase 0\ifx\tabu@temp\ignorespaces\else + \ifx\tabu@temp\@sptoken1\else + 2\fi\fi\relax + \let\tabu@getdecimal@ \tabu@getdecimal + \expandafter\tabu@skipdecimal + \or \expandafter\tabu@gobblespace\expandafter\tabu@scandecimal + \else \expandafter\tabu@skipdecimal + \fi +}% \tabu@getdecimal@ignorespaces +\def\tabu@get@decimal#1{\@temptokena\expandafter{\the\@temptokena #1}% + \tabu@scandecimal} +\def\do#1{% + \def\tabu@get@decimalspace#1{% + \@temptokena\expandafter{\the\@temptokena #1}\tabu@scandecimal}% +}\do{ } +\let\tabu@@tabudecimal \tabu@tabudecimal +\def\tabu@getdecimal{% + \ifcase 0\ifx 0\tabu@temp\else + \ifx 1\tabu@temp\else + \ifx 2\tabu@temp\else + \ifx 3\tabu@temp\else + \ifx 4\tabu@temp\else + \ifx 5\tabu@temp\else + \ifx 6\tabu@temp\else + \ifx 7\tabu@temp\else + \ifx 8\tabu@temp\else + \ifx 9\tabu@temp\else + \ifx .\tabu@temp\else + \ifx ,\tabu@temp\else + \ifx -\tabu@temp\else + \ifx +\tabu@temp\else + \ifx e\tabu@temp\else + \ifx E\tabu@temp\else + \ifx\tabu@cellleft\tabu@temp1\else + \ifx\ignorespaces\tabu@temp1\else + \ifx\@sptoken\tabu@temp2\else + 3\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\relax + \expandafter\tabu@get@decimal + \or \expandafter\tabu@skipdecimal + \or \expandafter\tabu@get@decimalspace + \else\expandafter\tabu@printdecimal + \fi +}% \tabu@getdecimal +\def\tabu@printdecimal{% + \edef\tabu@temp{\the\@temptokena}% + \ifx\tabu@temp\@empty\else + \ifx\tabu@temp\space\else + \expandafter\tabu@decimal\expandafter{\the\@temptokena}% + \fi\fi +}% \tabu@printdecimal +%% Verbatim inside X columns ---------------------------------------- +\def\tabu@verbatim{% + \let\verb \tabu@verb + \let\FV@DefineCheckEnd \tabu@FV@DefineCheckEnd +}% \tabu@verbatim +\let\tabu@ltx@verb \verb +\def\tabu@verb{\@ifstar {\tabu@ltx@verb*} \tabu@ltx@verb} +\def\tabu@fancyvrb {% + \def\tabu@FV@DefineCheckEnd ##1{% + \def\tabu@FV@DefineCheckEnd{% + ##1% + \let\FV@CheckEnd \tabu@FV@CheckEnd + \let\FV@@CheckEnd \tabu@FV@@CheckEnd + \let\FV@@@CheckEnd \tabu@FV@@@CheckEnd + \edef\FV@EndScanning{% + \def\noexpand\next{\noexpand\end{\FV@EnvironName}}% + \global\let\noexpand\FV@EnvironName\relax + \noexpand\next}% + \xdef\FV@EnvironName{\detokenize\expandafter{\FV@EnvironName}}}% + }\expandafter\tabu@FV@DefineCheckEnd\expandafter{\FV@DefineCheckEnd} +}% \tabu@fancyvrb +\def\tabu@FV@CheckEnd #1{\expandafter\FV@@CheckEnd \detokenize{#1\end{}}\@nil} +\edef\tabu@FV@@@CheckEnd {\detokenize{\end{}}} +\begingroup +\catcode`\[1 \catcode`\]2 +\@makeother\{ \@makeother\} + \edef\x[\endgroup + \def\noexpand\tabu@FV@@CheckEnd ##1\detokenize[\end{]##2\detokenize[}]##3% + ]\x \@nil{\def\@tempa{#2}\def\@tempb{#3}} +\def\tabu@FV@ListProcessLine #1{% + \hbox {%to \hsize{% + \kern\leftmargin + \hbox {%to \linewidth{% + \FV@LeftListNumber + \FV@LeftListFrame + \FancyVerbFormatLine{#1}\hss +%% DG/SR modification begin - Jan. 28, 1998 (for numbers=right add-on) +%% \FV@RightListFrame}% + \FV@RightListFrame + \FV@RightListNumber}% +%% DG/SR modification end + \hss}} +%% \savetabu -------------------------------------------------------- +\newcommand*\savetabu[1]{\noalign{% + \tabu@sanitizearg{#1}\tabu@temp + \ifx \tabu@temp\@empty \tabu@savewarn{}{The tabu will not be saved}\else + \@ifundefined{tabu@saved@\tabu@temp}{}{\tabu@savewarn{#1}{Overwriting}}% + \ifdefined\tabu@restored \expandafter\let + \csname tabu@saved@\tabu@temp \endcsname \tabu@restored + \else {\tabu@save}% + \fi + \fi}% +}% \savetabu +\def\tabu@save {% + \toks0\expandafter{\tabu@saved@}% + \iftabu@negcoef + \let\tabu@wddef \relax \let\tabu@ \tabu@savewd \edef\tabu@savewd{\tabu@Xcoefs}% + \toks0\expandafter{\the\toks\expandafter0\tabu@savewd}\fi + \toks1\expandafter{\tabu@savedpream}% + \toks2\expandafter{\tabu@savedpreamble}% + \let\@preamble \relax + \let\tabu@savedpream \relax \let\tabu@savedparams \relax + \edef\tabu@preamble{% + \def\noexpand\tabu@aligndefault{\tabu@align}% + \def\tabu@savedparams {\noexpand\the\toks0}% + \def\tabu@savedpream {\noexpand\the\toks1}}% + \edef\tabu@usetabu{% + \def\@preamble {\noexpand\the\toks2}% + \tabu@target \the\tabu@target \relax + \tabucolX \the\tabucolX \relax + \tabu@nbcols \the\tabu@nbcols \relax + \def\noexpand\tabu@aligndefault{\tabu@align}% + \def\tabu@savedparams {\noexpand\the\toks0}% + \def\tabu@savedpream {\noexpand\the\toks1}}% + \let\tabu@aligndefault \relax \let\@sharp \relax + \edef\@tempa{\noexpand\tabu@s@ved + {\tabu@usetabu} + {\tabu@preamble} + {\the\toks1}}\@tempa + \tabu@message@save +}% \tabu@save +\long\def\tabu@s@ved #1#2#3{% + \def\tabu@usetabu{#1}% + \expandafter\gdef\csname tabu@saved@\tabu@temp\endcsname ##1{% + \ifodd ##1% \usetabu + \tabu@measuringfalse \tabu@spreadfalse % Just in case... + \gdef\tabu@usetabu {% + \ifdim \tabu@target>\z@ \tabu@warn@usetabu \fi + \global\let\tabu@usetabu \@undefined + \def\@halignto {to\tabu@target}% + #1% + \ifx \tabu@align\tabu@aligndefault@text + \ifnum \tabu@nested=\z@ + \let\tabu@align \tabu@aligndefault \fi\fi}% + \else % \preamble + \gdef\tabu@preamble {% + \global\let\tabu@preamble \@undefined + #2% + \ifx \tabu@align\tabu@aligndefault@text + \ifnum \tabu@nested=\z@ + \let\tabu@align \tabu@aligndefault \fi\fi}% + \fi + #3}% +}% \tabu@s@ved +\def\tabu@aligndefault@text {\tabu@aligndefault}% +\def\tabu@warn@usetabu {\PackageWarning{tabu} + {Specifying a target with \string\usetabu\space is useless + \MessageBreak The target cannot be changed!}} +\def\tabu@savewd #1#2{\ifdim #2\p@<\z@ \tabu@wddef{#1}{\tabu@wd{#1}}\fi} +\def\tabu@savewarn#1#2{\PackageInfo{tabu} + {User-name `#1' already used for \string\savetabu + \MessageBreak #2}}% +\def\tabu@saveerr#1{\PackageError{tabu} + {User-name `#1' is unknown for \string\usetabu + \MessageBreak I cannot restore an unknown preamble!}\@ehd} +%% \rowfont --------------------------------------------------------- +\newskip \tabu@cellskip +\def\tabu@rowfont{\ifdim \baselineskip=\z@\noalign\fi + {\ifnum0=`}\fi \tabu@row@font} +\newcommand*\tabu@row@font[2][]{% + \ifnum7=\currentgrouptype + \global\let\tabu@@cellleft \tabu@cellleft + \global\let\tabu@@cellright \tabu@cellright + \global\let\tabu@@celllalign \tabu@celllalign + \global\let\tabu@@cellralign \tabu@cellralign + \global\let\tabu@@rowfontreset\tabu@rowfontreset + \fi + \global\let\tabu@rowfontreset \tabu@rowfont@reset + \expandafter\gdef\expandafter\tabu@cellleft\expandafter{\tabu@cellleft #2}% + \ifcsname tabu@cell@#1\endcsname % row alignment + \csname tabu@cell@#1\endcsname \fi + \ifnum0=`{\fi}% end of group / noalign group +}% \rowfont +\def\tabu@ifcolorleavevmode #1{\let\color \tabu@leavevmodecolor #1\let\color\tabu@color}% +\def\tabu@rowfont@reset{% + \global\let\tabu@rowfontreset \tabu@@rowfontreset + \global\let\tabu@cellleft \tabu@@cellleft + \global\let\tabu@cellright \tabu@@cellright + \global\let\tabu@cellfont \@empty + \global\let\tabu@celllalign \tabu@@celllalign + \global\let\tabu@cellralign \tabu@@cellralign +}% \tabu@@rowfontreset +\let\tabu@rowfontreset \@empty % overwritten \AtBeginDocument if colortbl +%% \tabu@prepnext@tok ----------------------------------------------- +\newif \iftabu@cellright +\def\tabu@prepnext@tok{% + \ifnum \count@<\z@ % + \@tempcnta \@M % + \tabu@nbcols\z@ + \let\tabu@fornoopORI \@fornoop + \tabu@cellrightfalse + \else + \ifcase \numexpr \count@-\@tempcnta \relax % (case 0): prev. token is left + \advance \tabu@nbcols \@ne + \iftabu@cellright % before-previous token is right and is finished + \tabu@cellrightfalse % + \tabu@righttok + \fi + \tabu@lefttok + \or % (case 1) previous token is right + \tabu@cellrighttrue \let\@fornoop \tabu@lastnoop + \else % special column: do not change the token + \iftabu@cellright % before-previous token is right + \tabu@cellrightfalse + \tabu@righttok + \fi + \fi % \ifcase + \fi + \tabu@prepnext@tokORI +}% \tabu@prepnext@tok +\long\def\tabu@lastnoop#1\@@#2#3{\tabu@lastn@@p #2\@nextchar \in@\in@@} +\def\tabu@lastn@@p #1\@nextchar #2#3\in@@{% + \ifx \in@#2\else + \let\@fornoop \tabu@fornoopORI + \xdef\tabu@mkpreambuffer{\tabu@nbcols\the\tabu@nbcols \tabu@mkpreambuffer}% + \toks0\expandafter{\expandafter\tabu@everyrowtrue \the\toks0}% + \expandafter\prepnext@tok + \fi +}% \tabu@lastnoop +\def\tabu@righttok{% + \advance \count@ \m@ne + \toks\count@\expandafter {\the\toks\count@ \tabu@cellright \tabu@cellralign}% + \advance \count@ \@ne +}% \tabu@righttok +\def\tabu@lefttok{\toks\count@\expandafter{\expandafter\tabu@celllalign + \the\toks\count@ \tabu@cellleft}% after because of $ +}% \tabu@lefttok +%% Neutralisation of glues ------------------------------------------ +\let\tabu@cellleft \@empty +\let\tabu@cellright \@empty +\tabu@celllalign@def{\tabu@cellleft}% +\let\tabu@cellralign \@empty +\def\tabu@cell@align #1#2#3{% + \let\tabu@maybesiunitx \toks@ \tabu@celllalign + \global \expandafter \tabu@celllalign@def \expandafter {\the\toks@ #1}% + \toks@\expandafter{\tabu@cellralign #2}% + \xdef\tabu@cellralign{\the\toks@}% + \toks@\expandafter{\tabu@cellleft #3}% + \xdef\tabu@cellleft{\the\toks@}% +}% \tabu@cell@align +\def\tabu@cell@l{% force alignment to left + \tabu@cell@align + {\tabu@removehfil \raggedright \tabu@cellleft}% left + {\tabu@flush1\tabu@ignorehfil}% right + \raggedright +}% \tabu@cell@l +\def\tabu@cell@c{% force alignment to center + \tabu@cell@align + {\tabu@removehfil \centering \tabu@flush{.5}\tabu@cellleft} + {\tabu@flush{.5}\tabu@ignorehfil} + \centering +}% \tabu@cell@c +\def\tabu@cell@r{% force alignment to right + \tabu@cell@align + {\tabu@removehfil \raggedleft \tabu@flush1\tabu@cellleft} + \tabu@ignorehfil + \raggedleft +}% \tabu@cell@r +\def\tabu@cell@j{% force justification (for p, m, b columns) + \tabu@cell@align + {\tabu@justify\tabu@cellleft} + {} + \tabu@justify +}% \tabu@cell@j +\def\tabu@justify{% + \leftskip\z@skip \@rightskip\leftskip \rightskip\@rightskip + \parfillskip\@flushglue +}% \tabu@justify +%% ragged2e settings +\def\tabu@cell@L{% force alignment to left (ragged2e) + \tabu@cell@align + {\tabu@removehfil \RaggedRight \tabu@cellleft} + {\tabu@flush 1\tabu@ignorehfil} + \RaggedRight +}% \tabu@cell@L +\def\tabu@cell@C{% force alignment to center (ragged2e) + \tabu@cell@align + {\tabu@removehfil \Centering \tabu@flush{.5}\tabu@cellleft} + {\tabu@flush{.5}\tabu@ignorehfil} + \Centering +}% \tabu@cell@C +\def\tabu@cell@R{% force alignment to right (ragged2e) + \tabu@cell@align + {\tabu@removehfil \RaggedLeft \tabu@flush 1\tabu@cellleft} + \tabu@ignorehfil + \RaggedLeft +}% \tabu@cell@R +\def\tabu@cell@J{% force justification (ragged2e) + \tabu@cell@align + {\justifying \tabu@cellleft} + {} + \justifying +}% \tabu@cell@J +\def\tabu@flush#1{% + \iftabu@colortbl % colortbl uses \hfill rather than \hfil + \hskip \ifnum13<\currentgrouptype \stretch{#1}% + \else \ifdim#1pt<\p@ \tabu@cellskip + \else \stretch{#1} + \fi\fi \relax + \else % array.sty + \ifnum 13<\currentgrouptype + \hfil \hskip1sp \relax \fi + \fi +}% \tabu@flush +\let\tabu@hfil \hfil +\let\tabu@hfill \hfill +\let\tabu@hskip \hskip +\def\tabu@removehfil{% + \iftabu@colortbl + \unkern \tabu@cellskip =\lastskip + \ifnum\gluestretchorder\tabu@cellskip =\tw@ \hskip-\tabu@cellskip + \else \tabu@cellskip \z@skip + \fi + \else + \ifdim\lastskip=1sp\unskip\fi + \ifnum\gluestretchorder\lastskip =\@ne + \hfilneg % \hfilneg for array.sty but not for colortbl... + \fi + \fi +}% \tabu@removehfil +\def\tabu@ignorehfil{\aftergroup \tabu@nohfil} +\def\tabu@nohfil{% \hfil -> do nothing + restore original \hfil + \def\hfil{\let\hfil \tabu@hfil}% local to (alignment template) group +}% \tabu@nohfil +\def\tabu@colortblalignments {% if colortbl + \def\tabu@nohfil{% + \def\hfil {\let\hfil \tabu@hfil}% local to (alignment template) group + \def\hfill {\let\hfill \tabu@hfill}% (colortbl uses \hfill) pfff... + \def\hskip ####1\relax{\let\hskip \tabu@hskip}}% local +}% \tabu@colortblalignments +%% Taking care of footnotes and hyperfootnotes ---------------------- +\long\def\tabu@footnotetext #1{% + \edef\@tempa{\the\tabu@footnotes + \noexpand\footnotetext [\the\csname c@\@mpfn\endcsname]}% + \global\tabu@footnotes\expandafter{\@tempa {#1}}}% +\long\def\tabu@xfootnotetext [#1]#2{% + \global\tabu@footnotes\expandafter{\the\tabu@footnotes + \footnotetext [{#1}]{#2}}} +\let\tabu@xfootnote \@xfootnote +\long\def\tabu@Hy@ftntext{\tabu@Hy@ftntxt {\the \c@footnote }} +\long\def\tabu@Hy@xfootnote [#1]{% + \begingroup + \value\@mpfn #1\relax + \protected@xdef \@thefnmark {\thempfn}% + \endgroup + \@footnotemark \tabu@Hy@ftntxt {#1}% +}% \tabu@Hy@xfootnote +\long\def\tabu@Hy@ftntxt #1#2{% + \edef\@tempa{% + \the\tabu@footnotes + \begingroup + \value\@mpfn #1\relax + \noexpand\protected@xdef\noexpand\@thefnmark {\noexpand\thempfn}% + \expandafter \noexpand \expandafter + \tabu@Hy@footnotetext \expandafter{\Hy@footnote@currentHref}% + }% + \global\tabu@footnotes\expandafter{\@tempa {#2}% + \endgroup}% +}% \tabu@Hy@ftntxt +\long\def\tabu@Hy@footnotetext #1#2{% + \H@@footnotetext{% + \ifHy@nesting + \hyper@@anchor {#1}{#2}% + \else + \Hy@raisedlink{% + \hyper@@anchor {#1}{\relax}% + }% + \def\@currentHref {#1}% + \let\@currentlabelname \@empty + #2% + \fi + }% +}% \tabu@Hy@footnotetext +%% No need for \arraybackslash ! ------------------------------------ +\def\tabu@latextwoe {% +\def\tabu@temp##1##2##3{{\toks@\expandafter{##2##3}\xdef##1{\the\toks@}}} +\tabu@temp \tabu@centering \centering \arraybackslash +\tabu@temp \tabu@raggedleft \raggedleft \arraybackslash +\tabu@temp \tabu@raggedright \raggedright \arraybackslash +}% \tabu@latextwoe +\def\tabu@raggedtwoe {% +\def\tabu@temp ##1##2##3{{\toks@\expandafter{##2##3}\xdef##1{\the\toks@}}} +\tabu@temp \tabu@Centering \Centering \arraybackslash +\tabu@temp \tabu@RaggedLeft \RaggedLeft \arraybackslash +\tabu@temp \tabu@RaggedRight \RaggedRight \arraybackslash +\tabu@temp \tabu@justifying \justifying \arraybackslash +}% \tabu@raggedtwoe +\def\tabu@normalcrbackslash{\let\\\@normalcr} +\def\tabu@trivlist{\expandafter\def\expandafter\@trivlist\expandafter{% + \expandafter\tabu@normalcrbackslash \@trivlist}} +%% Utilities: \fbox \fcolorbox and \tabudecimal ------------------- +\def\tabu@fbox {\leavevmode\afterassignment\tabu@beginfbox \setbox\@tempboxa\hbox} +\def\tabu@beginfbox {\bgroup \kern\fboxsep + \bgroup\aftergroup\tabu@endfbox} +\def\tabu@endfbox {\kern\fboxsep\egroup\egroup + \@frameb@x\relax} +\def\tabu@color@b@x #1#2{\leavevmode \bgroup + \def\tabu@docolor@b@x{#1{#2\color@block{\wd\z@}{\ht\z@}{\dp\z@}\box\z@}}% + \afterassignment\tabu@begincolor@b@x \setbox\z@ \hbox +}% \tabu@color@b@x +\def\tabu@begincolor@b@x {\kern\fboxsep \bgroup + \aftergroup\tabu@endcolor@b@x \set@color} +\def\tabu@endcolor@b@x {\kern\fboxsep \egroup + \dimen@\ht\z@ \advance\dimen@ \fboxsep \ht\z@ \dimen@ + \dimen@\dp\z@ \advance\dimen@ \fboxsep \dp\z@ \dimen@ + \tabu@docolor@b@x \egroup +}% \tabu@endcolor@b@x +%% Corrections (arydshln, delarray, colortbl) ----------------------- +\def\tabu@fix@arrayright {%% \@arrayright is missing from \endarray + \iftabu@colortbl + \ifdefined\adl@array % + \def\tabu@endarray{% + \adl@endarray \egroup \adl@arrayrestore \CT@end \egroup % + \@arrayright % + \gdef\@preamble{}}% + \else % + \def\tabu@endarray{% + \crcr \egroup \egroup % + \@arrayright % + \gdef\@preamble{}\CT@end}% + \fi + \else + \ifdefined\adl@array % + \def\tabu@endarray{% + \adl@endarray \egroup \adl@arrayrestore \egroup % + \@arrayright % + \gdef\@preamble{}}% + \else % + \PackageWarning{tabu} + {\string\@arrayright\space is missing from the + \MessageBreak definition of \string\endarray. + \MessageBreak Compatibility with delarray.sty is broken.}% + \fi\fi +}% \tabu@fix@arrayright +\def\tabu@adl@xarraydashrule #1#2#3{% + \ifnum\@lastchclass=\adl@class@start\else + \ifnum\@lastchclass=\@ne\else + \ifnum\@lastchclass=5 \else % @-arg (class 5) and !-arg (class 1) + \adl@leftrulefalse \fi\fi % must be treated the same + \fi + \ifadl@zwvrule\else \ifadl@inactive\else + \@addtopreamble{\vrule\@width\arrayrulewidth + \@height\z@ \@depth\z@}\fi \fi + \ifadl@leftrule + \@addtopreamble{\adl@vlineL{\CT@arc@}{\adl@dashgapcolor}% + {\number#1}#3}% + \else \@addtopreamble{\adl@vlineR{\CT@arc@}{\adl@dashgapcolor}% + {\number#2}#3} + \fi +}% \tabu@adl@xarraydashrule +\def\tabu@adl@act@endpbox {% + \unskip \ifhmode \nobreak \fi \@finalstrut \@arstrutbox + \egroup \egroup + \adl@colhtdp \box\adl@box \hfil +}% \tabu@adl@act@endpbox +\def\tabu@adl@fix {% + \let\adl@xarraydashrule \tabu@adl@xarraydashrule % arydshln + \let\adl@act@endpbox \tabu@adl@act@endpbox % arydshln + \let\adl@act@@endpbox \tabu@adl@act@endpbox % arydshln + \let\@preamerror \@preamerr % arydshln +}% \tabu@adl@fix +%% Correction for longtable' \@startbox definition ------------------ +%% => \everypar is ``missing'' : TeX should be in vertical mode +\def\tabu@LT@startpbox #1{% + \bgroup + \let\@footnotetext\LT@p@ftntext + \setlength\hsize{#1}% + \@arrayparboxrestore + \everypar{% + \vrule \@height \ht\@arstrutbox \@width \z@ + \everypar{}}% +}% \tabu@LT@startpbox +%% \tracingtabu and the package options ------------------ +\DeclareOption{delarray}{\AtEndOfPackage{\RequirePackage{delarray}}} +\DeclareOption{linegoal}{% + \AtEndOfPackage{% + \RequirePackage{linegoal}[2010/12/07]% + \let\tabudefaulttarget \linegoal% \linegoal is \linewidth if not pdfTeX +}} +\DeclareOption{scantokens}{\tabuscantokenstrue} +\DeclareOption{debugshow}{\AtEndOfPackage{\tracingtabu=\tw@}} +\def\tracingtabu {\begingroup\@ifnextchar=% + {\afterassignment\tabu@tracing\count@} + {\afterassignment\tabu@tracing\count@1\relax}} +\def\tabu@tracing{\expandafter\endgroup + \expandafter\tabu@tr@cing \the\count@ \relax +}% \tabu@tracing +\def\tabu@tr@cing #1\relax {% + \ifnum#1>\thr@@ \let\tabu@tracinglines\message + \else \let\tabu@tracinglines\@gobble + \fi + \ifnum#1>\tw@ \let\tabu@DBG \tabu@@DBG + \def\tabu@mkarstrut {\tabu@DBG@arstrut}% + \tabustrutrule 1.5\p@ + \else \let\tabu@DBG \@gobble + \def\tabu@mkarstrut {\tabu@arstrut}% + \tabustrutrule \z@ + \fi + \ifnum#1>\@ne \let\tabu@debug \message + \else \let\tabu@debug \@gobble + \fi + \ifnum#1>\z@ + \let\tabu@message \message + \let\tabu@tracing@save \tabu@message@save + \let\tabu@starttimer \tabu@pdftimer + \else + \let\tabu@message \@gobble + \let\tabu@tracing@save \@gobble + \let\tabu@starttimer \relax + \fi +}% \tabu@tr@cing +%% Setup \AtBeginDocument +\AtBeginDocument{\tabu@AtBeginDocument} +\def\tabu@AtBeginDocument{\let\tabu@AtBeginDocument \@undefined + \ifdefined\arrayrulecolor \tabu@colortbltrue % + \tabu@colortblalignments % different glues are used + \else \tabu@colortblfalse \fi + \ifdefined\CT@arc@ \else \let\CT@arc@ \relax \fi + \ifdefined\CT@drsc@\else \let\CT@drsc@ \relax \fi + \let\tabu@arc@L \CT@arc@ \let\tabu@drsc@L \CT@drsc@ + \ifodd 1\ifcsname siunitx_table_collect_begin:Nn\endcsname % + \expandafter\ifx + \csname siunitx_table_collect_begin:Nn\endcsname\relax 0\fi\fi\relax + \tabu@siunitxtrue + \else \let\tabu@maybesiunitx \@firstofone % + \let\tabu@siunitx \tabu@nosiunitx + \tabu@siunitxfalse + \fi + \ifdefined\adl@array % + \else \let\tabu@adl@fix \relax + \let\tabu@adl@endtrial \@empty \fi + \ifdefined\longtable % + \else \let\longtabu \tabu@nolongtabu \fi + \ifdefined\cellspacetoplimit \tabu@warn@cellspace\fi + \csname\ifcsname ifHy@hyperfootnotes\endcsname % + ifHy@hyperfootnotes\else iffalse\fi\endcsname + \let\tabu@footnotetext \tabu@Hy@ftntext + \let\tabu@xfootnote \tabu@Hy@xfootnote \fi + \ifdefined\FV@DefineCheckEnd% + \tabu@fancyvrb \fi + \ifdefined\color % + \let\tabu@color \color + \def\tabu@leavevmodecolor ##1{% + \def\tabu@leavevmodecolor {\leavevmode ##1}% + }\expandafter\tabu@leavevmodecolor\expandafter{\color}% + \else + \let\tabu@color \tabu@nocolor + \let\tabu@leavevmodecolor \@firstofone \fi + \tabu@latextwoe + \ifdefined\@raggedtwoe@everyselectfont % + \tabu@raggedtwoe + \else + \let\tabu@cell@L \tabu@cell@l + \let\tabu@cell@R \tabu@cell@r + \let\tabu@cell@C \tabu@cell@c + \let\tabu@cell@J \tabu@cell@j \fi + \expandafter\in@ \expandafter\@arrayright \expandafter{\endarray}% + \ifin@ \let\tabu@endarray \endarray + \else \tabu@fix@arrayright \fi% + \everyrow{}% +}% \tabu@AtBeginDocument +\def\tabu@warn@cellspace{% + \PackageWarning{tabu}{% + Package cellspace has some limitations + \MessageBreak And redefines some macros of array.sty. + \MessageBreak Please use \string\tabulinesep\space to control + \MessageBreak vertical spacing of lines inside tabu environment}% +}% \tabu@warn@cellspace +%% tabu Package initialisation +\tabuscantokensfalse +\let\tabu@arc@G \relax +\let\tabu@drsc@G \relax +\let\tabu@evr@G \@empty +\let\tabu@rc@G \@empty +\def\tabu@ls@G {\tabu@linestyle@}% +\let\tabu@@rowfontreset \@empty % +\let\tabu@@celllalign \@empty +\let\tabu@@cellralign \@empty +\let\tabu@@cellleft \@empty +\let\tabu@@cellright \@empty +\def\tabu@naturalXmin {\z@} +\def\tabu@naturalXmax {\z@} +\let\tabu@rowfontreset \@empty +\def\tabulineon {4pt}\let\tabulineoff \tabulineon +\tabu@everyrowtrue +\ifdefined\pdfelapsedtime % + \def\tabu@pdftimer {\xdef\tabu@starttime{\the\pdfelapsedtime}}% +\else \let\tabu@pdftimer \relax \let\tabu@message@etime \relax +\fi +\tracingtabu=\z@ +\newtabulinestyle {=\maxdimen}% creates the 'factory' settings \tabu@linestyle@ +\tabulinestyle{} +\taburowcolors{} +\let\tabudefaulttarget \linewidth +\ProcessOptions* % \ProcessOptions* is quicker ! +\endinput +%% +%% End of file `tabu.sty'. diff --git a/makefile b/makefile index 42198ad..02b4524 100644 --- a/makefile +++ b/makefile @@ -4,6 +4,7 @@ SOURCES = $(shell find src -name '*.c') TARGETS = $(patsubst %.c, %.o, $(SOURCES)) TARGETS := $(addprefix $(BUILD_DIR)/, $(TARGETS)) APP_NAME = app +DOXYGEN_CONFIG = docs/Doxyfile.in all: $(APP_NAME) @@ -19,3 +20,8 @@ $(TARGETS): $(SOURCES) clean: @rm -r $(BUILD_DIR) $(APP_NAME) @echo -e $(GREEN)clean done.$(RESET) + + +docs: + @doxygen $(DOXYGEN_CONFIG) + @echo -e $(GREEN)docs done.$(RESET) \ No newline at end of file diff --git a/src/app/core_logic/client.c b/src/app/core_logic/client.c index d871d19..963261b 100644 --- a/src/app/core_logic/client.c +++ b/src/app/core_logic/client.c @@ -1,10 +1,25 @@ -#include +/** + * @file client.c + * @brief Fonctions liées à la gestion des clients et de leur panier. + */ +#include #include "client.h" #define MAX_ARTICLES 100 #define MAX_CLIENTS 100 +/** + * @brief Charge les données des clients à partir d'un fichier. + * + * Cette fonction permet de charger les données des clients à partir d'un fichier. + * + * @param numeros - Tableau des numéros de clients. + * @param cagnottes - Tableau des cagnottes des clients. + * @param suspendues - Tableau des états de suspension des clients. + * @param tPhysique - Taille du tableau physique. + * @return Le nombre de clients chargés ou -1 en cas d'erreur. + */ int charger_clients(int numeros[], float cagnottes[], int suspendues[], int tPhysique) { int i = 0, numero, suspendue; float cagnotte; @@ -29,7 +44,27 @@ int charger_clients(int numeros[], float cagnottes[], int suspendues[], int tPhy } - +/** + * @brief Ajoute un article au panier du client. + * + * Cette fonction permet d'ajouter un article au panier du client. + * + * @param numeroClient - Numéro du client. + * @param references - Tableau des références des articles. + * @param poids - Tableau des poids des articles. + * @param volume - Tableau des volumes des articles. + * @param prixUnitaire - Tableau des prix unitaires des articles. + * @param numeros - Tableau des numéros de clients. + * @param cagnottes - Tableau des cagnottes des clients. + * @param suspendues - Tableau des états de suspension des clients. + * @param nombreArticles - Nombre d'articles disponibles. + * @param nombreClients - Nombre de clients. + * @param volumeCoffre - Volume total du coffre. + * @param chargeMaximale - Charge maximale du coffre. + * @param panier - Tableau des références des articles dans le panier. + * @param quantites - Tableau des quantités de chaque article dans le panier. + * @param taillePanier - Taille du panier. + */ void ajouter_article_au_panier(int numeroClient, int references[], float poids[], float volume[], float prixUnitaire[], int numeros[], float cagnottes[], int suspendues[], int nombreArticles, int nombreClients, float volumeCoffre, float chargeMaximale, int panier[], int quantites[], int *taillePanier) { @@ -117,6 +152,16 @@ void ajouter_article_au_panier(int numeroClient, int references[], float poids[] } } + +/** + * @brief Supprime un article du panier du client. + * + * Cette fonction permet de supprimer un article du panier du client. + * + * @param panier - Tableau des références des articles dans le panier. + * @param quantites - Tableau des quantités de chaque article dans le panier. + * @param taillePanier - Taille du panier. + */ void supprimer_article_du_panier(int panier[], int quantites[], int *taillePanier) { int reference; printf("Entrez la référence de l'article à supprimer : "); @@ -149,6 +194,20 @@ void supprimer_article_du_panier(int panier[], int quantites[], int *taillePanie printf("Article supprimé du panier avec succès.\n"); } + +/** + * @brief Affiche un récapitulatif du contenu du panier. + * + * Cette fonction permet d'afficher un récapitulatif du contenu du panier. + * + * @param panier - Tableau des références des articles dans le panier. + * @param taillePanier - Taille du panier. + * @param references - Tableau des références des articles. + * @param poids - Tableau des poids des articles. + * @param volume - Tableau des volumes des articles. + * @param prixUnitaire - Tableau des prix unitaires des articles. + * @param quantites - Tableau des quantités de chaque article dans le panier. + */ void affiche_recap_panier(int panier[], int taillePanier, int references[], float poids[], float volume[], float prixUnitaire[], int quantites[]) { printf("Réf Qté Poids Vol PrixU PoidsTot VolTot PrixTot\n"); @@ -187,6 +246,15 @@ void affiche_recap_panier(int panier[], int taillePanier, int references[], floa printf("Charge Actuelle: %.2f kg\n", poidsTotal); } +/** + * @brief Modifie la quantité d'un article dans le panier du client. + * + * Cette fonction permet de modifier la quantité d'un article dans le panier du client. + * + * @param panier - Tableau des références des articles dans le panier. + * @param quantites - Tableau des quantités de chaque article dans le panier. + * @param taillePanier - Taille du panier. + */ void modifier_quantite_article_panier(int panier[], int quantites[], int *taillePanier) { int reference, quantite; @@ -222,11 +290,32 @@ void modifier_quantite_article_panier(int panier[], int quantites[], int *taille printf("Quantité modifiée avec succès.\n"); } +/** + * @brief Réinitialise le panier du client. + * + * Cette fonction permet de réinitialiser le panier du client. + * + * @param panier - Tableau des références des articles dans le panier. + * @param quantites - Tableau des quantités de chaque article dans le panier. + * @param taillePanier - Taille du panier. + */ void reinitialiser_panier(int panier[], int quantites[], int *taillePanier) { *taillePanier = 0; printf("Panier réinitialisé avec succès.\n"); } +/** + * @brief Déduit un montant de la cagnotte du client. + * + * Cette fonction permet de déduire un montant de la cagnotte du client. + * + * @param numeroClient - Numéro du client. + * @param montant - Montant à déduire de la cagnotte. + * @param numeros - Tableau des numéros de clients. + * @param cagnottes - Tableau des cagnottes des clients. + * @param nombreClients - Nombre de clients. + * @param suspendus - Tableau des états de suspension des clients. + */ void deduire_cagnotte(int numeroClient, float montant, int numeros[], float cagnottes[], int nombreClients, int suspendus[]) { int clientIndex = -1; for (int i = 0; i < nombreClients; i++) { diff --git a/src/app/core_logic/client.h b/src/app/core_logic/client.h index c7d8bfa..2aa3ff8 100644 --- a/src/app/core_logic/client.h +++ b/src/app/core_logic/client.h @@ -1,22 +1,99 @@ -// -// Created by Mathéo Hersan on 16/10/2023. -// - #ifndef SAE_101_CLIENT_H #define SAE_101_CLIENT_H -#include -#include +#include +#include + +/** + * @file client.h + * @brief Fonctions liées à la gestion des clients et de leur panier. + */ +/** + * @brief Charge les données des clients à partir d'un fichier. + * + * @param numeros - Tableau des numéros de clients. + * @param cagnottes - Tableau des cagnottes des clients. + * @param suspendues - Tableau des états de suspension des clients. + * @param tPhysique - Taille du tableau physique. + * @return Le nombre de clients chargés ou -1 en cas d'erreur. + */ int charger_clients(int numeros[], float cagnottes[], int suspendues[], int tPhysique); + +/** + * @brief Ajoute un article au panier du client. + * + * @param numeroClient - Numéro du client. + * @param references - Tableau des références des articles. + * @param poids - Tableau des poids des articles. + * @param volume - Tableau des volumes des articles. + * @param prixUnitaire - Tableau des prix unitaires des articles. + * @param numeros - Tableau des numéros de clients. + * @param cagnottes - Tableau des cagnottes des clients. + * @param suspendues - Tableau des états de suspension des clients. + * @param nombreArticles - Nombre d'articles disponibles. + * @param nombreClients - Nombre de clients. + * @param volumeCoffre - Volume total du coffre. + * @param chargeMaximale - Charge maximale du coffre. + * @param panier - Tableau des références des articles dans le panier. + * @param quantites - Tableau des quantités de chaque article dans le panier. + * @param taillePanier - Taille du panier. + */ void ajouter_article_au_panier(int numeroClient, int references[], float poids[], float volume[], float prixUnitaire[], int numeros[], float cagnottes[], int suspendues[], int nombreArticles, int nombreClients, float volumeCoffre, float chargeMaximale, int panier[], int quantites[], int *taillePanier); + +/** + * @brief Supprime un article du panier du client. + * + * @param panier - Tableau des références des articles dans le panier. + * @param quantites - Tableau des quantités de chaque article dans le panier. + * @param taillePanier - Taille du panier. + */ void supprimer_article_du_panier(int panier[], int quantites[], int *taillePanier); + +/** + * @brief Affiche un récapitulatif du contenu du panier. + * + * @param panier - Tableau des références des articles dans le panier. + * @param taillePanier - Taille du panier. + * @param references - Tableau des références des articles. + * @param poids - Tableau des poids des articles. + * @param volume - Tableau des volumes des articles. + * @param prixUnitaire - Tableau des prix unitaires des articles. + * @param quantites - Tableau des quantités de chaque article dans le panier. + */ void affiche_recap_panier(int panier[], int taillePanier, int references[], float poids[], float volume[], float prixUnitaire[], int quantites[]); + +/** + * @brief Modifie la quantité d'un article dans le panier du client. + * + * @param panier - Tableau des références des articles dans le panier. + * @param quantites - Tableau des quantités de chaque article dans le panier. + * @param taillePanier - Taille du panier. + */ void modifier_quantite_article_panier(int panier[], int quantites[], int *taillePanier); + +/** + * @brief Réinitialise le panier du client. + * + * @param panier - Tableau des références des articles dans le panier. + * @param quantites - Tableau des quantités de chaque article dans le panier. + * @param taillePanier - Taille du panier. + */ void reinitialiser_panier(int panier[], int quantites[], int *taillePanier); + +/** + * @brief Déduit un montant de la cagnotte du client. + * + * @param numeroClient - Numéro du client. + * @param montant - Montant à déduire de la cagnotte. + * @param numeros - Tableau des numéros de clients. + * @param cagnottes - Tableau des cagnottes des clients. + * @param nombreClients - Nombre de clients. + * @param suspendus - Tableau des états de suspension des clients. + */ void deduire_cagnotte(int numeroClient, float montant, int numeros[], float cagnottes[], int nombreClients, int suspendus[]); -#endif //SAE_101_CLIENT_H +#endif // SAE_101_CLIENT_H diff --git a/src/app/core_logic/responsable.c b/src/app/core_logic/responsable.c index ba7dc6e..5efb4cb 100644 --- a/src/app/core_logic/responsable.c +++ b/src/app/core_logic/responsable.c @@ -1,8 +1,26 @@ +/** + * @file responsable.c + * @brief Définition des fonctions de responsable.c. + */ + #include #include #include "responsable.h" #include "../interface/interface_resp.h" +/** + * @brief Charge les informations des articles à partir d'un fichier dans des tableaux. + * + * Cette fonction lit les informations des articles à partir du fichier "donnee/articles.txt" et les stocke + * dans les tableaux tRef, tPoids, tVol, et tPrix. + * + * @param tRef Tableau des références d'articles. + * @param tPoids Tableau des poids des articles. + * @param tVol Tableau des volumes des articles. + * @param tPrix Tableau des prix unitaires des articles. + * @param tPhysique Taille physique des tableaux. + * @return Le nombre d'articles chargés avec succès ou -1 en cas d'erreur. + */ int chargementArticles(int tRef[], float tPoids[], float tVol[], float tPrix[], int tPhysique) { int i=0, ref; @@ -29,6 +47,18 @@ int chargementArticles(int tRef[], float tPoids[], float tVol[], float tPrix[], return i; } +/** + * @brief Sauvegarde les informations des articles dans un fichier. + * + * Cette fonction sauvegarde les informations des articles depuis les tableaux tRef, tPoids, tVol et tPrix + * dans le fichier "donnee/articles.txt". + * + * @param tRef Tableau des références d'articles. + * @param tPoids Tableau des poids des articles. + * @param tVol Tableau des volumes des articles. + * @param tPrix Tableau des prix unitaires des articles. + * @param tLogique Taille logique des tableaux. + */ void sauvegardArticles(int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique) { int i; @@ -47,6 +77,23 @@ void sauvegardArticles(int tRef[], float tPoids[], float tVol[], float tPrix[], fclose(fe); } +/** + * @brief Ajoute un nouvel article aux tableaux d'articles. + * + * Cette fonction ajoute un nouvel article aux tableaux tRef, tPoids, tVol, et tPrix et incrémente la taille logique. + * + * @param tRef Tableau des références d'articles. + * @param tPoids Tableau des poids des articles. + * @param tVol Tableau des volumes des articles. + * @param tPrix Tableau des prix unitaires des articles. + * @param tLogique Taille logique des tableaux. + * @param tPhysique Taille physique des tableaux. + * @param ref Référence du nouvel article. + * @param poids Poids du nouvel article. + * @param volume Volume du nouvel article. + * @param prix Prix unitaire du nouvel article. + * @return 0 en cas de succès, -2 si le tableau est plein. + */ int ajouterArticle( int tRef[], float tPoids[], float tVol[], float tPrix[], int *tLogique, int tPhysique, int ref, float poids, float volume, float prix) { int i = *tLogique; @@ -64,6 +111,16 @@ int ajouterArticle( int tRef[], float tPoids[], float tVol[], float tPrix[], int return 0; } +/** + * @brief Recherche une référence d'article dans le tableau tRef. + * + * Cette fonction recherche une référence d'article dans le tableau tRef et renvoie l'index si l'article est trouvé. + * + * @param tRef Tableau des références d'articles. + * @param ref Référence de l'article à rechercher. + * @param index Pointeur vers la variable pour stocker l'index de l'article trouvé. + * @param tLogique Taille logique des tableaux. + */ void rechercheRefArticle(int tRef[], int ref, int *index, int tLogique) { for (int i = 0; i +/** + * @file responsable.h + * @brief Déclaration des fonctions de responsable.c. + */ +#include + +/** + * @brief Charge les informations des articles à partir d'un fichier dans des tableaux. + * + * Cette fonction lit les informations des articles à partir du fichier "donnee/articles.txt" et les stocke + * dans les tableaux tRef, tPoids, tVol, et tPrix. + * + * @param tRef Tableau des références d'articles. + * @param tPoids Tableau des poids des articles. + * @param tVol Tableau des volumes des articles. + * @param tPrix Tableau des prix unitaires des articles. + * @param tPhysique Taille physique des tableaux. + * @return Le nombre d'articles chargés avec succès ou -1 en cas d'erreur. + */ int chargementArticles(int tRef[], float tPoids[], float tVol[], float tPrix[], int tPhysique); + +/** + * @brief Sauvegarde les informations des articles dans un fichier. + * + * Cette fonction sauvegarde les informations des articles depuis les tableaux tRef, tPoids, tVol et tPrix + * dans le fichier "donnee/articles.txt". + * + * @param tRef Tableau des références d'articles. + * @param tPoids Tableau des poids des articles. + * @param tVol Tableau des volumes des articles. + * @param tPrix Tableau des prix unitaires des articles. + * @param tLogique Taille logique des tableaux. + */ void sauvegardArticles(int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique); -int ajouterArticle( int tRef[], float tPoids[], float tVol[], float tPrix[], int *tLogique, int tPhysique, int ref, float poids, float volume, float prix); + +/** + * @brief Ajoute un nouvel article aux tableaux d'articles. + * + * Cette fonction ajoute un nouvel article aux tableaux tRef, tPoids, tVol, et tPrix et incrémente la taille logique. + * + * @param tRef Tableau des références d'articles. + * @param tPoids Tableau des poids des articles. + * @param tVol Tableau des volumes des articles. + * @param tPrix Tableau des prix unitaires des articles. + * @param tLogique Taille logique des tableaux. + * @param tPhysique Taille physique des tableaux. + * @param ref Référence du nouvel article. + * @param poids Poids du nouvel article. + * @param volume Volume du nouvel article. + * @param prix Prix unitaire du nouvel article. + * @return 0 en cas de succès, -2 si le tableau est plein. + */ +int ajouterArticle(int tRef[], float tPoids[], float tVol[], float tPrix[], int *tLogique, int tPhysique, int ref, float poids, float volume, float prix); + +/** + * @brief Recherche une référence d'article dans le tableau tRef. + * + * Cette fonction recherche une référence d'article dans le tableau tRef et renvoie l'index si l'article est trouvé. + * + * @param tRef Tableau des références d'articles. + * @param ref Référence de l'article à rechercher. + * @param index Pointeur vers la variable pour stocker l'index de l'article trouvé. + * @param tLogique Taille logique des tableaux. + */ void rechercheRefArticle(int tRef[], int ref, int *index, int tLogique); + +/** + * @brief Supprime un article des tableaux d'articles. + * + * Cette fonction supprime un article des tableaux tRef, tPoids, tVol, et tPrix et met à jour la taille logique. + * + * @param tRef Tableau des références d'articles. + * @param tPoids Tableau des poids des articles. + * @param tVol Tableau des volumes des articles. + * @param tPrix Tableau des prix unitaires des articles. + * @param tLogique Pointeur vers la taille logique des tableaux. + */ void supprimerArticle(int tRef[], float tPoids[], float tVol[], float tPrix[], int *tLogique); + +/** + * @brief Modifie les informations d'un article existant. + * + * Cette fonction permet de modifier les informations (poids, volume, prix) d'un article existant. + * + * @param tRef Tableau des références d'articles. + * @param tPoids Tableau des poids des articles. + * @param tVol Tableau des volumes des articles. + * @param tPrix Tableau des prix unitaires des articles. + * @param tLogique Taille logique des tableaux. + */ void modifierArticle(int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique); -void ajouterClient(int tNumClient[], float tCagnotte[], int tSus[], int *tLogique, int tPhysique); \ No newline at end of file + +/** + * @brief Ajoute un nouveau client aux tableaux de clients. + * + * Cette fonction ajoute un nouveau client aux tableaux tNumClient, tCagnotte et tSus et incrémente la taille logique. + * + * @param tNumClient Tableau des numéros de client. + * @param tCagnotte Tableau des cagnottes des clients. + * @param tSus Tableau des états de suspension des clients. + * @param tLogique Pointeur vers la taille logique des tableaux. + * @param tPhysique Taille physique des tableaux. + */ +void ajouterClient(int tNumClient[], float tCagnotte[], int tSus[], int *tLogique, int tPhysique); diff --git a/src/app/interface/interface_client.c b/src/app/interface/interface_client.c index d18fa05..92ffa6c 100644 --- a/src/app/interface/interface_client.c +++ b/src/app/interface/interface_client.c @@ -1,3 +1,8 @@ +/** + * @file interface_client.c + * @brief Implémentation des fonctions liées à l'interface client. + */ + #include "interface_client.h" #include "app/core_logic/client.h" #include "app/core_logic/responsable.h" @@ -5,26 +10,31 @@ #define MAX_ARTICLES 100 #define MAX_CLIENTS 100 +/** + * @brief Affiche le menu principal de l'interface client. + */ void affiche_client() { printf("\n"); - printf("+-------------+ \n"); + printf("+-------------+\n"); printf("|| Bonjour ! ||\n"); - printf("+-------------+ \n"); + printf("+-------------+\n"); printf("\n"); printf("+-----------------------------------------------------------------+\n"); - printf("|| Que voulez-vous faire ? \t \t \t \t \t || \n"); - printf("||\t1 : Afficher le récapitulatif du panier. \t \t || \n"); - printf("||\t2 : Ajouter un article au panier. \t \t \t || \n"); - printf("||\t3 : Supprimer un article du panier. \t \t \t || \n"); - printf("||\t4 : Modifier la quantité d'un article du panier. \t || \n"); - printf("||\t5 : Réinitialiser le panier. \t \t \t \t || \n"); - printf("||\t9 : Quitter. \t \t \t \t \t \t || \n"); + printf("|| Que voulez-vous faire ?\t\t\t\t\t\t\t||\n"); + printf("||\t1 : Afficher le récapitulatif du panier.\t\t\t||\n"); + printf("||\t2 : Ajouter un article au panier.\t\t\t\t||\n"); + printf("||\t3 : Supprimer un article du panier.\t\t\t\t||\n"); + printf("||\t4 : Modifier la quantité d'un article du panier.\t||\n"); + printf("||\t5 : Réinitialiser le panier.\t\t\t\t\t||\n"); + printf("||\t9 : Quitter.\t\t\t\t\t\t\t\t\t||\n"); printf("+-----------------------------------------------------------------+\n"); } -/* -* Sert à lancer le menu et faire choisir l'utilisateur -*/ +/** + * @brief Laisse l'utilisateur choisir une option du menu. + * + * @param[in, out] choix - L'option choisie par l'utilisateur. + */ void menu_client(int *choix) { affiche_client(); printf("Vous choisissez: "); @@ -34,6 +44,13 @@ void menu_client(int *choix) { } } +/** + * @brief Fonction principale de l'interface client. + * + * Cette fonction permet aux clients d'utiliser l'application pour gérer leur panier + * et effectuer des opérations telles que l'ajout, la suppression ou la modification + * d'articles dans le panier. + */ void global_client() { int choix; int references[MAX_ARTICLES]; @@ -89,7 +106,7 @@ void global_client() { return; } - do{ + do { menu_client(&choix); switch (choix) { @@ -129,6 +146,5 @@ void global_client() { printf("Veuillez entrer un choix valide !\n"); break; } - }while(choix != 9); + } while (choix != 9); } - diff --git a/src/app/interface/interface_client.h b/src/app/interface/interface_client.h index c6d2838..2885394 100644 --- a/src/app/interface/interface_client.h +++ b/src/app/interface/interface_client.h @@ -1,5 +1,27 @@ -#include +/** + * @file interface_client.h + * @brief En-tête des fonctions liées à l'interface client. + */ +#include + +/** + * @brief Affiche le menu principal de l'interface client. + */ void affiche_client(); + +/** + * @brief Laisse l'utilisateur choisir une option du menu. + * + * @param[in, out] choix - L'option choisie par l'utilisateur. + */ void menu_client(int *choix); -void global_client(); \ No newline at end of file + +/** + * @brief Fonction principale de l'interface client. + * + * Cette fonction permet aux clients d'utiliser l'application pour gérer leur panier + * et effectuer des opérations telles que l'ajout, la suppression ou la modification + * d'articles dans le panier. + */ +void global_client(); diff --git a/src/app/interface/interface_resp.c b/src/app/interface/interface_resp.c index 9f39441..ddfb9c0 100644 --- a/src/app/interface/interface_resp.c +++ b/src/app/interface/interface_resp.c @@ -1,3 +1,8 @@ +/** +* @file interface_resp.c +* @brief Implémentation des fonctions liées à l'interface du responsable. +*/ + #include #include #include "interface_resp.h" @@ -7,69 +12,65 @@ #define MAX_CLIENTS 100 #define MAX_ARTICLES 100 - -void affiche_resp(void){ +/** + * @brief Affiche le menu principal de l'interface du responsable. + */ +void affiche_resp(void) { printf("\n"); - printf("+-------------+ \n"); - printf("|| Bonjour ! ||\n") ; - printf("+-------------+ \n"); + printf("+-------------+\n"); + printf("|| Bonjour ! ||\n"); + printf("+-------------+\n"); printf("\n"); printf("+-----------------------------------------------------------------+\n"); - printf("|| Que voulez-vous faire ? \t \t \t \t \t || \n"); - printf("||\t1 : Afficher les articles \t \t \t \t || \n"); - printf("||\t2 : Afficher un article \t \t \t \t || \n"); - printf("||\t3 : Afficher un client \t \t \t \t \t || \n"); - printf("||\t4 : Afficher les clients \t \t \t \t || \n"); - printf("||\t5 : Ajouter un article \t \t \t \t \t || \n"); - printf("||\t6 : Supprimer un article \t \t \t \t || \n"); - printf("||\t7 : Modifier un article \t \t \t \t || \n"); - printf("||\t8 : Ajouter un client\t \t \t \t \t || \n"); - printf("||\t9 : Quittez. \t \t \t \t \t \t || \n"); + printf("|| Que voulez-vous faire ?\t\t\t\t\t\t\t||\n"); + printf("||\t1 : Afficher les articles\t\t\t\t\t\t||\n"); + printf("||\t2 : Afficher un article\t\t\t\t\t\t\t||\n"); + printf("||\t3 : Afficher un client\t\t\t\t\t\t\t||\n"); + printf("||\t4 : Afficher les clients\t\t\t\t\t\t||\n"); + printf("||\t5 : Ajouter un article\t\t\t\t\t\t\t||\n"); + printf("||\t6 : Supprimer un article\t\t\t\t\t\t||\n"); + printf("||\t7 : Modifier un article\t\t\t\t\t\t\t||\n"); + printf("||\t8 : Ajouter un client\t\t\t\t\t\t\t||\n"); + printf("||\t9 : Quittez.\t\t\t\t\t\t\t\t\t||\n"); printf("+-----------------------------------------------------------------+\n"); } -/* -void affiche_resp(int a){ - printf("\n"); - printf("+-------------+ \n"); - printf("|| Bonjour ! ||\n") ; - printf("+-------------+ \n"); - printf("\n"); - printf("+-----------------------------------------------------------------+\n"); - printf("|| Que voulez-vous faire ? \t \t \t \t \t || \n"); - printf("||\t1 : Afficher les articles \t \t \t \t || \n"); - printf("||\t2 : Afficher un article \t \t \t \t || \n"); - printf("||\t3 : Afficher un client \t \t \t \t \t || \n"); - printf("||\t4 : Afficher les clients \t \t \t \t || \n"); - printf("||\t5 : Supprimer un article \t \t \t \t || \n"); - printf("||\t6 : Modifier un article \t \t \t \t || \n"); - printf("||\t7 : Réinitialiser le panier. \t \t \t \t || \n"); - printf("+-----------------------------------------------------------------+\n"); -} -*/ -void affichArticles( int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique) -{ - printf("\t Liste des articles \n\n"); + +/** + * @brief Affiche la liste des articles. + * + * @param tRef - Tableau des références d'articles. + * @param tPoids - Tableau des poids d'articles. + * @param tVol - Tableau des volumes d'articles. + * @param tPrix - Tableau des prix d'articles. + * @param tLogique - Taille logique des tableaux. + */ +void affichArticles(int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique) { + printf("\t Liste des articles\n\n"); printf("\t Ref\t Poids\t Volume\t Prix\n"); - for ( int i = 0; i < tLogique; ++i) - { + for (int i = 0; i < tLogique; ++i) { printf("\t %d\t %.2f\t %.2f\t %.2f\n\n", tRef[i], tPoids[i], tVol[i], tPrix[i]); } } -void affichUnArticle(int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique) -{ +/** + * @brief Affiche un article spécifique. + * + * @param tRef - Tableau des références d'articles. + * @param tPoids - Tableau des poids d'articles. + * @param tVol - Tableau des volumes d'articles. + * @param tPrix - Tableau des prix d'articles. + * @param tLogique - Taille logique des tableaux. + */ +void affichUnArticle(int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique) { int ref; printf("\tQuelle est la référence de l'article à rechercher ?\n"); - while(scanf("%d", &ref) != 1 || ref <= 0) - { + while (scanf("%d", &ref) != 1 || ref <= 0) { printf("\tEntrez une référence valide\n"); - while(getchar() != '\n'); + while (getchar() != '\n'); } printf("\t Ref\t Poids\t Volume\t Prix\n"); - for ( int i = 0; i < tLogique; ++i) - { - if ( ref == tRef[i] ) - { + for (int i = 0; i < tLogique; ++i) { + if (ref == tRef[i]) { printf("\t %d\t %.2f\t %.2f\t %.2f\n\n", tRef[i], tPoids[i], tVol[i], tPrix[i]); return; } @@ -77,20 +78,24 @@ void affichUnArticle(int tRef[], float tPoids[], float tVol[], float tPrix[], in printf("\t Article introuvable\n"); } -void affichUnClient(int tNumClient[], float tCagnotte[], int tSus[], int tLogique) -{ +/** + * @brief Affiche un client spécifique. + * + * @param tNumClient - Tableau des numéros de client. + * @param tCagnotte - Tableau des cagnottes des clients. + * @param tSus - Tableau d'états des clients. + * @param tLogique - Taille logique des tableaux. + */ +void affichUnClient(int tNumClient[], float tCagnotte[], int tSus[], int tLogique) { int numC; printf("\tVeuillez entrer le numéro du client à rechercher\n"); - while(scanf("%d", &numC) != 1 || numC <= 0) - { + while (scanf("%d", &numC) != 1 || numC <= 0) { printf("\t Veuillez entrez un numéro valide !\n"); - while(getchar() != '\n'); + while (getchar() != '\n'); } printf("\t NumClient\t Cagnotte\t Etat\n"); - for ( int i = 0; i < tLogique; ++i) - { - if ( numC == tNumClient[i] ) - { + for (int i = 0; i < tLogique; ++i) { + if (numC == tNumClient[i]) { printf("\t %d\t\t %.2f\t %d\n\n", tNumClient[i], tCagnotte[i], tSus[i]); return; } @@ -98,126 +103,132 @@ void affichUnClient(int tNumClient[], float tCagnotte[], int tSus[], int tLogiqu printf("Client introuvable\n"); } -void affichClients(int tNumClient[], float tCagnotte[], int tSus[], int tLogique) -{ +/** + * @brief Affiche la liste des clients. + * + * @param tNumClient - Tableau des numéros de client. + * @param tCagnotte - Tableau des cagnottes des clients. + * @param tSus - Tableau d'états des clients. + * @param tLogique - Taille logique des tableaux. + */ +void affichClients(int tNumClient[], float tCagnotte[], int tSus[], int tLogique) { printf("\t Liste des clients\n"); printf("\t NumClient\t Cagnotte\t Etat\n"); - for ( int i = 0; i < tLogique; ++i) - { + for (int i = 0; i < tLogique; ++i) { printf("\t %d\t\t %.2f\t\t %d\n\n", tNumClient[i], tCagnotte[i], tSus[i]); } - printf("\t Fin de la liste ! \n"); + printf("\t Fin de la liste !\n"); } -void affichAjoutArticle(int *ref, float *poids, float *volume, float *prix) -{ - printf("\t Entrez la ref du nouveaux produit\n"); - while(scanf("%d", ref) != 1 || *ref <= 0) - { +/** + * @brief Affiche les informations pour ajouter un nouvel article. + * + * @param[in, out] ref - Référence du nouvel article. + * @param[in, out] poids - Poids du nouvel article. + * @param[in, out] volume - Volume du nouvel article. + * @param[in, out] prix - Prix du nouvel article. + */ +void affichAjoutArticle(int *ref, float *poids, float *volume, float *prix) { + printf("\t Entrez la ref du nouveau produit\n"); + while (scanf("%d", ref) != 1 || *ref <= 0) { printf("\t Veuillez entrer une référence valide.\n"); - while(getchar() != '\n'); + while (getchar() != '\n'); } - printf("\t Entrez le poids du nouveaux produit\n"); - while(scanf("%f", poids) != 1 || *poids <= 0) - { + printf("\t Entrez le poids du nouveau produit\n"); + while (scanf("%f", poids) != 1 || *poids <= 0) { printf("\t Veuillez entrer un poids valide.\n"); - - while(getchar() != '\n'); + while (getchar() != '\n'); } - - printf("\t Entrez le volume du nouveaux produit\n"); - while(scanf("%f", volume) != 1 || *volume <= 0) - { + + printf("\t Entrez le volume du nouveau produit\n"); + while (scanf("%f", volume) != 1 || *volume <= 0) { printf("\t Veuillez entrer un volume valide.\n"); - while(getchar() != '\n'); + while (getchar() != '\n'); } - - printf("\t Entrez le prix du nouveaux produit\n"); - while(scanf("%f", prix) != 1 || *prix <= 0) - { - printf("\t Veuillez entrer un prix valide.\n"); - while(getchar() != '\n'); + + printf("\t Entrez le prix du nouveau produit\n"); + while (scanf("%f", prix) != 1 || *prix <= 0) { + printf("\t Veuillez entrer un prix valide.\n"); + while (getchar() != '\n'); } } -void affichSupprimerArticle(int *ref) -{ - printf("\t Quel est la référence de l'article voulez-vous supprimez\n"); - while(scanf("%d", ref ) != 1 || *ref <= 0) - { +/** + * @brief Affiche les informations pour supprimer un article. + * + * @param[in, out] ref - Référence de l'article à supprimer. + */ +void affichSupprimerArticle(int *ref) { + printf("\t Quelle est la référence de l'article que vous voulez supprimer ?\n"); + while (scanf("%d", ref) != 1 || *ref <= 0) { printf("\t Veuillez entrer une référence valide.\n"); - while(getchar() != '\n'); + while (getchar() != '\n'); } } -void affichModifierArticle(int *ref, float *poids, float *volume, float *prix) -{ - - - printf("\t Quel est la référence de l'article voulez-vous modifier ?\n"); - while(scanf("%d", ref) != 1 || *ref <=0) - { - printf("\tVeuillez entrer une référence correcte !\n"); +/** + * @brief Affiche les informations pour modifier un article. + * + * @param[in, out] ref - Référence de l'article à modifier. + * @param[in, out] poids - Nouveau poids de l'article. + * @param[in, out] volume - Nouveau volume de l'article. + * @param[in, out] prix - Nouveau prix de l'article. + */ +void affichModifierArticle(int *ref, float *poids, float *volume, float *prix) { + printf("\t Quelle est la référence de l'article que vous voulez modifier ?\n"); + while (scanf("%d", ref) != 1 || *ref <= 0) { + printf("\t Veuillez entrer une référence correcte !\n"); while (getchar() != '\n'); } printf("\t Quel est le nouveau poids à entrer ?\n"); - while(scanf("%f", poids) != 1 || *poids <= 0) - { + while (scanf("%f", poids) != 1 || *poids <= 0) { printf("\t Veuillez entrer un poids correct !\n"); while (getchar() != '\n'); } printf("\t Quel est le nouveau volume à entrer ?\n"); - while(scanf("%f", volume) != 1 || *volume <= 0) - { + while (scanf("%f", volume) != 1 || *volume <= 0) { printf("\t Veuillez entrer un volume correct !\n"); while (getchar() != '\n'); } printf("\t Quel est le nouveau prix à entrer ?\n"); - while(scanf("%f", prix) != 1 || *prix <= 0) - { + while (scanf("%f", prix) != 1 || *prix <= 0) { printf("\t Veuillez entrer un prix correct !\n"); while (getchar() != '\n'); } } -void affichAjoutClient(int tNumClient[], int tLogique, int *numC) -{ +/** + * @brief Affiche les informations pour ajouter un nouveau client. + * + * @param[in] tNumClient - Tableau des numéros de client. + * @param[in] tLogique - Taille logique des tableaux. + * @param[in, out] numC - Numéro du nouveau client. + */ +void affichAjoutClient(int tNumClient[], int tLogique, int *numC) { printf("\t Veuillez entrer le numéro du nouveau client\n"); - while(scanf("%d", numC) != 1 || *numC <= 0) - { + while (scanf("%d", numC) != 1 || *numC <= 0) { printf("Entrez un numéro valide !\n"); - while(getchar() != '\n'); + while (getchar() != '\n'); } - for ( int i = 0 ; i < tLogique; ++i) - { - if ( *numC == tNumClient[i] ) - { - fprintf(stderr,"\t Client déjà existant.\n"); + for (int i = 0; i < tLogique; ++i) { + if (*numC == tNumClient[i]) { + fprintf(stderr, "\t Client déjà existant.\n"); return; } } } -/* -void menu_resp(int *choix, int jour) { - affiche_resp(); - //affiche_resp(jour); - printf("Vous choisissez: "); - while (scanf("%d", choix) != 1 || *choix < 0 || *choix > 5) { - while (getchar() != '\n'); - affiche_resp(jour); - printf("Veuillez entrer un choix valide : "); - } -} -*/ - +/** + * @brief Fonction de menu pour le responsable. + * + * @param[in, out] choix - L'option choisie par le responsable. + */ void menu_resp(int *choix) { affiche_resp(); - //affiche_resp(jour); printf("Vous choisissez: "); while (scanf("%d", choix) != 1 || *choix < 0 || *choix > 9) { while (getchar() != '\n'); @@ -226,9 +237,12 @@ void menu_resp(int *choix) { } } -void global_resp(){ +/** + * @brief Fonction principale de l'interface du responsable. + */ +void global_resp() { int choix, ref = 0; - float poids = 0, volume = 0 , prix = 0; + float poids = 0, volume = 0, prix = 0; int tRef[MAX_ARTICLES]; float tPoids[MAX_ARTICLES]; float tVol[MAX_ARTICLES]; @@ -241,8 +255,6 @@ void global_resp(){ int tLogClient = charger_clients(tNumClient, tCagnotte, tSus, MAX_CLIENTS); do { - - menu_resp(&choix); switch (choix) { case 1: @@ -258,7 +270,7 @@ void global_resp(){ affichClients(tNumClient, tCagnotte, tSus, tLogClient); break; case 5: - ajouterArticle(tRef, tPoids, tVol, tPrix, &tLogArticle, MAX_ARTICLES, ref, poids, volume, prix); + ajouterArticle(tRef, tPoids, tVol, tPrix, &tLogArticle, MAX_ARTICLES, ref, poids, volume, prix); break; case 6: supprimerArticle(tRef, tPoids, tVol, tPrix, &tLogArticle); diff --git a/src/app/interface/interface_resp.h b/src/app/interface/interface_resp.h index 6b9826c..1abee65 100644 --- a/src/app/interface/interface_resp.h +++ b/src/app/interface/interface_resp.h @@ -1,12 +1,106 @@ -void affichArticles( int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique); +/** + * @file interface_resp.h + * @brief En-tête des fonctions liées à l'interface du responsable. + */ + +/** + * @brief Affiche la liste des articles. + * + * @param tRef - Tableau des références des articles. + * @param tPoids - Tableau des poids des articles. + * @param tVol - Tableau des volumes des articles. + * @param tPrix - Tableau des prix des articles. + * @param tLogique - Nombre d'articles actuellement enregistrés. + */ +void affichArticles(int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique); + +/** + * @brief Affiche les informations d'un article spécifique. + * + * @param tRef - Tableau des références des articles. + * @param tPoids - Tableau des poids des articles. + * @param tVol - Tableau des volumes des articles. + * @param tPrix - Tableau des prix des articles. + * @param tLogique - Nombre d'articles actuellement enregistrés. + */ void affichUnArticle(int tRef[], float tPoids[], float tVol[], float tPrix[], int tLogique); + +/** + * @brief Affiche les informations d'un client spécifique. + * + * @param tNumClient - Tableau des numéros de clients. + * @param tCagnotte - Tableau des cagnottes des clients. + * @param tSus - Tableau des états de suspension des clients. + * @param tLogique - Nombre de clients actuellement enregistrés. + */ void affichUnClient(int tNumClient[], float tCagnotte[], int tSus[], int tLogique); + +/** + * @brief Affiche la liste des clients. + * + * @param tNumClient - Tableau des numéros de clients. + * @param tCagnotte - Tableau des cagnottes des clients. + * @param tSus - Tableau des états de suspension des clients. + * @param tLogique - Nombre de clients actuellement enregistrés. + */ void affichClients(int tNumClient[], float tCagnotte[], int tSus[], int tLogique); + +/** + * @brief Affiche les informations nécessaires pour ajouter un nouvel article. + * + * @param ref - Référence du nouvel article. + * @param poids - Poids du nouvel article. + * @param volume - Volume du nouvel article. + * @param prix - Prix du nouvel article. + */ void affichAjoutArticle(int *ref, float *poids, float *volume, float *prix); + +/** + * @brief Affiche les informations nécessaires pour supprimer un article. + * + * @param ref - Référence de l'article à supprimer. + */ void affichSupprimerArticle(int *ref); + +/** + * @brief Affiche les informations nécessaires pour modifier un article. + * + * @param ref - Référence de l'article à modifier. + * @param poids - Nouveau poids de l'article. + * @param volume - Nouveau volume de l'article. + * @param prix - Nouveau prix de l'article. + */ void affichModifierArticle(int *ref, float *poids, float *volume, float *prix); + +/** + * @brief Affiche un message en cas de problème lors de la recherche d'un article. + */ void problemRechercheArticle(); + +/** + * @brief Affiche les informations nécessaires pour ajouter un nouveau client. + * + * @param tNumClient - Tableau des numéros de clients. + * @param tLogique - Nombre de clients actuellement enregistrés. + * @param numC - Numéro du nouveau client. + */ void affichAjoutClient(int tNumClient[], int tLogique, int *numC); + +/** + * @brief Laisse le responsable choisir une option du menu. + * + * @param[in, out] choix - L'option choisie par le responsable. + */ void menu_resp(int *choix); + +/** + * @brief Fonction principale de l'interface du responsable. + * + * Cette fonction permet au responsable d'effectuer diverses actions telles que la gestion des articles et des clients. + */ void global_resp(); -void affiche_resp(void); \ No newline at end of file + +/** + * @brief Affiche le menu principal de l'interface du responsable. + */ +void affiche_resp(); diff --git a/src/main.c b/src/main.c index e75e6d8..35e1659 100644 --- a/src/main.c +++ b/src/main.c @@ -1,14 +1,27 @@ -#include -#include +/** + * @file main.c + * @brief Programme principal pour choisir une interface et lancer l'application. + */ + +#include +#include #include "app/interface/interface_client.h" #include "app/interface/interface_resp.h" #include "app/core_logic/client.h" #include "app/core_logic/responsable.h" +/** + * @brief Fonction permettant à l'utilisateur de choisir une interface. + * + * L'utilisateur peut choisir entre l'interface "responsable" ou "client" en saisissant 1 ou 2. + * Cette fonction vérifie que l'entrée de l'utilisateur est valide. + * + * @return Le choix de l'interface (1 pour responsable, 2 pour client). + */ int choixInterface(void) { int choix; printf("Choix de l'interface: \n"); - printf("1. Interface 'responsable': Pour les responsables \n"); + printf("1. Interface 'responsable': Pour les responsables\n"); printf("2. Interface 'Client' : Pour les clients\n"); while (1) { @@ -29,7 +42,15 @@ int choixInterface(void) { return choix; } -int main(){ +/** + * @brief Fonction principale du programme. + * + * Cette fonction permet à l'utilisateur de choisir une interface à lancer (responsable ou client) + * en utilisant la fonction choixInterface(), puis elle lance l'interface correspondante. + * + * @return 0 si le programme s'est exécuté avec succès. + */ +int main() { switch (choixInterface()) { case 1: global_resp(); @@ -40,4 +61,4 @@ int main(){ } return 0; -} \ No newline at end of file +}