/// <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; }
/// <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; }
public LavaTagStartParser(LavaTagFormatSpecifier format, bool skipWhiteSpace = false) { _skipWhiteSpace = skipWhiteSpace; _firstTagChar = '{'; if (format == LavaTagFormatSpecifier.LavaShortcode) { _secondTagChar = '['; } else { _secondTagChar = '%'; } _format = format; }
public LavaTagEndParser(LavaTagFormatSpecifier format, bool skipWhiteSpace = false) { _skipWhiteSpace = skipWhiteSpace; _format = format; if (_format == LavaTagFormatSpecifier.LavaShortcode) { _firstTagChar = ']'; } else { _firstTagChar = '%'; } _secondTagChar = '}'; }
internal FluidLavaTagStatement(string tagName, LavaTagFormatSpecifier tagFormat, in TextSpan attributesMarkup)
public static Parser <LavaTagResult> LavaTagWithAttributes(string tagName, LavaTagFormatSpecifier format) { return(new LavaTagWithAttributesParser(tagName, format)); }
public LavaTagWithAttributesParser(string tagName, LavaTagFormatSpecifier format) { _tagName = tagName; _tagFormat = format; }
public LavaBlockContentParser(string tagName, LavaTagFormatSpecifier format) { _tagName = tagName; _tagFormat = format; }
internal FluidLavaBlockStatement(LavaFluidParser parser, string tagName, LavaTagFormatSpecifier tagFormat, in TextSpan attributesMarkup, in TextSpan blockContent)
public LavaTagResult(TagResult result, TextSpan text, LavaTagFormatSpecifier format) { TagResult = result; Text = text; }