本网站正在建设中(~ ̄▽ ̄)~

  • 你好~!欢迎来到中文歌声合成个人收集站-VCPedia.cn!
  • 若发现页面信息有误投稿至本站,请联系管理员。

Module:CollectCodeData

VCPedia.cn ——关于中文歌声合成的一切。
跳到导航 跳到搜索
Template-info.svg 模块文档  [创建] [刷新]
  1. local module = {}
  2. local getArgs = require('Module:Arguments').getArgs
  3. local getCode = require('Module:GetPageCode')
  4. local array = require('Module:Var-array')
  5. function _main(args, frame)
  6. local pages = mw.text.split(args['pages'] or args[1] or '', ',')
  7. if #pages == 1 and pages[1] == '' then error('必须传入至少一个页面名!') end
  8. local ptns = args['ptns'] or args[2]
  9. local filter = array.get(args['filter']) or {}
  10. if ptns == nil then error('必须传入正则表达式!') end
  11. local split = args['split'] or args[3] or ','
  12. if string.find(ptns, '^/.+/$') then
  13. ptns = { (string.gsub(ptns, '^/(.+)/$', '%1')) }
  14. else
  15. ptns = array.get(ptns)
  16. end
  17. local contents = ''
  18. for i, v in ipairs(pages) do
  19. local content = getCode(v)
  20. if content == nil then
  21. error('页面【'..v..'】或它所指向的页面未创建或无效!')
  22. end
  23. contents = contents..content
  24. end
  25. local result = {}
  26. for i, v in ipairs(ptns) do
  27. mw.ustring.gsub(contents, v, function(...)
  28. local ss = { ... }
  29. for i, v in ipairs(ss) do
  30. result[#result + 1] = v
  31. end
  32. end)
  33. end
  34. if type(filter[1]) == 'string' then
  35. for i, v in ipairs(result) do
  36. result[i] = mw.ustring.gsub(v, filter[1], filter[2] or '')
  37. end
  38. else
  39. for i, ptn in ipairs(filter) do
  40. for ind, val in ipairs(result) do
  41. result[ind] = mw.ustring.gsub(val, ptn[1], ptn[2] or '')
  42. end
  43. end
  44. end
  45. local resultStr = ''
  46. for i, v in ipairs(result) do
  47. resultStr = resultStr..v..split
  48. end
  49. split = string.gsub(split, '([%%%(%)%.%+%-%*%?%[%]%^%$])', '%%%1')
  50. return (string.gsub(resultStr, '^(.+)'..split..'$', '%1'))
  51. end
  52. function module.main(frame)
  53. local args = getArgs(frame)
  54. return _main(args, frame)
  55. end
  56. return module