示例#1
0
        public static ParsedDModule CreateFromDFile(ProjectDom prjDom, string file, TextReader content)
        {
            var doc = new ParsedDModule(file);
            doc.Flags |= ParsedDocumentFlags.NonSerializable;

            var parser = DParser.Create(content);

            // Parse the code
            var ast  = doc.DDom = parser.Parse();
            doc.LanguageAST = ast;

            ast.FileName = file;

            // Update project owner information
            if (prjDom != null && prjDom.Project is DProject)
            {
                var prj = prjDom.Project as DProject;
                var pf = prj.GetProjectFile(file);

                // Build appropriate module name
                var modName = pf.ProjectVirtualPath.ChangeExtension(null).ToString().Replace(Path.DirectorySeparatorChar, '.');

                ast.ModuleName = modName;

                if (pf != null)
                    pf.ExtendedProperties[DProject.DParserPropertyKey] = ast;
            }

            /*
            var cu = new CompilationUnit(file);
            doc.CompilationUnit = cu;

            //TODO: Usings

            var globalScope = new DomType(cu, ClassType.Unknown, Modifiers.None, "(Global Scope)", new DomLocation(1, 1), string.Empty, new DomRegion(1, int.MaxValue - 2));

            cu.Add(globalScope);

            foreach (var n in ast)
            {
                var ch = ConvertDParserToDomNode(n, doc);

                if (ch is DomField || ch is DomMethod)
                    globalScope.Add(ch as IMember);
                else
                    cu.Add(ch as IType);
            }*/

            foreach(ParserError parserError in parser.ParseErrors)
            {
                doc.Errors.Add(new Error(ErrorType.Error, parserError.Location.Line, parserError.Location.Column,parserError.Message));
            }

            foreach (var cm in parser.TrackerVariables.Comments)
            {
                var c = new Projects.Dom.Comment(cm.CommentText);

                c.CommentType = cm.CommentType.HasFlag(D_Parser.Parser.Comment.Type.Block) ? CommentType.MultiLine : CommentType.SingleLine;
                c.IsDocumentation = cm.CommentType.HasFlag(D_Parser.Parser.Comment.Type.Documentation);

                c.Region = new DomRegion(cm.StartPosition.Line, cm.StartPosition.Column, cm.EndPosition.Line, cm.EndPosition.Column);
            }

            return doc;
        }
示例#2
0
        public static ParsedDModule CreateFromDFile(ProjectDom prjDom, string file, TextReader content)
        {
            var doc = new ParsedDModule(file);

            doc.Flags |= ParsedDocumentFlags.NonSerializable;

            var parser = DParser.Create(content);

            // Parse the code
            var ast = doc.DDom = parser.Parse();

            doc.LanguageAST = ast;

            ast.FileName = file;

            // Update project owner information
            if (prjDom != null && prjDom.Project is DProject)
            {
                var prj = prjDom.Project as DProject;
                var pf  = prj.GetProjectFile(file);

                // Build appropriate module name
                var modName = pf.ProjectVirtualPath.ChangeExtension(null).ToString().Replace(Path.DirectorySeparatorChar, '.');

                ast.ModuleName = modName;

                if (pf != null)
                {
                    pf.ExtendedProperties[DProject.DParserPropertyKey] = ast;
                }
            }

            /*
             * var cu = new CompilationUnit(file);
             * doc.CompilationUnit = cu;
             *
             * //TODO: Usings
             *
             * var globalScope = new DomType(cu, ClassType.Unknown, Modifiers.None, "(Global Scope)", new DomLocation(1, 1), string.Empty, new DomRegion(1, int.MaxValue - 2));
             *
             * cu.Add(globalScope);
             *
             * foreach (var n in ast)
             * {
             *      var ch = ConvertDParserToDomNode(n, doc);
             *
             *      if (ch is DomField || ch is DomMethod)
             *              globalScope.Add(ch as IMember);
             *      else
             *              cu.Add(ch as IType);
             * }*/

            foreach (ParserError parserError in parser.ParseErrors)
            {
                doc.Errors.Add(new Error(ErrorType.Error, parserError.Location.Line, parserError.Location.Column, parserError.Message));
            }

            foreach (var cm in parser.TrackerVariables.Comments)
            {
                var c = new Projects.Dom.Comment(cm.CommentText);

                c.CommentType     = cm.CommentType.HasFlag(D_Parser.Parser.Comment.Type.Block) ? CommentType.MultiLine : CommentType.SingleLine;
                c.IsDocumentation = cm.CommentType.HasFlag(D_Parser.Parser.Comment.Type.Documentation);

                c.Region = new DomRegion(cm.StartPosition.Line, cm.StartPosition.Column, cm.EndPosition.Line, cm.EndPosition.Column);
            }

            return(doc);
        }