From 3b02770e7f9ec14487493c68ff12ec42e0f2755b Mon Sep 17 00:00:00 2001 From: s-ol Date: Tue, 30 Oct 2018 13:41:14 +1100 Subject: reorganize lib --- lib/ordered.moon | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 lib/ordered.moon (limited to 'lib/ordered.moon') diff --git a/lib/ordered.moon b/lib/ordered.moon new file mode 100644 index 0000000..59c07bf --- /dev/null +++ b/lib/ordered.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 +} -- cgit v1.2.3