Module:Ilh

local ilh = {} local getArgs local yesno = require('Module:Yesno') local lan = require('Module:Lan') local langData = mw.loadData( 'Module:Ilh/data' )

--local frameArgs local COMMON_TAIL=' ' local MODEL={ frame_head='' ,frame_tail=COMMON_TAIL ,page_head=' ' ,page_tail=COMMON_TAIL ,comment_head=' （' ,comment_tail='）'..COMMON_TAIL ,lang_head=' ' ,lang_tail=COMMON_TAIL ,colon=' ： ' ,link_head=' ' ,link_body='-{ %s }-' ,link_tail=COMMON_TAIL } local clazz_pageExist_framehead='ilh-blue' local TRA_CAT=''

function ilh.main(frame) if not getArgs then getArgs = require('Module:Arguments').getArgs end local args = getArgs(frame) if langData[args['lang-code']] == nil then args['lang'] = mw.language.fetchLanguageName( args['lang-code'], mw.getContentLanguage:getCode ) elseif langData[args['lang-code']]['lang-hans'] and langData[args['lang-code']]['lang-hans'] then args['lang'] = lan._main({['zh-hans']=langData[args['lang-code']]['lang-hans'], ['zh-hant']=langData[args['lang-code']]['lang-hant']}, frame) elseif langData[args['lang-code']]['lang'] == nil then args['lang'] = mw.language.fetchLanguageName( args['lang-code'], mw.getContentLanguage:getCode ) else args['lang'] = langData[args['lang-code']]['lang'] end

return ilh._ilh(args) end

function ilh._ilh(args) --frameArgs = getArgs(frame, {frameOnly=true})

local context={} context["isMainPage"]=ilh.isMainPage context["localPage"]=args[1] context["foreignPage"]=args[2] or args[1] --如果不传入的话 context["displayName"]=args["d"] or args[1] context["langCode"]=args["lang-code"] context["lang"]=args["lang"] context["nocat"]=yesno( args["nocat"], false )

context["isExist"]= (args["$exist$"] and args["$exist$"]==1) or ilh.isExist(context["localPage"]) local curPage_obj=mw.title.getCurrentTitle context["isNoCatWithNamespace"]=curPage_obj:inNamespaces(2,828) --User,Module --context["curPageNamespace"]=curPage_obj.namespace

return (context["isMainPage"] and ilh.onlyLink(context)) or ilh.functionLink(context) end

function ilh.onlyLink(context) return ( context["isExist"] and mw.ustring.format( '%s', context["localPage"], context["displayName"] ) ) or context["displayName"] end

function ilh.functionLink(context) context["_localPage"]=mw.ustring.gsub(context["localPage"],'"','&quot;')	context["_foreignPage"]=mw.ustring.gsub(context["foreignPage"],'"','&quot;') local need_cat= (not context["nocat"]) and (not context["isNoCatWithNamespace"]) --not (					  context["curPageNamespace"]==2 --User					or context["curPageNamespace"]==828 --Module				   ) --mw.log(context["nocat"]) --mw.log(context["curPageNamespace"]) --mw.log(need_cat)

local output_context={} table.insert(output_context,					mw.ustring.format(MODEL.frame_head , (context["isExist"] and clazz_pageExist_framehead) or '' ,context["_localPage"] ,context["langCode"] ,context["lang"] ,context["_foreignPage"] )				)		table.insert(output_context,MODEL.page_head) table.insert(output_context,							mw.ustring.format('%s' , context["localPage"],context["displayName"] )						)		table.insert(output_context,MODEL.page_tail) if context["isExist"] then if need_cat then table.insert(output_context,TRA_CAT) end else table.insert(output_context,MODEL.comment_head) table.insert(output_context,MODEL.lang_head) table.insert(output_context,context["lang"]) table.insert(output_context,MODEL.lang_tail)

table.insert(output_context,MODEL.colon)

table.insert(output_context,MODEL.link_head) table.insert(output_context,									mw.ustring.format(MODEL.link_body, context["langCode"] ,(context["foreignPage"] or context["localPage"]) ,context["langCode"] ,(context["foreignPage"] or context["localPage"]) )								)				table.insert(output_context,MODEL.link_tail) table.insert(output_context,MODEL.comment_tail) end table.insert(output_context,MODEL.frame_tail)

return table.concat(output_context,"") end

--以下需要更高效的实现

--确定主页 --使用mw信息获得主页名 --使用language库获得本站默认语言代码（zh）来确定信息的对应语言，获得全主页名 ---因为其他zh分语言只有名，没有命名空间，可以识别出来，但麻烦 --然后判断当前页和主页是否一致 ---计划做重定向判断，但没需要 function ilh.isMainPage local mainpage_msgobj=mw.message.new('Mainpage') mainpage_msgobj=mainpage_msgobj:inLanguage(mw.getContentLanguage:getCode) local mainPage_obj=mw.title.makeTitle(0,mainpage_msgobj:plain) local curpage_obj=mw.title.getCurrentTitle --local curpage_redirectFrom_obj=curpage_obj.redirectTarget --if curpage_redirectFrom_obj ~=false then		curpage_obj=curpage_redirectFrom_obj	end return mw.title.equals(mainPage_obj,curpage_obj) --and curpage_obj.namespace==4 end

--确定页面存在 ---exists是高开销方法，需要更高效的实现 --带保护的包装方法 --由于exists和解析器函数ifexist都是高开销方法 --而ifexist达到限制时默认返回结果为false的操作 --而exists会直接抛出错误而中断执行 --所以将相应调用包裹，压制exists的抛错，按照ifexist的理念，返回false --正常情况下则一切正常 function ilh.isExist(pageName) local execStatus,result=pcall(ilh._isExist,pageName) if execStatus then return result else return false end end --真实方法 function ilh._isExist(pageName) local localPage_obj=mw.title.makeTitle(0,pageName) return localPage_obj.exists end --end

return ilh