diff options
author | Volpeon <git@volpeon.ink> | 2021-05-27 20:53:44 +0200 |
---|---|---|
committer | Volpeon <git@volpeon.ink> | 2021-05-27 20:53:44 +0200 |
commit | 4df33046d142554c16a8dba9bfcc03c4be157dd9 (patch) | |
tree | 11adbf88e76f8c37cb7a9b7e6e38cdb83e2f4ff5 /scripts | |
parent | Rephrased personal section description (diff) | |
download | volpeon.ink-4df33046d142554c16a8dba9bfcc03c4be157dd9.tar.gz volpeon.ink-4df33046d142554c16a8dba9bfcc03c4be157dd9.tar.bz2 volpeon.ink-4df33046d142554c16a8dba9bfcc03c4be157dd9.zip |
Automatic titlecase for page titles
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/metadata_filter.lua | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/scripts/metadata_filter.lua b/scripts/metadata_filter.lua index ebbd6d4..6c3817a 100644 --- a/scripts/metadata_filter.lua +++ b/scripts/metadata_filter.lua | |||
@@ -146,7 +146,7 @@ function process_pages(global, pages_by_id) | |||
146 | pages_list:sort(function(p1, p2) | 146 | pages_list:sort(function(p1, p2) |
147 | if p1.position then | 147 | if p1.position then |
148 | if p2.position then | 148 | if p2.position then |
149 | return p1.position < p2.position | 149 | return tonumber(p1.position) < tonumber(p2.position) |
150 | else | 150 | else |
151 | return true | 151 | return true |
152 | end | 152 | end |
@@ -197,12 +197,28 @@ function pages_last_update(all_pages) | |||
197 | return last_update | 197 | return last_update |
198 | end | 198 | end |
199 | 199 | ||
200 | local titlecase_exceptions = pandoc.List({ | ||
201 | "a", "an", "and", "as", "at", "but", "by", "en", "for", "if", "in", "nor", "of", "on", "or", | ||
202 | "per", "the", "to", "v%.?", "vs%.?", "via", | ||
203 | }) | ||
204 | |||
205 | function titlecase(str) | ||
206 | return str:gsub("(%S)(%S*)(%s*)", function(a, b, space) | ||
207 | local word = a .. b | ||
208 | local is_exception = word:match("%u") or | ||
209 | titlecase_exceptions:find_if( | ||
210 | function(exception) return word:match("^" .. exception .. "$") end) | ||
211 | if is_exception then return word .. space end | ||
212 | return string.upper(a) .. b .. space | ||
213 | end) | ||
214 | end | ||
215 | |||
200 | function process(global, meta) | 216 | function process(global, meta) |
201 | meta.namespace = resolve_namespace(meta.namespace) | 217 | meta.namespace = resolve_namespace(meta.namespace) |
202 | meta.file_out = pandoc.utils.stringify(meta.file_out):gsub("^out", "") | 218 | meta.file_out = pandoc.utils.stringify(meta.file_out):gsub("^out", "") |
203 | meta.layout = resolve_layout(meta.layout) | 219 | meta.layout = resolve_layout(meta.layout) |
204 | meta.url = resolve_url(global.site.url, global.file_out, meta.file_out) | 220 | meta.url = resolve_url(global.site.url, global.file_out, meta.file_out) |
205 | meta.title = (meta.title and pandoc.utils.stringify(meta.title)) or "" | 221 | meta.title = (meta.title and titlecase(pandoc.utils.stringify(meta.title))) or "" |
206 | 222 | ||
207 | if meta.position then meta.position = pandoc.utils.stringify(meta.position) end | 223 | if meta.position then meta.position = pandoc.utils.stringify(meta.position) end |
208 | 224 | ||