From 1debf0347ff8e74bd56e18970fc43c4c8336462c Mon Sep 17 00:00:00 2001 From: Aaron Taylor Date: Sun, 7 Jan 2018 04:30:01 -0800 Subject: [PATCH] Added ability to record metadata at top of page data file. Added a couple starting examples using this feature. --- bin/cmless.py | 2 ++ bin/misc.py | 32 ++++++++++++++++++++++++++++-- bin/template.py | 33 +++++++++++++++++++------------ site_sample/data/index.md | 7 +++++++ site_sample/template/template.tpl | 2 ++ 5 files changed, 61 insertions(+), 15 deletions(-) diff --git a/bin/cmless.py b/bin/cmless.py index 84d5b69..825ec25 100755 --- a/bin/cmless.py +++ b/bin/cmless.py @@ -16,6 +16,8 @@ def main(): content = template.page_title(content) content = template.site_title(content) content = template.current_year(content) + content = template.head_meta_description(content) + content = template.head_meta_keywords(content) content = template.body(content) print(content) diff --git a/bin/misc.py b/bin/misc.py index 821ef34..846ebfe 100644 --- a/bin/misc.py +++ b/bin/misc.py @@ -2,10 +2,10 @@ # See LICENSE file for copyright and license details. # Python imports -import sys, subprocess +import os, sys, subprocess, configparser # CMless imports -import debug, config +import debug, config, template # Accepts a string containing a filesystem path to a text file. # Returns a string containing the contents of that file. @@ -30,3 +30,31 @@ def process_markup(text): sys.exit("Unable to open markup processor: " + config.markup_processor) text = p.communicate(text.encode('UTF-8'))[0] return(text.decode('UTF-8')) + +def strip_page_metadata(content): + keyword = template.add_delimiter("END_PAGE_METADATA") + index = content.find(keyword) + if index != -1: + return content[index+len(keyword):] + else: + return content + +def lookup_page_metadata(key): + page_file = load_file(config.site_data_prefix + os.environ['REQUEST_URI'] + + config.markup_file_extension) + + keyword_begin = template.add_delimiter("BEGIN_PAGE_METADATA") + keyword_end = template.add_delimiter("END_PAGE_METADATA") + index = page_file.find(keyword_end) + if index != -1: + page_file = page_file[len(keyword_begin):index] + else: + page_file = "" + + page_metadata = configparser.ConfigParser() + page_metadata.read_string(page_file) + + if 'DEFAULT' in page_metadata and key in page_metadata['DEFAULT']: + return page_metadata['DEFAULT'][key] + else: + return "" diff --git a/bin/template.py b/bin/template.py index a39090f..cdc7fe7 100644 --- a/bin/template.py +++ b/bin/template.py @@ -7,27 +7,34 @@ import os, datetime # CMless imports import config, misc +def add_delimiter(keyword): + return config.template_delimiter + keyword + config.template_delimiter + +def head_meta_description(template): + keyword = add_delimiter("meta_description") + return template.replace(keyword,'') + +def head_meta_keywords(template): + keyword = add_delimiter("meta_keywords") + return template.replace(keyword,'') + def page_title(template): - keyword = "page_title" - return template.replace(config.template_delimiter + keyword + - config.template_delimiter, config.site_name + " - " + - os.environ['REQUEST_URI']) + keyword = add_delimiter("page_title") + return template.replace(keyword, config.site_name + " - " + misc.lookup_page_metadata("page_title")) def site_title(template): - keyword = "site_title" - return template.replace(config.template_delimiter + keyword + - config.template_delimiter, config.site_name) + keyword = add_delimiter("site_title") + return template.replace(keyword, config.site_name) def body(template): - keyword = "page_content" + keyword = add_delimiter("page_content") body = misc.load_file(config.site_data_prefix + os.environ['REQUEST_URI'] + config.markup_file_extension) + body = misc.strip_page_metadata(body) body = misc.process_markup(body) - return template.replace(config.template_delimiter + keyword + - config.template_delimiter, body) + return template.replace(keyword, body) def current_year(template): - keyword = "current_year" + keyword = add_delimiter("current_year") now = datetime.datetime.now() - return template.replace(config.template_delimiter + keyword + - config.template_delimiter, str(now.year)) + return template.replace(keyword, str(now.year)) diff --git a/site_sample/data/index.md b/site_sample/data/index.md index 57f362a..ed61039 100644 --- a/site_sample/data/index.md +++ b/site_sample/data/index.md @@ -1,3 +1,10 @@ +%%BEGIN_PAGE_METADATA%% +[DEFAULT] +page_title = Markdown Reference +meta_keywords = Words,that,describe,the,page +meta_description = A description of the page. +%%END_PAGE_METADATA%% + Markdown Test ============= diff --git a/site_sample/template/template.tpl b/site_sample/template/template.tpl index 18fcc43..d42acb4 100644 --- a/site_sample/template/template.tpl +++ b/site_sample/template/template.tpl @@ -3,6 +3,8 @@ %%page_title%% + %%meta_description%% + %%meta_keywords%%