Модуль:FetchData3: відмінності між версіями

нема опису редагування
Немає опису редагування
Немає опису редагування
Рядок 8: Рядок 8:
end
end


--- Отримує рядок гравця з таблиці
--- Отримує заголовки та рядок гравця з таблиці
local function get_player_row(page_title, player_name)
local function get_player_row(page_title, player_name)
     local title = mw.title.new(page_title)
     local title = mw.title.new(page_title)
Рядок 20: Рядок 20:
     end
     end
      
      
    -- Знаходимо таблицю
     local table_start = mw.ustring.find(content, "{|")
     local table_start = mw.ustring.find(content, "{|")
     local table_end = mw.ustring.find(content, "|}", table_start)
     local table_end = mw.ustring.find(content, "|}", table_start)
Рядок 29: Рядок 30:
     local table_content = mw.ustring.sub(content, table_start, table_end + 1)
     local table_content = mw.ustring.sub(content, table_start, table_end + 1)
      
      
     -- Знаходимо заголовки (шукаємо рядок, що починається з !)
     -- Отримуємо заголовки (перший рядок після {|)
     local header_row = nil
     local headers = {}
     for line in mw.ustring.gmatch(table_content, "([^\n]+)") do
     local first_row = mw.ustring.match(table_content, "{|[^\n]*\n!(.-)[\n]")
        if mw.ustring.match(line, "^!") then
            header_row = line
            break
        end
    end
      
      
     if not header_row then
     if first_row then
         return nil, error_output("Headers Missing", page_title)
         -- Розбиваємо заголовки по ||
    end
        for header in mw.ustring.gmatch(first_row, "([^|]+)") do
   
            local trimmed = mw.text.trim(header)
    local headers = {}
            if trimmed ~= "" then
    -- Розділяємо по ! або !!
                table.insert(headers, trimmed)
    for header in mw.ustring.gmatch(header_row, "!+%s*([^!]+)") do
            end
        local trimmed = mw.text.trim(header)
        if trimmed ~= "" then
            table.insert(headers, trimmed)
         end
         end
     end
     end
Рядок 55: Рядок 48:
     end
     end
      
      
     -- Шукаємо рядок гравця
     -- Шукаємо рядок з гравцем
     local escaped = mw.ustring.gsub(player_name, "([%^%$%(%)%%%.%[%]%*%+%-%?])", "%%%1")
     local escaped = mw.ustring.gsub(player_name, "([%^%$%(%)%%%.%[%]%*%+%-%?])", "%%%1")
     local player_pattern = "%[%[" .. escaped .. "%]%]"
     local player_pattern = "%[%[" .. escaped .. "%]%]"
      
      
    -- Збираємо всі рядки
     local rows = {}
     local rows = {}
     for row in mw.ustring.gmatch(table_content, "|-\n(.-)\n|-") do
     for row in mw.ustring.gmatch(table_content, "|-\n(.-)\n|-") do
Рядок 69: Рядок 63:
     end
     end
      
      
    -- Обробляємо кожен рядок
     for _, row in ipairs(rows) do
     for _, row in ipairs(rows) do
         if mw.ustring.find(row, player_pattern) then
         if mw.ustring.find(row, player_pattern) then
Рядок 98: Рядок 93:
     elseif value == "4" then
     elseif value == "4" then
         return "[[Файл:Finalist.png|Фіналіст]]"
         return "[[Файл:Finalist.png|Фіналіст]]"
     elseif value == "S" then
     elseif value == "S" or mw.ustring.match(value, "^S%d") then
         return "[[Файл:Star.png|Найкращий]]"
         return "[[Файл:Star.png|Найкращий]]"
     else
     else
Рядок 107: Рядок 102:
--- Генерує посилання на турнір
--- Генерує посилання на турнір
local function get_tournament_link(header_name)
local function get_tournament_link(header_name)
     -- Видаляємо (фінал) та (рейтинг) для посилання
     -- Видаляємо (Ф) та (Р) для відображення, але залишаємо для посилання
     local clean_name = mw.ustring.gsub(header_name, "%s*%(фінал%)%s*", "")
     local display_name = header_name
     clean_name = mw.ustring.gsub(clean_name, "%s*%(рейтинг%)%s*", "")
    local link_name = mw.ustring.gsub(header_name, "%s*%(Ф%)%s*", "")
     clean_name = mw.text.trim(clean_name)
     link_name = mw.ustring.gsub(link_name, "%s*%(Р%)%s*", "")
     link_name = mw.text.trim(link_name)
      
      
     return string.format("[[%s|%s]]", clean_name, header_name)
     -- Якщо назви однакові, просто посилання
    if link_name == display_name then
        return string.format("[[%s]]", link_name)
    else
        return string.format("[[%s|%s]]", link_name, display_name)
    end
end
end