Compare commits
No commits in common. "2783198e06ce3332f30937c5a9cf63ea02246578" and "ee04a0f43eb22baad380ad15031e9bee1e9261b8" have entirely different histories.
2783198e06
...
ee04a0f43e
70
Makefile
70
Makefile
@ -1,70 +0,0 @@
|
|||||||
.PHONY: serve clean info
|
|
||||||
|
|
||||||
SRC_DIR := src
|
|
||||||
BUILD_DIR := build
|
|
||||||
ENTRIES_LIST := .entries.csv
|
|
||||||
|
|
||||||
SORT := sort -r
|
|
||||||
# Pandoc basic configuration
|
|
||||||
PANDOC := pandoc -s
|
|
||||||
PANDOC_FILTERS :=
|
|
||||||
|
|
||||||
PANDOC_METADATA = \
|
|
||||||
--template=templates/default.html \
|
|
||||||
--metadata-file metadata.yaml \
|
|
||||||
--metadata=path="$(shell echo $@ | sed -e 's/build//g' )" \
|
|
||||||
--metadata=git_initial_date="$(shell git log --reverse -n 1 --pretty=format:%aI -- $< || echo 'draft')" \
|
|
||||||
--metadata=git_date="$(shell git log -n 1 --pretty=format:%aI -- $< || echo 'draft')" \
|
|
||||||
|
|
||||||
PANDOC_COMMAND = $(PANDOC) $(PANDOC_FILTERS) $(PANDOC_METADATA)
|
|
||||||
|
|
||||||
# Blog Configuration
|
|
||||||
COMMENT_SECTION := templates/comment-section.html
|
|
||||||
PANDOC_BLOG_FILTER := filters/blog_feed.py
|
|
||||||
|
|
||||||
# Public Pages configuration
|
|
||||||
#
|
|
||||||
# All markdown files
|
|
||||||
PAGES = \
|
|
||||||
build/index.html \
|
|
||||||
build/contact.html
|
|
||||||
FEEDS = build/blog/index.html build/blog/rss.xml
|
|
||||||
ENTRIES = $(shell find src/blog -mindepth 2 -type f -name '*.md' | sed -e 's/\.md/.html/;s/src/build/g')
|
|
||||||
# PAGES = # Define here which pages to publish.
|
|
||||||
# PAGES = build/index.html
|
|
||||||
|
|
||||||
info:
|
|
||||||
@echo $(ENTRIES)
|
|
||||||
|
|
||||||
|
|
||||||
all: $(PAGES) $(FEEDS)
|
|
||||||
|
|
||||||
$(ENTRIES_LIST): $(ENTRIES)
|
|
||||||
|
|
||||||
|
|
||||||
$(BUILD_DIR)/blog/%.html: $(SRC_DIR)/blog/%.md $(COMMENT_SECTION)
|
|
||||||
mkdir -p $(shell dirname $@)
|
|
||||||
[[ -d "$(shell dirname $<)/assets" ]] \
|
|
||||||
&& cp -r $(shell dirname $<)/assets/. $(shell dirname $@)/assets \
|
|
||||||
|| echo "Entry with no assets"
|
|
||||||
$(PANDOC_COMMAND) \
|
|
||||||
--filter $(PANDOC_BLOG_FILTER) \
|
|
||||||
--include-after-body=$(COMMENT_SECTION) \
|
|
||||||
-i $< -o $@
|
|
||||||
|
|
||||||
$(BUILD_DIR)/blog/index.html: $(SRC_DIR)/blog/index.md $(ENTRIES_LIST)
|
|
||||||
cat $(ENTRIES_LIST) | $(SORT) | ./scripts/entries2rss.py html | \
|
|
||||||
$(PANDOC_COMMAND) -i $< -i - -o $@
|
|
||||||
|
|
||||||
$(BUILD_DIR)/blog/rss.xml: $(ENTRIES_LIST)
|
|
||||||
cat $(ENTRIES_LIST) | $(SORT) | ./scripts/entries2rss.py > $@
|
|
||||||
|
|
||||||
$(BUILD_DIR)/%.html: $(SRC_DIR)/%.md
|
|
||||||
mkdir -p $(shell dirname $@)
|
|
||||||
$(PANDOC_COMMAND) -i $< -o $@
|
|
||||||
|
|
||||||
serve:
|
|
||||||
python3 -m http.server --directory $(BUILD_DIR)
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -rf $(BUILD_DIR) $(ENTRIES_LIST)
|
|
||||||
@ -1,34 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
import csv
|
|
||||||
import panflute as pf
|
|
||||||
|
|
||||||
def action(elem, doc):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def finalize(doc):
|
|
||||||
keys = [
|
|
||||||
"git_date",
|
|
||||||
"git_initial_date",
|
|
||||||
"title",
|
|
||||||
"subject",
|
|
||||||
"path",
|
|
||||||
"base_url",
|
|
||||||
"feed_list_path",
|
|
||||||
]
|
|
||||||
rss_data = {}
|
|
||||||
for k in keys:
|
|
||||||
rss_data[k] = doc.get_metadata(k, "")
|
|
||||||
feed_list_path = rss_data["feed_list_path"]
|
|
||||||
path = rss_data["base_url"] + rss_data["path"]
|
|
||||||
rss_data["path"] = path
|
|
||||||
del rss_data["feed_list_path"]
|
|
||||||
del rss_data["base_url"]
|
|
||||||
with open(feed_list_path, "a") as file:
|
|
||||||
writer = csv.DictWriter(file, fieldnames=keys[:-2])
|
|
||||||
writer.writerow(rss_data)
|
|
||||||
|
|
||||||
def main(doc=None):
|
|
||||||
return pf.run_filter(action, finalize=finalize, doc=doc)
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
||||||
@ -1,11 +0,0 @@
|
|||||||
title: Personal Site
|
|
||||||
subtitle: Foo Bar
|
|
||||||
global_links:
|
|
||||||
- name: Index
|
|
||||||
uri: /
|
|
||||||
- name: Contact
|
|
||||||
uri: /contact.html
|
|
||||||
- name: Blog
|
|
||||||
uri: /blog
|
|
||||||
feed_list_path: .entries.csv
|
|
||||||
base_url: http://localhost:8000
|
|
||||||
@ -1,59 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
from sys import stdin, argv
|
|
||||||
from csv import DictReader
|
|
||||||
import panflute as pf
|
|
||||||
import yaml
|
|
||||||
from yaml.loader import SafeLoader
|
|
||||||
|
|
||||||
fieldnames = [
|
|
||||||
"git_date",
|
|
||||||
"git_initial_date",
|
|
||||||
"title",
|
|
||||||
"subject",
|
|
||||||
"path",
|
|
||||||
]
|
|
||||||
|
|
||||||
def entry_to_rss(entry):
|
|
||||||
return (
|
|
||||||
f'<item>\n'
|
|
||||||
f'<title>{entry["title"]}</title>\n'
|
|
||||||
f'<description>{entry.get("subtitle", "")}</description>\n'
|
|
||||||
f'<link>{entry["path"]}</link>\n'
|
|
||||||
f'<lastBuildDate>{entry["git_date"]}</lastBuildDate>\n'
|
|
||||||
f'<pubDate>{entry["git_initial_date"]}</pubDate>\n'
|
|
||||||
'</item>\n'
|
|
||||||
)
|
|
||||||
|
|
||||||
def entry_to_html(entry):
|
|
||||||
date = entry["git_date"]
|
|
||||||
link = entry["path"]
|
|
||||||
title = entry["title"]
|
|
||||||
return (
|
|
||||||
f'<li>\n'
|
|
||||||
f'<a href="{link}">{date[:10]} - {title}</a>\n'
|
|
||||||
'</li>\n'
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
reader = DictReader(stdin, fieldnames)
|
|
||||||
entries = [row for row in reader]
|
|
||||||
with open('metadata.yaml') as f:
|
|
||||||
metadata = yaml.load(f, Loader=SafeLoader)
|
|
||||||
if "html" in argv:
|
|
||||||
converter = entry_to_html
|
|
||||||
print("<ul>")
|
|
||||||
else:
|
|
||||||
converter = entry_to_rss
|
|
||||||
print('<?xml version="1.0" encoding="UTF-8" ?>\n<rss version="2.0">')
|
|
||||||
print("<channel>")
|
|
||||||
print("<title>", metadata["title"], "</title>")
|
|
||||||
print("<link>", metadata["base_url"], "</link>")
|
|
||||||
print("<description>", metadata.get("description", ""), "</description>")
|
|
||||||
for entry in entries:
|
|
||||||
print(converter(entry))
|
|
||||||
if "html" in argv:
|
|
||||||
print("</ul>")
|
|
||||||
else:
|
|
||||||
print("</channel></rss>")
|
|
||||||
|
|
||||||
@ -1,46 +0,0 @@
|
|||||||
---
|
|
||||||
title: Entry #1
|
|
||||||
subtitle: Lorem Ipsum
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# Summos certamina vultibus carere
|
|
||||||
|
|
||||||
## Flagrans respiramen
|
|
||||||
|
|
||||||
Lorem markdownum aeris utinam! Paelex voce turbamque numen: corripe Bootes
|
|
||||||
*illa* iacere Caenis deceant prima Aeneia invitusque geminas? Sub rear cuspide,
|
|
||||||
regno populumque epops. Vox ullo Trachinia **tempora**, in sine fata in ultima
|
|
||||||
*precatur adspice* undas clamore, nos colle, tumulo; Cumarum.
|
|
||||||
|
|
||||||
1. Promittere hasta concutiuntque asper evehor
|
|
||||||
2. Non sanguine unam turba sit propositumque Turni
|
|
||||||
3. Da Meleagre subitam tutus incidit mutantur fratresque
|
|
||||||
|
|
||||||
## Densum si promissa responsa stamina patriumque fabrilis
|
|
||||||
|
|
||||||
Acrisioneas currus et rescierit aequor conlapsamque color quaeque ingeniosus
|
|
||||||
Erysicthone quidque et [crescit utque](#). Primordia et
|
|
||||||
inania, non *et*, densus quoque pater, est.
|
|
||||||
|
|
||||||
Praemia Patareaque etiamnum posset. Pes Delphis loquendo omnes.
|
|
||||||
|
|
||||||
## Auroram debilitaturum arcus animos urar amplexa mergeret
|
|
||||||
|
|
||||||
Quantaque non quos hinc Perseus cura similis damnosa pietasque quaeque pugnat,
|
|
||||||
et per quibus aconiton vertice spatium. Praebebat dat praesignis verba
|
|
||||||
exiguumque, ubi caput cecini propiore si in. Super pignora quoscumque sunt. Aevo
|
|
||||||
certum: Stygii nuntia, ille dolori invenit equosque gutture, vitae, et dignior,
|
|
||||||
et. Illa dictis erat, est enim contorta [adeste ipse](#), vos munus tum est e paterque
|
|
||||||
deprensa nomen celebrabant ac?
|
|
||||||
|
|
||||||
> Inplumes notavit micantes **hunc**, nec sanguine, cessant, an. Ubi mollia
|
|
||||||
> maerent et Syrtis vertice condebat faveant sit fugatas comites *lilia cum
|
|
||||||
> quam* nepotes, semper, barbarus.
|
|
||||||
|
|
||||||
Vota breve videbor: in dammas matrona lacus, nec vides saucius, nullamque.
|
|
||||||
Dubium pulsat fraxinus et, ter Philomela tectam maxima vertuntur saturae, iam ad
|
|
||||||
dignissime. Amens sine ista turbinis equorum Epaphus Iunonis
|
|
||||||
[supplex](#) duobus, tuta facit pendet medius. Paternum scorpius
|
|
||||||
aquarum per iter candentem parva et ramos urbs ubi.
|
|
||||||
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 544 KiB |
@ -1,47 +0,0 @@
|
|||||||
---
|
|
||||||
title: Example Entry
|
|
||||||
subtitle: Lorem Ipsum++
|
|
||||||
---
|
|
||||||
|
|
||||||
# Summos certamina vultibus carere
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
## Flagrans respiramen
|
|
||||||
|
|
||||||
Lorem markdownum aeris utinam! Paelex voce turbamque numen: corripe Bootes
|
|
||||||
*illa* iacere Caenis deceant prima Aeneia invitusque geminas? Sub rear cuspide,
|
|
||||||
regno populumque epops. Vox ullo Trachinia **tempora**, in sine fata in ultima
|
|
||||||
*precatur adspice* undas clamore, nos colle, tumulo; Cumarum.
|
|
||||||
|
|
||||||
1. Promittere hasta concutiuntque asper evehor
|
|
||||||
2. Non sanguine unam turba sit propositumque Turni
|
|
||||||
3. Da Meleagre subitam tutus incidit mutantur fratresque
|
|
||||||
|
|
||||||
## Densum si promissa responsa stamina patriumque fabrilis
|
|
||||||
|
|
||||||
Acrisioneas currus et rescierit aequor conlapsamque color quaeque ingeniosus
|
|
||||||
Erysicthone quidque et [crescit utque](#). Primordia et
|
|
||||||
inania, non *et*, densus quoque pater, est.
|
|
||||||
|
|
||||||
Praemia Patareaque etiamnum posset. Pes Delphis loquendo omnes.
|
|
||||||
|
|
||||||
## Auroram debilitaturum arcus animos urar amplexa mergeret
|
|
||||||
|
|
||||||
Quantaque non quos hinc Perseus cura similis damnosa pietasque quaeque pugnat,
|
|
||||||
et per quibus aconiton vertice spatium. Praebebat dat praesignis verba
|
|
||||||
exiguumque, ubi caput cecini propiore si in. Super pignora quoscumque sunt. Aevo
|
|
||||||
certum: Stygii nuntia, ille dolori invenit equosque gutture, vitae, et dignior,
|
|
||||||
et. Illa dictis erat, est enim contorta [adeste ipse](#), vos munus tum est e paterque
|
|
||||||
deprensa nomen celebrabant ac?
|
|
||||||
|
|
||||||
> Inplumes notavit micantes **hunc**, nec sanguine, cessant, an. Ubi mollia
|
|
||||||
> maerent et Syrtis vertice condebat faveant sit fugatas comites *lilia cum
|
|
||||||
> quam* nepotes, semper, barbarus.
|
|
||||||
|
|
||||||
Vota breve videbor: in dammas matrona lacus, nec vides saucius, nullamque.
|
|
||||||
Dubium pulsat fraxinus et, ter Philomela tectam maxima vertuntur saturae, iam ad
|
|
||||||
dignissime. Amens sine ista turbinis equorum Epaphus Iunonis
|
|
||||||
[supplex](#) duobus, tuta facit pendet medius. Paternum scorpius
|
|
||||||
aquarum per iter candentem parva et ramos urbs ubi.
|
|
||||||
|
|
||||||
@ -1,6 +0,0 @@
|
|||||||
# Blog index
|
|
||||||
|
|
||||||
Welcome!
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
@ -1,16 +0,0 @@
|
|||||||
---
|
|
||||||
title: Contact Me
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
<form action="#">
|
|
||||||
<label for="fname">First name:</label><br>
|
|
||||||
<input type="text" id="fname" name="fname" value="John"><br>
|
|
||||||
<label for="lname">Last name:</label><br>
|
|
||||||
<input type="text" id="lname" name="lname" value="Doe"><br>
|
|
||||||
<label for="email">Email:</label><br>
|
|
||||||
<input type="email" id="email" name="email" value="doe@example.com"><br>
|
|
||||||
<label for="message">Message:</label><br>
|
|
||||||
<textarea id="email" name="message"></textarea><br><br>
|
|
||||||
<input type="submit" value="Submit">
|
|
||||||
</form>
|
|
||||||
39
src/index.md
39
src/index.md
@ -1,39 +0,0 @@
|
|||||||
# Summos certamina vultibus carere
|
|
||||||
|
|
||||||
## Flagrans respiramen
|
|
||||||
|
|
||||||
Lorem markdownum aeris utinam! Paelex voce turbamque numen: corripe Bootes
|
|
||||||
*illa* iacere Caenis deceant prima Aeneia invitusque geminas? Sub rear cuspide,
|
|
||||||
regno populumque epops. Vox ullo Trachinia **tempora**, in sine fata in ultima
|
|
||||||
*precatur adspice* undas clamore, nos colle, tumulo; Cumarum.
|
|
||||||
|
|
||||||
1. Promittere hasta concutiuntque asper evehor
|
|
||||||
2. Non sanguine unam turba sit propositumque Turni
|
|
||||||
3. Da Meleagre subitam tutus incidit mutantur fratresque
|
|
||||||
|
|
||||||
## Densum si promissa responsa stamina patriumque fabrilis
|
|
||||||
|
|
||||||
Acrisioneas currus et rescierit aequor conlapsamque color quaeque ingeniosus
|
|
||||||
Erysicthone quidque et [crescit utque](#). Primordia et
|
|
||||||
inania, non *et*, densus quoque pater, est.
|
|
||||||
|
|
||||||
Praemia Patareaque etiamnum posset. Pes Delphis loquendo omnes.
|
|
||||||
|
|
||||||
## Auroram debilitaturum arcus animos urar amplexa mergeret
|
|
||||||
|
|
||||||
Quantaque non quos hinc Perseus cura similis damnosa pietasque quaeque pugnat,
|
|
||||||
et per quibus aconiton vertice spatium. Praebebat dat praesignis verba
|
|
||||||
exiguumque, ubi caput cecini propiore si in. Super pignora quoscumque sunt. Aevo
|
|
||||||
certum: Stygii nuntia, ille dolori invenit equosque gutture, vitae, et dignior,
|
|
||||||
et. Illa dictis erat, est enim contorta [adeste ipse](#), vos munus tum est e paterque
|
|
||||||
deprensa nomen celebrabant ac?
|
|
||||||
|
|
||||||
> Inplumes notavit micantes **hunc**, nec sanguine, cessant, an. Ubi mollia
|
|
||||||
> maerent et Syrtis vertice condebat faveant sit fugatas comites *lilia cum
|
|
||||||
> quam* nepotes, semper, barbarus.
|
|
||||||
|
|
||||||
Vota breve videbor: in dammas matrona lacus, nec vides saucius, nullamque.
|
|
||||||
Dubium pulsat fraxinus et, ter Philomela tectam maxima vertuntur saturae, iam ad
|
|
||||||
dignissime. Amens sine ista turbinis equorum Epaphus Iunonis
|
|
||||||
[supplex](#) duobus, tuta facit pendet medius. Paternum scorpius
|
|
||||||
aquarum per iter candentem parva et ramos urbs ubi.
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
<div class"comment-section">
|
|
||||||
<textarea></textarea>
|
|
||||||
</div>
|
|
||||||
@ -1,75 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="$lang$" xml:lang="$lang$"$if(dir)$ dir="$dir$"$endif$>
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="generator" content="pandoc" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
|
|
||||||
$for(author-meta)$
|
|
||||||
<meta name="author" content="$author-meta$" />
|
|
||||||
$endfor$
|
|
||||||
$if(date-meta)$
|
|
||||||
<meta name="dcterms.date" content="$date-meta$" />
|
|
||||||
$endif$
|
|
||||||
$if(keywords)$
|
|
||||||
<meta name="keywords" content="$for(keywords)$$keywords$$sep$, $endfor$" />
|
|
||||||
$endif$
|
|
||||||
$if(description-meta)$
|
|
||||||
<meta name="description" content="$description-meta$" />
|
|
||||||
$endif$
|
|
||||||
<title>$if(title-prefix)$$title-prefix$ – $endif$$pagetitle$</title>
|
|
||||||
<style>
|
|
||||||
$styles.html()$
|
|
||||||
</style>
|
|
||||||
$for(css)$
|
|
||||||
<link rel="stylesheet" href="$css$" />
|
|
||||||
$endfor$
|
|
||||||
$for(header-includes)$
|
|
||||||
$header-includes$
|
|
||||||
$endfor$
|
|
||||||
$if(math)$
|
|
||||||
$math$
|
|
||||||
$endif$
|
|
||||||
<!--[if lt IE 9]>
|
|
||||||
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
|
|
||||||
<![endif]-->
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
$for(include-before)$
|
|
||||||
$include-before$
|
|
||||||
$endfor$
|
|
||||||
$if(title)$
|
|
||||||
<header id="title-block-header">
|
|
||||||
<h1 class="title">$title$</h1>
|
|
||||||
$if(subtitle)$
|
|
||||||
<p class="subtitle">$subtitle$</p>
|
|
||||||
$endif$
|
|
||||||
$for(author)$
|
|
||||||
<p class="author">$author$</p>
|
|
||||||
$endfor$
|
|
||||||
$if(date)$
|
|
||||||
<p class="date">$date$</p>
|
|
||||||
$endif$
|
|
||||||
$if(abstract)$
|
|
||||||
<div class="abstract">
|
|
||||||
<div class="abstract-title">$abstract-title$</div>
|
|
||||||
$abstract$
|
|
||||||
</div>
|
|
||||||
$endif$
|
|
||||||
</header>
|
|
||||||
$endif$
|
|
||||||
$if(toc)$
|
|
||||||
<nav id="$idprefix$TOC" role="doc-toc">
|
|
||||||
$if(toc-title)$
|
|
||||||
<h2 id="$idprefix$toc-title">$toc-title$</h2>
|
|
||||||
$endif$
|
|
||||||
$table-of-contents$
|
|
||||||
</nav>
|
|
||||||
$endif$
|
|
||||||
<main>
|
|
||||||
$body$
|
|
||||||
</main>
|
|
||||||
$for(include-after)$
|
|
||||||
$include-after$
|
|
||||||
$endfor$
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
Loading…
Reference in New Issue
Block a user