Advertisement
Guest User

ini_extensions.script

a guest
Aug 8th, 2015
294
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.90 KB | None | 0 0
  1. local override_ini_getters = {
  2. "r_bool",
  3. "r_float",
  4. "r_clsid",
  5. "r_s32",
  6. "r_token",
  7. "r_vector",
  8. "r_u32",
  9. "r_string_wq",
  10. "r_string"
  11. }
  12.  
  13. local override_ini_checkers = {
  14.     "section_exist",
  15.     "line_exist"
  16. }
  17.  
  18. function add_safe_getters()
  19.     for fi, k in ipairs(override_ini_getters) do
  20.         ini_file[k.."_safe"] = function(ini, section, line, ...)
  21.             if ini:section_exist(section) and ini:line_exist(section, line) then
  22.                 return ini[k](ini, section, line, ...)
  23.             end
  24.             -- Здесь по вкусу добавляем вывод в лог
  25.             return nil
  26.         end
  27.     end
  28. end
  29.  
  30. function create_ini_multifile(...)
  31.     local ini_arr = {...}
  32.     local prx = create_ini_file(" ")
  33.     override_methods(ini_arr, prx)
  34. end
  35.  
  36. function override_methods(arr, prx)
  37.     for fi, k in ipairs(override_ini_getters) do
  38.         prx[k] = function(blank_ini, section, line, ...)
  39.             for i, ini in ipairs(arr) do
  40.                 if ini:section_exist(section) and ini:line_exist(section, line) then
  41.                     return ini[k](ini, section, line, ...)
  42.                 end
  43.             end
  44.             return nil
  45.         end
  46.     end
  47.     for fi, k in ipairs(override_ini_checkers) do
  48.         prx[k] = function(blank_ini, ...)
  49.             for i, ini in ipairs(arr) do
  50.                 if ini[k](ini, ...) then
  51.                     return true
  52.                 end
  53.             end
  54.             return false
  55.         end
  56.     end
  57.     prx.line_count = function(blank_ini, section)
  58.         local cnt = 0
  59.         for i, ini in ipairs(arr) do
  60.             if ini:section_exist(section) then
  61.                 cnt = cnt + ini:line_count(section)
  62.             end
  63.         end
  64.         return cnt
  65.     end
  66.     prx.r_line = function(blank_ini, section, line_index, ...)
  67.         if (line_index >=0) then
  68.             for i, ini in ipairs(arr) do
  69.                 if ini:section_exist(section) then
  70.                     local cnt = ini:line_count(section)
  71.                     if (line_index + 1) > cnt then
  72.                         line_index = line_index - cnt
  73.                     else
  74.                         return ini:r_line(section, line_index, ...)
  75.                     end
  76.                 end
  77.             end
  78.         end
  79.         return nil
  80.     end
  81. end
  82.  
  83. add_safe_getters()
  84. _G.create_ini_multifile = create_ini_multifile
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement