Module:Build bracket

local p = {}

-- Submodules
local Helpers = require("Module:Build bracket/Helpers")
local Config = require("Module:Build bracket/Config")
local Params = require("Module:Build bracket/Params")
local StateChecks = require("Module:Build bracket/StateChecks")
local Logic = require("Module:Build bracket/Logic")
local Paths = require("Module:Build bracket/Paths")
local Render = require("Module:Build bracket/Render")
-- local Deprecations = require('Module:Build bracket/Deprecations')

function p.main(frame)
    -- Shared mutable state passed among submodules
    local state = {
        headerindex = {},
        rlegs = {},
        maxlegs = {},
        hascross = {},
        crossCell = {},
        pathCell = {},
        skipPath = {},
        hide = {},
        byes = {},
        teamsPerMatch = {},
        matchgroup = {},
        maxtpm = 0
    }
    local config = {}

    -- 1) Parse args & set config (also installs arg accessors on Helpers)
    Config.init(frame, state, config, Helpers)

    -- 2) Bind StateChecks (used by Params/Logic/Paths/Render)
    StateChecks.bind(state, config, Helpers)

    -- 3) Build entries skeleton from args (headers/teams/text/lines/groups)
    Params.buildSkeleton(state, config, Helpers, StateChecks)

    -- 4) Discover indices/byes/hide across the skeleton
    Params.scanStructure(state, config, Helpers, StateChecks)

    -- 5) assign per-entry params
    Params.assign(state, config, Helpers, StateChecks)

    -- 5.5) apply minround slicing (reindex to start at 1)
    Params.sliceForMinround(state, config)

    -- 6) Logic passes (max legs, grouping, aggregates, bolding)
    Logic.updateMaxLegs(state, config, Helpers)
    Logic.matchGroups(state, config)
    Logic.computeAggregate(state, config, Helpers, StateChecks)
    Logic.boldWinner(state, config, Helpers, StateChecks)

    -- 7) paths + derive groups from paths
    Paths.build(state, config, Helpers, StateChecks)
    Paths.attachGroups(state, config, Helpers, StateChecks)

    -- (Harmless guard if user passed odd ranges)
    if (tonumber(config.c) or 1) < (tonumber(config.minc) or 1) then
        config.c = config.minc
    end

    -- 8) Render HTML table
    local html = Render.buildTable(frame, state, config, Helpers, StateChecks)
    return tostring(html)
end

-- Exposed for tests/scripts that invoke without a frame
p._main = p.main

return p

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.