/** Parsing related */ METADATA_CMD_CURRENT_DT :: "now"; METADATA_MARKER :: "META;"; REFERENCE_MARKER :: "[!link:"; PATTERN_PUBLISHED :: "published:"; PATTERN_UPDATED :: "updated:"; /** This is used by the search server. Hence the 'extern' */ PATTERN_EXTERN_ENTRY :: ""; /** Note: The order is very important! @blog.jai: dispatch_metadata() */ KEYWORDS :: string.[ "title:", "width:", PATTERN_PUBLISHED, PATTERN_UPDATED, ]; /** Regex pattern covers those cases: 2025-01-01(123456) 2025-01-01-01-01(123456) 2025-01-01 ( 123456 ) 2025-01-01-01-01 ( 123456 ) */ PATTERN_RE_DATETIME :: "\\d{4}-\\d{2}-\\d{2}(?:-\\d{2}-\\d{2})?\\s*\\(\\s*\\d+\\s*\\)"; /** Allowed date formats in the header of blog posts. YYYY-MM-DD-hh-mm published: 2025-05-01-01-00 Date and time published: 2025-05-01 Only date published: now Current DT published: Empty (uses current dt) Omitted (uses current dt) */ PARSER_FORMAT_DT_DELIMITER :: "-"; PARSER_FORMAT_DATETIME_DELIMITER_COUNT :: 4; PARSER_FORMAT_DATE_DELIMITER_COUNT :: 2; /** End parser stuff */ /** TODO(adam, 2): The whole directory management is a little bit messy, for now it's fine, but maybe we need something more concise. The current for creating directories also sucks. */ /** Top level directories */ DIR_TEMPLATES :: "templates"; DIR_POSTS :: "posts"; DIR_WWW :: "www"; DIR_GENERIC :: "generic"; DIR_ASSETS :: "assets"; DIR_DUMPS :: "dumps"; /** Relative to top level (don't create them) */ SUBDIR_IMAGES :: "images"; SUBDIR_POSTS :: "posts"; /** Absolute paths */ DIR_POSTS_IMAGES :: #run tprint("%/%", DIR_POSTS, SUBDIR_IMAGES); DIR_WWW_IMAGES :: #run tprint("%/%", DIR_WWW, SUBDIR_IMAGES); DIR_WWW_POSTS :: #run tprint("%/%", DIR_WWW, SUBDIR_POSTS); /** File paths */ FP_DUMP_ENTRIES_MD :: #run tprint("%/entries_md.bin", DIR_DUMPS); FP_DUMP_ENTRIES_HTML :: #run tprint("%/entries_html.bin", DIR_DUMPS); FP_DUMP_SEARCH_INDEX :: #run tprint("%/search_index.bin", DIR_DUMPS); FP_ASSETS_FAVICON :: #run tprint("%/logo.png", DIR_ASSETS); FP_WWW_FAVICON :: #run tprint("%/favicon.png", DIR_WWW); FP_WWW_SEARCH_RESULTS :: #run tprint("%/search_results.html", DIR_WWW); /** Things to create */ DIRECTORIES_TO_CREATE :: string.[ /** Top level */ DIR_WWW, DIR_DUMPS, /** Sub directories */ DIR_WWW_IMAGES, DIR_WWW_POSTS, ]; FILES_TO_COPY :: Copy_File.[ .{ FP_ASSETS_FAVICON, FP_WWW_FAVICON }, ]; /** Website metadata */ PAGE_URL :: "https://blog.ptrace.dev"; PAGE_URL_POST :: #run tprint("%?ts=\%", PAGE_URL); PAGE_TITLE :: "ptrace blog"; PAGE_DESCRIPTION :: "Some tech blog"; PAGE_IMAGE_MAX_WIDTH :: 1000; PAGE_ENTRIES_MAX :: 25; PAGE_OVERVIEW_ITEMS_MAX :: 200; RSS_FP :: #run tprint("%/ptrace.dev.rss", DIR_WWW); RSS_URL :: #run tprint("%/rss", PAGE_URL);