% Author...................: C. Pierquet
% licence..................: Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txt
% licence (part of code).. : CC BY-SA 3.0 (from Mark Wibrow)
% licence cliparts.........: CC0 (from openclipart or svgrepo)
% code

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{ProfLycee}[2026/03/24 4.00f Aide pour l'utilisation de LaTeX en lycee]
% 4.00f  Modification du style des +/- pour les schémas signes (fa)
% 4.00e  Correction de bugs mineurs
% 4.00d  Gestion des pages de garde
% 4.00c  Travail sur les décompositions en facteurs premiers
% 4.00b  Meilleures traductions + bugfixes + ajout geom analytique
% 4.00a  Boulot sur latex3 + option [lng] pour multilangue ?
% 3.12f  Modif mineure des styles piton
% 3.12e  Correction d'un bug de couleur avec piton
% 3.12d  Compat fa567
% 3.12c  Pictosbac version 'flat'
% 3.12b  Style grille histo + améliorations de qques codes + binôme Newton + corrections de bugs (nouveaux codes 'piton')
% 3.12a  Ajout de cliparts 'zone bac' (via ProfLycee-Pictosbac)
% 3.11g  Ajout de deux cliparts (bullseye)
% 3.11f  Bugfix
% 3.11e  Compatibilité avec fa5/6 (en projet) + nouvelle clé pour SolutionSeuil + Styles piton (Onglet & Carbon)
% 3.11d  Correction d'un bug avec des espacements non voulus
% 3.11c  Option [noncancel] pour ne pas charger cancel avec thicklines + option [compat] pour 'maximiser' les options utiles + améliorations dans le code
% 3.11b  Option [nonsiunitxfr] + bugfix avec tabularray
% 3.11a  Ajout d'aliases des commandes via \pfl... (à voir pour les environnements...)
% 3.10g  Clé [warningsoff] pour envlever les warnings liés à unicode-math

%------Mathtools
\RequirePackage{mathtools}

%------Option(s)
\newif\if@xcolor \@xcolorfalse
\newif\if@build \@buildfalse
\newif\if@loadamssymb \@loadamssymbtrue
\newif\if@loadsiunitxfr \@loadsiunitxfrtrue
\newif\if@warningsoff \@warningsofffalse
\newif\if@loadtikzbabel \@loadtikzbabeltrue
\newif\if@loadcancel \@loadcanceltrue
\newif\if@compatmax \@compatmaxfalse
\newif\if@fafive \@fafivetrue
\newif\if@fasix \@fasixfalse
\newif\if@faseven \@fasevenfalse
\newif\if@pfllngfr \@pfllngfrtrue
\newif\if@pfllngen \@pfllngenfalse
\newif\if@pfllngde \@pfllngdefalse
\newif\if@pfllnges \@pfllngesfalse

\DeclareOption{xcolor}{\@xcolortrue}%
\DeclareOption{build}{\@buildtrue}%
\DeclareOption{nonsiunitxfr}{\@loadsiunitxfrfalse}%
\DeclareOption{nosiunitxfr}{\@loadsiunitxfrfalse}%
\DeclareOption{nonamssymb}{\@loadamssymbfalse}%
\DeclareOption{noamssymb}{\@loadamssymbfalse}%
\DeclareOption{warningsoff}{\@warningsofftrue}%
\DeclareOption{nonwarnings}{\@warningsofftrue}%
\DeclareOption{nontikzbabel}{\@loadtikzbabelfalse}%
\DeclareOption{notikzbabel}{\@loadtikzbabelfalse}%
\DeclareOption{noncancel}{\@loadcancelfalse}%
\DeclareOption{nocancel}{\@loadcancelfalse}%
\DeclareOption{compat}{\@compatmaxtrue}%
\DeclareOption{nonfa}{\@fafivefalse\@fasixfalse\@fasevenfalse}
\DeclareOption{nofa}{\@fafivefalse\@fasixfalse\@fasevenfalse}
\DeclareOption{fa6}{\@fafivefalse\@fasixtrue\@fasevenfalse}
\DeclareOption{fa7}{\@fafivefalse\@fasixfalse\@faseventrue}
\DeclareOption{french}{\@pfllngfrtrue\@pfllngenfalse\@pfllngdefalse\@pfllngesfalse}
\DeclareOption{spanish}{\@pfllngfrfalse\@pfllngenfalse\@pfllngdefalse\@pfllngestrue}
\DeclareOption{english}{\@pfllngfrfalse\@pfllngentrue\@pfllngdefalse\@pfllngesfalse}
\DeclareOption{german}{\@pfllngfrfalse\@pfllngenfalse\@pfllngdetrue\@pfllngesfalse}

\DeclareOption*{}
\ProcessOptions\relax

\if@compatmax
  \@warningsofftrue
  \@loadamssymbfalse
\fi

%------Packages utiles
\if@loadamssymb
  \RequirePackage{amssymb}
\fi
\if@warningsoff
  \PassOptionsToPackage{warnings-off={mathtools-colon,mathtools-overbracket}}{unicode-math}
\fi
\if@xcolor
  \RequirePackage[table,svgnames]{xcolor}%Gestion des couleurs
\fi
\RequirePackage{tikz}
\usetikzlibrary{calc,decorations,decorations.pathreplacing,decorations.markings,arrows,arrows.meta,shapes.geometric,decorations.pathmorphing}
\if@loadtikzbabel
  \usetikzlibrary{babel}
\fi
\RequirePackage{tkz-tab}
\RequirePackage{pgf,pgffor}
\RequirePackage{ifthen}
\RequirePackage{xkeyval}
\RequirePackage{xstring}
\RequirePackage{xintexpr}
\RequirePackage{xintbinhex}
\RequirePackage{xinttools}
\RequirePackage{randomlist}
\RequirePackage{simplekv}
\RequirePackage{listofitems}
\RequirePackage{tabularray}
\RequirePackage{settobox}
\RequirePackage{hologo}
\RequirePackage{fancyvrb}
\RequirePackage{nicefrac}
\RequirePackage{siunitx} %test avec v3
\if@loadsiunitxfr
  \sisetup{%
    locale=FR,output-decimal-marker={,},%
    mode=match,propagate-math-font=true,%
    reset-math-version=false,reset-text-family=false,%
    reset-text-series=false,reset-text-shape=false,%
    text-family-to-math=true,text-series-to-math=true,%
    group-minimum-digits=4%
  }%
\fi

%tcolorbox
\RequirePackage{tcolorbox}%
\tcbuselibrary{breakable,fitting,skins,listings,listingsutf8,hooks}
%divers
\RequirePackage{iftex}

%couleurs
\definecolor{CouleurVertForet}{HTML}{1F8B36} %ForestGreen
\colorlet{MotsClesPseudoCodeA}{blue!75}
\colorlet{MotsClesPseudoCodeB}{green!50!black}
\colorlet{MotsClesPseudoCodeChaine}{red!75}

%%=====LABELS MULTILANGUES SI OPTION
\if@pfllngfr
  \def\labelcodepython{Code Python}
  \def\labelpseudocode{Pseudo-Code}
  \def\labelconsolepythondebut{Début de la console Python}
  \def\labelconsolepythonfin{Fin de la console Python}
  \def\labelsepdec{,}
  \def\labelavec{avec}
\fi
\if@pfllngen
  \def\labelcodepython{Python code}
  \def\labelpseudocode{Pseudocode}
  \def\labelconsolepythondebut{Start of Python console}
  \def\labelconsolepythonfin{End of Python console}
  \def\labelsepdec{.}
  \def\labelavec{with}
\fi
\if@pfllngde
  \def\labelcodepython{Python-Code}
  \def\labelpseudocode{Pseudocódigo}
  \def\labelconsolepythondebut{Beginn der Python-Konsole}
  \def\labelconsolepythonfin{Ende der Python-Konsole}
  \def\labelsepdec{,}
  \def\labelavec{mit}
\fi
\if@pfllnges
  \def\labelcodepython{Código Python}
  \def\labelpseudocode{Pseudocode}
  \def\labelconsolepythondebut{Inicio de la consola de Python}
  \def\labelconsolepythonfin{Fin de la consola de Python}
  \def\labelsepdec{,}
  \def\labelavec{con}
\fi

%%=====FONTAWESOME...
\if@fafive
  \RequirePackage{fontawesome5}
\fi
\if@fasix
  \RequirePackage{fontawesome6}
\fi
\if@faseven
  \RequirePackage{fontawesome7}
\fi

\def\pflfacog{}
\def\pflfapseudocode{}
\def\pflfapcode{}
\def\pflfaclone{}
\def\pflfapython{}
\def\pflfacplus{+}
\def\pflfacminus{-}

\@ifpackageloaded{fontawesome5}%
  {%
    \def\pflfacog{\faIcon{cog}}%
    \def\pflfapseudocode{\faFileCode}%
    \def\pflfapcode{\faCode}%
    \def\pflfaclone{\faClone}%
    \def\pflfapython{\faPython}%
    \def\pflfacplus{\faPlusSquare[regular]}%
    \def\pflfacminus{\faMinusSquare[regular]}%
  }%
  {}
\@ifpackageloaded{fontawesome6}
  {%
    \def\pflfacog{\faIcon{gear}}%
    \def\pflfapseudocode{\faFileCode}%
    \def\pflfapcode{\faCode}%
    \def\pflfapython{\faPython}%
    \def\pflfacplus{\faSquarePlus[regular]}%
    \def\pflfacminus{\faSquareMinus[regular]}%
  }%
  {}%
\@ifpackageloaded{fontawesome7}%
  {%
    \def\pflfacog{\faIcon{gear}}%
    \def\pflfapseudocode{\faFileCode}%
    \def\pflfapcode{\faCode}%
    \def\pflfapython{\faPython}%
    \def\pflfacplus{\faSquarePlus[regular]}%
    \def\pflfacminus{\faSquareMinus[regular]}%
  }%
  {}%

%%=====several version of \geqslant\geq + \leqslant\leq (ok ?)
\def\pflgeq{\geqslant}%
\def\pflleq{\leqslant}%

%%------LIBRAIRIES/BIBIOTHÈQUES
\ExplSyntaxOn

\cs_new_protected:Npn \proflycee_use_library:n #1
  {
    % Ces modules sont toujours testés même si "most" est présent
    \str_if_in:nnT {,#1,} {,piton,}        { \file_input:n { proflycee-tools-piton.tex } }
    \str_if_in:nnT {,#1,} {,espace,}       { \file_input:n { proflycee-tools-espace.tex } }
    \str_if_in:nnT {,#1,} {,space,}        { \file_input:n { proflycee-tools-espace.tex } }
    \str_if_in:nnT {,#1,} {,ecritures,}    { \file_input:n { proflycee-tools-ecritures.tex } }
    \str_if_in:nnT {,#1,} {,mathwriting,}  { \file_input:n { proflycee-tools-ecritures.tex } }
    \str_if_in:nnT {,#1,} {,pythontex,}
      { 
        \RequirePackage[gobble=auto]{pythontex}
    \setpythontexlistingenv{pythont} %pour ne pas télescoper lstlistings (?)
    \if@build
      \setpythontexoutputdir{./build/pythontex-files-\jobname} %essai de modif pythontex répertoire build
    \fi
    \file_input:n { proflycee-tools-pythontex.tex }
      }
    \str_if_in:nnT {,#1,} {,cas,}          { \RequirePackage { FenetreCas } }
    \str_if_in:nnT {,#1,} {,tikz2d,}       { \RequirePackage { tikz2d-fr } }
    \str_if_in:nnT {,#1,} {,tikz3d,}       { \RequirePackage { tikz3d-fr } }
  }

% Interface LaTeX2e : \useproflyclib{...}
\NewDocumentCommand \useproflyclib { m }
  { \proflycee_use_library:n {#1} }

% Macro pour activer une langue (et désactiver les autres)
\NewDocumentCommand\setproflyclng{ m }{%
  % Désactiver tous les booléens de langue
  \@pfllngfrfalse \@pfllngenfalse \@pfllngdefalse \@pfllngesfalse
  % Activer le booléen correspondant à la langue choisie
  \str_case_e:nnF {#1} {
    {fr} {\@pfllngfrtrue}  % Français
    {en} {\@pfllngentrue}  % Anglais
    {de} {\@pfllngdetrue}  % Allemand
    {es} {\@pfllngestrue}  % Espagnol
  }{
    % Cas par défaut (si la langue n'est pas reconnue)
    \PackageError{proflycee}{Langue~'#1'~non~reconnue.~Utilisez~fr,~en,~de~ou~es.}{}
  }%
  \if@pfllngfr
    \def\labelcodepython{Code~Python}
    \def\labelpseudocode{Pseudo-Code}
    \def\labelconsolepythondebut{Début~de~la~console~Python}
    \def\labelconsolepythonfin{Fin~de~la~console~Python}
    \def\labelsepdec{,}
    \def\labelavec{avec}
  \fi
  \if@pfllngen
    \def\labelcodepython{Python~code}
    \def\labelpseudocode{Pseudocode}
    \def\labelconsolepythondebut{Start~of~Python~console}
    \def\labelconsolepythonfin{End~of~Python~console}
    \def\labelsepdec{.}
    \def\labelavec{with}
  \fi
  \if@pfllngde
    \def\labelcodepython{Python-Code}
    \def\labelpseudocode{Pseudocódigo}
    \def\labelconsolepythondebut{Beginn~der~Python-Konsole}
    \def\labelconsolepythonfin{Ende~der~Python-Konsole}
    \def\labelsepdec{,}
    \def\labelavec{mit}
  \fi
  \if@pfllnges
    \def\labelcodepython{Código~Python}
    \def\labelpseudocode{Pseudocode}
    \def\labelconsolepythondebut{Inicio~de~la~consola~de~Python}
    \def\labelconsolepythonfin{Fin~de~la~consola~de~Python}
    \def\labelsepdec{,}
    \def\labelavec{con}
  \fi
}
\ExplSyntaxOff

\RequirePackage{ProfLycee-Macros}

%%------Codes listings
\input{proflycee-tools-listings.tex}
%%------Trigo
\input{proflycee-tools-trigo.tex}
%%------Probas
\input{proflycee-tools-probas.tex}
%%------Stats
\input{proflycee-tools-stats.tex}
%%------Arithm
\input{proflycee-tools-arithm.tex}
%%------Graphiques
\input{proflycee-tools-graphiques.tex}
%%------Analyse
\input{proflycee-tools-analyse.tex}
%%------Aléatoire
\input{proflycee-tools-aleatoire.tex}
%%------Suites
\input{proflycee-tools-suites.tex}
%%------Complexes
\input{proflycee-tools-complexes.tex}
%%------Géométrie
\input{proflycee-tools-geom.tex}
%%------Récréations diverses
\input{proflycee-tools-recreat.tex}
%%------Compétences
\input{proflycee-tools-competences.tex}
%%------Examens
\input{proflycee-tools-exams.tex}
%%------Cliparts
\input{proflycee-tools-cliparts.tex}
%%------PictosBac
\RequirePackage{ProfLycee-Pictosbac}

\endinput