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 积分,解读结果公开显示在下面。

还没有人解读过这个文件。