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] = "/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] = "&&" 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("&&file", "<table class=\"file-list\"><tr>")
else
gsub("&&file", "</summary><table class=\"file-list\"><tr>")
fileStarted = 1
}
# &&/files
else if (ind == 3 && noFolder == 1) {
gsub("&&/files", "</tr></table>")
}
# &&fd
else if (ind == 4) {
gsub(/&&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>|)&&/ {
for (i = 1; i <= length(flname); i++) {
if (index($0, flpat[i]) != 0)
fileSubstitute(i)
}
}
searchEndP == 1 && /<\/p>/ {
gsub(/<\/p>/, "")
searchEndP = 0
}
|