src/SSCMS.Core/Services/ParseManager.StlElementParser.cs
(开头部分) 11KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SSCMS.Core.Context;
using SSCMS.Core.StlParser.StlElement;
using SSCMS.Core.StlParser.Utility;
using SSCMS.Plugins;
using SSCMS.Services;
using SSCMS.Utils;
namespace SSCMS.Core.Services
{
public partial class ParseManager
{
/// <summary>
/// 将原始内容中的STL元素替换为实际内容
/// </summary>
public async Task ReplaceStlElementsAsync(StringBuilder parsedBuilder)
{
var templateContent = parsedBuilder.ToString();
var stlElements = ParseUtils.GetStlElements(templateContent);
var index = 0;
foreach (var stlElement in stlElements)
{
try
{
var startIndex = parsedBuilder.ToString().IndexOf(stlElement, StringComparison.Ordinal);
if (startIndex == -1) continue;
var elementIndex = templateContent.Substring(index).IndexOf(stlElement, StringComparison.Ordinal);
var parsedContent = await ParseStlElementAsync(stlElement, index + elementIndex);
parsedBuilder.Replace(stlElement, parsedContent, startIndex, stlElement.Length);
index += stlElement.Length + elementIndex;
}
catch
{
// ignored
}
}
}
public Dictionary<string, Func<IParseManager, Task<object>>> ElementsToParseDic => new Dictionary<string, Func<IParseManager, Task<object>>>
{
{StringUtils.ToLower(StlA.ElementName), StlA.ParseAsync},
{StringUtils.ToLower(StlAction.ElementName), StlAction.ParseAsync},
{StringUtils.ToLower(StlAudio.ElementName), StlAudio.ParseAsync},
{StringUtils.ToLower(StlChannel.ElementName), StlChannel.ParseAsync},
{StringUtils.ToLower(StlChannels.ElementName), StlChannels.ParseAsync},
{StringUtils.ToLower(StlContainer.ElementName), StlContainer.ParseAsync},
{StringUtils.ToLower(StlContent.ElementName), StlContent.ParseAsync},
{StringUtils.ToLower(StlContents.ElementName), StlContents.ParseAsync},
{StringUtils.ToLower(StlCount.ElementName), StlCount.ParseAsync},
{StringUtils.ToLower(StlDynamic.ElementName), StlDynamic.ParseAsync},
{StringUtils.ToLower(StlEach.ElementName), StlEach.ParseAsync},
{StringUtils.ToLower(StlEditable.ElementName), StlEditable.ParseAsync},
{StringUtils.ToLower(StlFile.ElementName), StlFile.ParseAsync},
{StringUtils.ToLower(StlFocusViewer.ElementName), StlFocusViewer.ParseAsync},
后面还有 172 行代码,解锁后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明
AI 解读
登录后可用,每次 10 积分,解读结果公开显示在下面。
还没有人解读过这个文件。
