%%
%% This is file `l3keys2e.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% l3keys2e.dtx  (with options: `package')
%% ----------------------------------------------------------------
%% l3keys2e --- Parsing LaTeX3 keyvals as LaTeX2e package options
%% Copyright 2009 The LaTeX3 Project
%% Released under the LaTeX Project Public License v1.3c or later
%% See http://www.latex-project.org/lppl.txt
%% ----------------------------------------------------------------
%% File: l3keys2e.dtx (C) Copyright 2009 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 ``l3keys2e'' (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{l3names}
\GetIdInfo$Id: l3keys2e.dtx 1494 2009-08-24 11:05:44Z joseph $
  {Parsing LaTeX3 keyvals as LaTeX2e package options}
\ProvidesExplPackage
  {\filename}{\filedate}{\fileversion}{\filedescription}
\RequirePackage{xparse}
\clist_new:N \keys_latexe_options_clist
\cs_new:Npn \keys_latexe_options:n #1 {
  \clist_clear:N \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_warning:nnxx { Option~Processing } { unknown-option }
          { \l_keys_key_tl } { \@currname }
      }
    }
  }
  \keys_set:nV {#1} \keys_latexe_options_clist
  \AtEndOfPackage { \cs_set_eq:NN \@unprocessedoptions \scan_stop: }
}
\msg_new:nnn { Option~Processing } { unknown-option } {%
  Unknown~option~`#1'\\%
  for~module~#2.%
}
\cs_new: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}
    }{
      \keys_latexe_options_package:n {#1}
    }
  }
}
\cs_new:Npn \keys_latexe_options_class:n #1 {
  \clist_map_inline:Nn \@classoptionslist {
    \keys_if_exist:nnTF {#1} { \keys_latexe_remove_equals:n {##1} } {
      \clist_put_right:Nn \keys_latexe_options_clist {##1}
    }{
      \clist_put_right:Nn \@unusedoptionlist {##1}
    }
  }
}
\cs_new: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 \keys_latexe_options_clist {##1}
      \clist_remove_element:Nn \@unusedoptionlist {##1}
    }
  }
}
\cs_new_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 \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}
\NewDocumentCommand \ProcessKeysOptions { m } {
  \keys_latexe_options:n {#1}
}
\@onlypreamble \ProcessKeysOptions
\endinput
%%
%% End of file `l3keys2e.sty'.
