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(); }
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++; } }