This commit is contained in:
Zel
2025-02-23 18:47:21 +08:00
parent eaaffeeccb
commit e46a7ca31c
104 changed files with 2630 additions and 2516 deletions

View File

@@ -5,7 +5,7 @@ using ZelWiki.Engine.Library.Interfaces;
namespace ZelWiki.Engine.Implementation
{
/// <summary>
/// Handles processing-instruction function calls, these functions affect the way the page is processed, but are not directly replaced with text.
/// 处理处理指令函数调用,这些函数会影响页面的处理方式,但不会直接替换为文本.
/// </summary>
public class ProcessingInstructionFunctionHandler : IProcessingInstructionFunctionHandler
{
@@ -17,11 +17,11 @@ namespace ZelWiki.Engine.Implementation
{
if (_collection == null)
{
_collection = new FunctionPrototypeCollection(FunctionPrototypeCollection.WikiFunctionType.Instruction);
_collection =
new FunctionPrototypeCollection(FunctionPrototypeCollection.WikiFunctionType.Instruction);
#region Prototypes.
#region
//Processing instructions:
_collection.Add("@@Deprecate:");
_collection.Add("@@Protect:<bool>{isSilent}='false'");
_collection.Add("@@Tags: <string:infinite>[pageTags]");
@@ -42,163 +42,152 @@ namespace ZelWiki.Engine.Implementation
}
/// <summary>
/// Called to handle function calls when proper prototypes are matched.
/// 处理各种页面
/// </summary>
/// <param name="state">Reference to the wiki state object</param>
/// <param name="function">The parsed function call and all its parameters and their values.</param>
/// <param name="scopeBody">This is not a scope function, this should always be null</param>
/// <param name="state"></param>
/// <param name="function"></param>
/// <param name="scopeBody"></param>
/// <returns></returns>
public HandlerResult Handle(IZelEngineState state, FunctionCall function, string? scopeBody = null)
{
switch (function.Name.ToLower())
{
//We check wikifierSession.Factory.CurrentNestLevel here because we don't want to include the processing instructions on any parent pages that are injecting this one.
//------------------------------------------------------------------------------------------------------------------------------
//Associates tags with a page. These are saved with the page and can also be displayed.
case "tags": //##tag(pipe|separated|list|of|tags)
{
var tags = function.Parameters.GetList<string>("pageTags");
state.Tags.AddRange(tags);
state.Tags = state.Tags.Distinct().ToList();
return new HandlerResult(string.Empty)
{
var tags = function.Parameters.GetList<string>("pageTags");
state.Tags.AddRange(tags);
state.Tags = state.Tags.Distinct().ToList();
return new HandlerResult(string.Empty)
{
Instructions = [Constants.HandlerResultInstruction.TruncateTrailingLine]
};
}
//------------------------------------------------------------------------------------------------------------------------------
Instructions = [Constants.HandlerResultInstruction.TruncateTrailingLine]
};
}
case "title":
{
state.PageTitle = function.Parameters.Get<string>("pageTitle");
return new HandlerResult(string.Empty)
{
state.PageTitle = function.Parameters.Get<string>("pageTitle");
return new HandlerResult(string.Empty)
{
Instructions = [Constants.HandlerResultInstruction.TruncateTrailingLine]
};
}
//------------------------------------------------------------------------------------------------------------------------------
Instructions = [Constants.HandlerResultInstruction.TruncateTrailingLine]
};
}
case "hidefooterlastmodified":
{
state.ProcessingInstructions.Add(ZelWiki.Library.Constants.WikiInstruction.HideFooterLastModified);
return new HandlerResult(string.Empty)
{
state.ProcessingInstructions.Add(ZelWiki.Library.Constants.WikiInstruction.HideFooterLastModified);
return new HandlerResult(string.Empty)
{
Instructions = [Constants.HandlerResultInstruction.TruncateTrailingLine]
};
}
//------------------------------------------------------------------------------------------------------------------------------
Instructions = [Constants.HandlerResultInstruction.TruncateTrailingLine]
};
}
case "hidefootercomments":
{
state.ProcessingInstructions.Add(ZelWiki.Library.Constants.WikiInstruction.HideFooterComments);
return new HandlerResult(string.Empty)
{
state.ProcessingInstructions.Add(ZelWiki.Library.Constants.WikiInstruction.HideFooterComments);
return new HandlerResult(string.Empty)
{
Instructions = [Constants.HandlerResultInstruction.TruncateTrailingLine]
};
}
//------------------------------------------------------------------------------------------------------------------------------
Instructions = [Constants.HandlerResultInstruction.TruncateTrailingLine]
};
}
case "nocache":
{
state.ProcessingInstructions.Add(ZelWiki.Library.Constants.WikiInstruction.NoCache);
return new HandlerResult(string.Empty)
{
state.ProcessingInstructions.Add(ZelWiki.Library.Constants.WikiInstruction.NoCache);
return new HandlerResult(string.Empty)
{
Instructions = [Constants.HandlerResultInstruction.TruncateTrailingLine]
};
}
//------------------------------------------------------------------------------------------------------------------------------
Instructions = [Constants.HandlerResultInstruction.TruncateTrailingLine]
};
}
case "deprecate":
{
if (state.NestDepth == 0)
{
if (state.NestDepth == 0)
{
state.ProcessingInstructions.Add(ZelWiki.Library.Constants.WikiInstruction.Deprecate);
state.Headers.Add("<div class=\"alert alert-danger\">This page has been deprecated and will eventually be deleted.</div>");
}
return new HandlerResult(string.Empty)
{
Instructions = [Constants.HandlerResultInstruction.TruncateTrailingLine]
};
state.ProcessingInstructions.Add(ZelWiki.Library.Constants.WikiInstruction.Deprecate);
state.Headers.Add(
"<div class=\"alert alert-danger\">此页面已被弃用,最终将被删除.</div>");
}
//------------------------------------------------------------------------------------------------------------------------------
return new HandlerResult(string.Empty)
{
Instructions = [Constants.HandlerResultInstruction.TruncateTrailingLine]
};
}
case "protect":
{
if (state.NestDepth == 0)
{
if (state.NestDepth == 0)
bool isSilent = function.Parameters.Get<bool>("isSilent");
state.ProcessingInstructions.Add(ZelWiki.Library.Constants.WikiInstruction.Protect);
if (isSilent == false)
{
bool isSilent = function.Parameters.Get<bool>("isSilent");
state.ProcessingInstructions.Add(ZelWiki.Library.Constants.WikiInstruction.Protect);
if (isSilent == false)
{
state.Headers.Add("<div class=\"alert alert-info\">This page has been protected and can not be changed by non-moderators.</div>");
}
state.Headers.Add(
"<div class=\"alert alert-info\">此页面已受到保护,非版主无法更改.</div>");
}
return new HandlerResult(string.Empty)
{
Instructions = [Constants.HandlerResultInstruction.TruncateTrailingLine]
};
}
//------------------------------------------------------------------------------------------------------------------------------
return new HandlerResult(string.Empty)
{
Instructions = [Constants.HandlerResultInstruction.TruncateTrailingLine]
};
}
case "template":
{
if (state.NestDepth == 0)
{
if (state.NestDepth == 0)
{
state.ProcessingInstructions.Add(ZelWiki.Library.Constants.WikiInstruction.Template);
state.Headers.Add("<div class=\"alert alert-secondary\">This page is a template and will not appear in indexes or glossaries.</div>");
}
return new HandlerResult(string.Empty)
{
Instructions = [Constants.HandlerResultInstruction.TruncateTrailingLine]
};
state.ProcessingInstructions.Add(ZelWiki.Library.Constants.WikiInstruction.Template);
state.Headers.Add(
"<div class=\"alert alert-secondary\">此页面是一个模板,不会出现在索引或术语表中.</div>");
}
//------------------------------------------------------------------------------------------------------------------------------
return new HandlerResult(string.Empty)
{
Instructions = [Constants.HandlerResultInstruction.TruncateTrailingLine]
};
}
case "review":
{
if (state.NestDepth == 0)
{
if (state.NestDepth == 0)
{
state.ProcessingInstructions.Add(ZelWiki.Library.Constants.WikiInstruction.Review);
state.Headers.Add("<div class=\"alert alert-warning\">This page has been flagged for review, its content may be inaccurate.</div>");
}
return new HandlerResult(string.Empty)
{
Instructions = [Constants.HandlerResultInstruction.TruncateTrailingLine]
};
state.ProcessingInstructions.Add(ZelWiki.Library.Constants.WikiInstruction.Review);
state.Headers.Add(
"<div class=\"alert alert-warning\">此页面已被标记为待审核,其内容可能不准确.</div>");
}
//------------------------------------------------------------------------------------------------------------------------------
return new HandlerResult(string.Empty)
{
Instructions = [Constants.HandlerResultInstruction.TruncateTrailingLine]
};
}
case "include":
{
if (state.NestDepth == 0)
{
if (state.NestDepth == 0)
{
state.ProcessingInstructions.Add(ZelWiki.Library.Constants.WikiInstruction.Include);
state.Headers.Add("<div class=\"alert alert-secondary\">This page is an include and will not appear in indexes or glossaries.</div>");
}
return new HandlerResult(string.Empty)
{
Instructions = [Constants.HandlerResultInstruction.TruncateTrailingLine]
};
state.ProcessingInstructions.Add(ZelWiki.Library.Constants.WikiInstruction.Include);
state.Headers.Add(
"<div class=\"alert alert-secondary\">此页为包含页,不会出现在索引或术语表中.</div>");
}
//------------------------------------------------------------------------------------------------------------------------------
case "draft":
return new HandlerResult(string.Empty)
{
if (state.NestDepth == 0)
{
state.ProcessingInstructions.Add(ZelWiki.Library.Constants.WikiInstruction.Draft);
state.Headers.Add("<div class=\"alert alert-warning\">This page is a draft and may contain incorrect information and/or experimental styling.</div>");
}
return new HandlerResult(string.Empty)
{
Instructions = [Constants.HandlerResultInstruction.TruncateTrailingLine]
};
Instructions = [Constants.HandlerResultInstruction.TruncateTrailingLine]
};
}
case "draft":
{
if (state.NestDepth == 0)
{
state.ProcessingInstructions.Add(ZelWiki.Library.Constants.WikiInstruction.Draft);
state.Headers.Add(
"<div class=\"alert alert-warning\">本页为草稿,可能包含不正确的信息包括但不仅限于实验性样式.</div>");
}
return new HandlerResult(string.Empty)
{
Instructions = [Constants.HandlerResultInstruction.TruncateTrailingLine]
};
}
}
return new HandlerResult() { Instructions = [Constants.HandlerResultInstruction.Skip] };
}
}
}
}