模块:Dictionary/Vocabulary.lua:修订间差异

来自「荏苒之境」
Sicusa移动页面模块:Dictionary-Section.lua模块:Dictionary-Vocabulary.lua,不留重定向
无编辑摘要
第7行: 第7行:
local HEADERS = dict_views.HEADERS
local HEADERS = dict_views.HEADERS
local HEADER_TEXTS = dict_views.HEADER_TEXTS
local HEADER_TEXTS = dict_views.HEADER_TEXTS
local ALL_FIELDS = table.concat(HEADERS, ",")
local ALL_FIELDS = table.concat(HEADERS, ",")..",Priority"


local section = {}
local section = {}
第15行: 第15行:
     local language = args.language
     local language = args.language
     local format = args.format
     local format = args.format
    local priority = args.priority
     local content = args.content
     local content = args.content


第29行: 第30行:


     for i = 1, #rows do
     for i = 1, #rows do
         local entry = { Language = language }
         local entry = {
        Language = language,
        Priority = priority
        }
         local row = rows[i]
         local row = rows[i]
          
          
         local conflict
         local ignore_store
         local query_res = cargo.query(DICT_TABLE, ALL_FIELDS, {
         local query_res = cargo.query(DICT_TABLE, ALL_FIELDS, {
             where = string.format([[Language="%s" AND Spelling="%s"]], language, row[1])
             where = string.format([[Language="%s" AND Spelling="%s" AND Priority>=%d]], language, row[1], priority)
         })
         })
         if #query_res ~= 0 then
         if #query_res ~= 0 then
             local r = query_res[1]
             local r = query_res[1]
             for j = 1, #row do
             if r.Priority > priority then
                if r[HEADERS[j]] ~= row[j] then
            ignore_store = true
                    table.insert(conflicting_rows, r)
            else
                    conflict = true
            for j = 1, #row do
                    break
                if r[HEADERS[j]] ~= row[j] then
                end
                    table.insert(conflicting_rows, r)
                    ignore_store = true
                    break
                end
            end
             end
             end
         end
         end
          
          
         if not conflict then
         if not ignore_store then
        for j = 1, #HEADERS do
        for j = 1, #HEADERS do
            entry[HEADERS[j]] = row[j]
            entry[HEADERS[j]] = row[j]

2025年8月2日 (六) 06:38的版本

此模块的文档可以在模块:Dictionary/Vocabulary.lua/doc创建

local csv = require("Module:Csv.lua")
local html = mw.html
local cargo = mw.ext.cargo

local dict_views = require("Module:Dictionary-Views.lua")
local DICT_TABLE = dict_views.TABLE
local HEADERS = dict_views.HEADERS
local HEADER_TEXTS = dict_views.HEADER_TEXTS
local ALL_FIELDS = table.concat(HEADERS, ",")..",Priority"

local section = {}

section.show = function(frame)
    local args = frame.args
    local language = args.language
    local format = args.format
    local priority = args.priority
    local content = args.content

    local rows

    if format == "csv" then
        rows = csv.parse(ALL_FIELDS.."\n"..content, true)
    else
        mw.addWarning("无效的词典格式:"..tostring(format))
        return
    end
    
    local conflicting_rows = {}

    for i = 1, #rows do
        local entry = {
        	Language = language,
        	Priority = priority
        }
        local row = rows[i]
        
        local ignore_store
        local query_res = cargo.query(DICT_TABLE, ALL_FIELDS, {
            where = string.format([[Language="%s" AND Spelling="%s" AND Priority>=%d]], language, row[1], priority)
        })
        if #query_res ~= 0 then
            local r = query_res[1]
            if r.Priority > priority then
            	ignore_store = true
            else
            	for j = 1, #row do
	                if r[HEADERS[j]] ~= row[j] then
	                    table.insert(conflicting_rows, r)
	                    ignore_store = true
	                    break
	                end
            	end
            end
        end
        
        if not ignore_store then
	        for j = 1, #HEADERS do
	            entry[HEADERS[j]] = row[j]
	        end
	        cargo.store(DICT_TABLE, entry)
	    end
    end

    local view = html.create("div")
    if #conflicting_rows ~= 0 then
        view:tag("pre")
        	:css("color", "red")
        	:tag("p")
        		:wikitext("检测到以下词汇之前已经录入,且与当前词汇表中的内容不一致,请统一词汇信息:")
            	:done()
        	:node(dict_views.vocabulary(conflicting_rows))
    end
    if frame.args.show_view == "true" then
        view:node(dict_views.vocabulary(rows))
    end
    return view
end

return section