本站页面(多半)转载自
萌娘百科
的同名页面,依CC BY-NC-SA 3.0引入,贡献者可以在历史页查询。
因各种原因页面内容可能和源页面有所出入,
非本站特有页面内容请以萌娘百科为准
。此外,因萌百的api限制,本站部分页面和图片同步自
另一个镜像站
。
置顶公告:
【置顶】关于临时开启评论区所有功能的公告(2022.10.22)
|
【置顶】关于本站Widget恢复使用的公告
你好~!欢迎来到萌娘百科镜像站!
如需查看或编辑,请联系本站管理员注册账号。
本镜像站和其他萌娘百科的镜像站
无关
,请注意分别。
查看“Module:SVG Data URL”的源代码
←
Module: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' local parts = {'<img srcset="', src, '"'} for k, v in pairs(attrs) do table.insert(parts, string.format(' %s="%s"', k, v)) end table.insert(parts, ">") return table.concat(parts) 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) 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
本页使用的模板:
Template:Documentation
(
查看源代码
)(仅允许管理员和巡查姬)
Template:Navbar
(
查看源代码
)
Template:Navbox
(
查看源代码
)
Template:Svg
(
查看源代码
)
Template:Tl
(
查看源代码
)
Template:·
(
查看源代码
)
Template:图像模板
(
查看源代码
)
Module:SVG Data URL
(
查看源代码
)
Module:SVG Data URL/doc
(
查看源代码
)
返回
Module:SVG Data URL
。
导航菜单
个人工具
登录
命名空间
模块
讨论
English
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
随机页面
最近更改
最新文件
萌娘原味图裤
讨论版
帮助
帮助
沙盒
Wiki入门
萌百编辑教程
编辑规范
萌娘百科政策
创建新条目
请求创建条目
常见问题集
分类索引
作品
人物
组织
概念用语
设定
软件
活动
工具
链入页面
相关更改
特殊页面
页面信息