struct DocPage { String title; String content; StringList sig_lines; StringList param_lines; StringList see_lines; }; StringMap* already_shown_items; String doc_default_title(String page) { String page_title = page; if(page_title.length() > 1 && page_title[1] == '_') nibble(page_title, "_"); return(page_title); } String doc_markdown_inline(String text) { text = trim(text); if(text == "") return(""); String html = markdown_to_html(text); if(html.length() >= 7 && html.substr(0, 3) == "

" && html.substr(html.length() - 4) == "

") return(html.substr(3, html.length() - 7)); return(html); } String doc_legacy_heading(String section) { if(section == "desc") return(""); if(section == "related") return("## PHP & JS Equivalents"); return("## " + section); } DocPage load_doc_page(String page) { DocPage result; StringList lines = split(file_get_contents("pages/" + page + ".txt"), "\n"); String current_section = ""; bool content_mode = false; StringList content_lines; for(auto line : lines) { if(!content_mode && line != "" && line.substr(0, 1) == ":") { String section = trim(line.substr(1)); if(section == "title" || section == "sig" || section == "params" || section == "see") { current_section = section; continue; } if(section == "content") { content_mode = true; current_section = "content"; continue; } current_section = "legacy"; String heading = doc_legacy_heading(section); if(heading != "") { if(content_lines.size() > 0 && content_lines.back() != "") content_lines.push_back(""); content_lines.push_back(heading); content_lines.push_back(""); } continue; } if(current_section == "title") { if(result.title != "") result.title += "\n"; result.title += line; } else if(current_section == "sig") { result.sig_lines.push_back(line); } else if(current_section == "params") { result.param_lines.push_back(line); } else if(current_section == "see") { if(trim(line) != "") result.see_lines.push_back(trim(line)); } else { content_lines.push_back(line); } } result.content = join(content_lines, "\n"); result.title = trim(result.title); return(result); } void render_doc_params(StringList param_lines) { if(param_lines.size() == 0) return; <>

Parameters

for(auto line : param_lines) { if(trim(line) == "") continue; String name = trim(nibble(line, ":")); String value = trim(line); <>
:
} <>
} void render_doc_page(String page) { (*already_shown_items)[page] = "Y"; DocPage doc_page = load_doc_page(page); String title = doc_default_title(page); if(doc_page.title != "") title = doc_page.title; <>

if(doc_page.sig_lines.size() > 0) { <>
} <>
render_doc_params(doc_page.param_lines); if(trim(doc_page.content) != "") { <>
} <>
} void render_see_section(String name) { StringList lines = split(file_get_contents("areas/" + name + ".txt"), "\n"); s32 idx = 0; for(auto line : lines) { if(idx == 0) { <>

} else if(line != "") { render_doc_page(line); } idx += 1; } } RENDER(Request& context) { StringMap shown_items; already_shown_items = &shown_items; <>

UCE API

Other Functions and Data Structures

}