diff options
Diffstat (limited to 'tex/context/base/char-ini.lua')
| -rw-r--r-- | tex/context/base/char-ini.lua | 76 | 
1 files changed, 45 insertions, 31 deletions
| diff --git a/tex/context/base/char-ini.lua b/tex/context/base/char-ini.lua index 8f8f8dc26..4750e929a 100644 --- a/tex/context/base/char-ini.lua +++ b/tex/context/base/char-ini.lua @@ -94,14 +94,15 @@ table we derive a few more.</p>  -- used ? -characters.context.unicodes = characters.context.unicodes or { } -characters.context.utfcodes = characters.context.utfcodes or { } -characters.context.enccodes = characters.context.enccodes or { } +characters.context.unicodes  = characters.context.unicodes  or { } +characters.context.utfcodes  = characters.context.utfcodes  or { } +characters.context.enccodes  = characters.context.enccodes  or { } +characters.context.fallbacks = characters.context.fallbacks or { }  function characters.context.rehash() -    local unicodes, utfcodes, enccodes, utfchar = characters.context.unicodes, characters.context.utfcodes, characters.context.enccodes, utf.char +    local unicodes, utfcodes, enccodes, fallbacks, utfchar = characters.context.unicodes, characters.context.utfcodes, characters.context.enccodes, characters.context.fallbacks, utf.char      for k,v in pairs(characters.data) do -        local contextname, adobename = v.contextname, v.adobename +        local contextname, adobename, specials = v.contextname, v.adobename, v.specials          if contextname then              local slot = v.unicodeslot              unicodes[contextname] = slot @@ -111,6 +112,11 @@ function characters.context.rehash()          if encname then              enccodes[encname] = k          end +        if specials and specials[1] == "compat" and specials[2] == 0x0020 and specials[3] then +            local s = specials[3] +            fallbacks[k] = s +            fallbacks[s] = k +        end      end      for name,code in pairs(characters.synonyms) do          if not enccodes[name] then enccodes[name] = code end @@ -319,15 +325,23 @@ function characters.uccode(n) return characters.data[n].uccode or n end  function characters.lccode(n) return characters.data[n].lccode or n end  function characters.flush(n) -    if characters.data[n].contextname then -        tex.sprint(tex.texcatcodes, "\\"..characters.data[n].contextname) +    local c = characters.data[n] +    if c and c.contextname then +        tex.sprint(tex.texcatcodes, "\\"..c.contextname)      else          tex.sprint(unicode.utf8.char(n))      end  end  function characters.shape(n) -    return characters.data[n].shcode or n +    local shcode = characters.data[n].shcode +    if not shcode then +        return n, nil +    elseif type(shcode) == "table" then +        return shcode[1], shcode[#shcode] +    else +        return shcode, nil +    end  end  --[[ldx-- @@ -358,12 +372,12 @@ unicode reference tables.</p>  --ldx]]--  function characters.setpdfunicodes() -    local flush, tc, sf = tex.sprint, tex.ctxcatcodes, string.format -    for _,v in pairs(characters.data) do -        if v.adobename then -            flush(tc,sf("\\pdfglyphtounicode{%s}{%04X}", v.adobename, v.unicodeslot)) -        end -    end +--~     local flush, tc, sf = tex.sprint, tex.ctxcatcodes, string.format +--~     for _,v in pairs(characters.data) do +--~         if v.adobename then +--~             flush(tc,sf("\\pdfglyphtounicode{%s}{%04X}", v.adobename, v.unicodeslot)) +--~         end +--~     end  end  --[[ldx-- @@ -377,21 +391,21 @@ characters.pdftex.make_pdf_to_unicodetable("pdfr-def.tex")  characters.pdftex = characters.pdftex or { }  function characters.pdftex.make_pdf_to_unicodetable(filename) -    local sf = string.format -    f = io.open(filename,'w') -    if f then -        f:write("% This file is generated with Luatex using the\n") -        f:write("% character tables that come with ConTeXt MkIV.\n") -        f:write("%\n") -        f:write("\\ifx\\pdfglyphtounicode\\undefined\\endinput\\fi\n") -- just to be sure -        for _, v in pairs(characters.data) do -            if v.adobename then -                f:write(sf("\\pdfglyphtounicode{%s}{%04X}", v.adobename, v.unicodeslot)) -            end -        end -        f:write("%\n") -        f:write("%\n") -        f:write("\\endinput") -        f:close() -    end +--~     local sf = string.format +--~     f = io.open(filename,'w') +--~     if f then +--~         f:write("% This file is generated with Luatex using the\n") +--~         f:write("% character tables that come with ConTeXt MkIV.\n") +--~         f:write("%\n") +--~         f:write("\\ifx\\pdfglyphtounicode\\undefined\\endinput\\fi\n") -- just to be sure +--~         for _, v in pairs(characters.data) do +--~             if v.adobename then +--~                 f:write(sf("\\pdfglyphtounicode{%s}{%04X}", v.adobename, v.unicodeslot)) +--~             end +--~         end +--~         f:write("%\n") +--~         f:write("%\n") +--~         f:write("\\endinput") +--~         f:close() +--~     end  end | 
