From 9a7312c5856082cbedb4f7c1105996af944a8e68 Mon Sep 17 00:00:00 2001 From: Yax Date: Wed, 24 Sep 2025 18:51:49 +0200 Subject: [PATCH] CQ --- makesite.py | 115 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 67 insertions(+), 48 deletions(-) diff --git a/makesite.py b/makesite.py index fe12c22..abebdd6 100755 --- a/makesite.py +++ b/makesite.py @@ -53,6 +53,7 @@ FRENCH_MONTHS = ['janv.', 'févr.', 'mars', 'avr.', 'mai', 'juin', # initialize markdown + class HighlightRenderer(mistune.HTMLRenderer): def block_code(self, code, info=None): if info: @@ -61,6 +62,7 @@ class HighlightRenderer(mistune.HTMLRenderer): return highlight(code, lexer, formatter) return '
' + mistune.escape(code) + '
' + markdown = mistune.create_markdown(renderer=HighlightRenderer()) @@ -101,7 +103,9 @@ def read_headers(text): def rfc_2822_format(date_str): """Convert yyyy-mm-dd date string to RFC 2822 format date string.""" d = datetime.datetime.strptime(date_str, "%Y-%m-%d") - return d.replace(tzinfo=datetime.timezone.utc).strftime('%a, %d %b %Y %H:%M:%S %z') + return d \ + .replace(tzinfo=datetime.timezone.utc) \ + .strftime('%a, %d %b %Y %H:%M:%S %z') def slugify(value): @@ -111,7 +115,9 @@ def slugify(value): trailing whitespace. """ value = ( - unicodedata.normalize("NFKD", value).encode("ascii", "ignore").decode("ascii") + unicodedata.normalize("NFKD", value) + .encode("ascii", "ignore") + .decode("ascii") ) value = re.sub(r"[^\w\s-]", "", value).strip().lower() return re.sub(r"[-\s]+", "-", value) @@ -190,12 +196,12 @@ def render(template, **params): def get_header_list_value(header_name, page_params): - l = [] + header_list = [] if header_name in page_params: for s in page_params[header_name].split(" "): if s.strip(): - l.append(s.strip()) - return l + header_list.append(s.strip()) + return header_list def get_friendly_date(date_str): @@ -205,7 +211,8 @@ def get_friendly_date(date_str): def make_posts( - src, src_pattern, dst, layout, category_layout, comment_layout, comment_detail_layout, **params + src, src_pattern, dst, layout, category_layout, + comment_layout, comment_detail_layout, **params ): """Generate posts from posts directory.""" items = [] @@ -224,13 +231,18 @@ def make_posts( page_params["date_path"] = page_params["date"].replace("-", "/") page_params["friendly_date"] = get_friendly_date(page_params["date"]) page_params["year"] = page_params["date"].split("-")[0] - page_params["post_url"] = page_params["year"] + "/" + page_params["slug"] + "/" + page_params["post_url"] = \ + page_params["year"] \ + + "/" \ + + page_params["slug"] + "/" # categories categories = get_header_list_value("category", page_params) out_cats = [] for category in categories: - out_cat = render(category_layout, category=category, url=slugify(category)) + out_cat = render(category_layout, + category=category, + url=slugify(category)) out_cats.append(out_cat.strip()) page_params["categories"] = categories page_params["category_label"] = "".join(out_cats) @@ -316,12 +328,12 @@ def make_notes( page_params["header"] = "" page_params["footer"] = "" page_params["friendly_date"] = "" - page_params["category_label"] = "" + page_params["category_label"] = "" page_params["post_url"] = "notes/" + page_params["slug"] + "/" content["post_url"] = page_params["post_url"] content["friendly_date"] = page_params["friendly_date"] - content["category_label"] = page_params["category_label"] + content["category_label"] = page_params["category_label"] items.append(content) dst_path = render(dst, **page_params) @@ -334,7 +346,8 @@ def make_notes( def make_list( - posts, dst, list_layout, item_layout, header_layout, footer_layout, **params + posts, dst, list_layout, item_layout, + header_layout, footer_layout, **params ): """Generate list page for a blog.""" @@ -375,6 +388,43 @@ def make_list( fwrite(dst_path, output) +def generate_rss(posts, params): + rss_xml = fread("layout/rss.xml") + rss_item_xml = fread("layout/rss_item.xml") + # Create main RSS feed for 10 last entries + nb_items = min(10, len(posts)) + for filename in ("_site/rss.xml", "_site/index.xml"): + make_list( + posts[:nb_items], + filename, + rss_xml, + rss_item_xml, + None, + None, + **params + ) + + # Create RSS feed by tag + tag_post = {} + for post in posts: + for tag in post["tags"]: + if tag in tag_post: + tag_post[tag].append(post) + else: + tag_post[tag] = [post] + for tag in tag_post.keys(): + params["tag"] = tag + make_list( + tag_post[tag], + "_site/rss." + slugify(tag) + ".xml", + rss_xml, + rss_item_xml, + None, + None, + **params + ) + + def main(param_file): # Create a new _site directory from scratch. if os.path.isdir("_site"): @@ -409,8 +459,6 @@ def main(param_file): category_layout = fread("layout/category.html") comment_layout = fread("layout/comment.html") comment_detail_layout = fread("layout/comment-detail.html") - rss_xml = fread("layout/rss.xml") - rss_item_xml = fread("layout/rss_item.xml") sitemap_xml = fread("layout/sitemap.xml") sitemap_item_xml = fread("layout/sitemap_item.xml") note_layout = fread("layout/note.html") @@ -432,10 +480,11 @@ def main(param_file): **params ) - # Create blog list pages. + # Create blog list pages by 10. page_size = 10 chunk_posts = [ - blog_posts[i: i + page_size] for i in range(0, len(blog_posts), page_size) + blog_posts[i: i + page_size] + for i in range(0, len(blog_posts), page_size) ] page = 1 last_page = len(chunk_posts) @@ -500,38 +549,7 @@ def main(param_file): **params ) - # Create main RSS feed for 10 last entries - nb_items = min(10, len(blog_posts)) - for filename in ("_site/rss.xml", "_site/index.xml"): - make_list( - blog_posts[:nb_items], - filename, - rss_xml, - rss_item_xml, - None, - None, - **params - ) - - # Create RSS feed by tag - tag_post = {} - for post in blog_posts: - for tag in post["tags"]: - if tag in tag_post: - tag_post[tag].append(post) - else: - tag_post[tag] = [post] - for tag in tag_post.keys(): - params["tag"] = tag - make_list( - tag_post[tag], - "_site/rss." + slugify(tag) + ".xml", - rss_xml, - rss_item_xml, - None, - None, - **params - ) + generate_rss(blog_posts, params) # Create sitemap make_list( @@ -569,6 +587,7 @@ _test = None if __name__ == "__main__": parser = argparse.ArgumentParser(description='Makesite') - parser.add_argument('--params', dest='param_file', type=str, default="params.json", help='Custom param file') + parser.add_argument('--params', dest='param_file', type=str, + default="params.json", help='Custom param file') args = parser.parse_args() main(args.param_file)