diff options
| author | Khaled Hosny <khaledhosny@eglug.org> | 2010-03-28 08:03:36 +0200 | 
|---|---|---|
| committer | Khaled Hosny <khaledhosny@eglug.org> | 2010-03-28 08:03:36 +0200 | 
| commit | 82314cf9a737149e2359daedcf864c73d5ce303a (patch) | |
| tree | 65d50933d453da2d9ea582faeb038252927733de | |
| parent | 0f6c01ed2aba62330d4f37e1da43197e8df6f36d (diff) | |
| download | luaotfload-82314cf9a737149e2359daedcf864c73d5ce303a.tar.gz | |
Include alt_getopt.lua for now
| -rwxr-xr-x | alt_getopt.lua | 166 | ||||
| -rw-r--r-- | luaotfload.dtx | 10 | 
2 files changed, 168 insertions, 8 deletions
| diff --git a/alt_getopt.lua b/alt_getopt.lua new file mode 100755 index 0000000..7a6591a --- /dev/null +++ b/alt_getopt.lua @@ -0,0 +1,166 @@ +-- Copyright (c) 2009 Aleksey Cheusov <vle@gmx.net> +-- +-- Permission is hereby granted, free of charge, to any person obtaining +-- a copy of this software and associated documentation files (the +-- "Software"), to deal in the Software without restriction, including +-- without limitation the rights to use, copy, modify, merge, publish, +-- distribute, sublicense, and/or sell copies of the Software, and to +-- permit persons to whom the Software is furnished to do so, subject to +-- the following conditions: +-- +-- The above copyright notice and this permission notice shall be +-- included in all copies or substantial portions of the Software. +-- +-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +-- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +-- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +-- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +-- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +-- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +local type, pairs, ipairs, io, os = type, pairs, ipairs, io, os + +module ("alt_getopt") + +local function convert_short2long (opts) +   local i = 1 +   local len = #opts +   local ret = {} + +   for short_opt, accept_arg in opts:gmatch("(%w)(:?)") do +      ret[short_opt]=#accept_arg +   end + +   return ret +end + +local function exit_with_error (msg, exit_status) +   io.stderr:write (msg) +   os.exit (exit_status) +end + +local function err_unknown_opt (opt) +   exit_with_error ("Unknown option `-" .. +		    (#opt > 1 and "-" or "") .. opt .. "'\n", 1) +end + +local function canonize (options, opt) +   if not options [opt] then +      err_unknown_opt (opt) +   end + +   while type (options [opt]) == "string" do +      opt = options [opt] + +      if not options [opt] then +	 err_unknown_opt (opt) +      end +   end + +   return opt +end + +function get_ordered_opts (arg, sh_opts, long_opts) +   local i      = 1 +   local count  = 1 +   local opts   = {} +   local optarg = {} + +   local options = convert_short2long (sh_opts) +   for k,v in pairs (long_opts) do +      options [k] = v +   end + +   while i <= #arg do +      local a = arg [i] + +      if a == "--" then +	 i = i + 1 +	 break + +      elseif a == "-" then +	 break + +      elseif a:sub (1, 2) == "--" then +	 local pos = a:find ("=", 1, true) + +	 if pos then +	    local opt = a:sub (3, pos-1) + +	    opt = canonize (options, opt) + +	    if options [opt] == 0 then +	       exit_with_error ("Bad usage of option `" .. a .. "'\n", 1) +	    end + +	    optarg [count] = a:sub (pos+1) +	    opts [count] = opt +	 else +	    local opt = a:sub (3) + +	    opt = canonize (options, opt) + +	    if options [opt] == 0 then +	       opts [count] = opt +	    else +	       if i == #arg then +		  exit_with_error ("Missed value for option `" .. a .. "'\n", 1) +	       end + +	       optarg [count] = arg [i+1] +	       opts [count] = opt +	       i = i + 1 +	    end +	 end +	 count = count + 1 + +      elseif a:sub (1, 1) == "-" then +	 local j +	 for j=2,a:len () do +	    local opt = canonize (options, a:sub (j, j)) + +	    if options [opt] == 0 then +	       opts [count] = opt +	       count = count + 1 +	    elseif a:len () == j then +	       if i == #arg then +		  exit_with_error ("Missed value for option `-" .. opt .. "'\n", 1) +	       end + +	       optarg [count] = arg [i+1] +	       opts [count] = opt +	       i = i + 1 +	       count = count + 1 +	       break +	    else +	       optarg [count] = a:sub (j+1) +	       opts [count] = opt +	       count = count + 1 +	       break +	    end +	 end +      else +	 break +      end + +      i = i + 1 +   end + +   return opts,i,optarg +end + +function get_opts (arg, sh_opts, long_opts) +   local ret = {} + +   local opts,optind,optarg = get_ordered_opts (arg, sh_opts, long_opts) +   for i,v in ipairs (opts) do +      if optarg [i] then +	 ret [v] = optarg [i] +      else +	 ret [v] = 1 +      end +   end + +   return ret,optind +end diff --git a/luaotfload.dtx b/luaotfload.dtx index ffe4d73..ce1f76c 100644 --- a/luaotfload.dtx +++ b/luaotfload.dtx @@ -184,14 +184,8 @@ and the derived files  %  % Prefixes are either |file| or |name|; |file| prefix forces searching font  % based on filename, while a |name| prefix will result in consulting name -% database. Name database can be generated with\footnote{|mtxrun| tool and -% scripts are part of \ConTeXt}: -% -% \begin{center} -% |mtxrun --script fonts --names| -% \footnote{|mtxrun --script fonts --reload --simple| in recent -% \ConTeXt releases} -% \end{center} +% database. Name database can be generated with |mkluatexfontdb.lua| script +% shipped with \textsf{luaotfload}.  %  % \noindent Which will generate a file named |luatex-fonts-names.lua| that is  % to be placed somewhere in your \textsc{texmf} tree where \textsf{kpathsea} can | 
