Ejemplo n.º 1
0
        private static void ParseDocsFlush(
            IDocs docs,
            ref DocsState state,
            StringBuilder sb,
            string paramName,
            ParamModifier paramModifier)
        {
            switch (state)
            {
            case DocsState.BriefDescription:
                docs.BriefDescription = sb.ToString();
                break;

            case DocsState.Description:
                docs.Description = sb.ToString();
                break;

            case DocsState.Param:
                docs.SetParamDescription(paramName, sb.ToString());
                docs.SetParamModifier(paramName, paramModifier);
                break;

            case DocsState.Remarks:
                docs.Remarks = sb.ToString();
                break;

            case DocsState.Return:
                docs.ReturnDescription = sb.ToString();
                break;
            }

            if (state == DocsState.BriefDescription)
            {
                state = DocsState.Description;
            }
            else
            {
                state = DocsState.None;
            }

            sb.Clear();
        }
Ejemplo n.º 2
0
        private static void ParseDocs(string[] lines, int i, IDocs docs)
        {
            while (!lines[i].StartsWith("/*!"))
            {
                i--;
            }

            DocsState     state         = DocsState.None;
            StringBuilder sb            = new StringBuilder(1024);
            string        paramName     = string.Empty;
            ParamModifier paramModifier = ParamModifier.None;

            while (true)
            {
                bool finished = false;

                string trimmedLine = null;

                if (lines[i].Length >= 4)
                {
                    trimmedLine = lines[i].Substring(4);
                }
                else
                {
                    trimmedLine = string.Empty;
                }

                if (trimmedLine.StartsWith("@brief"))
                {
                    state = DocsState.BriefDescription;
                    sb.AppendLine(trimmedLine.Substring("@brief ".Length));
                }
                else if (trimmedLine.StartsWith("@ingroup"))
                {
                    docs.Group = trimmedLine.Substring("@ingroup ".Length).Trim();
                }
                else if (trimmedLine.StartsWith("@param"))
                {
                    ParseDocsFlush(docs, ref state, sb, paramName, paramModifier);

                    state         = DocsState.Param;
                    paramModifier = ParamModifier.None;

                    trimmedLine = trimmedLine.Substring("@param".Length);

                    if (trimmedLine.StartsWith("[in]"))
                    {
                        paramModifier = ParamModifier.In;
                        trimmedLine   = trimmedLine.Substring("[in]".Length);
                    }
                    else if (trimmedLine.StartsWith("[out]"))
                    {
                        paramModifier = ParamModifier.Out;
                        trimmedLine   = trimmedLine.Substring("[out]".Length);
                    }

                    trimmedLine = trimmedLine.Substring(1);

                    int index = trimmedLine.IndexOf(' ');
                    paramName = trimmedLine.Substring(0, index);

                    sb.AppendLine(trimmedLine.Substring(index + 1));
                }
                else if (trimmedLine.StartsWith("@remarks"))
                {
                    state = DocsState.Remarks;
                    sb.AppendLine(trimmedLine.Substring("@remarks ".Length));
                }
                else if (trimmedLine.StartsWith("@return"))
                {
                    ParseDocsFlush(docs, ref state, sb, paramName, paramModifier);
                    state = DocsState.Return;
                    sb.AppendLine(trimmedLine.Substring("@return ".Length));
                }
                else if (lines[i].StartsWith(" */"))
                {
                    ParseDocsFlush(docs, ref state, sb, paramName, paramModifier);
                    finished = true;
                }
                else if (trimmedLine == string.Empty || trimmedLine.StartsWith("@"))
                {
                    ParseDocsFlush(docs, ref state, sb, paramName, paramModifier);
                }
                else
                {
                    sb.AppendLine(trimmedLine);
                }

                if (finished)
                {
                    break;
                }

                i++;
            }
        }