Summary Files Commits Branches @commit @diff @stats
path: root / awk-edits / File-lists.awk
blob: b18d6346a0a40aa01038cf5aa3b9ad8902f42dbe (plain) (blame)
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#
# == About ==
#
# Each file list is a "details" element, that contains a table, each row being a different file
# or alternatively, just the table on it's own.
# 
# -- Result HTML --
#
# <details>
#   <summary>Folder Info</summary>
#   <table>
#     <tr>File Data</tr>
#   </table>
# </details>
# or
# <table>
#   <tr>File Data</tr>
# </table>

#
# == ftags ==
#
# &&folder     The text right afterwards is the title of the folder. All files
#              are hidden inside the collapsed details tag (click to show).
#              The file table is indented. You cannot have a folder inside a folder.
#              It can be omitted, and the files table will be shown as-is.
#
# &&file       Everything that follows this tag is the data for a file. You should
#              use &&fd to specify columns of information! Depending on the context,
#              it might be flrepllaced with the start of a table, closing the summary
#              and starting table, or closing and opening a table row.
#
# &&/files     This tag must exist at the bottom of a file list, no matter if it was
#              started with or without a &&folder.
#
# &&fd         Defines a column of information for a file (row). Practically, it is
#              flrepllaced with <td>, and </td> is added to the end of the line.
#              If you don't use it, make sure to have the leading and trailing td tags!
#
# &&ft-TYPE    Depending on TYPE, it inserts an image tag that contains the file "icon"
#              for the corresponding type.
#              Available values for TYPE: photo, text, zip, movie, markdown
#
# -- Placement/Flow --
#
# All ftags, except &&fd, can be placed on their own line (empty line above and below)
# or before/after another ftag.
# Folder title must be inside the same paragraph as the ftag itself. This means that,
# after
# every &&folder ftag, the text can continue directly next to it and/or on new lines,
# without there being any empty lines (you can add those with <br> or two spaces at
# line end).
#
# -- Example Usage --
#
# (I like to indent a bit &&fd ftags, for readability's sake, but you don't have to)
#
# &&file
#   &&ft-text
#   &&fd Notes
#   &&fd 10 KB
# &&/files
#
# &&folder Math
# &&file
#   &&ft-text
#   &&fd Homework 1
# &&file
#   &&ft-text
#   &&fd Homework 2
# &&/files
#
# &&folder Art Project<br>
# Status: 70% complete<br>
# Note: Reserach Van Gogh paintings
#
# &&file
#   &&fd Painting 1
#   &&fd 100% Complete
#
# &&file
#   &&fd Painting 2
#   &&fd 40% Complete
#
# &&/files

BEGIN {
	fileStarted = 0
	noFolder    = 1
	searchEndP  = 0 # Used to remove trailing </p> in file row

	# Special formatting
	flname[1] = "folder"
	flrepl[1] = "<details class=\"file-wrapper\"><summary>"
	flname[2] = "file"
	flrepl[2] = "</tr><tr>"
	flname[3] = "&#47;files" # /files
	flrepl[3] = "</tr></table></details>"
	flname[4] = "fd"
	flrepl[4] = "" # Not used, refer to fileSubstitute function

	flname[5] = "ft-photo"
	flrepl[5] = "photo.svg"
	flname[6] = "ft-text"
	flrepl[6] = "file-text.svg"
	flname[7] = "ft-zip"
	flrepl[7] = "file-zip.svg"
	flname[8] = "ft-movie"
	flrepl[8] = "movie.svg"
	flname[9] = "ft-markdown"
	flrepl[9] = "markdown.svg"

	for (i = 1; i <= length(flname); i++) {
		flpat[i] = "&#38;&#38;" flname[i]
		if (index(flname[i], "ft") == 1)
			flrepl[i] = "<td><img class=\"file-icon unzoomable\" src=\"/img/" flrepl[i] "\"></td>"
	}
}

function fileSubstitute(ind) {
	gsub(/(<p>|<\/p>)/, "")

	# &&file
	if (ind == 2 && fileStarted == 0) {
		if (noFolder == 1)
			gsub("&#38;&#38;file", "<table class=\"file-list\"><tr>")
		else
			gsub("&#38;&#38;file", "</summary><table class=\"file-list\"><tr>")
		fileStarted = 1
	}
	# &&/files
	else if (ind == 3 && noFolder == 1) {
		gsub("&#38;&#38;&#47;files", "</tr></table>")
	}
	# &&fd
	else if (ind == 4) {
		gsub(/&#38;&#38;fd[ \t]*/, "<td>")
		gsub(/$/, "</td>")
	}
	else
		gsub(flpat[ind], flrepl[ind])

	# &&folder
	if (ind == 1) {
		noFolder   = 0
		searchEndP = 1
	}
	# &&/files
	else if (ind == 3) {
		fileStarted = 0
		noFolder    = 1
	}
}

/^[ \t]*(<p>|)&#38;&#38;/ {
	for (i = 1; i <= length(flname); i++) {
		if (index($0, flpat[i]) != 0)
			fileSubstitute(i)
	}
}

searchEndP == 1 && /<\/p>/ {
	gsub(/<\/p>/, "")
	searchEndP = 0
}