From 0fc2302221e80a8f2d55808320073024a02517e8 Mon Sep 17 00:00:00 2001
From: Diego Nehab <diego@tecgraf.puc-rio.br>
Date: Mon, 8 Jul 2002 21:55:01 +0000
Subject: Initial revision

---
 src/mbox.lua | 45 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 45 insertions(+)
 create mode 100644 src/mbox.lua

(limited to 'src')

diff --git a/src/mbox.lua b/src/mbox.lua
new file mode 100644
index 0000000..9cce9ff
--- /dev/null
+++ b/src/mbox.lua
@@ -0,0 +1,45 @@
+local Public = {}
+
+parse = Public
+
+function Public.headers(headers_s)
+    local headers = {}
+    headers_s = "\n" .. headers_s .. "$$$:\n"
+    local i, j = 1, 1
+    local name, value, _
+    while 1 do
+        j = strfind(headers_s, "\n%S-:", i+1)
+        if not j then break end
+        _,_, name, value = strfind(strsub(headers_s, i+1, j-1), "(%S-):%s?(.*)")
+        value = gsub(value or "", "\r\n", "\n")
+        value = gsub(value, "\n%s*", " ")
+        name = strlower(name)
+        if headers[name] then headers[name] = headers[name] .. ", " ..  value
+        else headers[name] = value end
+        i, j = j, i
+    end
+    headers["$$$"] = nil
+    return headers
+end
+
+function Public.message(message_s)
+    message_s = gsub(message_s, "^.-\n", "")
+    local _, headers_s, body
+    _, _, headers_s, body = strfind(message_s, "^(.-\n)\n(.*)")
+    headers_s = headers_s or ""
+    body = body or ""
+    return { headers = %Public.headers(headers_s), body = body }
+end
+
+function Public.mbox(mbox_s)
+    local mbox = {}
+    mbox_s = "\n" .. mbox_s .. "\nFrom "
+    local i, j = 1, 1
+    while 1 do
+        j = strfind(mbox_s, "\nFrom ", i + 1)
+        if not j then break end
+        tinsert(mbox, %Public.message(strsub(mbox_s, i + 1, j - 1)))
+        i, j = j, i
+    end
+    return mbox
+end
-- 
cgit v1.2.3-55-g6feb