%%
%% This is file `l3precom.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% l3precom.dtx  (with options: `package,precompile,trace')
%% 
%% 
%% 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: l3precom.dtx Copyright (C) 1990-2006,2009 Frank Mittelbach, 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 ``expl3 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{l3names}
\GetIdInfo$Id: l3precom.dtx 2223 2011-04-09 12:57:14Z will $
  {L3 Experimental precompilation module}
\ProvidesExplPackage
  {\filename}{\filedate}{\fileversion}{\filedescription}
\package_check_loaded_expl:
\tl_new:N \g_cs_dump_name_tl
\seq_new:N\g_cs_dump_seq
\cs_new_nopar:Npn\cs_record_name:N#1{
\seq_gput_left:Nn
  \g_cs_trace_seq#1
\seq_gput_left:Nn
  \g_cs_dump_seq#1}
\cs_generate_variant:Nn \cs_record_name:N {c}
\cs_new_nopar:Npn\cs_dump:{
\iow_term:x{Precompiling~style~into~(\g_cs_dump_name_tl)}
\iow_open:Nn\g_cs_dump_stream{\g_cs_dump_name_tl}
\iow_now:Nx\g_cs_dump_stream
{\group_begin:
\tex_catcode:D`\token_to_str:N\*=11\scan_stop:
\token_to_str:N\ExplSyntaxOn
}
\seq_map_inline:Nn
\g_cs_dump_seq
{\tex_message:D{.}
\iow_now:Nx\g_cs_dump_stream
     {\exp_not:n{\cs_gset_nopar:Npn ##1}
         {\tl_to_str:N##1}}
}
\iow_now:Nx \g_cs_dump_stream {\exp_not:n{\int_gset:Nn
                \g_gen_sym_int}
                {\int_use:N\g_gen_sym_int}^^J
\exp_not:n{\int_gset:Nn \g_ggen_sym_int}
                {\int_use:N\g_ggen_sym_int}}
\iow_now:Nx
\g_cs_dump_stream
{\group_end:}
\iow_close:N\g_cs_dump_stream
\tex_message:D{~finished}
}
\cs_new_nopar:Npn \cs_load_dump:n #1 {
  \file_if_exist:nTF { #1 .cmp } {
    \file_input:n { #1 .cmp }
    \cs_set_eq:NN \cs_dump: \fi:
    \if_false:
  }{
    \tl_gset:Nn \g_cs_dump_name_tl { #1 .cmp }
  }
}
\int_new:N\g_gen_sym_int \int_gset:Nn\g_gen_sym_int{0}
\int_new:N\g_ggen_sym_int \int_gset:Nn\g_ggen_sym_int{0}
\cs_new_nopar:Npn\cs_gen_sym:N#1{
\int_gincr:N\g_gen_sym_num
\tl_set:Nc#1{l*\tex_romannumeral:D\int_use:N\g_gen_sym_int}
\exp_after:wN\cs_record_name:N#1
\exp_after:wN\tl_clear_new:N#1}
\cs_new_nopar:Npn\cs_ggen_sym:N#1{
\int_gincr:N\g_ggen_sym_int
\tl_set:Nc#1{g*\tex_romannumeral:D\int_use:N\g_ggen_sym_int}
\exp_after:wN\cs_record_name:N#1
\exp_after:wN\tl_clear_new:N#1}
\seq_new:N\g_cs_trace_seq
\seq_new:N\g_register_trace_seq
\cs_set_nopar:Npn\cs_record_meaning:N#1{
\seq_gput_left:Nn
  \g_cs_trace_seq#1}
\cs_set_nopar:Npn\register_record_name:N#1{
\seq_gput_left:Nn
  \g_register_trace_seq#1}
\cs_new_nopar:Npn\dumpLaTeXstate#1{
  \iow_term:x{Dumping~commands~into~(#1.dmp)}
  \iow_open:Nn\g_cs_dump_stream{#1.dmp}
  \seq_map_inline:Nn
       \g_cs_trace_seq
       {\tex_message:D{.}
        \iow_now:Nx\g_cs_dump_stream
             {\token_to_str:N##1~
              \token_to_meaning:N##1}
       }
  \tex_message:D{~registers}
  \seq_map_inline:Nn
       \g_register_trace_seq
       {\tex_message:D{.}
        \iow_now:Nx\g_cs_dump_stream
             {\token_to_str:N##1
              \toks_use:N##1}
       }
  \iow_clos:Nn  \g_cs_dump_stream
  \tex_message:D{~finished}
}
%% 
%%
%% End of file `l3precom.sty'.
