public virtual string Merge(Parameters p) { TemplateParser parser = new TemplateParser(p); parser.SetTemplate(this.src); return parser.Parse(); }
/// <summary> /// Parse all blocks in template /// </summary> private void ParseBlocks() { //int idxPrevious = 0; int idxCurrent = 0; while ((idxCurrent = this._strTemplateBlock.IndexOf(this.BlockTagBeginBegin, idxCurrent)) != -1) { string BlockName; int idxBlockBeginBegin, idxBlockBeginEnd, idxBlockEndBegin; idxBlockBeginBegin = idxCurrent; idxCurrent += this.BlockTagBeginBegin.Length; // Searching for BlockBeginEnd Index idxBlockBeginEnd = this._strTemplateBlock.IndexOf(this.BlockTagBeginEnd, idxCurrent); if (idxBlockBeginEnd == -1) throw new Exception("Could not find BlockTagBeginEnd"); // Getting Block Name BlockName = this._strTemplateBlock.Substring(idxCurrent, (idxBlockBeginEnd - idxCurrent)); idxCurrent = idxBlockBeginEnd + this.BlockTagBeginEnd.Length; // Getting End of Block index string EndBlockStatment = this.BlockTagEndBegin + BlockName + this.BlockTagEndEnd; idxBlockEndBegin = this._strTemplateBlock.IndexOf(EndBlockStatment, idxCurrent); if (idxBlockEndBegin == -1) throw new Exception("Could not find End of Block with name '" + BlockName + "'"); // Add Block to Dictionary TemplateParser block = new TemplateParser(); block.TemplateBlock = this._strTemplateBlock.Substring(idxCurrent, (idxBlockEndBegin - idxCurrent)); this._Blocks.Add(BlockName, block); // Remove Block Declaration From Template this._strTemplateBlock = this._strTemplateBlock.Remove(idxBlockBeginBegin, (idxBlockEndBegin - idxBlockBeginBegin)); idxCurrent = idxBlockBeginBegin; } }