From 4404c4071cddfd7c30b2420be54d184067797482 Mon Sep 17 00:00:00 2001 From: ShadowNinja Date: Sun, 1 Feb 2015 18:10:09 -0500 Subject: Add numbered insertions --- lib.lua | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) (limited to 'lib.lua') diff --git a/lib.lua b/lib.lua index b3f183b..2349de4 100644 --- a/lib.lua +++ b/lib.lua @@ -1,19 +1,37 @@ intllib = intllib or {} +local INS_CHAR = "@" +intllib.INSERTION_CHAR = INS_CHAR + local escapes = { ["\\"] = "\\", ["n"] = "\n", + [INS_CHAR] = INS_CHAR..INS_CHAR, } -local function unescape(s) - return s:gsub("([\\]?)\\(.)", function(slash, what) - if slash and (slash ~= "") then - return "\\"..what +local function unescape(str) + local parts = {} + local n = 1 + local function add(s) + parts[n] = s + n = n + 1 + end + + local start = 1 + while true do + local pos = str:find("\\", start, true) + if pos then + add(str:sub(start, pos - 1)) else - return escapes[what] or what + add(str:sub(start)) + break end - end) + local c = str:sub(pos + 1, pos + 1) + add(escapes[c] or c) + start = pos + 2 + end + return table.concat(parts) end local function find_eq(s) -- cgit v1.2.3