diff options
Diffstat (limited to 'VP-textwork.lua')
-rw-r--r-- | VP-textwork.lua | 38 |
1 files changed, 34 insertions, 4 deletions
diff --git a/VP-textwork.lua b/VP-textwork.lua index 2d3f56c..c7bc9af 100644 --- a/VP-textwork.lua +++ b/VP-textwork.lua @@ -1,3 +1,9 @@ +function get_next_char(script) + local c = script:readU8() + if c >= 0x80 then c = (c - 0x80) + (script:readU8() * 128) end + return c +end + function get_next_utf8(str) local ret = "" local n @@ -86,14 +92,38 @@ function dump_special(script, code) error "Should not end up there" end +function dump_special2(script, code) + if code == 0 then + return "\n", "\n" + elseif code == 1 then + return "\n<new/>\n", "\n" + else + local a1, a2 + if code == 3 or code == 5 or code == 7 or code == 8 or code == 9 or code == 12 or code == 13 or code == 14 or code == 15 or code == 21 then + a1 = script:readU8() + return '<u1 c="' .. code .. '" a="' .. a1 .. '"/>', "" + elseif code == 20 then + a1 = script:readU8() + a2 = script:readU8() + return '<u2 c="' .. code .. '" a1="' .. a1 .. '" a2="' .. a2 .. '"/>', "" + else + return '<uk c="' .. code .. '"/>', "" + end + end + error "Should not end up there" +end + function extract_char(script, lookup) - local - c = script:readU8() + local c = get_next_char(script) if c == 0 then return nil end - if c >= 0x80 then c = (c - 0x80) + (script:readU8() * 128) end if c >= 0x4000 then - return dump_special(script, c - 0x4000) + local code = c - 0x4000 + if second_style_script then + return dump_special2(script, code) + else + return dump_special(script, code) + end else local l = lookup[c] if not l and not sloppy_extract then error("Lookup failed for character " .. c) end |