comparison Tools/DocGen/FileItem.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.Collections.Generic;
3
4 namespace DocGen
5 {
6 class FileItem
7 {
8 public bool IsFile;
9 public string Name;
10 public List<FileItem> Items;
11 public FileItem Parent;
12 public string Group;
13 public List<string> Indexes = new List<string>();
14 public List<string> NoIndexes = new List<string>();
15 public bool NoIndex;
16
17 private string _title;
18 public string Title
19 {
20 get { return _title ?? System.IO.Path.GetFileNameWithoutExtension(Name); }
21 set { _title = value; }
22 }
23
24 private int _sortOrder;
25 public int SortOrder
26 {
27 get
28 {
29 if (_sortOrder == 0 && Items != null)
30 return Items[0].SortOrder;
31
32 return _sortOrder;
33 }
34
35 set { _sortOrder = value; }
36 }
37
38 public string Path
39 {
40 get
41 {
42 return Name.Replace(Program.destPath, "").Replace("\\", "/");
43 }
44 }
45
46 public IEnumerable<FileItem> GetFiles()
47 {
48 if (Items != null)
49 {
50 foreach (var item in Items)
51 {
52 if (item.IsFile)
53 yield return item;
54
55 if (item.Items != null)
56 foreach (var i in item.GetFiles())
57 yield return i;
58 }
59 }
60 }
61
62 public void Add(FileItem item)
63 {
64 item.Parent = this;
65
66 if (Items == null)
67 Items = new List<FileItem>();
68
69 Items.Add(item);
70 }
71
72 public void Prepare()
73 {
74 if (Items != null)
75 {
76 var groups = new List<FileItem>();
77
78 for (var i = 0; i < Items.Count; i++)
79 {
80 var item = Items[i];
81
82 if (item.Group != null && item.Group != Name)
83 {
84 var group = groups.Find(file => file.Name == item.Group);
85
86 if (group == null)
87 groups.Add(group = new FileItem { Name = item.Group, SortOrder = item.SortOrder });
88
89 group.Add(item);
90 Items.RemoveAt(i);
91
92 i--;
93 }
94 }
95
96 Items.AddRange(groups);
97
98 foreach (var item in Items)
99 item.Prepare();
100
101 Items.Sort((x, y) =>
102 {
103 var xname = x.Title.ToLower();
104 var yname = y.Title.ToLower();
105
106 if (xname == yname) return 0;
107 if (x.Name.ToLower().EndsWith("index.htm")) return -1;
108 if (y.Name.ToLower().EndsWith("index.htm")) return 1;
109
110 if (x.SortOrder != 0 && y.SortOrder != 0)
111 return x.SortOrder - y.SortOrder;
112
113 if (x.SortOrder != 0) return -1;
114 if (y.SortOrder != 0) return 1;
115
116 return string.Compare(xname, yname);
117 });
118 }
119 }
120 }
121 }