/// <summary> /// 初始化类<see cref="FileElement"/>。 /// </summary> /// <param name="source">文件代码。</param> public FileElement(string source) { using var reader = new SourceReader(source); reader.EscapeWhiteSpace(); while (reader.CanRead) { switch (reader.Current) { case 'u': //using { var keyword = reader.ReadUntil(); if (keyword == "using") { AddElement(new UsingElement(reader.ReadUntil(';').Trim(), this)); reader.Offset(); break; } throw new Exception($"不支持:{keyword}关键词!"); } case 'n': //namespace { var keyword = reader.ReadUntil(); if (keyword == "namespace") { var @namespace = new NamespaceElement(reader.ReadUntil('{').Trim(), this); @namespace.Init(reader); AddElement(@namespace); break; } throw new Exception($"不支持:{keyword}关键词!"); } case '/': { if (reader.IsNext("/*")) { AddElement(new CommentElement(reader.ReadUntil("*/"), this)); } else if (reader.IsNext("//")) { AddElement(new CommentElement(reader.ReadLine()?.Trim() + "\r\n", this)); } else { throw new Exception("非法字符串!"); } } break; case '[': AddElement(new AttributeElement(reader.ReadQuoteBlock('[', ']'), this)); break; } reader.EscapeWhiteSpace(); } }
/// <summary> /// 读取注释。 /// </summary> /// <param name="reader">源代码读取器。</param> protected void ReadComment(SourceReader reader) { if (reader.IsNext("/*")) { AddElement(new CommentElement(reader.ReadUntil("*/"), this)); } else if (reader.IsNext("//")) { AddElement(new CommentElement(reader.ReadLine()?.Trim(), this)); } else { throw new Exception("非法字符串!"); } }