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 }>;
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";
82
public static function readInfos( zip : List<ZipEntry> ) : XmlInfos {
85
public static function readDoc( zip : List<ZipEntry> ) : String {
87
if( StringTools.endsWith(f.fileName,DOCXML) )
88
return neko.zip.Reader.unzip(f).toString();
92
public static function readInfos( zip : List<ZipEntry>, check : Bool ) : XmlInfos {
83
93
var xmldata = null;
85
95
if( StringTools.endsWith(f.fileName,XML) ) {
89
99
if( xmldata == null )
90
100
throw XML+" not found in package";
91
return readData(xmldata);
101
return readData(xmldata,check);
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(
98
108
[ sname, Att("url"), Att("license",FEnum(LICENSES)) ],
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),"")]) ),
117
haxe.xml.Check.checkDocument(doc,schema);
120
public static function readData( xmldata : String, check : Bool ) : XmlInfos {
106
121
var doc = Xml.parse(xmldata);
107
haxe.xml.Check.checkDocument(doc,schema);
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 "" });
120
138
project : project,
121
139
website : p.att.url,