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

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

Module:Lyrics

VCPedia.cn ——关于中文歌声合成的一切。
跳到导航 跳到搜索
Template-info.svg 模块文档  [创建] [刷新]
  1. local p = {}
  2. local getArgs = require('Module:Arguments').getArgs
  3. local lang = require('Module:Lang')
  4. function p._lyrics(args, hookTrigger, customArgs)
  5. local original = args.original or ''
  6. local translated = args.translated or ''
  7. if hookTrigger then
  8. original, translated = hookTrigger('preSplit', original, translated, customArgs)
  9. end
  10. --mw.text.split的效率太低啦,我愿称之为shit
  11. local orig = {}
  12. local iter = mw.ustring.gmatch(original..'\n', '([^\n]*)\n')
  13. for val in iter do
  14. table.insert(orig, val)
  15. end
  16. local tran = {}
  17. local iter = mw.ustring.gmatch(translated..'\n', '([^\n]*)\n')
  18. for val in iter do
  19. table.insert(tran, val)
  20. end
  21. local llang = args.llang or 'ja'
  22. local rlang = args.rlang or 'zh'
  23. local lstyle = args.lstyle or ''
  24. local rstyle = args.rstyle or ''
  25. local html = mw.html.create('div')
  26. :addClass('Lyrics')
  27. :css('width', args.width)
  28. :cssText(args.containerstyle or '')
  29. if ((args['hasRuby'] or '') ~= '') or (not args.colorsMode and (args.original or ''):find('<ruby')) then
  30. html:addClass('Lyrics-has-ruby')
  31. else
  32. html:addClass('Lyrics-no-ruby')
  33. end
  34. local hastran = true
  35. if #tran == 1 and tran[1] == '' then
  36. hastran = false
  37. else
  38. html:addClass('Lyrics-has-translate')
  39. end
  40. if hookTrigger then
  41. hookTrigger('preParse', orig, hastran and tran or false, customArgs)
  42. end
  43. local lines = {}
  44. local len = math.max(#orig, #tran)
  45. for i=1, len do
  46. local line = mw.html.create('div'):addClass('Lyrics-line')
  47. :tag('div')
  48. :addClass('Lyrics-original')
  49. :cssText(lstyle)
  50. :node(lang.wrap(orig[i] or '', llang))
  51. :done()
  52. if hastran then
  53. line:tag('div')
  54. :addClass('Lyrics-translated')
  55. :cssText(rstyle)
  56. :node(lang.wrap(tran[i] or '', rlang))
  57. :done()
  58. end
  59. table.insert(lines, tostring(line))
  60. end
  61. if hookTrigger then
  62. hookTrigger('postParse', lines, customArgs)
  63. end
  64. html:node(table.concat(lines))
  65. -- Clear the floating
  66. html:tag('div'):cssText('clear:both')
  67. html = tostring(html)
  68. if hookTrigger then
  69. html = hookTrigger('preOutput', html, customArgs)
  70. end
  71. local copyright = ''
  72. local frame = mw.getCurrentFrame()
  73. local LDC = frame:callParserFunction{ name = '#var', args = { 'LDC', '0' } }
  74. if LDC ~= '1' and args.override ~= '1' then
  75. copyright = '<small>本段落中所使用的歌词,其著作权属于' .. (args.author or '原著作权人') .. ',仅以介绍为目的引用。</small>'
  76. elseif LDC == '1' and args.override == '1' then
  77. copyright = frame:expandTemplate{ title = 'ac', args = { '不必要使用override参数的音乐条目' } }
  78. end
  79. local css = frame:extensionTag{ name = 'templatestyles', args = { src = 'Template:LyricsKai/styles.css' } }
  80. return copyright .. css .. html
  81. end
  82. function p.lyrics(frame)
  83. local args = getArgs(frame, {wrappers='Template:LyricsKai'})
  84. return p._lyrics(args)
  85. end
  86. return p