%%
%% This is file `l3keys2e.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% l3keys2e.dtx  (with options: `package')
%% 
%% EXPERIMENTAL CODE
%% 
%% Do not distribute this file without also distributing the
%% source files specified above.
%% 
%% Do not distribute a modified version of this file.
%% 
%% File: l3keys2e.dtx (C) Copyright 2009,2011-2014 The LaTeX3 Project
%%
%% It may be distributed and/or modified under the conditions of the
%% LaTeX Project Public License (LPPL), either version 1.3c of this
%% license or (at your option) any later version.  The latest version
%% of this license is in the file
%%
%%    http://www.latex-project.org/lppl.txt
%%
%% This file is part of the "l3packages bundle" (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% The released version of this bundle is available from CTAN.
%%
%% -----------------------------------------------------------------------
%%
%% The development version of the bundle can be found at
%%
%%    http://www.latex-project.org/svnroot/experimental/trunk/
%%
%% for those people who are interested.
%%
%%%%%%%%%%%
%% NOTE: %%
%%%%%%%%%%%
%%
%%   Snapshots taken from the repository represent work in progress and may
%%   not work or may contain conflicting material!  We therefore ask
%%   people _not_ to put them into distributions, archives, etc. without
%%   prior consultation with the LaTeX Project Team.
%%
%% -----------------------------------------------------------------------
%%
\RequirePackage{expl3}[2014/11/25]
\@ifpackagelater{expl3}{2014/11/25}
  {}
  {%
    \PackageError{l3keys2e}{Support package l3kernel too old}
      {%
        Please install an up to date version of l3kernel\MessageBreak
        using your TeX package manager or from CTAN.\MessageBreak
        \MessageBreak
        Loading l3keys2e will abort!%
      }%
    \endinput
  }
\GetIdInfo$Id: l3keys2e.dtx 5471 2014-11-25 20:11:29Z joseph $
  {LaTeX2e option processing using LaTeX3 keys}
\ProvidesExplPackage
  {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
\cs_generate_variant:Nn \clist_put_right:Nn { Nv }
\clist_new:N \l__keys_latexe_options_clist
\bool_new:N \l__keys_process_class_bool
\cs_new_protected:Npn \__keys_latexe_options:n #1
  {
    \clist_clear:N \l__keys_latexe_options_clist
    \__keys_latexe_options_global:n {#1}
    \__keys_latexe_options_local:
    \keys_if_exist:nnF {#1} { unknown }
      {
        \keys_define:nn {#1}
          {
            unknown .code:n =
              {
                \msg_error:nnxx { keyvalue } { option-unknown }
                  { \l_keys_key_tl } { \@currname }
              }
          }
      }
    \clist_map_inline:Nn \l__keys_latexe_options_clist
      {
        \tl_set:Nn \CurrentOption {##1}
        \keys_set:nn {#1} {##1}
      }
    \AtEndOfPackage { \cs_set_eq:NN \@unprocessedoptions \scan_stop: }
  }
\cs_new_protected:Npn \__keys_latexe_options_global:n #1
  {
    \cs_if_eq:NNF \@classoptionslist \scan_stop:
      {
        \cs_if_eq:NNTF \@currext \@clsextension
          { \__keys_latexe_options_class:n {#1} }
          {
            \bool_if:NT \l__keys_process_class_bool
             { \__keys_latexe_options_package:n {#1} }
          }
      }
  }
\cs_new_protected:Npn \__keys_latexe_options_class:n #1
  {
    \cs_if_free:cF { opt@ \@currname . \@currext }
      {
        \keys_if_exist:nnTF {#1} { unknown }
          {
            \clist_put_right:Nv \l__keys_latexe_options_clist
              { opt@ \@currname . \@currext }
          }
          {
            \clist_map_inline:cn { opt@ \@currname . \@currext }
              {
                \keys_if_exist:nnTF {#1} { \__keys_latexe_remove_equals:n {##1} }
                  { \clist_put_right:Nn \l__keys_latexe_options_clist {##1} }
                  { \clist_put_right:Nn \@unusedoptionlist {##1} }
              }
          }
      }
  }
\cs_new_protected:Npn \__keys_latexe_options_package:n #1
  {
    \clist_map_inline:Nn \@classoptionslist
      {
        \keys_if_exist:nnT {#1} { \__keys_latexe_remove_equals:n {##1} }
          {
            \clist_put_right:Nn \l__keys_latexe_options_clist {##1}
            \clist_remove_all:Nn \@unusedoptionlist {##1}
          }
      }
  }
\cs_new_protected_nopar:Npn \__keys_latexe_options_local:
  {
    \cs_if_eq:NNF \@currext \@clsextension
      {
        \cs_if_exist:cT { opt@ \@currname . \@currext }
          {
            \exp_args:NNc \clist_put_right:NV \l__keys_latexe_options_clist
              { opt@ \@currname . \@currext }
          }
      }
  }
\cs_new:Npn \__keys_latexe_remove_equals:n #1
  { \__keys_latexe_remove_equals:w #1 = \q_stop }
\cs_new:Npn \__keys_latexe_remove_equals:w #1 = #2 \q_stop {#1}
\cs_new_protected_nopar:Npn \ProcessKeysOptions #1
  {
    \bool_set_true:N \l__keys_process_class_bool
    \__keys_latexe_options:n {#1}
  }
\cs_new_protected_nopar:Npn \ProcessKeysPackageOptions #1
  {
    \bool_set_false:N \l__keys_process_class_bool
    \__keys_latexe_options:n {#1}
  }
\@onlypreamble \ProcessKeysOptions
\@onlypreamble \ProcessKeysPackageOptions
\msg_new:nnnn { keyvalue } { option-unknown }
  { Unknown~option~'#1'~for~package~#2. }
  {
    LaTeX~has~been~asked~to~set~an~option~called~'#1'~
    but~the~#2~package~has~not~created~an~option~with~this~name.
  }
%% 
%%
%% End of file `l3keys2e.sty'.
