Module:D'ni Tools: Difference between revisions

From Guild of Archivists
mNo edit summary
No edit summary
Line 65: Line 65:




local function parseDniString(input)
local function parseDniWord(input)


     local output = ''
     local output = ''
Line 72: Line 72:
     local first = mw.ustring.sub(word,1,1)
     local first = mw.ustring.sub(word,1,1)
     local last = mw.ustring.sub(word,-1,-1)
     local last = mw.ustring.sub(word,-1,-1)
    local prefix = ''
    local suffix = ''
    if (word == mw.title.rootText) then
        prefix = '\'\'\''
        suffix = prefix
    end


     if (word == '') then
     if (word == '') then
Line 80: Line 87:
         output = first
         output = first
     elseif (first == '-') then
     elseif (first == '-') then
         output = '[[Dictionary:'..word..'|'..mw.ustring.sub(word,2,-1)..']]'
         output = prefix..'[[Dictionary:'..word..'|'..mw.ustring.sub(word,2,-1)..']]'..suffix
     elseif (last == '-') then
     elseif (last == '-') then
         output = '[[Dictionary:'..word..'|'..mw.ustring.sub(word,1,-2)..']]'
         output = prefix..'[[Dictionary:'..word..'|'..mw.ustring.sub(word,1,-2)..']]'..suffix
     elseif (first == '.' or first == '!' or first == '?' or first == ',') then
     elseif (first == '.' or first == '!' or first == '?' or first == ',') then
         output = first..'[[Dictionary:'..mw.ustring.sub(word,2,-1)..'|'..mw.ustring.sub(word,2,-1)..']]'
         output = first..prefix..'[[Dictionary:'..mw.ustring.sub(word,2,-1)..'|'..mw.ustring.sub(word,2,-1)..']]'..suffix
     elseif (last == ',') then
     elseif (last == ',') then
         output = '[[Dictionary:'..mw.ustring.sub(word,1,-2)..'|'..mw.ustring.sub(word,1,-2)..']]'..last
         output = prefix..'[[Dictionary:'..mw.ustring.sub(word,1,-2)..'|'..mw.ustring.sub(word,1,-2)..']]'..suffix..last
     else
     else
         output = '[[Dictionary:'..word..'|'..word..']]'
         output = prefix..'[[Dictionary:'..word..'|'..word..']]'..suffix
     end
     end


     return output
     return output
Line 104: Line 112:


     for word in ipairs(origArgs) do
     for word in ipairs(origArgs) do
         output = output..parseDniString(origArgs[word])
         output = output..parseDniWord(origArgs[word])
     end
     end



Revision as of 00:31, 25 July 2016

Documentation for this module may be created at Module:D'ni Tools/doc

--
-- This implements several useful functions for dealing with D'ni text in the Wiki.
--
-- parsed_dni() returns a string in which every component is linked to its appropriate Dictionary namespace entry.
-- dnifont2ots() converts a Dnifont string to an ots one
-- dnifont2nts() converts a Dnifont string to an nts one

local p = {}

local args = {}
local origArgs

local output = ''

-- Local Functions

local function dnifont2ots(str)

    local output = mw.text.trim(str)
    
    output = mw.ustring.gsub(str,"%S",  {["S"] = "sh", 
                                 ["T"] = "th", 
                                 ["O"] = "oy", 
                                 ["c"] = "ch", 
                                 ["a"] = "ah", 
                                 ["E"] = "ee", 
                                 ["A"] = "ay", 
                                 ["u"] = "uh",
                                 ["U"] = "oo",
                                 ["x"] = "ts",
                                 ["d"] = "dh",
                                 ["D"] = "d",
                                 ["k"] = "kh",
                                 ["K"] = "k",
                                 ["I"] = "ai",
                                 ["å"] = "a",
                                })

     return output
end
 
local function dnifont2nts(str)

    local output = mw.text.trim(str)
    
    output = mw.ustring.gsub(str,"%S",  {["S"] = "š", 
                                 ["T"] = "þ", 
                                 ["O"] = "ó", 
                                 ["c"] = "ç", 
                                 ["E"] = "i", 
                                 ["A"] = "é", 
                                 ["U"] = "ú",
                                 ["x"] = "c",
                                 ["d"] = "ð",
                                 ["D"] = "d",
                                 ["k"] = "x",
                                 ["K"] = "k",
                                 ["I"] = "á",
                                 ["å"] = "æ",
                                })

     return output
end



local function parseDniWord(input)

    local output = ''

    local word = mw.text.trim(input)
    local first = mw.ustring.sub(word,1,1)
    local last = mw.ustring.sub(word,-1,-1)
    local prefix = ''
    local suffix = ''

    if (word == mw.title.rootText) then
         prefix = '\'\'\''
         suffix = prefix
    end 

    if (word == '') then
        output = ' '
    elseif (word == ' ') then
        output = ' '
    elseif (word == '.' or word == '?' or word == '!' or word == ',') then
        output = first
    elseif (first == '-') then
        output = prefix..'[[Dictionary:'..word..'|'..mw.ustring.sub(word,2,-1)..']]'..suffix
    elseif (last == '-') then
        output = prefix..'[[Dictionary:'..word..'|'..mw.ustring.sub(word,1,-2)..']]'..suffix
    elseif (first == '.' or first == '!' or first == '?' or first == ',') then
        output = first..prefix..'[[Dictionary:'..mw.ustring.sub(word,2,-1)..'|'..mw.ustring.sub(word,2,-1)..']]'..suffix
    elseif (last == ',') then
        output = prefix..'[[Dictionary:'..mw.ustring.sub(word,1,-2)..'|'..mw.ustring.sub(word,1,-2)..']]'..suffix..last
    else
        output = prefix..'[[Dictionary:'..word..'|'..word..']]'..suffix
    end


    return output
end

function p.parsed_dni(frame)
    -- If called via #invoke, use the args passed into the invoking template.
    -- Otherwise, for testing purposes, assume args are being passed directly in.
    if frame == mw.getCurrentFrame() then
        origArgs = frame:getParent().args
    else
        origArgs = frame
    end

    for word in ipairs(origArgs) do
        output = output..parseDniWord(origArgs[word])
    end

    return output
end

function p.dnifont2ots(frame)
    -- If called via #invoke, use the args passed into the invoking template.
    -- Otherwise, for testing purposes, assume args are being passed directly in.
    if frame == mw.getCurrentFrame() then
        origArgs = frame:getParent().args
    else
        origArgs = frame
    end

    preprocessSingleArg(1)

    return dnifont2ots(args[1])
end

function p.dnifont2nts(frame)
    -- If called via #invoke, use the args passed into the invoking template.
    -- Otherwise, for testing purposes, assume args are being passed directly in.
    if frame == mw.getCurrentFrame() then
        origArgs = frame:getParent().args
    else
        origArgs = frame
    end

    preprocessSingleArg(1)

    return dnifont2nts(args[1])
end



return p