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
|
#
# == 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
function flSub(name, repl, isft) {
if (isft)
repl = "<td><div class=\"file-icon\">" repl "</div></td>"
sub("&&" name, repl)
fl_rmPar = 1
}
/&&folder/ {
flSub("folder", "<details class=\"file-wrapper\"><summary>")
fl_folder = 1
}
/&&file/ {
# if inside folder and not the first &&file
if (fl_folder == 2)
flSub("file", "</tr><tr>")
# if inside folder and being the first &&file
else if (fl_folder == 1) {
flSub("file", "</summary><table class=\"file-list\"><tr>")
fl_folder = 2
}
# if not inside folder (standalone)
else
flSub("file", "<table class=\"file-list\"><tr>")
}
/&&/files/ {
# if inside folder
if (fl_folder) {
flSub("/files", "</tr></table></details>")
fl_folder = 0
}
else
flSub("/files", "</tr></table>")
}
/&&fd/ {
sub(/&&fd[ \t]*/, "<td>")
$0 = $0 "</td>"
fl_rmPar = 1
}
/&&ft-photo/ { flSub("ft-photo", "\\", 1) }
/&&ft-text/ { flSub("ft-text", "\\", 1) }
/&&ft-zip/ { flSub("ft-zip", "\\", 1) }
/&&ft-movie/ { flSub("ft-movie", "\\", 1) }
/&&ft-markdown/ { flSub("ft-markdown", "\\", 1) }
/<p>/ && fl_rmPar { sub(/<p>/, "") }
/<\/p>/ && fl_rmPar { sub(/<\/p>/, "") ; fl_rmPar = 0 }
|