private static TemplateParam ParseTemplVarRefParam(TemplateParam paramType, string strname, ref int pos) { StringBuilder varrefstr = new StringBuilder(); TemplateParam leafType = paramType.GetLeafType(); bool isGuid = leafType is TagTemplParam && ((TagTemplParam)leafType).Tag.ToString() == "_GUID"; int dollarPos = -1; int beforeDollarLen = 0; int state = 0; for (; pos < strname.Length; pos++) { char ch = strname[pos]; switch (state) { case 0: if (ch == '$') { if (isGuid) { dollarPos = pos; beforeDollarLen = varrefstr.Length; varrefstr.Append('_'); state = 1; } else { return(new ImmTemplParam(varrefstr.ToString())); } } else { varrefstr.Append(ch); } break; case 1: if (ch == '$') { return(new ImmTemplParam(varrefstr.ToString())); } else if (!char.IsLetter(ch) || !char.IsUpper(ch)) { pos = dollarPos; varrefstr.Length = dollarPos; return(new ImmTemplParam(varrefstr.ToString())); } else { varrefstr.Append(ch); } break; } } throw new ApplicationException("Unexpected end of string while parsing variable reference in template parameters"); }
public override TemplateParam GetLeafType() { return(InternalType.GetLeafType()); }
private static TemplateParam ParseTemplVarRefParam(TemplateParam paramType, string strname, ref int pos) { StringBuilder varrefstr = new StringBuilder(); TemplateParam leafType = paramType.GetLeafType(); bool isGuid = leafType is TagTemplParam && ((TagTemplParam)leafType).Tag.ToString() == "_GUID"; int dollarPos = -1; int beforeDollarLen = 0; int state = 0; for (; pos < strname.Length; pos++) { char ch = strname[pos]; switch (state) { case 0: if (ch == '$') { if (isGuid) { dollarPos = pos; beforeDollarLen = varrefstr.Length; varrefstr.Append('_'); state = 1; } else { return new ImmTemplParam(varrefstr.ToString()); } } else { varrefstr.Append(ch); } break; case 1: if (ch == '$') { return new ImmTemplParam(varrefstr.ToString()); } else if (!char.IsLetter(ch) || !char.IsUpper(ch)) { pos = dollarPos; varrefstr.Length = dollarPos; return new ImmTemplParam(varrefstr.ToString()); } else { varrefstr.Append(ch); } break; } } throw new ApplicationException("Unexpected end of string while parsing variable reference in template parameters"); }