Mercurial > pub > bltoolkit
comparison Tools/ExampleGenerator/Generator.cs @ 0:f990fcb411a9
Копия текущей версии из github
author | cin |
---|---|
date | Thu, 27 Mar 2014 21:46:09 +0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:f990fcb411a9 |
---|---|
1 using System; | |
2 using System.IO; | |
3 | |
4 namespace ExampleGenerator | |
5 { | |
6 class Generator | |
7 { | |
8 class Lang | |
9 { | |
10 public Lang(string name, string extension, string comment) | |
11 { | |
12 Name = name; | |
13 Extension = extension; | |
14 Comment = comment; | |
15 } | |
16 | |
17 public string Name; | |
18 public string Extension; | |
19 public string Comment; | |
20 } | |
21 | |
22 static void ProcessFile(StreamWriter sw, string fileName, Lang lang) | |
23 { | |
24 using (StreamReader sr = File.OpenText(fileName)) | |
25 { | |
26 string ln = sr.ReadLine(); | |
27 | |
28 if (ln.StartsWith(lang.Comment + " example:")) | |
29 { | |
30 Console.WriteLine("{0}", fileName); | |
31 | |
32 string[] path = sr.ReadLine().Split(new char[]{' '}); | |
33 | |
34 sw.WriteLine("<{0} name=\"{1}\">", path[1], path[2]); | |
35 sw.WriteLine("<example>"); | |
36 | |
37 ln = sr.ReadLine(); | |
38 | |
39 if (ln.StartsWith(lang.Comment + " comment:")) | |
40 { | |
41 for (ln = sr.ReadLine(); ln.StartsWith(lang.Comment); ln = sr.ReadLine()) | |
42 { | |
43 ln = ln.Substring(3); | |
44 | |
45 if (ln.Length > 0 && ln[0] == ' ') | |
46 ln = ln.Substring(1); | |
47 | |
48 sw.WriteLine(ln); | |
49 } | |
50 } | |
51 | |
52 ln += "\n" + sr.ReadToEnd(); | |
53 ln.Trim(); | |
54 | |
55 while (ln.Length > 0 && (ln[ln.Length-1] == '\r' || ln[ln.Length-1] == '\n')) | |
56 ln = ln.Substring(0, ln.Length - 1).TrimEnd(); | |
57 | |
58 ln = ln.Replace("<", "<").Replace(">", ">"); | |
59 | |
60 sw.WriteLine("<code lang=\"{0}\">", lang.Name); | |
61 sw.WriteLine(ln); | |
62 sw.WriteLine("</code>"); | |
63 sw.WriteLine("</example>"); | |
64 sw.WriteLine("</{0}>", path[1]); | |
65 sw.WriteLine(); | |
66 } | |
67 } | |
68 } | |
69 | |
70 static void ScanDirectory(StreamWriter sw, string path, Lang lang) | |
71 { | |
72 string[] files = Directory.GetFiles(path, lang.Extension); | |
73 | |
74 foreach (string file in files) | |
75 ProcessFile(sw, file, lang); | |
76 | |
77 string[] dirs = Directory.GetDirectories(path); | |
78 | |
79 foreach (string dir in dirs) | |
80 ScanDirectory(sw, dir, lang); | |
81 } | |
82 | |
83 [STAThread] | |
84 static void Main(string[] args) | |
85 { | |
86 string path = null; | |
87 string xml = null; | |
88 | |
89 foreach (string arg in args) | |
90 { | |
91 if (arg.ToLower().StartsWith("/path:")) | |
92 path = arg.Substring(6); | |
93 | |
94 if (arg.ToLower().StartsWith("/xml:")) | |
95 xml = arg.Substring(5); | |
96 } | |
97 | |
98 //Console.WriteLine("/path:{0} /xml:{1}", path, xml); | |
99 | |
100 if (path == null || xml == null) | |
101 { | |
102 Console.WriteLine(@"Use: ExampleGenerator /path:..\Examples /xml:..\Source\Examples.xml"); | |
103 } | |
104 | |
105 using (StreamWriter sw = File.CreateText(xml)) | |
106 { | |
107 sw.WriteLine(@"<?xml version=""1.0"" encoding=""utf-8"" ?>"); | |
108 sw.WriteLine(@"<examples>"); | |
109 sw.WriteLine(); | |
110 | |
111 ScanDirectory(sw, path, new Lang("C#", "*.cs", "//@")); | |
112 ScanDirectory(sw, path, new Lang("VB", "*.vb", "''@")); | |
113 | |
114 sw.WriteLine(); | |
115 sw.WriteLine(@"</examples>"); | |
116 } | |
117 } | |
118 } | |
119 } |