annotate Tools/ExampleGenerator/Generator.cs @ 0:f990fcb411a9

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