Switch to org-jekyll.mk for publishing

This commit is contained in:
Correl Roush 2014-08-02 18:46:19 -04:00
parent 62c7659bc1
commit 56e9222120
14 changed files with 263 additions and 705 deletions

View file

@ -1,26 +1,8 @@
.PHONY: default all clean org org-code jekyll serve SITE_NAME = SICP
SITE_TITLE = Exercises and Notes
SITE_AUTHOR = Correl Roush
SITE_AUTHOR_EMAIL = correl@gmail.com
SITE_TWITTER = correlr
SITE_GITHUB = correl/sicp
default: all include org-jekyll.mk
all: org org-code jekyll
clean:
rm -rf _site \
_org \
*.scheme
org:
emacs --batch -u ${USER} -l org-publish.el
org-code: *.org
for org in $?; do \
emacs --batch -u ${USER} \
--eval "(require 'org)" \
--eval "(org-babel-tangle-file \"$$org\")" ; \
done
jekyll:
jekyll build
serve:
jekyll serve

View file

@ -1,22 +0,0 @@
# Site settings
name: "SICP"
title: Exercises and Notes
email: correl@gmail.com
description:
baseurl: ""
url: "http://yourdomain.com"
# Build settings
markdown: kramdown
permalinks: pretty
collections:
org:
output: true
defaults:
- scope:
path: ""
values:
layout: "page"
author: "Correl Roush"

View file

@ -1,61 +0,0 @@
<footer class="site-footer">
<div class="wrap">
<h2 class="footer-heading">{{ site.name }}</h2>
<div class="footer-col-1 column">
<ul>
<li>{{ site.title }}</li>
<li><a href="mailto:{{ site.email }}">{{ site.email }}</a></li>
</ul>
</div>
<div class="footer-col-2 column">
<ul>
<li>
<a href="https://github.com/{{ site.username }}">
<span class="icon github">
<svg version="1.1" class="github-icon-svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<path fill-rule="evenodd" clip-rule="evenodd" fill="#C2C2C2" d="M7.999,0.431c-4.285,0-7.76,3.474-7.76,7.761
c0,3.428,2.223,6.337,5.307,7.363c0.388,0.071,0.53-0.168,0.53-0.374c0-0.184-0.007-0.672-0.01-1.32
c-2.159,0.469-2.614-1.04-2.614-1.04c-0.353-0.896-0.862-1.135-0.862-1.135c-0.705-0.481,0.053-0.472,0.053-0.472
c0.779,0.055,1.189,0.8,1.189,0.8c0.692,1.186,1.816,0.843,2.258,0.645c0.071-0.502,0.271-0.843,0.493-1.037
C4.86,11.425,3.049,10.76,3.049,7.786c0-0.847,0.302-1.54,0.799-2.082C3.768,5.507,3.501,4.718,3.924,3.65
c0,0,0.652-0.209,2.134,0.796C6.677,4.273,7.34,4.187,8,4.184c0.659,0.003,1.323,0.089,1.943,0.261
c1.482-1.004,2.132-0.796,2.132-0.796c0.423,1.068,0.157,1.857,0.077,2.054c0.497,0.542,0.798,1.235,0.798,2.082
c0,2.981-1.814,3.637-3.543,3.829c0.279,0.24,0.527,0.713,0.527,1.437c0,1.037-0.01,1.874-0.01,2.129
c0,0.208,0.14,0.449,0.534,0.373c3.081-1.028,5.302-3.935,5.302-7.362C15.76,3.906,12.285,0.431,7.999,0.431z"/>
</svg>
</span>
<span class="username">{{ site.username }}</span>
</a>
</li>
<li>
<a href="https://twitter.com/{{ site.username }}">
<span class="icon twitter">
<svg version="1.1" class="twitter-icon-svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<path fill="#C2C2C2" d="M15.969,3.058c-0.586,0.26-1.217,0.436-1.878,0.515c0.675-0.405,1.194-1.045,1.438-1.809
c-0.632,0.375-1.332,0.647-2.076,0.793c-0.596-0.636-1.446-1.033-2.387-1.033c-1.806,0-3.27,1.464-3.27,3.27
c0,0.256,0.029,0.506,0.085,0.745C5.163,5.404,2.753,4.102,1.14,2.124C0.859,2.607,0.698,3.168,0.698,3.767
c0,1.134,0.577,2.135,1.455,2.722C1.616,6.472,1.112,6.325,0.671,6.08c0,0.014,0,0.027,0,0.041c0,1.584,1.127,2.906,2.623,3.206
C3.02,9.402,2.731,9.442,2.433,9.442c-0.211,0-0.416-0.021-0.615-0.059c0.416,1.299,1.624,2.245,3.055,2.271
c-1.119,0.877-2.529,1.4-4.061,1.4c-0.264,0-0.524-0.015-0.78-0.046c1.447,0.928,3.166,1.469,5.013,1.469
c6.015,0,9.304-4.983,9.304-9.304c0-0.142-0.003-0.283-0.009-0.423C14.976,4.29,15.531,3.714,15.969,3.058z"/>
</svg>
</span>
<span class="username">{{ site.username }}</span>
</a>
</li>
</ul>
</div>
<div class="footer-col-3 column">
<p class="text">{{ site.description }}</p>
</div>
</div>
</footer>

