-
Notifications
You must be signed in to change notification settings - Fork 0
/
Program.cs
122 lines (108 loc) · 4.33 KB
/
Program.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace JsxExpander
{
class Program
{
static void Main(string[] args)
{
var path = @"D:\tmp\jsx\test1.jsx";
var includeFiles = new List<string>();
var targets = new Queue<string>();
targets.Enqueue(path);
var finished = new List<string>();
while (targets.Any())
{
var target = targets.Dequeue();
using (var reader = new StreamReader(target))
{
var includePaths = new List<string>();
while (!reader.EndOfStream)
{
var line = reader.ReadLine().Trim();
if (line.Length == 0 || !line.StartsWith("#"))
{
break;
}
if (line.StartsWith("#includepath"))
{
var items = line.Split('"')[1].Split(';');
foreach (var item in items)
{
var fullname = Path.Combine(Path.GetDirectoryName(target), item);
if (!includePaths.Contains(fullname))
{
includePaths.Add(fullname);
}
}
}
else if (line.StartsWith("#include"))
{
var items = line.Split('"')[1].Split(';');
foreach (var item in items)
{
var fullname = Path.GetFullPath(Path.Combine(Path.GetDirectoryName(target), item));
if (!File.Exists(fullname))
{
foreach (var includePath in includePaths)
{
fullname = Path.GetFullPath(Path.Combine(includePath, item));
if (File.Exists(fullname))
{
break;
}
}
}
if (!File.Exists(fullname))
{
Console.Error.WriteLine("file not exists: {0}, included from {1}", item, target);
continue;
}
if (!includeFiles.Contains(fullname))
{
includeFiles.Add(fullname);
//Console.WriteLine("{0} (from {1})", fullname, target);
}
if (!finished.Contains(fullname))
{
finished.Add(fullname);
targets.Enqueue(fullname);
}
}
}
}
}
}
foreach (var includeFile in includeFiles)
{
using (var reader = new StreamReader(includeFile))
{
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
if (line.TrimStart().StartsWith("#"))
{
continue;
}
Console.WriteLine(line);
}
}
}
using (var reader = new StreamReader(path))
{
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
if (line.TrimStart().StartsWith("#"))
{
continue;
}
Console.WriteLine(reader.ReadLine());
}
}
Console.Read();
}
}
}