diff options
Diffstat (limited to 'src/fontloader')
| -rw-r--r-- | src/fontloader/misc/fontloader-font-dsp.lua | 2 | ||||
| -rw-r--r-- | src/fontloader/misc/fontloader-font-ots.lua | 30 | ||||
| -rw-r--r-- | src/fontloader/runtime/fontloader-reference.lua | 26 | 
3 files changed, 36 insertions, 22 deletions
diff --git a/src/fontloader/misc/fontloader-font-dsp.lua b/src/fontloader/misc/fontloader-font-dsp.lua index 14e816d..85a80bd 100644 --- a/src/fontloader/misc/fontloader-font-dsp.lua +++ b/src/fontloader/misc/fontloader-font-dsp.lua @@ -525,7 +525,7 @@ local function chainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,nof                              end                          end                          local noflookups = readushort(f) -                        local lookups = { } +                        local lookups    = { }                          for i=1,noflookups do                              lookups[readushort(f)+1] = readushort(f) + 1                          end diff --git a/src/fontloader/misc/fontloader-font-ots.lua b/src/fontloader/misc/fontloader-font-ots.lua index ac81989..90fcde2 100644 --- a/src/fontloader/misc/fontloader-font-ots.lua +++ b/src/fontloader/misc/fontloader-font-ots.lua @@ -2144,7 +2144,7 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)                  else                      local discfound = nil                      local n = f + 1 -                    last = getnext(last) +                    last = getnext(last) -- the second in current (first already matched)                      while n <= l do                          if not last and (sweeptype == "post" or sweeptype == "replace") then                              last      = getnext(sweepnode) @@ -2185,7 +2185,6 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)                                      end                                      break                                  end -                                last = getnext(last)                              elseif char == false then                                  if discfound then                                      notmatchreplace[discfound] = true @@ -2238,6 +2237,7 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)                                      end                                      match = not notmatchpre[last]                                  end +                                -- maybe only if match                                  last = getnext(last)                              else                                  match = false @@ -2273,8 +2273,12 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)                                              if trace_skips then                                                  show_skip(dataset,sequence,char,ck,class)                                              end +                                            prev = getprev(prev) -- moved here                                          elseif seq[n][char] then -                                            n = n -1 +                                            if n > 1 then -- new test +                                                prev = getprev(prev) -- moved here +                                            end +                                            n = n - 1                                          else                                              if discfound then                                                  notmatchreplace[discfound] = true @@ -2293,7 +2297,7 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)                                          end                                          break                                      end -                                    prev = getprev(prev) +                                 -- prev = getprev(prev) -- moved up                                  elseif char == false then                                      if discfound then                                          notmatchreplace[discfound] = true @@ -2357,21 +2361,20 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)                                              if not match then                                                  break                                              end -                                        else -                                            -- skip 'm                                          end -                                    else -                                        -- skip 'm                                      end +                                    -- maybe only if match +                                    prev = getprev(prev)                                  elseif seq[n][32] then                                      n = n - 1 +                                    prev = getprev(prev)                                  else                                      match = false                                      break                                  end -                                prev = getprev(prev)                              elseif seq[n][32] then -- somewhat special, as zapfino can have many preceding spaces                                  n = n - 1 +                                prev = getprev(prev) -- was absent                              else                                  match = false                                  break @@ -2409,7 +2412,11 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)                                          if trace_skips then                                              show_skip(dataset,sequence,char,ck,class)                                          end +                                        current = getnext(current) -- was absent                                      elseif seq[n][char] then +                                        if n < s then -- new test +                                            current = getnext(current) -- was absent +                                        end                                          n = n + 1                                      else                                          if discfound then @@ -2485,16 +2492,17 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)                                  else                                      -- skip 'm                                  end +                                -- maybe only if match +                                current = getnext(current)                              elseif seq[n][32] then -- brrr                                  n = n + 1                              else                                  match = false                                  break                              end -                            current = getnext(current)                          elseif seq[n][32] then                              n = n + 1 -current = getnext(current) +                            current = getnext(current)                          else                              match = false                              break diff --git a/src/fontloader/runtime/fontloader-reference.lua b/src/fontloader/runtime/fontloader-reference.lua index ab81bc6..5be6493 100644 --- a/src/fontloader/runtime/fontloader-reference.lua +++ b/src/fontloader/runtime/fontloader-reference.lua @@ -1,6 +1,6 @@  -- merged file : c:/data/develop/context/sources/luatex-fonts-merged.lua  -- parent file : c:/data/develop/context/sources/luatex-fonts.lua --- merge date  : 04/25/16 13:30:09 +-- merge date  : 04/27/16 10:18:10  do -- begin closure to overcome local limits and interference @@ -20036,7 +20036,7 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)          else            local discfound=nil            local n=f+1 -          last=getnext(last) +          last=getnext(last)             while n<=l do              if not last and (sweeptype=="post" or sweeptype=="replace") then                last=getnext(sweepnode) @@ -20077,7 +20077,6 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)                    end                    break                  end -                last=getnext(last)                elseif char==false then                  if discfound then                    notmatchreplace[discfound]=true @@ -20162,8 +20161,12 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)                        if trace_skips then                          show_skip(dataset,sequence,char,ck,class)                        end +                      prev=getprev(prev)                       elseif seq[n][char] then -                      n=n -1 +                      if n>1 then  +                        prev=getprev(prev)  +                      end +                      n=n-1                      else                        if discfound then                          notmatchreplace[discfound]=true @@ -20182,7 +20185,6 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)                      end                      break                    end -                  prev=getprev(prev)                  elseif char==false then                    if discfound then                      notmatchreplace[discfound]=true @@ -20244,19 +20246,19 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)                        if not match then                          break                        end -                    else                      end -                  else                    end +                  prev=getprev(prev)                  elseif seq[n][32] then                    n=n-1 +                  prev=getprev(prev)                  else                    match=false                    break                  end -                prev=getprev(prev)                elseif seq[n][32] then                   n=n-1 +                prev=getprev(prev)                 else                  match=false                  break @@ -20291,7 +20293,11 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)                      if trace_skips then                        show_skip(dataset,sequence,char,ck,class)                      end +                    current=getnext(current)                     elseif seq[n][char] then +                    if n<s then  +                      current=getnext(current)  +                    end                      n=n+1                    else                      if discfound then @@ -20365,16 +20371,16 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode)                    end                  else                  end +                current=getnext(current)                elseif seq[n][32] then                   n=n+1                else                  match=false                  break                end -              current=getnext(current)              elseif seq[n][32] then                n=n+1 -current=getnext(current) +              current=getnext(current)              else                match=false                break  | 
