Difference between revisions of "Module:SortName"

From blackwiki
Jump to navigation Jump to search
blackwiki>Bility
m (adding title support)
blackwiki>Bility
m (ocd formatting)
Line 12: Line 12:
 
         pagetitle = string.gsub( string.gsub( string.gsub( pagetitle, '%b()', '' ), ' +', ' '), ' $', '' )
 
         pagetitle = string.gsub( string.gsub( string.gsub( pagetitle, '%b()', '' ), ' +', ' '), ' $', '' )
 
         if string.find( pagetitle, '^List of ' ) ~= nil then
 
         if string.find( pagetitle, '^List of ' ) ~= nil then
             pagetitle =langvar:ucfirst( string.gsub( pagetitle, '^List of ', '', 1 ) )
+
             pagetitle = langvar:ucfirst( string.gsub( pagetitle, '^List of ', '', 1 ) )
 
         else
 
         else
 
             pagetitle = string.gsub( pagetitle, ',.*$', '' )
 
             pagetitle = string.gsub( pagetitle, ',.*$', '' )
Line 21: Line 21:
 
                     text2 = string.sub( pagetitle, 0, string.find( pagetitle, ' ' .. parts[i] .. ' ' ) )
 
                     text2 = string.sub( pagetitle, 0, string.find( pagetitle, ' ' .. parts[i] .. ' ' ) )
 
                     pagetitle = text1 .. ', ' .. text2
 
                     pagetitle = text1 .. ', ' .. text2
                  partmatch = true
+
                    partmatch = true
 
                     break
 
                     break
 
                 end
 
                 end

Revision as of 15:28, 10 April 2013

Module:SortName (edit | talk | history | links | watch | logs)

This module returns a string in a format suitable as a category sortkey, per WP:NAMESORT.

Input

The module accepts a string as the first and only unnamed parameter, but is meant to be used with no parameter, in which case the title of the calling page is used.

Usage

This module should be subst'd for use in template parameters that accept a sortkey or in the {{DEFAULTSORT}} variable.

  • No input (sorts the pages title): {{subst:#invoke:SortName|sortname}}
  • With input: {{subst:#invoke:SortName|sortname|input string}}

local p = {}
 
function p.sortname(frame)
    local currentpage = mw.title.getCurrentTitle()
    local pagetitle = frame.args[1] or currentpage.text
    local langvar = mw.language.getContentLanguage()
    local text1 = ''
    local text2 = ''
    local parts = { 'de','De','von','Von','du','Du','del','Del','zu','Zu','di','Di','van','Van','na','Na' }
    local partmatch = false
    if string.find( pagetitle, ' ' ) ~= nil then
        pagetitle = string.gsub( string.gsub( string.gsub( pagetitle, '%b()', '' ), ' +', ' '), ' $', '' )
        if string.find( pagetitle, '^List of ' ) ~= nil then
            pagetitle = langvar:ucfirst( string.gsub( pagetitle, '^List of ', '', 1 ) )
        else
            pagetitle = string.gsub( pagetitle, ',.*$', '' )
            pagetitle = string.gsub( pagetitle, ' of .*$', '' )
            for i in ipairs( parts ) do
                if string.find( pagetitle, ' ' .. parts[i] .. ' ' ) ~= nil then
                    text1 = string.sub( pagetitle, string.find( pagetitle, ' ' .. parts[i] .. ' ' ) + 1, #pagetitle )
                    text2 = string.sub( pagetitle, 0, string.find( pagetitle, ' ' .. parts[i] .. ' ' ) )
                    pagetitle = text1 .. ', ' .. text2
                    partmatch = true
                    break
                end
            end
            if not partmatch and string.find( pagetitle, ' ' ) ~= nil then
                text1 = string.sub( pagetitle, string.find( pagetitle, ' [^ ]*$' ) + 1, #pagetitle )
                text2 = string.sub( pagetitle, 0, string.find( pagetitle, ' [^ ]*$' ) )
                pagetitle = text1 .. ', ' .. text2
            end
        end
    end
    return pagetitle
end
 
return p