aboutsummaryrefslogtreecommitdiffstats
path: root/root/$mmm/plugins/sass/converts: text$lua -> table.lua
diff options
context:
space:
mode:
Diffstat (limited to 'root/$mmm/plugins/sass/converts: text$lua -> table.lua')
-rw-r--r--root/$mmm/plugins/sass/converts: text$lua -> table.lua54
1 files changed, 54 insertions, 0 deletions
diff --git a/root/$mmm/plugins/sass/converts: text$lua -> table.lua b/root/$mmm/plugins/sass/converts: text$lua -> table.lua
new file mode 100644
index 0000000..f2887e3
--- /dev/null
+++ b/root/$mmm/plugins/sass/converts: text$lua -> table.lua
@@ -0,0 +1,54 @@
+if MODE == 'CLIENT' then
+ return { }
+end
+local posix = require('posix')
+return {
+ {
+ inp = 'text/x-scss',
+ out = 'text/css',
+ cost = 1,
+ transform = function(self, content)
+ local r0, w0 = posix.pipe()
+ local r1, w1 = posix.pipe()
+ local r2, w2 = posix.pipe()
+ local pid = assert(posix.fork())
+ if pid == 0 then
+ posix.close(w0)
+ posix.close(r1)
+ posix.close(r2)
+ posix.dup2(r0, posix.fileno(io.stdin))
+ posix.dup2(w1, posix.fileno(io.stdout))
+ posix.dup2(w2, posix.fileno(io.stderr))
+ posix.close(r0)
+ posix.close(w1)
+ posix.close(w2)
+ local err = assert(posix.execp('sassc', '-s'))
+ posix._exit(err)
+ return
+ else
+ posix.close(r0)
+ posix.close(w1)
+ posix.close(w2)
+ posix.write(w0, content)
+ posix.close(w0)
+ local _, status
+ _, _, status = posix.wait(pid)
+ local out
+ if status == 0 then
+ out = r1
+ else
+ out = r2
+ end
+ out = assert(posix.fdopen(out, 'r'))
+ out = out:read('a')
+ posix.close(r1)
+ posix.close(r2)
+ if status == 0 then
+ return out
+ else
+ return error(out)
+ end
+ end
+ end
+ }
+}