未登录
中文(简体)
创建账号
登录
搜索
查看“模块:SVG Data URL”的源代码
来自东方活动维基
命名空间
模块
讨论
更多
更多
页面操作
阅读
查看源代码
历史
←
模块:SVG Data URL
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您必须确认您的电子邮件地址才能编辑页面。请通过
参数设置
设置并确认您的电子邮件地址。
您可以查看和复制此页面的源代码。
local p = {} local function formSvg(svg) assert(mw.ustring.match(svg, '^<svg[%s>]'), 'svg参数填写错误') --[[ 缩短长度 ]] local SUBSTITUTE = { {'%s+', ' '}, -- 如 <path ... /> -> <path .../> {' ?(</?) ?', '%1'}, {' ?(/?>) ?', '%1'}, -- 如 <path ...></path> -> <path .../> -- ([:%a_][:%w_%-%.]*) - tag name: https://www.w3.org/TR/REC-xml/#NT-Name -- ([^<>]*) - attributes {'<([:%a_][:%w_-.]*)([^<>]*)></%1>', '<%1%2/>'}, } for _i, v in ipairs(SUBSTITUTE) do svg = mw.ustring.gsub(svg, v[1], v[2]) end -- 添加xmlns if not mw.ustring.match(svg, 'xmlns') then svg = '<svg xmlns="http://www.w3.org/2000/svg"' .. string.sub(svg, 5) end return svg end local function formImg(src, attrs) attrs.alt = attrs.alt or 'SVG' attrs.src = src attrs.tagname = "img" local frame = mw.getCurrentFrame() return frame:extensionTag("htmltag", "", attrs) end --[[ -- 该函数借鉴了Taylor Hunt的https://github.com/tigt/mini-svg-data-uri --]] function p.toDataUrl(str) local PATTERN = { -- strip marker格式: -- \127'"`UNIQ--标签-8个16进制数-QINU`"'\127 -- 匹配(用PCRE格式表示,看得清楚些): -- \127'"`UNIQ--(.+?-.+?)-QINU`"'\127 stripMarker = '%%7F%%27%%22%%60UNIQ%-%-(.-%-.-)%-QINU%%60%%22%%27%%7F', hexEncode = '%%%x%x', } local ACCEPTABLE = { -- ['%22'] = "'", -- 把编码后"换成未编码的' -- ['%27'] = '%22', -- 把编码后'换成编码后的" ['%28'] = '(', ['%29'] = ')', ['%2C'] = ',', ['%2F'] = '/', ['%3A'] = ':', ['%3D'] = '=', } str = mw.uri.encode(str, 'PATH') -- 恢复strip marker str = string.gsub(str, PATTERN.stripMarker, '\127\'"`UNIQ--%1-QINU`"\'\127') -- 替换部分编码回原字符,减小文件体积 -- str = string.gsub(str, PATTERN.hexEncode, ACCEPTABLE) return "data:image/svg+xml," .. str end function p._main(args) local allArgs = {} for k, v in pairs(args) do allArgs[string.lower(k)] = v end local svg = formSvg(allArgs.svg) local NOT_IMG_ATTR = { 'svg', -- 并非用于<img> 'src', 'srcset', 'sizes' -- 不由用户指定 } for _i, attr in ipairs(NOT_IMG_ATTR) do allArgs[attr] = nil end return formImg(p.toDataUrl(svg), allArgs) -- return p.toDataUrl(svg) end function p.main(frame) local parent = frame:getParent() if parent and parent:getTitle() == 'Template:Svg' then frame = parent end return p._main(frame.args) end return p
本页使用的模板:
模板:FromOtherWiki
(
查看源代码
)
模板:Namespace detect
(
查看源代码
)
模板:Svg
(
查看源代码
)
模板:WikiLink
(
查看源代码
)
模块:SVG Data URL/doc
(
查看源代码
)
返回
模块:SVG Data URL
。
导航
导航
首页
最近更改
文件列表
留言板
活动日程
活动日历
分类索引
活动QQ群组一览
各地区线下活动
帮助
沙盒
规划
编辑规范
创建页面
页面生成器
使用方法与帮助
Wiki页面
相关站点
THBWiki
东方市场
莉莉云下载站
绯想天则指南
上海爱丽丝幻乐团
wiki工具
wiki工具
特殊页面
页面工具
页面工具
用户页面工具
更多
链入页面
相关更改
页面信息
页面日志