Esempio n. 1
0
        public void toJson(string filename, string output, string encoding)
        {
            string script = "";

            try {
                using (StreamReader sr = new StreamReader(
                           filename, Encoding.GetEncoding(encoding))) {
                    script = sr.ReadToEnd();
                }
            } catch (Exception e) {
                Console.WriteLine(e.Message);
                return;
            }
            ScriptNode node = createNodes(script);

            if (node != null)
            {
                SerializeNode parent = null;
                SerializeNode sn     = SerializeNode.translateNode(ref parent, node);
                if (sn != null)
                {
                    Stream stream = new FileStream(output, FileMode.Create);
                    DataContractJsonSerializer serialize = new DataContractJsonSerializer(typeof(SerializeNode));
                    serialize.WriteObject(stream, sn);
                    stream.Close();
                }

                /*
                 * StreamWriter writer = new StreamWriter( output, false, Encoding.UTF8 );
                 * traverseNode( node, ref writer, true );
                 * writer.Close();
                 */
            }
        }
Esempio n. 2
0
        static public SerializeNode translateNode(ref SerializeNode parent, Parser.ScriptNode node)
        {
            SerializeNode sn = new SerializeNode();

            if (parent != null)
            {
                parent.Members.Add(sn);
            }
            switch (node.Type)
            {
            case 0:
                sn.Type = NodeType.Root;
                break;

            case Token.T_FUNCTION:
                sn.Type = NodeType.Function;
                break;

            case Token.T_EVENT:
                sn.Type = NodeType.Event;
                break;

            case Token.T_PROPERTY:
                sn.Type = NodeType.Property;
                break;

            case Token.T_CLASS:
                sn.Type = NodeType.Class;
                break;

            case Token.T_VAR:
                sn.Type = NodeType.Var;
                break;

            case Token.T_CONST:
                sn.Type = NodeType.Const;
                break;

            default:
                sn.Type = NodeType.Unknown;
                break;
            }
            sn.Name = node.Name;
            if (node.Args != null && node.Args.Count > 0)
            {
                foreach (var name in node.Args)
                {
                    sn.Arguments.Add(new FunctionArg(name.Name, name.Type, name.DefaultValue));
                }
            }
            if (node.ReturnType != null)
            {
                sn.ReturnType = node.ReturnType;
            }
            string comment = node.Comment;

            if (comment != null)
            {
                List <Parser.CommentNode> cnl = Parser.parseComment(comment);
                for (int i = 0; i < cnl.Count; i++)
                {
                    Parser.CommentNode cn   = cnl[i];
                    string             body = Regex.Replace(cn.Body, "[ \t]*\\\\n$", "");               // 末尾の空白と改行は削除する
                    switch (cn.Type)
                    {
                    case Parser.CommentType.SUMMARY:
                        sn.Comment.Summary = body;
                        break;

                    case Parser.CommentType.PARAM:
                        sn.Comment.Params.Add(new FunctionParam(cn.Name, body));
                        break;

                    case Parser.CommentType.RETURN:
                        sn.Comment.Return = body;
                        break;

                    case Parser.CommentType.THROW:
                        sn.Comment.Throw = body;
                        break;

                    case Parser.CommentType.AUTHOR:
                        sn.Comment.Author = body;
                        break;

                    case Parser.CommentType.VERSION:
                        sn.Comment.Version = body;
                        break;

                    case Parser.CommentType.SEE:
                        sn.Comment.See.Add(body);
                        break;

                    case Parser.CommentType.DESCRIPTION:
                        sn.Comment.Description = body;
                        break;

                    default:
                        sn.Comment.Unknown = body;
                        break;
                    }
                }
            }
            if (node.Child != null && node.Child.Count > 0)
            {
                foreach (Parser.ScriptNode c in node.Child)
                {
                    translateNode(ref sn, c);
                }
            }
            return(sn);
        }
Esempio n. 3
0
 public static SerializeNode translateNode( ref SerializeNode parent, Parser.ScriptNode node )
 {
     SerializeNode sn = new SerializeNode();
     if( parent != null ) parent.Members.Add( sn );
     switch( node.Type ) {
         case 0:
             sn.Type = NodeType.Root;
             break;
         case Token.T_FUNCTION:
             sn.Type = NodeType.Function;
             break;
         case Token.T_PROPERTY:
             sn.Type = NodeType.Property;
             break;
         case Token.T_CLASS:
             sn.Type = NodeType.Class;
             break;
         case Token.T_VAR:
             sn.Type = NodeType.Var;
             break;
         case Token.T_CONST:
             sn.Type = NodeType.Const;
             break;
         default:
             sn.Type = NodeType.Unknown;
             break;
     }
     sn.Name = node.Name;
     if( node.Args != null && node.Args.Count > 0 ) {
         foreach( string name in node.Args ) {
             sn.Arguments.Add( name );
         }
     }
     string comment = node.Comment;
     if( comment != null ) {
         List<Parser.CommentNode> cnl = Parser.parseComment( comment );
         for( int i = 0; i < cnl.Count; i++ ) {
             Parser.CommentNode cn = cnl[i];
             string body = Regex.Replace( cn.Body, "[ \t]*\\\\n$", "" );	// 末尾の空白と改行は削除する
             switch( cn.Type ) {
                 case Parser.CommentType.SUMMARY:
                     sn.Comment.Summary = body;
                     break;
                 case Parser.CommentType.PARAM:
                     sn.Comment.Params.Add( new FunctionParam(cn.Name,body) );
                     break;
                 case Parser.CommentType.RETURN:
                     sn.Comment.Return = body;
                     break;
                 case Parser.CommentType.THROW:
                     sn.Comment.Throw = body;
                     break;
                 case Parser.CommentType.AUTHOR:
                     sn.Comment.Author = body;
                     break;
                 case Parser.CommentType.VERSION:
                     sn.Comment.Version = body;
                     break;
                 case Parser.CommentType.SEE:
                     sn.Comment.See = body;
                     break;
                 case Parser.CommentType.DESCRIPTION:
                     sn.Comment.Description = body;
                     break;
                 default:
                     sn.Comment.Unknown = body;
                     break;
             }
         }
     }
     if( node.Child != null && node.Child.Count > 0 ) {
         foreach( Parser.ScriptNode c in node.Child ) {
             translateNode( ref sn, c );
         }
     }
     return sn;
 }