From 68886b570125930f7a5d6343900a16d584a6dccd Mon Sep 17 00:00:00 2001
From: gumi <git@gumi.ca>
Date: Thu, 15 Feb 2018 13:16:04 -0500
Subject: make the translation buildin use sprintf

---
 src/emap/utils/formatutils.c | 55 ++++++++++++++++++++++++++++++--------------
 1 file changed, 38 insertions(+), 17 deletions(-)

diff --git a/src/emap/utils/formatutils.c b/src/emap/utils/formatutils.c
index 00ea637..3e8c842 100644
--- a/src/emap/utils/formatutils.c
+++ b/src/emap/utils/formatutils.c
@@ -97,25 +97,46 @@ int format_sub(struct script_state* st, int translate)
     }
 
     char *ptr = line;
-    int sz = (int)strlen(line);
-    while (script_hasdata(st, idx))
+
+    if (strstr(ptr, "@@"))
+    {
+        int sz = (int)strlen(line);
+
+        while (script_hasdata(st, idx))
+        {
+            char *tmp = strstr(ptr, "@@");
+            if (!tmp)
+                break;
+            const char *item = script_getstr(st, idx);
+            int len = (int)strlen(item);
+            if (len > 50)
+                break;
+            sz += len - 2;
+            if (sz > 490)
+                break;
+            memmove(tmp + len, tmp + 2, strlen(tmp + 2) + 1);
+            memcpy(tmp, item, len);
+            ptr = tmp + len;
+            idx ++;
+        }
+
+        script_pushstr(st, line);
+    }
+    else
     {
-        char *tmp = strstr(ptr, "@@");
-        if (!tmp)
-            break;
-        const char *item = script_getstr(st, idx);
-        int len = (int)strlen(item);
-        if (len > 50)
-            break;
-        sz += len - 2;
-        if (sz > 490)
-            break;
-        memmove(tmp + len, tmp + 2, strlen(tmp + 2) + 1);
-        memcpy(tmp, item, len);
-        ptr = tmp + len;
-        idx ++;
+        struct StringBuf pfbuf;
+        StrBuf->Init(&pfbuf);
+
+        if (!script->sprintf(st, translate == 2 ? 3 : 2, &pfbuf))
+        {
+            StrBuf->Destroy(&pfbuf);
+            script_pushstr(st, line);
+            return false;
+        }
+
+        script_pushstrcopy(st, StrBuf->Value(&pfbuf));
+        StrBuf->Destroy(&pfbuf);
     }
 
-    script_pushstr(st, line);
     return 0;
 }
-- 
cgit v1.2.3-70-g09d2