|
|
Line 1: |
Line 1: |
− | --
| + | This [[Has type::text]] property lists the Traditional Chinese name of something. |
− | -- implements {{Autolink}} and {{Unlink}}
| |
− | --
| |
| | | |
− | local p = {}
| + | [[Category:Name properties]] |
− | local ustring = mw.ustring
| |
− | local text = mw.text
| |
− | | |
− | function p.link( frame )
| |
− | local args = frame:getParent().args
| |
− | -- for testing from console
| |
− | -- local args = frame
| |
− | -- marker used for {{nolink}} support (doesn't have to be a zero-width non-joiner, that's just what was used in the template version)
| |
− | local zwnj = '‌'
| |
− | local linkarr, links, listmarkup, el, link, txt, formatl, formatr
| |
− | | |
− | -- set default to stop errors
| |
− | links = args[1] and text.trim( args[1] ) or ''
| |
− | | |
− | if ustring.find( links, zwnj ) ~= 1 then
| |
− | linkarr = text.split( links, '\n' )
| |
− | | |
− | args[2] = #linkarr == 1 and args[2]
| |
− | | |
− | listmarkup = #linkarr == 1 and ''
| |
− | | |
− | for i=1, #linkarr do
| |
− | el = text.trim( linkarr[i] )
| |
− | | |
− | -- catch empty string at the start of lists
| |
− | if not ustring.match( el, '^[*#;:]?$' ) then
| |
− | if listmarkup ~= '' then
| |
− | listmarkup = ( ustring.match( el, '^([*#;:])' ) or '*' ) .. ' '
| |
− | el = ustring.gsub( el, '^[*#;:]%s*', '' )
| |
− | end
| |
− | | |
− | if ustring.find( el, zwnj ) or ustring.find( el, '%[%[' ) then
| |
− | linkarr[i] = table.concat( { listmarkup, el }, '' )
| |
− | else
| |
− | link = el
| |
− | txt = args[2] or el
| |
− | formatl = ''
| |
− | formatr = ''
| |
− | | |
− | link = ustring.gsub( ustring.gsub( link, "'''?", '' ), '""', '' )
| |
− | | |
− | -- check for formatting that can be moved out of the link entirely
| |
− | if ustring.find( txt, '^""' ) and ustring.find( txt, '""$' ) then
| |
− | formatl = '"'
| |
− | formatr = '"'
| |
− | txt = ustring.gsub( txt, '""', '' )
| |
− | else
| |
− | txt = ustring.gsub( txt, '""', '"' )
| |
− | end
| |
− | if ustring.find( txt, "^'''" ) and ustring.find( txt, "'''$" ) then
| |
− | formatl = formatl .. "'''"
| |
− | formatr = "'''" .. formatr
| |
− | txt = ustring.gsub( ustring.gsub( txt, "^'''", '' ), "'''$", '' )
| |
− | end
| |
− | if ustring.find( txt, "^''" ) and ustring.find( txt, "''$" ) then
| |
− | formatl = formatl .. "''"
| |
− | formatr = "''" .. formatr
| |
− | txt = ustring.gsub( ustring.gsub( txt, "^''", '' ), "''$", '' )
| |
− | end
| |
− | | |
− | if link == txt then
| |
− | linkarr[i] = table.concat( { listmarkup, formatl, '[[', link, ']]', formatr }, '' )
| |
− | else
| |
− | linkarr[i] = table.concat( { listmarkup, formatl, '[[', link, '|', txt, ']]', formatr }, '' )
| |
− | end
| |
− | end
| |
− | end
| |
− | end
| |
− | | |
− | links = table.concat( linkarr, '\n' )
| |
− | end
| |
− | | |
− | links = text.trim( ustring.gsub( ustring.gsub( ustring.gsub( ustring.gsub( links, zwnj, '' ), '%[%[[Cc]ategory:', '[[:Category:' ), '%[%[[Ff]ile:', '[[:File:' ), '%[%[[Ii]mage:', '[[:File:' ) )
| |
− | return links
| |
− | end
| |
− | | |
− | function p.unlink( frame )
| |
− | local args = frame:getParent().args
| |
− | return args[1] and ( ustring.match( args[1], '%[%[:?(.-)[|%]]' ) or text.trim( args[1] ) )
| |
− | end
| |
− | | |
− | return p
| |