-
Notifications
You must be signed in to change notification settings - Fork 0
/
trunk_notes_lua_usage.txt
117 lines (71 loc) · 2.9 KB
/
trunk_notes_lua_usage.txt
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
# Some helpful info on how Lua works and how it interfaces with Trunk Notes.
{{lua Multiply.lua, 5, 10}}
n1 = args[1]
n2 = args[2]
return n1 * n2
# some people on the internet say ... (dotdotdot) should return a table of all the arguments, something like:
return ...
# haven't figured out how to get it to work yet, though
A wiki page is a Lua table (a hash) describing the page. The following attributes are available:
contents – the actual contents of the page
arguments – the list of arguments taken from the query string
page = wiki.get(title)
string.find(page.contents, "text")
is_a_front = false
for _, tag in pairs(page.tags) do
if tag == "Front" then
is_a_front = true
end
end
if is_a_front then
_, title_end = string.find(page.contents, "#Countdown\n")
if title_end then
_,_,first_plot = string.find(page.contents, "(%* .*)", title_end)
if first_plot then
title_list = title_list .. first_plot .. " ([[" .. title .. "]])\n"
end
end
end
string.find() will find the first instance of its second argument in its first, returning two values - where the match starts, and where the match ends. In other words:
string.find('foobar', 'foo') -->1 3
string.find('foobar', 'bar') -->4 6
actually, it returns two values plus any captures. Because string.find() knows regular expressions ("patterns").
Lua Arrays
http://www.lua.org/pil/11.1.html
# Helpful code example from
# https://github.com/evitiello/TrunkNotesScripts
-- Displays the last 20 pages that have been modified.
function string.starts(String,Start)
return string.sub(String,1,string.len(Start))==Start
end
returnString = ""
pageTimes = {}
pageTimeMapping = {}
for pageIteration, pageTitle in ipairs(wiki.titles()) do
pageUpdatedTime = wiki.get(pageTitle).updated
table.insert(pageTimes, pageUpdatedTime)
pageTimeMapping[pageUpdatedTime] = pageTitle
end
table.sort(pageTimes, function(a,b) return a>b end)
for i=1,5 do
returnString = returnString .. "[[" .. pageTimeMapping[pageTimes[i]] .. "]]\n"
end
return returnString
Lua Online Interpreter: http://www.lua.org/cgi-bin/demo
The string.find function has an optional third parameter: an index that tells where in the subject string to start the search. This parameter is useful when we want to process all the indices where a given pattern appears. We search for a new pattern repeatedly, each time starting after the position where we found the previous one. As an example, the following code makes a table with the positions of all newlines in a string:
local t = {} -- table to store the indices
local i = 0
while true do
i = string.find(s, "\n", i+1) -- find 'next' newline
if i == nil then break end
table.insert(t, i)
end
# Use string.sub to return slices of a string
text = "name = Anna"
print(string.sub(text, 4, 6))
# Using not to reverse booleans
x = 10
if not (z == 11) then
print(x)
end
-- returns 10