% \iffalse meta-comment
%
% Copyright (C) 2016 by Thomas Colcombet
% -----------------------------------
%
% This file may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.2 % 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.2 or later is part of all distributions of LaTeX
% version 1999/12/01 or later.
%
% \fi
%
% \iffalse
%
%<*driver>
\documentclass{ltxdoc}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{paralist}
\EnableCrossrefs
\CodelineIndex
\RecordChanges

\begin{document}
\DocInput{knowledge-configuration.dtx}
\end{document}
%</driver>
% \fi
%
% \CheckSum{0}
%
% \CharacterTable
%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%   Digits        \0\1\2\3\4\5\6\7\8\9
%   Exclamation   \!     Double quote  \"     Hash (number) \#
%   Dollar        \$     Percent       \%     Ampersand     \&
%   Acute accent  \'     Left paren    \(     Right paren   \)
%   Asterisk      \*     Plus          \+     Comma         \,
%   Minus         \-     Point         \.     Solidus       \/
%   Colon         \:     Semicolon     \;     Less than     \<
%   Equals        \=     Greater than  \>     Question mark \?
%   Commercial at \@     Left bracket  \[     Backslash     \\
%   Right bracket \]     Circumflex    \^     Underscore    \_
%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%   Right brace   \}     Tilde         \~}
%
%
% \changes{v2.0}{2016/02/26}{Initial version} %
% \GetFileInfo{scopearticle.def} %
% \DoNotIndex{}
%
%
% \let\ifcode\iffalse
%
%
% \title{The \textsf{knowledge-configuration} part of the \textsf{knowledge} package}
% \author{Thomas Colcombet \\ \texttt{thomas.colcombet@irif.fr}}
% \date{\today}
% \maketitle
%
% \begin{abstract}
% Some code for configuring the scope option of the package knowledge.
% Essentially, it contains configurations for reconstructing the tree of the structure of the document. It is to be expanded when the use requires it.
%
% So far, it stands as a standalone file scopearticle.def. It should eventually be part of knowledge.sty, and be extra configurable (detect the style, and tries to automatically overload it).
% \end{abstract}
%
% \section{Introduction}
%
% This package is in fact part of the code used by \texttt{knowledge} when the scope option is activated.
% Its goal is to configure the hooks for the \texttt{article} class. It works also for similar classes.
%
% \StopEventually{\PrintIndex}
%
%
%
% This package patches the article class for making it compatible with
% the scope package. Essentially, it modifies all the structure and the commands
% that interact with the structure of an article, and weave into it the update of the
% scope structure.
%
%
% \section{Implementation}
%
% \subsection{Code preparation}
%    \begin{macrocode}
\knowledge_begin_module_if:n\knowledge_option_scope_bool
%    \end{macrocode}
%
% \section{Main structure}
%
% Note that the scopes \texttt{base}, \texttt{document}, \texttt{body} and \texttt{scope} are already configured in knowledge.sty.
%
% \subsection{Standard sectioning command}
%
%
%    \begin{macrocode}
\scope_area_set:nn
  {part, section,subsection,subsubsection,
   paragraph,subparagraph,subsubparagraph}
   { category=structure,
     autoclose = true,
     occurrences = multiple,
     knowledge=accepts
   }
\scope_area_set:nn
  {base,document,section,subsection,subsubsection,
   paragraph,subparagraph,subsubparagraph}
  {knowledge=accepts}
\scope_area_set:nn
  {base,document}
  {knowledge=attracts}
\scope_area_set:nn
  {body}
  {knowledge=none}

