1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
-- ordered table iterator, for stable(r) renderers
sort = (t, order_fn) ->
with index = [k for k,v in pairs t when 'string' == type k]
table.sort index, order_fn
-- ordered next(t)
onext = (state, key) ->
state.i += 1
{ :t, :index, :i } = state
if key = index[i]
key, t[key]
-- ordered pairs(t). order_fn is optional; see table.sort
opairs = (t, order_fn) ->
state = {
:t,
i: 0,
index: sort t, order_fn
}
onext, state, nil
{
:onext
:opairs
}
|