annotate data/build.luan @ 1:bd2abcd7190a

mostly done
author Franklin Schmidt <fschmidt@gmail.com>
date Tue, 20 Sep 2022 19:40:39 -0600
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
1 local Luan = require "luan:Luan.luan"
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
2 local error = Luan.error
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3 local ipairs = Luan.ipairs or error()
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
4 local type = Luan.type or error()
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
5 local stringify = Luan.stringify or error()
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
6 local Io = require "luan:Io.luan"
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
7 local uri = Io.uri or error()
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
8 local print = Io.print or error()
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
9 local String = require "luan:String.luan"
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
10 local starts_with = String.starts_with or error()
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
11 local Html = require "luan:Html.luan"
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
12 local html_parse = Html.parse or error()
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
13 local Table = require "luan:Table.luan"
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
14 local copy = Table.copy or error()
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
15
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
16 function Io.schemes.site(path)
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
17 return uri( "file:../src"..path )
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
18 end
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
19
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
20 local Db = require "site:/lib/Db.luan"
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
21
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
22 Db.delete_all()
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
23
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
24
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
25 local function get_user_htmls(html)
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
26 local rtn = {}
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
27 local n = #html
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
28 local i = 1
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
29 local el
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
30 while true do
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
31 while true do
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
32 if i > n then
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
33 return rtn
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
34 end
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
35 el = html[i]
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
36 if type(el)=="table" and el.type=="tag" and el.name=="div" and el.attributes.userid~=nil then
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
37 break
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
38 end
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
39 i = i + 1
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
40 end
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
41 local start = i
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
42 local nesting = 0
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
43 repeat
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
44 if type(el)=="table" and el.type=="tag" then
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
45 if el.name=="div" then
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
46 nesting = nesting + 1
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
47 elseif el.name=="/div" then
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
48 nesting = nesting - 1
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
49 end
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
50 end
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
51 i = i + 1
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
52 el = html[i]
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
53 until nesting==0
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
54 rtn[#rtn+1] = copy(html,start,i-1)
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
55 end
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
56 end
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
57
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
58 local function process_user_html(html)
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
59 --print(stringify(html[1]))
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
60 local user_id = html[1].attributes.userid or error()
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
61 if Db.count("user_id:"..user_id) > 0 then
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
62 return
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
63 end
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
64 local doc = {}
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
65 doc.user_id = user_id
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
66 for i, el in ipairs(html) do
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
67 if not (type(el)=="table" and el.type=="tag") then
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
68 continue
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
69 end
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
70 local name = el.name
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
71 local attributes = el.attributes
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
72 local class = attributes.class
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
73 if name=="span" and class=="organization" then
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
74 local user_name = html[i+1]
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
75 if type(user_name)=="table" and user_name.type=="tag" and user_name.name=="/span" then
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
76 user_name = ""
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
77 end
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
78 doc.user_name = user_name
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
79 elseif name=="a" and class~=nil and starts_with(class,"afftag ") then
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
80 doc.category = doc.category or {}
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
81 doc.category[#doc.category+1] = html[i+1]
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
82 elseif name=="section" and class=="description" then
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
83 doc.description = html[i+1]
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
84 elseif name=="a" and class=="aff-website" then
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
85 doc.websites = doc.websites or {}
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
86 doc.websites[#doc.websites+1] = attributes.href
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
87 end
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
88 end
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
89 Db.save(doc)
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
90 end
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
91
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
92 local pages_dir = uri "file:pages"
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
93
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
94 for _, dir in ipairs(pages_dir.children()) do
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
95 if starts_with( dir.name(), "." ) then
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
96 continue
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
97 end
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
98 --print(dir.name())
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
99 for _, file in ipairs(dir.children()) do
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
100 local text = file.read_text()
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
101 local html = html_parse(text)
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
102 local user_htmls = get_user_htmls(html)
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
103 print(file.name().." "..#user_htmls)
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
104 for _, user_html in ipairs(user_htmls) do
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
105 process_user_html(user_html)
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
106 end
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
107 --break
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
108 end
bd2abcd7190a mostly done
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
109 end