\scope_area_set:nn{part}{parents = {body}, forces = body }
\scope_area_set:nn{section}{parents = {body,part}, forces = body }
\scope_area_set:nn{subsection}{parents = section }
\scope_area_set:nn{subsubsection}{parents = subsection }
\scope_area_set:nn{paragraph}{parents = {document,section,subsection,subsubsection} }
\scope_area_set:nn{subparagraph}{parents =  {paragraph}  }
\scope_area_set:nn{subsubparagraph}{parents =  {subparagraph} }
%    \end{macrocode}
%
%    \begin{macrocode}
\scope_area_set:nn{abstract}
  {autoclose=false,
   occurrences=once,
   parents={body,structure},
   forces=body,
   knowledge=none
}
%    \end{macrocode}
%  \subsubsection{Overloading the commands}
%
%    \begin{macrocode}
\OverloadCommand\section{som}
  {\scope_area_push:n{section}
   \XparseArgs\SUPERsection{som}{#1}{#2}{#3}}
\OverloadCommand\subsection{som}
  {\scope_area_push:n{subsection}
   \XparseArgs\SUPERsubsection{som}{#1}{#2}{#3}}
\OverloadCommand\subsubsection{som}
  {\scope_area_push:n{subsubsection}
   \XparseArgs\SUPERsubsubsection{som}{#1}{#2}{#3}}
\OverloadCommand\paragraph{som}
  {\scope_area_push:n{paragraph}
   \XparseArgs\SUPERparagraph{som}{#1}{#2}{#3}}
\OverloadCommand\subparagraph{som}
  {\scope_area_push:n{subparagraph}
   \XparseArgs\SUPERsubparagraph{som}{#1}{#2}{#3}}
\OverloadCommand\subsubparagraph{som}
  {\scope_area_push:n{subsubparagraph}
   \XparseArgs\SUPERsubsubparagraph{som}{#1}{#2}{#3}}
%    \end{macrocode}
%
% \subsection{Creation of new environments}
%
%
%
%    \begin{macrocode}
\KnowledgeConfigureEnvironment?
   {theorem,lemma,proposition,fact,conjecture,problem}
   {category=theorem-like,label=accepts}
\KnowledgeConfigureEnvironment?
   {remark,proof}
   {label=accepts,knowledge=accepts}
\KnowledgeConfigureEnvironment?
   {center,flushleft,flushright,minipage,quotation,quote,verbatim,verse}
   {knowledge=accepts,label=none}
%    \end{macrocode}
%
% Command overloading...
%    \begin{macrocode}  
\OverloadCommand\newtheorem{m}
  {\KnowledgeConfigureEnvironment!{#1}{category=theorem-like,label=accepts}
  \SUPERnewtheorem{#1}}
\OverloadCommand\newenvironment{m}
  {\KnowledgeConfigureEnvironment!{#1}{label=accepts}
   \SUPERnewenvironment{#1}}
\OverloadCommand\NewDocumentEnvironment{m}
  {\KnowledgeConfigureEnvironment!{#1}{label=none}
   \SUPERNewDocumentEnvironment{#1}}
%    \end{macrocode}
%
%
% \subsection{Upgrading scope}
%
% \subsection{Itemizing}
% The default code for \LaTeX{} is absolutely catastrophic. 
% In particular, trivlist is used implicitly, making impossible to
% simply Overload the list environements.
% Indeed, some of environments (like theorems) use trivlists and |\item|
% for their internal display. However, one does not want this to be considered
% as a list. Futhremore, normal lists make call to the code of trivlist too.
% Thus we are in the situation in which trivlists have to be patched because otherwise
% items could not guarantee the structure.
% However, trivlist should not be treates as norm lists since these are fake lists used
% for displaying purposes. The below code tries to patch this as cleanly as possible in order
% to obtain a reasonable behaviour.
%    \begin{macrocode}
\scope_area_set:nn
  {itemize,enumerate,description}
  {category=itemize-like}
%  {knowledge=none}

\scope_area_set:nn{item}
  {autoclose=true,
   parents = itemize-like}


\OverloadCommand\item{o}
  {%\scope_categoryseq_pop_to:n{itemize-like}
   %\scope_category_if_area_in:nnTF{trivlist}\scope_top_area_tl
   %  {}
   %  {\scope_area_push:n{item}}
   \XparseArgs\SUPERitem{o}{#1}}

%\OverloadCommand\trivlist{}
%  {\scope_area_push:n{trivlist}
%   \SUPERtrivlist}

%\OverloadCommand\endtrivlist{}{
%  \SUPERendtrivlist
%  \scope_categoryseq_pop_to:n{itemize-like}
%  \exp_args:NV\tl_if_eq:nnTF\scope_top_area_tl{trivlist}
%      {\scope_area_pop:n{trivlist}}{}}
%    \end{macrocode}
% \subsubsection{Micro areas}
%    \begin{macrocode}
\scope_area_set:nn{emph,textit,texttt,textbf}{
    autoclose = false,
    occurrences = multiple,
    forces = body
  }
%    \end{macrocode}
%
%
%    \begin{macrocode}
\knowledge_end_module:
%    \end{macrocode}
% \Finale




