-
Notifications
You must be signed in to change notification settings - Fork 0
/
util.e
151 lines (121 loc) · 3.43 KB
/
util.e
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
include wildcard.e
constant roast_str = {#F3, #26, #81, #C4, #39, #86, #DB, #92, #71, #A3, #B9, #E6, #53, #7A, #95, #7C}
global function strip_name (sequence str)
sequence out
out = ""
for i = 1 to length(str) do
if str[i] != ' ' then
out &= str[i]
end if
end for
return lower(out)
end function
global function compare_name (sequence s1, sequence s2)
return equal(strip_name(s1), strip_name(s2))
end function
global function roast (sequence pw)
integer countB
sequence out, outB
out = ""
countB = 1
for count = 1 to length(pw) do
out &= xor_bits(pw[count], roast_str[countB])
countB += 1
if countB > length(roast_str) then
countB = 1
end if
end for
return out
end function
global function bytesto16 (sequence s)
return s[1] * #100 + s[2]
end function
global function bytesto32 (sequence s)
return s[1] * #1000000 + s[2] * #10000 + s[3] * #100 + s[4]
end function
global function i16tobytes (integer i)
return floor(i / #100) & remainder(i, #100)
end function
global function i32tobytes (integer i)
return {floor(floor(i / #10000) / #100),
remainder(floor(i / #10000), #100),
floor(remainder(i, #10000) / #100),
remainder(remainder(i, #10000), #100)}
end function
global procedure safe_proc (integer id, sequence args)
if id > -1 then
call_proc(id, args)
end if
end procedure
global function make_SNAC (integer fam, integer sub, integer flag, atom req, sequence data)
return i16tobytes(fam) &
i16tobytes(sub) &
i16tobytes(flag) &
i32tobytes(req) &
data
end function
global function make_FLAP (integer chan, atom seq, sequence data)
return #2A &
chan &
i16tobytes(seq) &
i16tobytes(length(data)) &
data
end function
global function make_TLV (integer typ, sequence str)
return i16tobytes(typ) &
i16tobytes(length(str)) &
str
end function
global function make_fragment (integer id, integer ver, sequence str)
return id &
ver &
i16tobytes(length(str)) &
str
end function
global function strip_html (sequence txt)
sequence new, links, imgs, URL, tag
integer in_tag, x, lnum
new = ""
tag = ""
in_tag = 0
x = 0
lnum = 1
links = {}
imgs = {}
for i = 1 to length(txt) do
if txt[i] = '<' and not in_tag then
in_tag = 1
x = 0
tag = ""
elsif txt[i] = '>' and in_tag then
in_tag = 0
-- parsing the tag
elsif in_tag = 1 and x = 0 then
if txt[i] = ' ' then
if equal(lower(tag), "a") then
new &= sprintf("[%d]", lnum)
lnum += 1
x = 0
tag = ""
end if
elsif txt[i] = '=' and equal(lower(tag), "href") then
x = 1
tag = ""
else
tag &= txt[i]
end if
-- parsing the HREF paramater of an anchor tag
elsif in_tag = 1 and x = 1 then
if txt[i] = ' ' then
if tag[1] = '"' or tag[1] = '\'' then
tag = tag[2..$ - 1]
end if
links = append(links, tag)
x = 2
end if
elsif in_tag = 0 then
new &= txt[i]
end if
end for
return {new, links, imgs}
end function