diff --git a/src/awesomewm.d.tl/scraper/module_doc.tl b/src/awesomewm.d.tl/scraper/module_doc.tl index 33d14ca..57d188f 100644 --- a/src/awesomewm.d.tl/scraper/module_doc.tl +++ b/src/awesomewm.d.tl/scraper/module_doc.tl @@ -115,28 +115,44 @@ end local function extract_section_functions(dl: string): { Function_Info.Function_Info } local query_selectors = { - function_name = "dt a", - function_parameters = "dd table", - function_return_type = "dd ol", + header = "dt", + body = "dd", + parameters = "table", + return_types = "ol", } return scraper_utils.scrape_tuples( dl, - { query_selectors.function_name, query_selectors.function_parameters, query_selectors.function_return_type }, + { query_selectors.header, query_selectors.body }, function(nodes: { string : scan.HTMLNode | nil }): Function_Info.Function_Info - local function_info = Function_Info() - - function_info.name = - extract_item_name(nodes[query_selectors.function_name]) - function_info.parameters = - List(extract_function_parameters(nodes[query_selectors.function_parameters])) - function_info.return_types = List( - extract_function_return_types( - nodes[query_selectors.function_return_type] + if not nodes[query_selectors.header] or not nodes[query_selectors.body] then + log:warn( + logger.message_with_metadata( + "Missing header or body", + { nodes = nodes } + ) ) + error("Missing header or body") + end + local header = nodes[query_selectors.header] as scan.HTMLNode + local body = nodes[query_selectors.body] as scan.HTMLNode + local body_elements = scraper_utils.extract_nodes( + body:outer_html(), + { query_selectors.parameters, query_selectors.return_types } ) - - return function_info + return { + name = scraper_utils.scrape( + header:outer_html(), + "a", + extract_item_name + )[1], + parameters = #body_elements:get(query_selectors.parameters) ~= 0 and + List(extract_function_parameters(body_elements:get(query_selectors.parameters)[1])) or + (List() as List), + return_types = #body_elements:get(query_selectors.return_types) ~= 0 and + List(extract_function_return_types(body_elements:get(query_selectors.return_types)[1])) or + (List() as List), + } end ) end