diff options
| author | eroux <elie.roux@telecom-bretagne.eu> | 2010-02-26 10:12:19 +0100 | 
|---|---|---|
| committer | eroux <elie.roux@telecom-bretagne.eu> | 2010-02-26 10:14:29 +0100 | 
| commit | e927dc3d77cd4317cefb07a6831abe1654734e42 (patch) | |
| tree | e87f25f9de13d371cb56b8c83ad78a7846ebb67b | |
| parent | b8795802b43e389edf8d99294258c2d56bd83af2 (diff) | |
| download | luaotfload-e927dc3d77cd4317cefb07a6831abe1654734e42.tar.gz | |
A safer path normalization
| -rw-r--r-- | luaotfload-fonts.lua | 23 | 
1 files changed, 16 insertions, 7 deletions
| diff --git a/luaotfload-fonts.lua b/luaotfload-fonts.lua index 36aa1a4..8e4b81b 100644 --- a/luaotfload-fonts.lua +++ b/luaotfload-fonts.lua @@ -181,14 +181,18 @@ else  end  log(2, "Detecting system: %s", system) --- path must be normalized under cygwin +-- path normalization: +-- - a\b\c  -> a/b/c +-- - a/../b -> b +-- - /cygdrive/a/b -> a:/b  local function path_normalize(path) +    if system ~= 'unix' then +        path = path:gsub('\\', '/') +        path = path:lower() +    end +    path = file.collapse_path(path)      if system == "cygwin" then -        local res = string.lower(io.popen(string.format("cygpath.exe --mixed %s", path)):read("*all")) -        -- a very strange thing: spaces are replaced by \n and there is a trailing \n at the end -        res = res:gsub("\n$", '') -        res = res:gsub("\n", ' ') -        return res +        path = path:gsub('^/cygdrive/(%a)/', '%1:/')      end      return path  end @@ -223,6 +227,7 @@ local function scan_dir(dirname, names, recursive, texmf, scanned_fonts)      end      log(2, "%d fonts found in '%s'", nbfound, dirname)      for _,fnt in ipairs(list) do +        fnt = path_normalize(fnt)          if not scanned_fonts[fnt] then              load_font(fnt, names, texmf)              scanned_fonts[fnt] = true @@ -308,6 +313,7 @@ local function generate()          version  = luaotfload.fonts.version,      }      local savepath = luaotfload.fonts.directory +    savepath = path_normalize(savepath)      if not lfs.isdir(savepath) then          log(1, "Creating directory %s", savepath)          lfs.mkdir(savepath) @@ -316,7 +322,7 @@ local function generate()              os.exit(1)          end      end -    savepath = savepath .. luaotfload.fonts.basename +    savepath = savepath .. '/' .. luaotfload.fonts.basename      local fh = io.open(savepath, 'wb')      if not fh then          texio.write_nl(string.format("Error: cannot write file '%s', exiting.\n", savepath)) @@ -336,3 +342,6 @@ end  luaotfload.fonts.scan     = scan_dir  luaotfload.fonts.generate = generate +if arg[0] == "luaotfload-fonts.lua" then +    generate() +end | 
