blob: 653882778279562f19cfc4ce8cd93df36342bf5d (
plain)
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
|
(local {: must} (require :lib.utils))
(fn empty? [str]
(or (= str nil) (= (# str) 0)))
(fn letters [str]
(assert
(= "string" (type str))
(string.format "letters(): str must be string, %s given" (type str)))
(var result [])
(for [i 1 (must (luna.utf8.len str))]
(table.insert result (must (luna.utf8.sub str i 1))))
result)
(fn split [str delimiter]
(if (empty? str)
[]
(do
(local result {})
(local len (# str))
(var cursor 1)
(var (start end) (str:find delimiter))
(while start
(when (< cursor start)
(table.insert result (str:sub cursor (- start 1))))
(set cursor (+ end 1))
(set (start end) (str:find delimiter cursor)))
(when (<= cursor len)
(table.insert result (str:sub cursor len)))
result)))
(fn ends-with [str end]
(= (string.sub str (- (# end))) end))
(fn trim [str]
(str:match "^%s*(.-)%s*$"))
(fn truncate [str len ellipsis]
(if (and (= (type str) "string")
(< 0 (# str)))
(if (< (must (luna.utf8.len str)) len)
str
(.. (trim (must (luna.utf8.sub str 1 len))) (or ellipsis "...")))
""))
{: letters : empty? : split : ends-with : trim : truncate}
|