2 // RenderTeamPage.cs - Renders an HTML page with team member information from an XML file
4 // Author: Duncan Mak (duncan@ximian.com)
6 // (C) Copyright 2003, Ximian Inc.
10 using System.Collections;
17 static Contributor [] list;
18 static public XmlNamespaceManager nsmgr;
20 static void Main (string [] args)
22 if (args.Length != 2) {
23 Console.WriteLine ("write.exe <input.xml> <output.html>");
27 string input = args [0];
28 string output = args [1];
29 XmlDocument document = new XmlDocument ();
30 document.Load (input);
32 nsmgr = new XmlNamespaceManager (document.NameTable);
33 nsmgr.AddNamespace ("t", "http://go-mono.org/team.xsd");
34 XmlNodeList contributors = document.SelectNodes ("/t:contributors/t:contributor", nsmgr);
35 list = new Contributor [contributors.Count];
40 foreach (XmlNode n in contributors) {
41 list [count] = new Contributor (n, p.Document);
45 Array.Sort (list, new ContributorComparer ());
47 int length = list.Length % 2 == 0 ? list.Length : list.Length + 1;
52 p.AddRow (list [i].RenderHtml (), list [i + 1].RenderHtml ());
53 } catch (IndexOutOfRangeException) {
54 p.AddRow (list [i].RenderHtml (), null);
63 public class ContributorComparer : IComparer
65 public int Compare (object x, object y)
67 return String.Compare (x.ToString (), y.ToString ());
76 public string location;
77 public string organization;
78 public string description;
79 public string[] tasks;
81 public XmlDocument document;
83 public Contributor (XmlNode node, XmlDocument document)
86 name = GetName (node);
87 image = GetImage (node);
88 email = GetField (node, "t:e-mail");
89 location = GetField (node, "t:location");
90 organization = GetField (node, "t:organization");
91 description = GetField (node, "t:description");
92 tasks = GetTasks (node);
94 this.document = document;
97 public override string ToString ()
99 return name.ToString ();
102 public static string GetImage (XmlNode node)
104 string result = GetField (node, "t:image");
106 if (result == String.Empty)
113 public static string GetField (XmlNode node, string selector)
115 XmlNode result = node.SelectSingleNode (selector, Write.nsmgr);
120 return result.InnerText;
123 public static Name GetName (XmlNode node)
125 string first_name = GetField (node, "t:name/t:first-name");
126 string last_name = GetField (node, "t:name/t:last-name");
128 return new Name (first_name, last_name);
131 public static string [] GetTasks (XmlNode node)
133 XmlNodeList nodes = node.SelectNodes ("t:tasks/t:task", Write.nsmgr);
135 string [] result = new string [nodes.Count];
138 foreach (XmlNode n in nodes) {
139 result [i] = n.InnerText;
147 public XmlElement RenderHtml ()
149 XmlElement root = document.CreateElement ("TD");
150 XmlElement table = document.CreateElement ("TABLE");
151 XmlElement tr = document.CreateElement ("TR");
152 XmlElement td = document.CreateElement ("TD");
153 td.SetAttribute ("bgcolor", "#c3cda7");
154 td.SetAttribute ("valign", "top");
155 td.SetAttribute ("width", "1%");
157 table.AppendChild (tr);
158 root.AppendChild (table);
160 XmlElement img = document.CreateElement ("IMG");
161 img.SetAttribute ("align", "top");
162 img.SetAttribute ("border", "0");
163 img.SetAttribute ("height", "48");
164 img.SetAttribute ("width", "48");
165 img.SetAttribute ("src", "team/" + image);
166 td.AppendChild (img);
168 td = document.CreateElement ("TD");
169 td.SetAttribute ("bgcolor", "#c3cda7");
170 td.SetAttribute ("valign", "bottom");
171 td.SetAttribute ("width", "100%");
174 td.AppendChild (name.ToXml (document));
175 td.AppendChild (document.CreateElement ("BR"));
176 td.AppendChild (RenderEmail ());
178 tr = document.CreateElement ("TR");
179 table.AppendChild (tr);
180 td = document.CreateElement ("TD");
181 td.SetAttribute ("bgcolor", "#f5f8e4");
182 td.SetAttribute ("valign", "top");
184 td.AppendChild (RenderLabel ("Location: "));
186 td = document.CreateElement ("TD");
187 td.SetAttribute ("bgcolor", "#f5f8e4");
188 td.SetAttribute ("valign", "top");
190 td.AppendChild (document.CreateTextNode (location));
192 tr = document.CreateElement ("TR");
193 table.AppendChild (tr);
194 td = document.CreateElement ("TD");
195 td.SetAttribute ("bgcolor", "#f5f8e4");
196 td.SetAttribute ("valign", "top");
198 td.AppendChild (RenderLabel ("Description: "));
200 td = document.CreateElement ("TD");
201 td.SetAttribute ("bgcolor", "#f5f8e4");
202 td.SetAttribute ("valign", "top");
204 td.AppendChild (document.CreateTextNode (description));
206 tr = document.CreateElement ("TR");
207 table.AppendChild (tr);
208 td = document.CreateElement ("TD");
209 td.SetAttribute ("bgcolor", "#f5f8e4");
210 td.SetAttribute ("valign", "top");
212 td.AppendChild (RenderLabel ("Tasks: "));
214 td = document.CreateElement ("TD");
215 td.SetAttribute ("bgcolor", "#f5f8e4");
216 td.SetAttribute ("valign", "top");
218 td.AppendChild (RenderTasks ());
223 public XmlNode RenderTasks ()
226 XmlElement element = document.CreateElement ("OL");
227 element.SetAttribute ("type", "I");
229 foreach (string task in tasks) {
230 XmlElement li = document.CreateElement ("LI");
231 li.AppendChild (document.CreateTextNode (task));
232 element.AppendChild (li);
238 public XmlNode RenderEmail ()
240 XmlElement a = document.CreateElement ("A");
241 a.SetAttribute ("href", "mailto:" + email);
242 XmlElement font = document.CreateElement ("FONT");
243 font.SetAttribute ("size", "3");
244 XmlText t = document.CreateTextNode (email);
245 a.AppendChild (font);
246 font.AppendChild (t);
251 public XmlNode RenderLabel (string label)
253 string text = String.Format ("{0}: ", label);
254 XmlElement element = document.CreateElement ("B");
255 XmlText t = document.CreateTextNode (label );
256 element.AppendChild (t);
264 XmlDocument document;
269 document = new XmlDocument ();
271 XmlElement table = document.CreateElement ("TABLE");
272 document.AppendChild (table);
274 tbody = document.CreateElement ("TBODY");
275 table.AppendChild (tbody);
278 public XmlDocument Document {
279 get { return document; }
282 public void AddRow (XmlNode left, XmlNode right)
284 if (left == null && right == null)
287 XmlElement tr = document.CreateElement ("TR");
288 tbody.AppendChild (tr);
289 tr.AppendChild (left);
292 tr.AppendChild (document.CreateElement ("TD"));
294 tr.SetAttribute ("valign", "top");
295 tr.AppendChild (right);
299 public void Write (TextWriter text_writer)
301 XmlTextWriter writer = new XmlTextWriter (text_writer);
302 writer.Formatting = Formatting.Indented;
304 document.WriteContentTo (writer);
309 public void Write (string filename)
311 XmlTextWriter writer = new XmlTextWriter (filename, Encoding.Default);
312 writer.Formatting = Formatting.Indented;
314 document.WriteContentTo (writer);
325 public Name (string a, string b)
331 public override string ToString ()
333 if (first_name == null && last_name == null)
336 return first_name + " " + last_name;
339 public XmlNode ToXml (XmlDocument document)
341 XmlElement element = document.CreateElement ("FONT");
342 element.SetAttribute ("size", "3");
343 XmlElement b = document.CreateElement ("B");
344 XmlText t = document.CreateTextNode (ToString ());
346 element.AppendChild (b);