示例#1
0
 protected override void OnSyntax(RichSyntaxData syntaxData)
 {
     if (syntaxData != null && syntaxData.IsValid())
     {
         var syntaxName = syntaxData.GetName();
         if (m_syntaxHandlers.ContainsKey(syntaxName))
         {
             m_syntaxHandlers[syntaxName](syntaxData);
         }
         else
         {
             Debug.LogError("[NGUIRichSyntaxParser]Can not handle syntax : " + syntaxName);
         }
     }
 }
        protected virtual int ParseSyntax(string config, int startIndex)
        {
            if (!IsSyntaxBeginChar(config[startIndex]))
            {
                Debug.LogError("[RichSyntaxParser]Unexpected syntax char expected : " + GetSyntaxBeginChar() + " current : " + config[startIndex] + " at index : " + startIndex);
                // return -1 as error occur
                return(-1);
            }

            RichSyntaxData data = new RichSyntaxData();

            int nextIndex = startIndex + 1;

            while (nextIndex < config.Length)
            {
                // first parse syntax name
                var nameStartIndex = nextIndex;
                nextIndex = ParseIdentity(config, nextIndex);
                var name = config.Substring(nameStartIndex, nextIndex - nameStartIndex);
                if (string.IsNullOrEmpty(name))
                {
                    Debug.LogError("[RichSyntaxParser]Unexpected syntax name at index " + nextIndex);
                    // return -1 as error occur
                    return(-1);
                }
                data.SetName(name.Trim(GetSyntaxTrimChar()));

                // then parse syntax params
                while (nextIndex < config.Length)
                {
                    if (IsSyntaxEndChar(config[nextIndex]))
                    {
                        break;
                    }
                    else
                    {
                        if (!IsSyntaxSeparatorChar(config[nextIndex]))
                        {
                            Debug.LogError("[RichSyntaxParser]Unexpected syntax char expected : " + GetSyntaxSeparatorChar() + " current : " + config[nextIndex] + " at index : " + nextIndex);
                            // return -1 as error occur
                            return(-1);
                        }
                        ++nextIndex;
                        var paramStartIndex = nextIndex;
                        nextIndex = ParseIdentity(config, nextIndex);
                        var paramName = config.Substring(paramStartIndex, nextIndex - paramStartIndex);
                        if (string.IsNullOrEmpty(paramName))
                        {
                            Debug.LogError("[RichSyntaxParser]Unexpected syntax param name at index " + paramStartIndex);
                            // return -1 as error occur
                            return(-1);
                        }
                        if (nextIndex >= config.Length || !IsSyntaxAssignChar(config[nextIndex]))
                        {
                            if (nextIndex < config.Length)
                            {
                                Debug.LogError("[RichSyntaxParser]Unexpected syntax char expected : " + GetSyntaxAssignChar() + " current : " + config[nextIndex] + " at index : " + nextIndex);
                            }
                            else
                            {
                                Debug.LogError("[RichSyntaxParser]Unexpected syntax char expected : " + GetSyntaxAssignChar() + " current is missing at the end of config string ...");
                            }
                            // return -1 as error occur
                            return(-1);
                        }
                        ++nextIndex;
                        paramStartIndex = nextIndex;
                        nextIndex       = ParseIdentity(config, nextIndex);
                        var paramValue = config.Substring(paramStartIndex, nextIndex - paramStartIndex);
                        if (string.IsNullOrEmpty(paramValue))
                        {
                            Debug.LogError("[RichSyntaxParser]Unexpected syntax param value at index " + paramStartIndex);
                            // return -1 as error occur
                            return(-1);
                        }
                        ;

                        data.AddParam(paramName.Trim(GetSyntaxTrimChar()), paramValue.Trim(GetSyntaxTrimChar()));
                    }
                }

                // check next index end char here
                if (nextIndex >= config.Length || !IsSyntaxEndChar(config[nextIndex]))
                {
                    if (nextIndex < config.Length)
                    {
                        Debug.LogError("[RichSyntaxParser]Unexpected syntax char expected : " + GetSyntaxEndChar() + " current : " + config[nextIndex] + " at index : " + nextIndex);
                    }
                    else
                    {
                        Debug.LogError("[RichSyntaxParser]Unexpected syntax char expected : " + GetSyntaxEndChar() + " current is missing at the end of the config string ...");
                    }
                    // return -1 as error occur
                    return(-1);
                }
                else
                {
                    ++nextIndex;
                    break;
                }
            }

            if (data.IsValid())
            {
                OnSyntax(data);
            }

            return(nextIndex);
        }