public virtual CompiledTemplate DefineTemplate(string fullyQualifiedTemplateName,
IToken nameT,
List<FormalArgument> args,
string template,
IToken templateToken)
{
if (Verbose)
Console.WriteLine(string.Format("DefineTemplate({0})", fullyQualifiedTemplateName));
if (fullyQualifiedTemplateName == null)
throw new ArgumentNullException("fullyQualifiedTemplateName");
if (fullyQualifiedTemplateName.Length == 0)
throw new ArgumentException("empty template name", "fullyQualifiedTemplateName");
if (fullyQualifiedTemplateName.IndexOf('.') >= 0)
throw new ArgumentException("cannot have '.' in template names", "fullyQualifiedTemplateName");
if (fullyQualifiedTemplateName[0] != '/')
throw new ArgumentException("Expected a fully qualified template name.", "fullyQualifiedTemplateName");
template = Utility.TrimOneStartingNewline(template);
template = Utility.TrimOneTrailingNewline(template);
// compile, passing in templateName as enclosing name for any embedded regions
CompiledTemplate code = Compile(FileName, fullyQualifiedTemplateName, args, template, templateToken);
code.Name = fullyQualifiedTemplateName;
RawDefineTemplate(fullyQualifiedTemplateName, code, nameT);
code.DefineArgumentDefaultValueTemplates(this);
code.DefineImplicitlyDefinedTemplates(this); // define any anonymous subtemplates
return code;
}