示例#1
0
        /// <summary>
        /// Register a Lava Block with the Fluid Parser.
        /// </summary>
        /// <param name="tagName"></param>
        public void RegisterLavaBlock(string tagName, LavaTagFormatSpecifier format = LavaTagFormatSpecifier.LiquidTag)
        {
            // Create a parser for the Lava block that does the following:
            // 1. Captures any optional attributes that are contained in the open tag.
            // 2. Creates a new Statement that will execute when the block is rendered. The Statement captures the block content
            //    as literal text, so that it can be scanned and tokenized by the Lava library before being passed back to Fluid
            //    for final rendering.
            // 3. Throw an exception if the Block is malformed.
            Parser <LavaTagResult> tokenEndParser;

            var    registerTagName = tagName;
            string errorMessage;

            if (format == LavaTagFormatSpecifier.LavaShortcode)
            {
                tokenEndParser = LavaTagParsers.LavaShortcodeEnd();
                tagName        = tagName.Substring(0, tagName.Length - "_".Length);
                errorMessage   = $"Invalid '{{[ {tagName} ]}}' shortcode block";
            }
            else
            {
                tokenEndParser = LavaTokenEnd;
                errorMessage   = $"Invalid '{{% {tagName} %}}' block";
            }

            var lavaBlock = AnyCharBefore(tokenEndParser, canBeEmpty: true)
                            .AndSkip(tokenEndParser)
                            .And(new LavaTagParsers.LavaBlockContentParser(tagName, format))
                            .Then <Statement>(x => new FluidLavaBlockStatement(this, tagName, format, x.Item1, x.Item2))
                            .ElseError(errorMessage);

            RegisteredTags[registerTagName] = lavaBlock;
        }
示例#2
0
        /// <summary>
        /// Register a Lava Tag with the Fluid Parser.
        /// </summary>
        /// <param name="tagName"></param>
        public void RegisterLavaTag(string tagName, LavaTagFormatSpecifier format = LavaTagFormatSpecifier.LiquidTag)
        {
            // Create a parser for the Lava tag that does the following:
            // 1. Processes all of the content from the end of the open tag until the end of the closing tag.
            // 2. Captures any optional attributes that are contained in the open tag.
            // 3. Create a new Statement that will execute when the tag is rendered.
            // 4. Throw an exception if the Tag is malformed.
            Parser <LavaTagResult> tokenEndParser;

            var    registerTagName = tagName;
            string errorMessage;

            if (format == LavaTagFormatSpecifier.LavaShortcode)
            {
                tokenEndParser = LavaTagParsers.LavaShortcodeEnd();
                tagName        = tagName.Substring(0, tagName.Length - "_".Length);
                errorMessage   = $"Invalid '{{[ {tagName} ]}}' shortcode tag";
            }
            else
            {
                tokenEndParser = LavaTokenEnd;
                errorMessage   = $"Invalid '{{% {tagName} %}}' tag";
            }

            var lavaTag = AnyCharBefore(tokenEndParser, canBeEmpty: true)
                          .AndSkip(tokenEndParser)
                          .Then <Statement>(x => new FluidLavaTagStatement(tagName, format, x))
                          .ElseError(errorMessage);

            this.RegisteredTags[registerTagName] = lavaTag;
        }
示例#3
0
            public LavaTagStartParser(LavaTagFormatSpecifier format, bool skipWhiteSpace = false)
            {
                _skipWhiteSpace = skipWhiteSpace;

                _firstTagChar = '{';

                if (format == LavaTagFormatSpecifier.LavaShortcode)
                {
                    _secondTagChar = '[';
                }
                else
                {
                    _secondTagChar = '%';
                }

                _format = format;
            }
示例#4
0
            public LavaTagEndParser(LavaTagFormatSpecifier format, bool skipWhiteSpace = false)
            {
                _skipWhiteSpace = skipWhiteSpace;

                _format = format;

                if (_format == LavaTagFormatSpecifier.LavaShortcode)
                {
                    _firstTagChar = ']';
                }
                else
                {
                    _firstTagChar = '%';
                }

                _secondTagChar = '}';
            }
示例#5
0
 internal FluidLavaTagStatement(string tagName, LavaTagFormatSpecifier tagFormat, in TextSpan attributesMarkup)
示例#6
0
 public static Parser <LavaTagResult> LavaTagWithAttributes(string tagName, LavaTagFormatSpecifier format)
 {
     return(new LavaTagWithAttributesParser(tagName, format));
 }
示例#7
0
 public LavaTagWithAttributesParser(string tagName, LavaTagFormatSpecifier format)
 {
     _tagName   = tagName;
     _tagFormat = format;
 }
示例#8
0
 public LavaBlockContentParser(string tagName, LavaTagFormatSpecifier format)
 {
     _tagName   = tagName;
     _tagFormat = format;
 }
 internal FluidLavaBlockStatement(LavaFluidParser parser, string tagName, LavaTagFormatSpecifier tagFormat, in TextSpan attributesMarkup, in TextSpan blockContent)
示例#10
0
 public LavaTagResult(TagResult result, TextSpan text, LavaTagFormatSpecifier format)
 {
     TagResult = result;
     Text      = text;
 }