/// <summary> /// Parses the specified template text. /// </summary> /// <param name="templateText">The template text.</param> private void Parse(string templateText) { //var filePath = Path.GetFullPath(Path.Combine(templateCodePath, TemplateFileName)); var tokeniser = new Tokeniser(TemplateFileName, templateText); AddCode(tokeniser.Location, ""); bool skip = false; while ((skip || tokeniser.Advance()) && tokeniser.State != State.EOF) { skip = false; switch (tokeniser.State) { case State.Block: if (!String.IsNullOrEmpty(tokeniser.Value)) AddDoTemplateCode(tokeniser.Location, tokeniser.Value); break; case State.Content: if (!String.IsNullOrEmpty(tokeniser.Value)) AddContent(tokeniser.Location, tokeniser.Value); break; case State.Expression: if (!String.IsNullOrEmpty(tokeniser.Value)) AddExpression(tokeniser.Location, tokeniser.Value); break; case State.Helper: _isTemplateClassCode = true; if (!String.IsNullOrEmpty(tokeniser.Value)) AddDoTemplateClassCode(tokeniser.Location, tokeniser.Value); break; case State.Directive: Directive directive = null; string attName = null; while (!skip && tokeniser.Advance()) { switch (tokeniser.State) { case State.DirectiveName: if (directive == null) directive = new Directive {Name = tokeniser.Value.ToLower()}; else attName = tokeniser.Value; break; case State.DirectiveValue: if (attName != null && directive != null) directive.Attributes.Add(attName.ToLower(), tokeniser.Value); attName = null; break; case State.Directive: //if (directive != null) // directive.EndLocation = tokeniser.TagEndLocation; break; default: skip = true; break; } } if (directive != null) { if (directive.Name == "include") { string includeFile = directive.Attributes["file"]; if (OnInclude == null) throw new InvalidOperationException("Include file found. OnInclude event must be implemented"); var includeArgs = new TemplateIncludeArgs() {IncludeName = includeFile}; OnInclude(this, includeArgs); Parse(includeArgs.Text ?? ""); } _directives.Add(directive); } break; default: throw new InvalidOperationException(); } } }
/// <summary> /// Parses the specified template text. /// </summary> /// <param name="templateText">The template text.</param> private void Parse(string templateText) { //var filePath = Path.GetFullPath(Path.Combine(templateCodePath, TemplateFileName)); var tokeniser = new Tokeniser(TemplateFileName, templateText); AddCode(tokeniser.Location, ""); bool skip = false; while ((skip || tokeniser.Advance()) && tokeniser.State != State.EOF) { skip = false; switch (tokeniser.State) { case State.Block: if (!String.IsNullOrEmpty(tokeniser.Value)) { AddDoTemplateCode(tokeniser.Location, tokeniser.Value); } break; case State.Content: if (!String.IsNullOrEmpty(tokeniser.Value)) { AddContent(tokeniser.Location, tokeniser.Value); } break; case State.Expression: if (!String.IsNullOrEmpty(tokeniser.Value)) { AddExpression(tokeniser.Location, tokeniser.Value); } break; case State.Helper: _isTemplateClassCode = true; if (!String.IsNullOrEmpty(tokeniser.Value)) { AddDoTemplateClassCode(tokeniser.Location, tokeniser.Value); } break; case State.Directive: Directive directive = null; string attName = null; while (!skip && tokeniser.Advance()) { switch (tokeniser.State) { case State.DirectiveName: if (directive == null) { directive = new Directive { Name = tokeniser.Value.ToLower() } } ; else { attName = tokeniser.Value; } break; case State.DirectiveValue: if (attName != null && directive != null) { directive.Attributes.Add(attName.ToLower(), tokeniser.Value); } attName = null; break; case State.Directive: //if (directive != null) // directive.EndLocation = tokeniser.TagEndLocation; break; default: skip = true; break; } } if (directive != null) { if (directive.Name == "include") { string includeFile = directive.Attributes["file"]; if (OnInclude == null) { throw new InvalidOperationException("Include file found. OnInclude event must be implemented"); } var includeArgs = new TemplateIncludeArgs() { IncludeName = includeFile }; OnInclude(this, includeArgs); Parse(includeArgs.Text ?? ""); } _directives.Add(directive); } break; default: throw new InvalidOperationException(); } } }