~ubuntu-branches/ubuntu/oneiric/haxe/oneiric

« back to all changes in this revision

Viewing changes to haxe/std/tools/haxelib/Datas.hx

  • Committer: Bazaar Package Importer
  • Author(s): Jens Peter Secher
  • Date: 2010-01-31 23:08:43 UTC
  • mfrom: (5.2.4 sid)
  • Revision ID: james.westby@ubuntu.com-20100131230843-1cxte2x20ypk9c25
Tags: 1:2.5-1
New upstream version, taken from new upstream subversion repository.

Show diffs side-by-side

added added

removed removed

Lines of Context:
24
24
        var license : String;
25
25
        var curversion : String;
26
26
        var versions : Array<VersionInfos>;
 
27
        var tags : List<String>;
27
28
}
28
29
 
29
30
typedef XmlInfos = {
34
35
        var version : String;
35
36
        var versionComments : String;
36
37
        var developers : List<String>;
 
38
        var tags : List<String>;
37
39
        var dependencies : List<{ project : String, version : String }>;
38
40
}
39
41
 
40
42
class Datas {
41
43
 
42
44
        public static var XML = "haxelib.xml";
 
45
        public static var DOCXML = "haxedoc.xml";
43
46
        public static var REPOSITORY = "files";
44
47
        public static var alphanum = ~/^[A-Za-z0-9_.-]+$/;
45
48
        static var LICENSES = ["GPL","LGPL","BSD","Public"];
79
82
                return safe(lib)+"-"+safe(ver)+".zip";
80
83
        }
81
84
 
82
 
        public static function readInfos( zip : List<ZipEntry> ) : XmlInfos {
 
85
        public static function readDoc( zip : List<ZipEntry> ) : String {
 
86
                for( f in zip )
 
87
                        if( StringTools.endsWith(f.fileName,DOCXML) )
 
88
                                return neko.zip.Reader.unzip(f).toString();
 
89
                return null;
 
90
        }
 
91
 
 
92
        public static function readInfos( zip : List<ZipEntry>, check : Bool ) : XmlInfos {
83
93
                var xmldata = null;
84
94
                for( f in zip )
85
95
                        if( StringTools.endsWith(f.fileName,XML) ) {
88
98
                        }
89
99
                if( xmldata == null )
90
100
                        throw XML+" not found in package";
91
 
                return readData(xmldata);
 
101
                return readData(xmldata,check);
92
102
        }
93
103
 
94
 
        public static function readData( xmldata : String ) : XmlInfos {
 
104
        static function doCheck( doc : Xml ) {
95
105
                var sname = Att("name",FReg(alphanum));
96
106
                var schema = RNode(
97
107
                        "project",
98
108
                        [ sname, Att("url"), Att("license",FEnum(LICENSES)) ],
99
109
                        RList([
100
110
                                RMulti( RNode("user",[sname]), true ),
 
111
                                RMulti( RNode("tag",[Att("v",FReg(alphanum))]) ),
101
112
                                RNode("description",[],RData()),
102
113
                                RNode("version",[sname],RData()),
103
114
                                RMulti( RNode("depends",[sname,Att("version",FReg(alphanum),"")]) ),
104
115
                        ])
105
116
                );
 
117
                haxe.xml.Check.checkDocument(doc,schema);
 
118
        }
 
119
 
 
120
        public static function readData( xmldata : String, check : Bool ) : XmlInfos {
106
121
                var doc = Xml.parse(xmldata);
107
 
                haxe.xml.Check.checkDocument(doc,schema);
108
 
 
 
122
                if( check )
 
123
                        doCheck(doc);
109
124
                var p = new haxe.xml.Fast(doc).node.project;
110
125
                var project = p.att.name;
111
126
                if( project.length < 3 )
112
127
                        throw "Project name must contain at least 3 characters";
 
128
                var tags = new List();
 
129
                for( t in p.nodes.tag )
 
130
                        tags.add(t.att.v.toLowerCase());
113
131
                var devs = new List();
114
132
                for( d in p.nodes.user )
115
133
                        devs.add(d.att.name);
116
134
                var deps = new List();
117
135
                for( d in p.nodes.depends )
118
 
                        deps.add({ project : d.att.name, version : d.att.version });
 
136
                        deps.add({ project : d.att.name, version : if( d.has.version ) d.att.version else "" });
119
137
                return {
120
138
                        project : project,
121
139
                        website : p.att.url,
123
141
                        version : p.node.version.att.name,
124
142
                        versionComments : p.node.version.innerData,
125
143
                        license : p.att.license,
 
144
                        tags : tags,
126
145
                        developers : devs,
127
146
                        dependencies : deps,
128
147
                }