diff options
Diffstat (limited to 'tex/generic')
| -rw-r--r-- | tex/generic/context/luatex/luatex-fonts-merged.lua | 102 | 
1 files changed, 61 insertions, 41 deletions
| diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua index 0b714c1a7..7b2b0a282 100644 --- a/tex/generic/context/luatex/luatex-fonts-merged.lua +++ b/tex/generic/context/luatex/luatex-fonts-merged.lua @@ -1,6 +1,6 @@  -- merged file : luatex-fonts-merged.lua  -- parent file : luatex-fonts.lua --- merge date  : 01/21/13 18:18:50 +-- merge date  : 01/22/13 18:33:20  do -- begin closure to overcome local limits and interference @@ -949,7 +949,6 @@ function string.is_empty(str)      end  end -  -- if not string.escapedpattern then  --  --     local patterns_escapes = { @@ -5794,7 +5793,7 @@ local otf                = fonts.handlers.otf  otf.glists               = { "gsub", "gpos" } -otf.version              = 2.738 -- beware: also sync font-mis.lua +otf.version              = 2.740 -- beware: also sync font-mis.lua  otf.cache                = containers.define("fonts", "otf", otf.version, true)  local fontdata           = fonts.hashes.identifiers @@ -9014,19 +9013,40 @@ local registerotffeature  = otffeatures.register  process features right.</p>  --ldx]]-- -analyzers.constants = { -    init = 1, -    medi = 2, -    fina = 3, -    isol = 4, - -- devanagari -    rphf = 5, -    half = 6, -    pref = 7, -    blwf = 8, -    pstf = 9, +-- never use these numbers directly + +local s_init = 1    local s_rphf =  7 +local s_medi = 2    local s_half =  8 +local s_fina = 3    local s_pref =  9 +local s_isol = 4    local s_blwf = 10 +local s_mark = 5    local s_pstf = 11 +local s_rest = 6 + +local states = { +    init = s_init, +    medi = s_medi, +    fina = s_fina, +    isol = s_isol, +    mark = s_mark, +    rest = s_rest, +    rphf = s_rphf, +    half = s_half, +    pref = s_pref, +    blwf = s_blwf, +    pstf = s_pstf, +} + +local features = { +    init = s_init, +    medi = s_medi, +    fina = s_fina, +    isol = s_isol, + -- mark = s_mark,  } +analyzers.states   = states +analyzers.features = features +  -- todo: analyzers per script/lang, cross font, so we need an font id hash -> script  -- e.g. latin -> hyphenate, arab -> 1/2/3 analyze -- its own namespace @@ -9044,40 +9064,40 @@ function analyzers.setstate(head,font)              if d then                  if d.class == "mark" or (useunicodemarks and categories[char] == "mn") then                      done = true -                    current[a_state] = 5 -- mark +                    current[a_state] = s_mark                  elseif n == 0 then                      first, last, n = current, current, 1 -                    current[a_state] = 1 -- init +                    current[a_state] = s_init                  else                      last, n = current, n+1 -                    current[a_state] = 2 -- medi +                    current[a_state] = s_medi                  end              else -- finish                  if first and first == last then -                    last[a_state] = 4 -- isol +                    last[a_state] = s_isol                  elseif last then -                    last[a_state] = 3 -- fina +                    last[a_state] = s_fina                  end                  first, last, n = nil, nil, 0              end          elseif id == disc_code then              -- always in the middle -            current[a_state] = 2 -- midi +            current[a_state] = s_midi              last = current          else -- finish              if first and first == last then -                last[a_state] = 4 -- isol +                last[a_state] = s_isol              elseif last then -                last[a_state] = 3 -- fina +                last[a_state] = s_fina              end              first, last, n = nil, nil, 0          end          current = current.next      end      if first and first == last then -        last[a_state] = 4 -- isol +        last[a_state] = s_isol      elseif last then -        last[a_state] = 3 -- fina +        last[a_state] = s_fina      end      return head, done  end @@ -9239,19 +9259,19 @@ local function finish(first,last)          if first == last then              local fc = first.char              if isol_fina_medi_init[fc] or isol_fina[fc] then -                first[a_state] = 4 -- isol +                first[a_state] = s_isol              else                  warning(first,"isol") -                first[a_state] = 0 -- error +                first[a_state] = s_error              end          else              local lc = last.char              if isol_fina_medi_init[lc] or isol_fina[lc] then -- why isol here ?              -- if laststate == 1 or laststate == 2 or laststate == 4 then -                last[a_state] = 3 -- fina +                last[a_state] = s_fina              else                  warning(last,"fina") -                last[a_state] = 0 -- error +                last[a_state] = s_error              end          end          first, last = nil, nil @@ -9259,10 +9279,10 @@ local function finish(first,last)          -- first and last are either both set so we never com here          local fc = first.char          if isol_fina_medi_init[fc] or isol_fina[fc] then -            first[a_state] = 4 -- isol +            first[a_state] = s_isol          else              warning(first,"isol") -            first[a_state] = 0 -- error +            first[a_state] = s_error          end          first = nil      end @@ -9279,33 +9299,33 @@ function methods.arab(head,font,attr) -- maybe make a special version with no tr              done = true              local char = current.char              if marks[char] or (useunicodemarks and categories[char] == "mn") then -                current[a_state] = 5 -- mark +                current[a_state] = s_mark              elseif isol[char] then -- can be zwj or zwnj too                  first, last = finish(first,last) -                current[a_state] = 4 -- isol +                current[a_state] = s_isol                  first, last = nil, nil              elseif not first then                  if isol_fina_medi_init[char] then -                    current[a_state] = 1 -- init +                    current[a_state] = s_init                      first, last = first or current, current                  elseif isol_fina[char] then -                    current[a_state] = 4 -- isol +                    current[a_state] = s_isol                      first, last = nil, nil                  else -- no arab                      first, last = finish(first,last)                  end              elseif isol_fina_medi_init[char] then                  first, last = first or current, current -                current[a_state] = 2 -- medi +                current[a_state] = s_medi              elseif isol_fina[char] then -                if not last[a_state] == 1 then +                if not last[a_state] == s_init then                      -- tricky, we need to check what last may be ! -                    last[a_state] = 2 -- medi +                    last[a_state] = s_medi                  end -                current[a_state] = 3 -- fina +                current[a_state] = s_fina                  first, last = nil, nil              elseif char >= 0x0600 and char <= 0x06FF then -                current[a_state] = 6 -- rest +                current[a_state] = s_rest                  first, last = finish(first,last)              else --no                  first, last = finish(first,last) @@ -11347,7 +11367,7 @@ end)  -- fonts.hashes.lookups = lookuphashes -local constants = fonts.analyzers.constants +local autofeatures = fonts.analyzers.features -- was: constants  local function initialize(sequence,script,language,enabled)      local features = sequence.features @@ -11357,7 +11377,7 @@ local function initialize(sequence,script,language,enabled)              if valid then                  local languages = scripts[script] or scripts[wildcard]                  if languages and (languages[language] or languages[wildcard]) then -                    return { valid, constants[kind] or false, sequence.chain or 0, kind, sequence } +                    return { valid, autofeatures[kind] or false, sequence.chain or 0, kind, sequence }                  end              end          end | 