View file

@ -1,13 +0,0 @@
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>{% if page.title %}{{ page.title }}{% else %}{{ site.name }}{% endif %}</title>
<meta name="viewport" content="width=device-width">
<meta name="description" content="{{ site.description }}">
<link rel="canonical" href="{{ page.url | replace:'index.html','' | prepend: site.baseurl }}">
<!-- Custom CSS -->
<link rel="stylesheet" href="{{ "/css/main.css" | prepend: site.baseurl }}">
<link rel="stylesheet" href="{{ "/css/org.css" | prepend: site.baseurl }}">
</head>

View file

@ -1,28 +0,0 @@
<header class="site-header">
<div class="wrap">
<a class="site-title" href="{{ '/' | prepend: site.baseurl }}">{{ site.name }}</a>
<nav class="site-nav">
<a href="#" class="menu-icon">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 18 15" enable-background="new 0 0 18 15" xml:space="preserve">
<path fill="#505050" d="M18,1.484c0,0.82-0.665,1.484-1.484,1.484H1.484C0.665,2.969,0,2.304,0,1.484l0,0C0,0.665,0.665,0,1.484,0
h15.031C17.335,0,18,0.665,18,1.484L18,1.484z"/>
<path fill="#505050" d="M18,7.516C18,8.335,17.335,9,16.516,9H1.484C0.665,9,0,8.335,0,7.516l0,0c0-0.82,0.665-1.484,1.484-1.484
h15.031C17.335,6.031,18,6.696,18,7.516L18,7.516z"/>
<path fill="#505050" d="M18,13.516C18,14.335,17.335,15,16.516,15H1.484C0.665,15,0,14.335,0,13.516l0,0
c0-0.82,0.665-1.484,1.484-1.484h15.031C17.335,12.031,18,12.696,18,13.516L18,13.516z"/>
</svg>
</a>
<div class="trigger">
{% for page in site.pages %}
<a class="page-link" href="{{ page.url | prepend: site.baseurl }}">{{ page.title }}</a>
{% endfor %}
</div>
</nav>
</div>
</header>

View file

@ -1,19 +0,0 @@
<!DOCTYPE html>
<html>
{% include head.html %}
<body>
{% include header.html %}
<div class="page-content">
<div class="wrap">
{{ content }}
</div>
</div>
{% include footer.html %}
</body>
</html>

View file

@ -1,21 +0,0 @@
---
layout: default
---
{% assign scheme_filename = page.url | replace: '.html','.scheme' | remove: '/org/' %}
{% assign scheme_url = scheme_filename | prepend: '/' | prepend: site.baseurl %}
<div class="post">
<header class="post-header">
<h1>{{ page.title }}</h1>
<hr />
Download the code for this chapter: <a class="post-link" href="{{ scheme_url }}">{{ scheme_filename }}</a>
<hr />
</header>
<article class="post-content">
{{ content }}
</article>
</div>

View file

@ -1,14 +0,0 @@
---
layout: default
---
<div class="post">
<header class="post-header">
<h1>{{ page.title }}</h1>
</header>
<article class="post-content">
{{ content }}
</article>
</div>

