예제 #1
0
        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");
        }
예제 #2
0
 public override TemplateParam GetLeafType()
 {
     return(InternalType.GetLeafType());
 }
예제 #3
0
 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");
 }