elua: almost functional xgettext generator
authorDaniel Kolesa <d.kolesa@samsung.com>
Fri, 30 May 2014 12:58:49 +0000 (13:58 +0100)
committerDaniel Kolesa <d.kolesa@samsung.com>
Tue, 10 Jun 2014 14:48:52 +0000 (15:48 +0100)
src/bin/elua/modules/xgettext/generator.lua

index 29ec7ab..edc3323 100644 (file)
@@ -2,6 +2,50 @@
 
 local parser = require("xgettext.parser")
 
-return { init = function(chunkname, input, keywords)
-    local ps = parser.init(chunkname, input, keywords)
+local gen_comment = function(cmt)
+    local cmtret = {}
+    for line in cmt:gmatch("([^\n]+)") do
+        cmtret[#cmtret + 1] = "#. " .. line:match("^%s*(.+)$")
+    end
+    return table.concat(cmtret, "\n")
+end
+
+local gen_message = function(str)
+    local mline = not not str:find("\n")
+    if not mline then
+        return '"' .. str .. '"'
+    end
+    local ret = { '""' }
+    for line in cmt:gmatch("([^\n]+)") do
+        ret[#ret + 1] = '"' .. line .. '\\n"'
+    end
+    return table.concat(ret, "\n")
+end
+
+return { init  = function(chunkname, input, keywords)
+    local ps   = parser.init(chunkname, input, keywords)
+    local msg  = ps()
+    local rets = {}
+    while msg do
+        local ret = {}
+        if msg.comment then
+            ret[#ret + 1] = gen_comment(msg.comment)
+        end
+        if msg.xcomment then
+            ret[#ret + 1] = gen_comment(msg.xcomment)
+        end
+        if msg.context then
+            ret[#ret + 1] = "msgctxt " .. gen_message(msg.context)
+        end
+        ret[#ret + 1] = "msgid " .. gen_message(msg[1])
+        if msg[2] then
+            ret[#ret + 1] = "msgid_plural " .. gen_message(msg[2])
+            ret[#ret + 1] = "msgstr[0] \"\"\nmsgstr[1] \"\""
+        else
+            ret[#ret + 1] = "msgstr \"\""
+        end
+        rets[#rets + 1] = table.concat(ret, "\n")
+        msg             = ps()
+    end
+    return table.concat(rets, "\n\n")
 end }
\ No newline at end of file