LATEX-L Archives

Mailing list for the LaTeX3 project

LATEX-L@LISTSERV.UNI-HEIDELBERG.DE

Options: Use Classic View

Use Monospaced Font
Show Text Part by Default
Condense Mail Headers

Topic: [<< First] [< Prev] [Next >] [Last >>]

Print Reply
Sender: Mailing list for the LaTeX3 project <[log in to unmask]>
Date: Thu, 31 Mar 2011 20:06:41 -0400
Reply-To: Mailing list for the LaTeX3 project <[log in to unmask]>
MIME-Version: 1.0
Message-ID: <[log in to unmask]>
In-Reply-To: <[log in to unmask]>
Content-Type: text/plain; charset=ISO-8859-1
From: Bruno Le Floch <[log in to unmask]>
Parts/Attachments: text/plain (116 lines)
Hello all,

Sorry for the delay, I got distracted by work, and then some
expandable floating point calculations. It would be great to
move on, and this means getting rid of the few places where
"\seq_elt:w" and "\seq_elt_end:" are still used explicitly.

Basically, I'd like to centralize the seq functions all into
l3seq. Right now, "\seq_elt:w" and "\seq_elt_end:" are used
in the following files (omitting test files).

Frank can probably help for the xor bundle.

===========

"xor/xo-place.dtx" defines "\seq_elt:w" to gobble its
argument in order to stop the current trial:

    \cs_set_nopar:Npn \seq_elt:w ##1\seq_elt_end:{}

I think that we can replace each occurence of that by

    <-trace> \seq_map_break:
    <trace>  \seq_map_break:n { \trace_pop:n{xor_check_callout_after:n} }

but I am not sure: the xor code is too complicated for me
right now, and I don't when the "\xor_check_callout_..."
functions are called.

===========

"xpackages/xor/xo-trace.dtx" is easy: the offending line is

     \cs_set_nopar:Npn \seq_elt:w ##1\seq_elt_end:{##1\space}

and we can give that a name, e.g. put

    \cs_new:Npn \seq_setup_display: {
         \cs_set_nopar:Npn \seq_elt:w ##1\seq_elt_end:{##1\space}  }

in l3seq, and use "\seq_setup_display:" in "xo-trace.dtx".

==========

"xpackages/xor/xo-or.dtx": two places. First,

    \cs_set_nopar:Npn \seq_elt:w ##1\seq_elt_end: {##1,}
    \cs_set_nopar:cpx {g_xor_flush_ \g_xor_collect_flush_seen_num
_classes_clist }
      {\g_xor_float_classes_seq}

should be replaced by

    \clist_set_from_seq:cN
      {g_xor_flush_ \g_xor_collect_flush_seen_num  _classes_clist }
      \g_xor_float_classes_seq

adding \cs_generate_variant:Nn \clist_set_from_seq:NN {c} to "l3candidates.dtx".


Second, at two places, "\seq_elt:w" is let to "\relax" in order
to behave nicely under x expansion. The first one is

  %%% FMi tmp
  \cs_set_eq:NN \seq_elt:w    \relax
  \cs_set_eq:NN \seq_elt_end: \relax
    \tl_gset:Nx \g_saved_float_state_tl
		 { \cs_gset_nopar:Npn \exp_not:N \g_xor_floats_active_seq
			  {\g_xor_floats_active_seq} }

and can be replaced by

  \tl_gset:Nx \g_saved_float_state_tl {
      \cs_gset_nopar:Npn \exp_not:N \g_xor_floats_active_seq
      \seq_exp_items:N \g_xor_floats_active_seq
  }

where "\seq_exp_items:N" is not f-expandable, just x-expandable,
defined as

  \cs_new:Npn \seq_exp_items:N #1 {
      \exp_after:wN \seq_exp_items_aux:Nw #1
      \q_recursion_tail \seq_elt_end:        % no \seq_elt:w
      \q_recursion_stop
  }
  \cs_new:Npn \seq_exp_items_aux:Nw #1 #2\seq_elt_end: {
      \quark_if_recursion_tail_stop:N #1
      \exp_not:N \seq_elt:w #2 \exp_not:N \seq_elt_end:
      \seq_exp_items_aux:Nw
  }

The second place can be converted to using the same "\seq_exp_items:N".

=========

Two more files,

    l3in2e/l3prg.dtx        (quicksort)
    l3in2e/l3candidates.dtx (various fn)

but I looked at the functions there, and I can cope with
those easily, compared to the xor bundle.

========

Side comment: I found the following text in the doc of l3prg,
but I couldn't find the function it refers to.

%   For the somewhat strange \meta{clist} type which doesn't
%   enclose the items but uses a separator we define it by hand
%   afterwards.


Best wishes,
Bruno

ATOM RSS1 RSS2