Module:HTMLParse: Difference between revisions

1,082 bytes added ,  01:17, 5 January 2021
m
no edit summary
(create module for general HTML parsing. Begin with a "pluralize" function that can be used in Favilink)
 
mNo edit summary
 
(20 intermediate revisions by 2 users not shown)
Line 1: Line 1:
local p = {}
local p = {}
local conjugate = require'Module:Grammar/Conjugate'


function p.pluralize(frame)
function p.pluralize(frame, apostrophe)
     local htmlString = frame.args[1]
    apostrophe = apostrophe or ''
     prefix, postfix = s:match'(.*%a)(</.*)'  --split string at the last alphabetic character that appears immediately before a closing html tag </...>
     local htmlString = frame.args.html
    if string.find(htmlString, "{") then
        htmlString = frame:preprocess(htmlString)  --expand any templates that may have been passed to this module
    end
     prefix, postfix = htmlString:match'(.*%a)(</.*)'  --split string at the last alphabetic character that appears immediately before a closing html tag </...>
     if (prefix == nil or prefix == '' or postfix == nil or postfix == '') then
     if (prefix == nil or prefix == '' or postfix == nil or postfix == '') then
         return htmlString  --return unmodified string (couldn't find alpha character followed by closing HTML tag)
         return htmlString  --return unmodified string (couldn't find alpha character followed by closing HTML tag)
    elseif (string.sub(prefix, -1) == 's') then
        return htmlString  --return unmodified (ends with 's', like 'boots', so we shouldn't append another 's')
     else
     else
        return (prefix .. 's' .. postfix)
      return (conjugate.pluralize(prefix, apostrophe) .. postfix)
    end
end
 
function p.make_possessive(frame)
    return p.pluralize(frame, "'")
end
 
function p.capitalize(frame)
local htmlString = frame.args.html
    if string.find(htmlString, "{") then
        htmlString = frame:preprocess(htmlString)   --expand any templates that may have been passed to this module
     end
     end
    --split string at the first alphabetic character that appears immediately after a starting html tag <...>
    prefix = htmlString:match'([^/]*>)' or ''
    if (prefix == nil or prefix == '') then
    return conjugate.capitalize(htmlString)
    else
    _, a = htmlString:find'([^/]*>)'
    postfix = htmlString:sub(a + 1) or ''
    mw.log('prefix: ' .. prefix)
    mw.log('postfix: ' .. postfix)
    return (prefix .. conjugate.capitalize(postfix))
    end
end
function p.strip_formatting(frame)
    local htmlString = frame.args.html
    htmlString = frame:preprocess(htmlString)
    return (htmlString:gsub("<[^>]->", ""))
end
end


return p
return p