모듈:Infobox

최근 편집: 2023년 6월 21일 (수) 16:36

이 모듈에 대한 설명문서는 모듈:Infobox/설명문서에서 만들 수 있습니다

local infobox = require('Module:@en/Infobox')

local p = {}


local function _infobox(frame, template)
  local originArgs = {}

  if not template then
    if frame == mw.getCurrentFrame() then
      originArgs = frame:getParent().args
    else
      originArgs = frame
    end
  else
    for k,v in pairs(frame.args) do originArgs[k] = mw.text.trim(v) end
  end

  local singleParamsL10nMap = {
    ['이름'] = 'name',
    ['주제'] = 'header',
    ['주제id'] = 'headerid',
    ['주제속성'] = 'headerclass',
    ['주제모양'] = 'headerstyle',
    ['항목'] = 'label',
    ['항목id'] = 'labelid',
    ['항목모양'] = 'labelstyle',
    ['내용'] = 'data',
    ['내용id'] = 'dataid',
    ['내용모양'] = 'datastyle',
    ['속성'] = 'class',
    ['행id'] = 'rowid',
    ['행속성'] = 'rowclass',
    ['행모양'] = 'rowstyle',
    ['행셀모양'] = 'rowcellstyle',
    ['큰제목'] = 'title',
    ['큰제목속성'] = 'titleclass',
    ['큰제목모양'] = 'titlestyle',
    ['제목'] = 'above',
    ['제목속성'] = 'aboveclass',
    ['제목모양'] = 'abovestyle',
    ['아랫글'] = 'below',
    ['아랫글속성'] = 'belowclass',
    ['아랫글모양'] = 'belowstyle',
    ['작은제목'] = 'subheader',
    ['작은제목모양'] = 'subheaderstyle',
    ['작은제목속성'] = 'subheaderclass',
    ['작은제목행속성'] = 'subheaderrowclass',
    ['그림'] = 'image',
    ['설명'] = 'caption',
    ['그림설명'] = 'caption',
    ['그림모양'] = 'imagestyle',
    ['그림속성'] = 'imageclass',
    ['그림행속성'] = 'imagerowclass',
    ['그림설명모양'] = 'captionstyle',
    ['전체속성'] = 'bodyclass',
    ['전체모양'] = 'bodystyle',
  }
  local generalParamsL10nMap = {
    ['작은제목'] = 'subheader',
    ['작은제목행속성'] = 'subheaderrowclass',
    ['그림'] = 'image',
    ['설명'] = 'caption',
    ['그림설명'] = 'caption',
    ['주제'] = 'header',
    ['항목'] = 'label',
    ['내용'] = 'data',
    ['내용모양'] = 'datastyle',
    ['속성'] = 'class',
    ['행속성'] = 'rowclass',
    ['행모양'] = 'rowstyle',
    ['행셀모양'] = 'rowcellstyle',
    ['내용id'] = 'dataid',
    ['항목id'] = 'labelid',
    ['주제id'] = 'headerid',
    ['행id'] = 'rowid',
  }

  local traslatedArgs = {}

  -- 시간복잡도 O(n) (n은 #singleParamsL10nMap)
  for localParam, enParam in pairs(singleParamsL10nMap) do
    if originArgs[localParam] ~= nil and originArgs[localParam] ~= '' then
      traslatedArgs[enParam] = originArgs[localParam]
    end
  end

  -- 시간복잡도 O(m*n) (m은 #originArgs, n은 #generalParamsL10nMap)
  for k, v in pairs(originArgs) do
    for localParam, enParam in pairs(generalParamsL10nMap) do
      local num = tostring(k):match('^' .. localParam .. '([1-9]%d*)$')
      if num then
        traslatedArgs[enParam .. num] = v
        break
      end
    end
  end

  newArgs = {}

  for k, v in pairs(frame.args) do
    newArgs[k] = v
  end

  for k, v in pairs(traslatedArgs) do
    newArgs[k] = v
  end

  frame.args = newArgs

  return infobox.infoboxTemplate(frame)
end


function p.infobox(frame)
  return _infobox(frame, false)
end

function p.infoboxTemplate(frame)
  return _infobox(frame, true)
end


return p