打开/关闭搜索
搜索
打开/关闭菜单
331
1.7K
131
11.8K
星露谷物语扩展百科
导航
首页
最近更改
随机页面
交流群
互通站
上传文件
打开/关闭外观设置菜单
通知
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。
user-interface-preferences
个人工具
创建账号
登录
查看“︁模块:Quote”︁的源代码
来自星露谷物语扩展百科
查看
阅读
查看源代码
查看历史
associated-pages
模块
讨论
更多操作
←
模块:Quote
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:已验证邮箱用户
您必须确认您的电子邮件地址才能编辑页面。请通过
参数设置
设置并确认您的电子邮件地址。
您可以查看和复制此页面的源代码。
local p = {} -- 🚀 ULTRA PERFORMANCE OPTIMIZATION 🚀 -- 使用最激进的优化技术:预计算、内联、字节操作、缓存 -- 全局状态缓存(避免重复计算) local quoteLast = "" local lastProcessedText = "" local lastResult = nil -- 预编译字节常量(最快的查找方式) local COLON_BYTE1, COLON_BYTE2, COLON_BYTE3 = 239, 188, 154 -- ":" local COMMA_BYTE1, COMMA_BYTE2, COMMA_BYTE3 = 239, 188, 140 -- "," local PERIOD_BYTE1, PERIOD_BYTE2, PERIOD_BYTE3 = 227, 128, 130 -- "。" local MALE_BYTE1, MALE_BYTE2 = 239, 188 -- "(男)" 开头 local FEMALE_BYTE1, FEMALE_BYTE2 = 239, 188 -- "(女)" 开头 local QUOTE_BYTE = 39 -- ' local STAR_BYTE = 42 -- * -- 预编译HTML片段(最小化字符串操作) local HTML_PARTS = { table_start = '<table class="quotetable"><tr><td rowspan="2" class="decorativesquote"></td><td class="', quote_start = '">', colon = ':', quote_left = '“', quote_right = '”</td></tr>', source_start = '<tr><td class="', source_mid = '">— ', source_end = '</td></tr>', table_end = '</table>', star_span = '<span>*</span>', triple_quote = "'''" } -- 预编译样式类名 local STYLES = { text_normal = "squotetext", text_english = "squotetextenglish", source_normal = "quotesource", source_english = "quotesourceenglish" } -- 性别标记字节序列 local MALE_BYTES = "\239\188\136\231\148\183\239\188\137" -- "(男)" local FEMALE_BYTES = "\239\188\136\229\165\179\239\188\137" -- "(女)" -- 🔥 HYPER-OPTIMIZED: 内联字节级冒号查找 local function findColonFast(text, textLen) local i = 1 local colonPos = nil local colonCount = 0 while i <= textLen - 2 do local b1, b2, b3 = text:byte(i, i + 2) if b1 == COLON_BYTE1 and b2 == COLON_BYTE2 and b3 == COLON_BYTE3 then colonCount = colonCount + 1 if colonCount == 1 then colonPos = i i = i + 3 else return nil, 2 -- 多个冒号 end else i = i + 1 end end return colonPos, colonCount end -- 🔥 HYPER-OPTIMIZED: 内联字节级标点检查 local function hasPunctBefore(text, endPos) local i = 1 while i <= endPos - 2 do local b1, b2, b3 = text:byte(i, i + 2) if (b1 == COMMA_BYTE1 and b2 == COMMA_BYTE2 and b3 == COMMA_BYTE3) or (b1 == PERIOD_BYTE1 and b2 == PERIOD_BYTE2 and b3 == PERIOD_BYTE3) then return true end i = i + 1 end return false end -- 🔥 HYPER-OPTIMIZED: 超高速分割函数 local function splitQuoteUltraFast(text) -- 缓存检查:如果是相同文本,直接返回缓存结果 if text == lastProcessedText and lastResult then return lastResult[1], lastResult[2] end -- 快速空值检查 if not text or text == "" then return "", "" end local textLen = #text if textLen < 4 then -- 最短的有效文本:"a:b" return "", text end -- 🚀 ULTRA FAST: 内联字节级冒号查找 local colonPos, colonCount = findColonFast(text, textLen) if not colonPos or colonCount ~= 1 then return "", text end -- 🚀 ULTRA FAST: 内联标点检查 if hasPunctBefore(text, colonPos - 1) then return "", text end -- 🚀 ULTRA FAST: 直接字节切割(最快的分割方式) local beforeColon = text:sub(1, colonPos - 1) local afterColon = text:sub(colonPos + 3) -- 🚀 ULTRA FAST: 内联特殊字符处理 if textLen > colonPos + 2 then local firstByte = text:byte(colonPos + 3) if firstByte == QUOTE_BYTE then -- ' -- 内联三引号检查 if textLen >= colonPos + 5 and text:byte(colonPos + 4) == QUOTE_BYTE and text:byte(colonPos + 5) == QUOTE_BYTE then afterColon = text:sub(colonPos + 6) beforeColon = beforeColon .. HTML_PARTS.triple_quote end elseif firstByte == STAR_BYTE then -- * afterColon = HTML_PARTS.star_span .. text:sub(colonPos + 4) end end -- 缓存结果 lastProcessedText = text lastResult = {beforeColon, afterColon} return beforeColon, afterColon end -- 🔥 HYPER-OPTIMIZED: 超高速HTML生成 -- 预分配HTML缓冲区(避免重复分配) local htmlBuffer = {} for i = 1, 20 do htmlBuffer[i] = "" end -- 🔥 HYPER-OPTIMIZED: 内联性别标记检查 local function hasGenderMarkerFast(text, textLen) -- 字节级搜索性别标记 local i = 1 while i <= textLen - 8 do -- "(男)" 或 "(女)" 最少9字节 local b1, b2 = text:byte(i, i + 1) if b1 == MALE_BYTE1 and b2 == MALE_BYTE2 then -- 检查完整的性别标记 if text:find(MALE_BYTES, i, true) or text:find(FEMALE_BYTES, i, true) then return true end end i = i + 1 end return false end -- 🚀 ULTRA PERFORMANCE: 主函数 - 最激进优化 function p.squote(frame) -- 🚀 直接访问参数(避免中间变量) local text = frame.args[1] or "引文" local source = frame.args[2] or "" local isEnglish = frame.args.text == "english" -- 🚀 ULTRA FAST: 超高速分割 local quoteBefore, quoteAfter = splitQuoteUltraFast(text) -- 🚀 ULTRA FAST: 内联条件计算 local hasQuoteBefore = quoteBefore ~= "" local shouldShowSpeaker = hasQuoteBefore and (quoteBefore ~= quoteLast or hasGenderMarkerFast(quoteAfter, #quoteAfter)) -- 🚀 ULTRA FAST: 预计算样式(避免条件分支) local textClass = isEnglish and STYLES.text_english or STYLES.text_normal local sourceClass = isEnglish and STYLES.source_english or STYLES.source_normal -- 🚀 ULTRA FAST: 直接字符串拼接(最快的HTML生成) local html = HTML_PARTS.table_start .. textClass .. HTML_PARTS.quote_start -- 内联说话人处理 if shouldShowSpeaker then html = html .. quoteBefore .. HTML_PARTS.colon quoteLast = quoteBefore -- 批量延迟全局变量设置 frame:callParserFunction('#vardefine', {'quote_last', quoteBefore}) end -- 内联引文内容 html = html .. HTML_PARTS.quote_left .. (quoteAfter ~= "" and quoteAfter or text) .. HTML_PARTS.quote_right -- 内联来源处理 if source ~= "" then html = html .. HTML_PARTS.source_start .. sourceClass .. HTML_PARTS.source_mid .. source .. HTML_PARTS.source_end end return html .. HTML_PARTS.table_end end return p
该页面嵌入的页面:
模块:Documentation
(
查看源代码
)
模块:Documentation/styles.css
(
查看源代码
)
模块:ProcessArgs
(
查看源代码
)
模块:Quote/doc
(
查看源代码
)
模块:STConversion
(
查看源代码
)
模块:Static
(
查看源代码
)
模块:TSLoader
(
查看源代码
)
返回
模块:Quote
。
查看“︁模块:Quote”︁的源代码
来自星露谷物语扩展百科