Modul:Echo

Izvor: Wikipedija
Prijeđi na navigaciju Prijeđi na pretragu

Dokumentaciju za ovaj modul možete napraviti na stranici Modul:Echo/dok

local str = {}

---------------------------------------------------
--  Function: len
--
--  This function returns the length of the target string.
--
--  Usage:
--      {{#invoke:Echo|len|target_string|}}
--      OR
--      {{#invoke:Echo|len|s=target_string}}
--
-- Parameters
--      s: The string whose length to report
--
--  If invoked using named parameters, Mediawiki will automatically
--  remove any leading/trailing whitespace from the target string.  

function str.len( frame )
    local new_args = str._getParameters( frame.args, {'s'} );
    local s = new_args['s'] or '';
    return mw.ustring.len( s )
end

---------------------------------------------------
--  Function: echo
--
--  This function returns the contents of the target string.
--
--  Usage:
--      {{#invoke:Echo|echo|target_string|}}
--      OR
--      {{#invoke:Echo|echo|s=target_string}}
--
-- Parameters
--      s: The string whose contents to display
--
--  If invoked using named parameters, Mediawiki will automatically
--  remove any leading/trailing whitespace from the target string.  

function str.echo( frame )
    local new_args = str._getParameters( frame.args, {'s'} );
    local s = new_args['s'] or '';
    return s
end

---------------------------------------------------
--  Function: cite
--
--  This function displays cite parameters.
--
--  Usage:
--      {{#invoke:Echo|cite|author=xx|title=xx|url=zzz|date=dd}}
--
-- Parameters
--      author, title, url, date: strings to display

function str.cite( frame )
    -- local args = str._getParameters( frame.args,
    --    {'author','last','first','last1','first1','title','url','date'} );
    local p1 = frame.args[1] or 'web';
    local author = frame.args['author'] or '';
    local last  = frame.args['last'] or '';
    local last1 = frame.args['last1'] or '';
    local first = frame.args['first'] or '';
    local first1 = frame.args['first1'] or '';
    local title = frame.args['title'] or '';
    local url = frame.args['url'] or '';
    local date = frame.args['date'] or '';

    local work = frame.args['work'] or '';
    local periodical = frame.args['periodical'] or '';
    local newspaper = frame.args['newspaper'] or '';
    local journal = frame.args['journal'] or '';

    local day  = frame.args['day'] or '';
    local month = frame.args['month'] or '';
    local year = frame.args['year'] or '';
    local accessdate = frame.args['accessdate'] or '';
    local agency = frame.args['agency'] or '';
    local publisher = frame.args['publisher'] or '';
    local location = frame.args['location'] or '';
    local place = frame.args['place'] or '';
    local volume = frame.args['volume'] or '';
    local edition = frame.args['edition'] or '';
    local issue = frame.args['issue'] or '';
    local number = frame.args['number'] or '';
    local pages = frame.args['pages'] or '';
    local page = frame.args['page'] or '';
    local at = frame.args['at'] or '';
    local archivedate = frame.args['archivedate'] or '';
    local archiveurl = frame.args['archiveurl'] or '';

    local text = author
    if author ~='' or last ~='' or last1 ~= '' then
      if last ~='' or last1 ~= '' then
         text = text .. last ..last1 ..', '.. first ..first1
      end
      if date ~= '' then
          text = text .. " (" ..date .."). "
      else
          if year ~= '' then
              text = text .. " (" ..day ..month ..year .."). "
          else
              if string.sub(text,-1,-1) == '.' then
                text = text .. ' '
              else
                text = text .. '. '
              end
          end
      end --endif-else date
    end
------------------------------------------------------- Title
    local type = '"'
    if p1=='book' then type = "''" end
    if url ~= '' then
       text = text .. '[' ..url .. ' ' ..type ..title ..type .. ']'
    else
       text = text .. type ..title .. type
    end
    if periodical ~= '' then text = text .. ". ''" ..periodical .. "''" end
    if newspaper ~= '' then text = text .. ". ''" ..newspaper .. "''" end
    if journal ~= '' then text = text .. ". ''" ..journal .. "''" end
    if work ~='' then text = text .. ". ''" ..work.."''" end
------------------------------------------------------- Pub/location/volume
    if journal ~= '' or work~='' or newspaper~='' then
      if location ~= '' or place ~='' then
          text = text ..' (' .. location .. place
          if publisher ~= '' or agency ~='' then
            text = text ..': ' ..publisher .. agency
          end
          text = text ..')'
      else
          if publisher ~= '' or agency ~='' then
            text = text ..'. ' .. publisher .. agency
          end
      end -- endif-else location/place
    else -- else not journal/work/newspaper
      if agency ~='' then
          text = text .. '. ' .. agency
      end
      if location ~= '' or place ~='' then
          text = text ..'. ' .. location .. place
          if publisher ~= '' then
            text = text ..': ' .. publisher
          end
      else
          if publisher ~= '' then
            text = text .. '. ' .. publisher
          end
      end -- endif-else location/place #2
    end --endif-else journal/newspaper
    if volume ~= '' then
      if string.len(volume) > 4 then
          text = text .. '. ' .. volume
          text = text .. " '''" .. volume .. "'''"
      end --endif volume #len > 4
    end
    if issue ~= '' or number ~= '' then
      text = text .. ' (' ..issue ..number ..')'
    end --if issue/number
    if edition ~= '' then
      text = text .. ' (' ..edition ..' ed.)'
    end --if edition
-------------------------------------------------------- Date/year
    if last ~='' or author ~='' or last1 ~='' or editor~='' then
        -- then omit date here --
    else --show date/year
      if date ~= '' then
          text = text .. '. ' ..date
      else
          if year ~= '' then
              text = text .. '. ' ..day ..month ..year
          end
      end --endif-else date
    end --endif-else last/author/last1..
-------------------------------------------------------- Pages/page
    if pages ~= '' then
        if p1 == 'journal' then
            text = text .. ": " ..pages
        else
            text = text .. ". pp. " ..pages
        end
    else 
        if page ~= '' then
            if p1 == 'journal' then
                text = text .. ": " ..page
            else
                text = text .. ". p. " ..page
            end
        end
    end --endif-else pages
    if at ~= '' then
        text = text .. ". " ..at
    end
-------------------------------------------------------- Access date
    if accessdate ~= '' then
        text = text .. ". Retrieved " ..accessdate
    end

    text = text .. "."
    return text
end

-----------------------------------------
--  Helper function that populates the argument list given that user
--  may need to use a mix of named and unnamed parameters.  This is
--  relevant because named parameters are not identical to unnamed
--  parameters due to string trimming, and when dealing with strings,
--  there can be a need to either preserve or remove that whitespace
--  depending on the application.

function str._getParameters( frame_args, arg_list )
    local new_args = {};
    local index = 1;
    local value;
    
    for i,arg in ipairs( arg_list ) do
        value = frame_args[arg]
        if value == nil then
            value = frame_args[index];
            index = index + 1;
        end
        new_args[arg] = value;
    end
    
    return new_args;
end

return str