diff options
Diffstat (limited to 'lib/ordered.shared.moon')
| -rw-r--r-- | lib/ordered.shared.moon | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/lib/ordered.shared.moon b/lib/ordered.shared.moon new file mode 100644 index 0000000..59c07bf --- /dev/null +++ b/lib/ordered.shared.moon @@ -0,0 +1,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 +} |