View file

@ -1,15 +0,0 @@
---
layout: default
---
<div class="post">
<header class="post-header">
<h1>{{ page.title }}</h1>
<p class="meta">{{ page.date | date: "%b %-d, %Y" }}{% if page.author %} • {{ page.author }}{% endif %}{% if page.meta %} • {{ page.meta }}{% endif %}</p>
</header>
<article class="post-content">
{{ content }}
</article>
</div>

View file

@ -1,420 +0,0 @@
/* Base */
/* ----------------------------------------------------------*/
* {
margin: 0;
padding: 0;
}
html, body { height: 100%; }
body {
font-family: Helvetica, Arial, sans-serif;
font-size: 16px;
line-height: 1.5;
font-weight: 300;
background-color: #fdfdfd;
}
h1, h2, h3, h4, h5, h6 { font-size: 100%; font-weight: 400; }
a { color: #2a7ae2; text-decoration: none; }
a:hover { color: #000; text-decoration: underline; }
a:visited { color: #205caa; }
table {
width: 100%;
border-collapse: collapse;
}
th {
border-top: 10px solid black;
border-bottom: 1px solid black;
}
tbody:not(:first-of-type) tr:first-child {
border-top: 5px solid #999;
}
tbody tr:not(:first-child) {
border-top: 1px solid #eee;
}
/* Utility */
.wrap:before,
.wrap:after { content:""; display:table; }
.wrap:after { clear: both; }
.wrap {
max-width: 70%;
padding: 0 30px;
margin: 0 auto;
zoom: 1;
}
/* Layout Styles */
/* ----------------------------------------------------------*/
/* Site header */
.site-header {
border-top: 5px solid #333;
border-bottom: 1px solid #e8e8e8;
min-height: 56px;
background-color: white;
}
.site-title,
.site-title:hover,
.site-title:visited {
display: block;
color: #333;
font-size: 26px;
letter-spacing: -1px;
float: left;
line-height: 56px;
position: relative;
z-index: 1;
}
.site-nav {
float: right;
line-height: 56px;
}
.site-nav .menu-icon { display: none; }
.site-nav .page-link {
margin-left: 20px;
color: #727272;
letter-spacing: -.5px;
}
/* Site footer */
.site-footer {
border-top: 1px solid #e8e8e8;
padding: 30px 0;
}
.footer-heading {
font-size: 18px;
font-weight: 300;
letter-spacing: -.5px;
margin-bottom: 15px;
}
.site-footer .column { float: left; margin-bottom: 15px; }
.footer-col-1 {
width: 270px; /*fallback*/
width: -webkit-calc(35% - 10px);
width: -moz-calc(35% - 10px);
width: -o-calc(35% - 10px);
width: calc(35% - 10px);
margin-right: 10px
}
.footer-col-2 {
width: 175px; /*fallback*/
width: -webkit-calc(23.125% - 10px);
width: -moz-calc(23.125% - 10px);
width: -o-calc(23.125% - 10px);
width: calc(23.125% - 10px);
margin-right: 10px
}
.footer-col-3 {
width: 335px; /*fallback*/
width: -webkit-calc(41.875%);
width: -moz-calc(41.875%);
width: -o-calc(41.875%);
width: calc(41.875%);
}
.site-footer ul { list-style: none; }
.site-footer li,
.site-footer p {
font-size: 15px;
letter-spacing: -.3px;
color: #828282;
}
.github-icon-svg,
.twitter-icon-svg {
display: inline-block;
width: 16px;
height: 16px;
position: relative;
top: 3px;
}
/* Page Content styles */
/* ----------------------------------------------------------*/
.page-content {
padding: 30px 0;
background-color: #fff;
}
/* Home styles */
/* ----------------------------------------------------------*/
.home h1 { margin-bottom: 25px; }
.posts { list-style-type: none; }
.posts li { margin-bottom: 30px; }
.posts .post-link {
font-size: 24px;
letter-spacing: -1px;
line-height: 1;
}
.posts .post-date {
display: block;
font-size: 15px;
color: #818181;
}
/* Post styles */
/* ----------------------------------------------------------*/
.post-header { margin: 10px 0 30px; }
.post-header h1 {
font-size: 42px;
letter-spacing: -1.75px;
line-height: 1;
font-weight: 300;
}
.post-header .meta {
font-size: 15px;
color: #818181;
margin-top: 5px;
}
.post-content { margin: 0 0 30px; }
.post-content > * { margin: 20px 0; }
.post-content h1,
.post-content h2,
.post-content h3,
.post-content h4,
.post-content h5,
.post-content h6 {
line-height: 1;
font-weight: 300;
margin: 40px 0 20px;
}
.post-content h2 {
font-size: 32px;
letter-spacing: -1.25px;
}
.post-content h3 {
font-size: 26px;
letter-spacing: -1px;
}
.post-content h4 {
font-size: 20px;
letter-spacing: -1px;
}
.post-content blockquote {
border-left: 4px solid #e8e8e8;
padding-left: 20px;
font-size: 18px;
opacity: .6;
letter-spacing: -1px;
font-style: italic;
margin: 30px 0;
}
.post-content ul,
.post-content ol { padding-left: 20px; }
.post pre,
.post code {
border: 1px solid #d5d5e9;
background-color: #eef;
padding: 8px 12px;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
font-size: 15px;
}
.post code { padding: 1px 5px; }
.post ul,
.post ol { margin-left: 1.35em; }
.post pre code { border: none; }
/* terminal */
.post pre.terminal {
border: 1px solid #000;
background-color: #333;
color: #FFF;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
}
.post pre.terminal code { background-color: #333; }
/* Syntax highlighting styles */
/* ----------------------------------------------------------*/
.highlight { background: #ffffff; }
.highlight .c { color: #999988; font-style: italic } /* Comment */
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
.highlight .k { font-weight: bold } /* Keyword */
.highlight .o { font-weight: bold } /* Operator */
.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */
.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */
.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */
.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #aa0000 } /* Generic.Error */
.highlight .gh { color: #999999 } /* Generic.Heading */
.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #555555 } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #aaaaaa } /* Generic.Subheading */
.highlight .gt { color: #aa0000 } /* Generic.Traceback */
.highlight .kc { font-weight: bold } /* Keyword.Constant */
.highlight .kd { font-weight: bold } /* Keyword.Declaration */
.highlight .kp { font-weight: bold } /* Keyword.Pseudo */
.highlight .kr { font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */
.highlight .m { color: #009999 } /* Literal.Number */
.highlight .s { color: #d14 } /* Literal.String */
.highlight .na { color: #008080 } /* Name.Attribute */
.highlight .nb { color: #0086B3 } /* Name.Builtin */
.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */
.highlight .no { color: #008080 } /* Name.Constant */
.highlight .ni { color: #800080 } /* Name.Entity */
.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */
.highlight .nn { color: #555555 } /* Name.Namespace */
.highlight .nt { color: #000080 } /* Name.Tag */
.highlight .nv { color: #008080 } /* Name.Variable */
.highlight .ow { font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mf { color: #009999 } /* Literal.Number.Float */
.highlight .mh { color: #009999 } /* Literal.Number.Hex */
.highlight .mi { color: #009999 } /* Literal.Number.Integer */
.highlight .mo { color: #009999 } /* Literal.Number.Oct */
.highlight .sb { color: #d14 } /* Literal.String.Backtick */
.highlight .sc { color: #d14 } /* Literal.String.Char */
.highlight .sd { color: #d14 } /* Literal.String.Doc */
.highlight .s2 { color: #d14 } /* Literal.String.Double */
.highlight .se { color: #d14 } /* Literal.String.Escape */
.highlight .sh { color: #d14 } /* Literal.String.Heredoc */
.highlight .si { color: #d14 } /* Literal.String.Interpol */
.highlight .sx { color: #d14 } /* Literal.String.Other */
.highlight .sr { color: #009926 } /* Literal.String.Regex */
.highlight .s1 { color: #d14 } /* Literal.String.Single */
.highlight .ss { color: #990073 } /* Literal.String.Symbol */
.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */
.highlight .vc { color: #008080 } /* Name.Variable.Class */
.highlight .vg { color: #008080 } /* Name.Variable.Global */
.highlight .vi { color: #008080 } /* Name.Variable.Instance */
.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */
/* media queries */
/* ----------------------------------------------------------*/
@media screen and (max-width: 750px) {
.footer-col-1 { width: 50%; }
.footer-col-2 {
width: 45%; /*fallback*/
width: -webkit-calc(50% - 10px);
width: -moz-calc(50% - 10px);
width: -o-calc(50% - 10px);
width: calc(50% - 10px);
margin-right: 0;
}
.site-footer .column.footer-col-3 {
width: auto;
float: none;
clear: both;
}
}
@media screen and (max-width: 600px) {
.wrap { padding: 0 12px; }
.site-nav {
position: fixed;
z-index: 10;
top: 14px; right: 8px;
background-color: white;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
border: 1px solid #e8e8e8;
}
.site-nav .menu-icon {
display: block;
font-size: 24px;
color: #505050;
float: right;
width: 36px;
text-align: center;
line-height: 36px;
}
.site-nav .menu-icon svg { width: 18px; height: 16px; }
.site-nav .trigger {
clear: both;
margin-bottom: 5px;
display: none;
}
.site-nav:hover .trigger { display: block; }
.site-nav .page-link {
display: block;
text-align: right;
line-height: 1.25;
padding: 5px 10px;
margin: 0;
}
.post-header h1 { font-size: 36px; }
.post-content h2 { font-size: 28px; }
.post-content h3 { font-size: 22px; }
.post-content h4 { font-size: 18px; }
.post-content blockquote { padding-left: 10px; }
.post-content ul,
.post-content ol { padding-left: 10px; }
.site-footer .column {
float: none;
clear: both;
width: auto;
margin: 0 0 15px; }
}

View file

@ -1,23 +0,0 @@
hr {
margin-top: 1em;
margin-bottom: 1em;
}
.org-src-container {
padding-top: 1em;
padding-bottom: 1em;
}
.outline-text-2,
.outline-3 {
margin-left: 2em;
}
.outline-text-3,
.outline-4 {
margin-left: 4em;
}
.outline-text-4 {
margin-left: 6em;
}

View file

@ -1,24 +0,0 @@
---
layout: default
---
<div class="home">
<h1>Org Files</h1>
<ul class="posts">
{% for org in site.org %}
<li>
<a class="post-link" href="{{ org.url | prepend: site.baseurl }}">
{% if org.title %}
{{ org.title }}
{% else %}
{{ org.url }}
{% endif %}
</a>
</li>
{% endfor %}
</ul>
<p class="rss-subscribe">subscribe <a href="{{ "/feed.xml" | prepend: site.baseurl }}">via RSS</a></p>
</div>

256
org-jekyll.mk Normal file
View file

@ -0,0 +1,256 @@
.PHONY: default all clean jekyll serve jekyll-config
SITE_NAME ?= My Documents
SITE_TITLE ?= Emacs Org-Mode Documents
SITE_DESCRIPTION ?=
SITE_BASEURL ?=
SITE_URL ?=
SITE_AUTHOR ?=
SITE_AUTHOR_EMAIL ?=
SITE_TWITTER ?=
SITE_GITHUB ?=
ORG_DIR ?= .
BUILD_DIR ?= _build
SITE_DIR ?= _site
OUTPUT_DIR = $(BUILD_DIR)/_org
CODE_DIR = $(BUILD_DIR)/_src
JEKYLL_CONFIG = $(BUILD_DIR)/_config.yml
JEKYLL_OPTS += -s $(BUILD_DIR)
targets = $(BUILD_DIR) $(SITE_DIR)
mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST)))
org_files := $(patsubst %.org,$(OUTPUT_DIR)/%.html,$(notdir $(wildcard $(ORG_DIR)/*.org)))
tangle_org_files := $(shell grep -il '+BEGIN_SRC .* :tangle yes' $(ORG_DIR)/*.org)
tangle_output_files := $(patsubst %.org,$(CODE_DIR)/%.src.txt,$(notdir $(tangle_org_files)))
tangle_tmp := $(shell tempfile -s .org)
V ?= 0
org_verbose_0 = @echo " ORG " $(?F);
org_verbose = $(org_verbose_$(V))
tangle_verbose_0 = @echo " CODE " $(?F);
tangle_verbose = $(tangle_verbose_$(V))
jekyll_verbose_0 = @echo " BUILD jekyll";
jekyll_verbose = $(jekyll_verbose_$(V))
config_verbose_0 = @echo " CFG " $@;
config_verbose = $(config_verbose_$(V))
serve_verbose_0 = @echo " SERVE jekyll";
serve_verbose = $(jekyll_verbose_$(V))
default: all
all: jekyll
clean:
rm -rf $(targets)
$(JEKYLL_CONFIG):
$(config_verbose) echo "\
# Site settings \n\
name: \"$(SITE_NAME)\" \n\
title: \"$(SITE_TITLE)\" \n\
email: \"$(SITE_AUTHOR_EMAIL)\" \n\
description: \"$(SITE_DESCRIPTION)\" \n\
baseurl: \"$(SITE_BASEURL)\" \n\
url: \"$(SITE_URL)\" \n\
twitter: \"$(SITE_TWITTER)\" \n\
github: \"$(SITE_GITHUB)\" \n\
\n\
# Build settings \n\
markdown: kramdown \n\
permalinks: pretty \n\
\n\
collections: \n\
org: \n\
output: true \n\
src: \n\
output: true \n\
\n\
defaults: \n\
- scope: \n\
path: \"\" \n\
type: \"org\" \n\
values: \n\
layout: \"page\" \n\
author: \"$(SITE_AUTHOR)\" \n\
" > $@
jekyll: assets org-html org-code $(JEKYLL_CONFIG)
$(jekyll_verbose) jekyll build $(JEKYLL_OPTS)
serve: assets org-html org-code $(JEKYLL_CONFIG)
$(serve_verbose) jekyll serve $(JEKYLL_OPTS)
$(BUILD_DIR):
mkdir -p $@
$(OUTPUT_DIR):
mkdir -p $@
$(CODE_DIR):
mkdir -p $@
$(OUTPUT_DIR)/%.html: $(ORG_DIR)/%.org
$(org_verbose) emacs --batch -u ${USER} --eval " \
(progn \
(require 'org) \
\
(setq org-publish-project-alist \
'( \
(\"org-jekyll\" \
:base-directory \".\" \
:base-extension \"org\" \
\
:publishing-directory \"$(abspath $(OUTPUT_DIR))\" \
:recursive t \
:publishing-function org-html-publish-to-html \
:headline-levels 4 \
:section-numbers nil \
:html-extension \"html\" \
:htmlized-source t \
:with-toc nil \
:body-only t) \
(\"jekyll\" :components (\"org-jekyll\")))) \
\
(find-file \"$<\") \
(org-publish-current-file 't)) \
" 2>/dev/null
$(CODE_DIR)/%.src.txt: $(ORG_DIR)/%.org
@sed "s/:tangle yes/:tangle $(subst /,\/,$(abspath $@))/g" "$<" > $(tangle_tmp)
$(tangle_verbose) emacs --batch -u ${USER} \
--eval "(require 'org)" \
--eval "(org-babel-tangle-file \"$(tangle_tmp)\")" 2>/dev/null ;
@rm $(tangle_tmp)
org-html: $(OUTPUT_DIR) $(org_files)
org-code: $(CODE_DIR) $(tangle_output_files)
.PHONY: assets
assets_verbose_0 = @echo Extracting assets to $(BUILD_DIR);
assets_verbose = $(assets_verbose_$(V))
assets: $(BUILD_DIR)
$(assets_verbose) echo '' \
'begin-base64 664 -\n'\
'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\n'\
'====\n'\
| sed 's/^ //' | uudecode | tar zx -C $(BUILD_DIR)

View file

@ -1,20 +0,0 @@
(require 'org)
(setq org-publish-project-alist
'(
("org-sicp"
:base-directory "."
:base-extension "org"
:publishing-directory "./_org"
:recursive t
:publishing-function org-html-publish-to-html
:headline-levels 4
:section-numbers nil
:html-extension "html"
:htmlized-source t
:with-toc nil
:body-only t)
("sicp" :components ("org-sicp"))))
(org-publish "sicp" 't)