Jump to content

Module:ApplyLinkAnnotations

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by N8wilson (talk | contribs) at 12:55, 12 June 2021 (migrate to mw.ustring). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

local p = {};

function p.replaceLinksInUnorderedList(markup)
  -- provided for convenience to make console testing easier for development
  --
  -- matches any wikilinks that are
  --    1. at the beginning of a list item 
  --    2. with no existing annotation (or any text) following them
  --
  -- must run twice because match utilizes the newlines on *both* sides
  -- of wikilinks and thus, "consumes" those chars during the first match
  -- such that every-other line is ineligible for matching until the second 
  -- run. (which does the same thing but for all the other lines)

  -- Test case(s?):
  -- =p.replaceLinksInUnorderedList("\n*[[TEst|teST]] \n* [[name]]\n*[[link]] - with existing annotation\n* [[for|a friend]]  \n*[[t]]\n")

  local anls, cnt1, cnt2

  anls, cnt1 = mw.ustring.gsub(markup, "\n%*%s?%[%[([^%]:]*)%]%]%s*\n", "\n* {{Annotated link |%1}}\n")
  anls, cnt2 = mw.ustring.gsub(anls,   "\n%*%s?%[%[([^%]:]*)%]%]%s*\n", "\n* {{Annotated link |%1}}\n")

  mw.log("Replaced " .. cnt1+cnt2 .. " links without existing annotations")

  return anls
end

function p.bySubstitutionInUnorderedList(frame)
  return p.replaceLinksInUnorderedList(frame.args[1])
end

return p