From d2bbcc8881573023ad3b84ad822dce7b389e1d1c Mon Sep 17 00:00:00 2001 From: Niklas Fasching Date: Fri, 26 Jun 2020 20:16:59 +0200 Subject: [PATCH] Update blorg and add it to gh-pages. Update README --- README.org | 19 +- blorg/config.go | 15 +- blorg/testdata/blorg.org | 66 +++--- blorg/testdata/content/about.org | 11 +- blorg/testdata/content/another-post.org | 12 ++ blorg/testdata/content/post.org | 2 - blorg/testdata/content/some-post.org | 12 ++ blorg/testdata/content/style.css | 191 ++++++++++++++++++ .../content/yet-another-post/index.org | 12 ++ blorg/testdata/public/about.html | 22 +- blorg/testdata/public/another-post.html | 40 ++++ blorg/testdata/public/index.html | 42 +++- blorg/testdata/public/post.html | 32 --- blorg/testdata/public/some-post.html | 40 ++++ blorg/testdata/public/style.css | 191 ++++++++++++++++++ blorg/testdata/public/tags/another/index.html | 40 ++++ .../public/{tag/post => tags/some}/index.html | 15 +- .../public/{tag => tags}/static/index.html | 9 +- blorg/testdata/public/tags/yet/index.html | 33 +++ .../public/yet-another-post/index.html | 42 ++++ etc/generate-gh-pages | 3 + 21 files changed, 746 insertions(+), 103 deletions(-) create mode 100644 blorg/testdata/content/another-post.org delete mode 100644 blorg/testdata/content/post.org create mode 100644 blorg/testdata/content/some-post.org create mode 100644 blorg/testdata/content/style.css create mode 100644 blorg/testdata/content/yet-another-post/index.org create mode 100644 blorg/testdata/public/another-post.html delete mode 100644 blorg/testdata/public/post.html create mode 100644 blorg/testdata/public/some-post.html create mode 100644 blorg/testdata/public/style.css create mode 100644 blorg/testdata/public/tags/another/index.html rename blorg/testdata/public/{tag/post => tags/some}/index.html (55%) rename blorg/testdata/public/{tag => tags}/static/index.html (68%) create mode 100644 blorg/testdata/public/tags/yet/index.html create mode 100644 blorg/testdata/public/yet-another-post/index.html diff --git a/README.org b/README.org index e8adfa6..607eda7 100644 --- a/README.org +++ b/README.org @@ -1,14 +1,25 @@ * go-org [[https://travis-ci.org/niklasfasching/go-org.svg?branch=master]] -An Org mode parser in go. And soon a blog generator. -Take a look at [[https://niklasfasching.github.io/go-org/][github pages]] for some examples and to try it out live in your browser. +An Org mode parser and static site generator in go. +Take a look at github pages +- for [[https://niklasfasching.github.io/go-org/][org to html conversion]] examples +- for a [[https://niklasfasching.github.io/go-org/blorg][static site]] generated by blorg +- to [[https://niklasfasching.github.io/go-org/convert.html][try it out live]] in your browser + [[https://raw.githubusercontent.com/niklasfasching/go-org/master/etc/example.png]] + Please note - the goal for the html export is to produce sensible html output, not to exactly reproduce the output of =org-html-export=. - the goal for the parser is to support a reasonable subset of Org mode. Org mode is *huge* and I like to follow the 80/20 rule. * usage ** command line -#+begin_src -go-org +#+begin_src bash +$ go-org +USAGE: org COMMAND [ARGS] +- org render FILE OUTPUT_FORMAT + OUTPUT_FORMAT: org, html, html-chroma +- org blorg init +- org blorg build +- org blorg serve #+end_src ** as a library see [[https://github.com/niklasfasching/go-org/blob/master/main.go][main.go]] and hugo [[https://github.com/gohugoio/hugo/blob/master/markup/org/convert.go][org/convert.go]] diff --git a/blorg/config.go b/blorg/config.go index 65c3e59..1524667 100644 --- a/blorg/config.go +++ b/blorg/config.go @@ -24,6 +24,7 @@ type Config struct { ContentDir string PublicDir string Address string + BaseUrl string Template *template.Template OrgConfig *org.Configuration } @@ -52,7 +53,7 @@ var TemplateFuncs = map[string]interface{}{ } func ReadConfig(configFile string) (*Config, error) { - address, publicDir, contentDir, workingDir := ":3000", "public", "content", filepath.Dir(configFile) + baseUrl, address, publicDir, contentDir, workingDir := "/", ":3000", "public", "content", filepath.Dir(configFile) f, err := os.Open(configFile) if err != nil { return nil, err @@ -63,6 +64,9 @@ func ReadConfig(configFile string) (*Config, error) { return nil, document.Error } m := document.BufferSettings + if !strings.HasSuffix(m["BASE_URL"], "/") { + m["BASE_URL"] += "/" + } if v, exists := m["AUTO_LINK"]; exists { orgConfig.AutoLink = v == "true" delete(m, "AUTO_LINK") @@ -71,6 +75,9 @@ func ReadConfig(configFile string) (*Config, error) { address = v delete(m, "ADDRESS") } + if _, exists := m["BASE_URL"]; exists { + baseUrl = m["BASE_URL"] + } if v, exists := m["PUBLIC"]; exists { publicDir = v delete(m, "PUBLIC") @@ -87,6 +94,7 @@ func ReadConfig(configFile string) (*Config, error) { orgConfig.MaxEmphasisNewLines = i delete(m, "MAX_EMPHASIS_NEW_LINES") } + for k, v := range m { if k == "OPTIONS" { orgConfig.DefaultSettings[k] = v + " " + orgConfig.DefaultSettings[k] @@ -94,11 +102,13 @@ func ReadConfig(configFile string) (*Config, error) { orgConfig.DefaultSettings[k] = v } } + config := &Config{ ConfigFile: configFile, ContentDir: filepath.Join(workingDir, contentDir), PublicDir: filepath.Join(workingDir, publicDir), Address: address, + BaseUrl: baseUrl, Template: template.New("_").Funcs(TemplateFuncs), OrgConfig: orgConfig, } @@ -174,7 +184,8 @@ func (c *Config) RenderContent() ([]*Page, error) { return err } pages = append(pages, p) - p.PermaLink = "/" + relPath[:len(relPath)-len(".org")] + ".html" + + p.PermaLink = c.BaseUrl + relPath[:len(relPath)-len(".org")] + ".html" return p.Render(publicPath[:len(publicPath)-len(".org")] + ".html") }) sort.Slice(pages, func(i, j int) bool { return pages[i].Date.After(pages[j].Date) }) diff --git a/blorg/testdata/blorg.org b/blorg/testdata/blorg.org index 8e2b53a..76c97d3 100644 --- a/blorg/testdata/blorg.org +++ b/blorg/testdata/blorg.org @@ -1,7 +1,7 @@ -#+AUTHOR: author -#+TITLE: blog -#+BASE_URL: https://www.example.com -#+OPTIONS: toc:nil +#+AUTHOR: testdata +#+TITLE: blorg +#+BASE_URL: /go-org/blorg +#+OPTIONS: toc:nil title:nil #+CONTENT: ./content #+PUBLIC: ./public @@ -12,7 +12,7 @@ - + {{ .Title }} #+end_src @@ -20,35 +20,12 @@ #+name: header #+begin_src html
- +
#+end_src -** index -#+name: index -#+begin_src html - - - {{ template "head" . }} - - {{ template "header" . }} -

{{ .Title }}

- - - -#+end_src ** item #+name: item #+begin_src html @@ -64,7 +41,7 @@ {{ .Content }} @@ -98,3 +75,30 @@ #+end_src + +** index +#+name: index +#+begin_src html + + + {{ template "head" . }} + + {{ template "header" . }} +
+

{{ .Title }}

+

Only pages that have a date will be listed here - e.g. not about.html +

+
+ + +#+end_src diff --git a/blorg/testdata/content/about.org b/blorg/testdata/content/about.org index fc65d68..105e7c9 100644 --- a/blorg/testdata/content/about.org +++ b/blorg/testdata/content/about.org @@ -1,4 +1,11 @@ #+TITLE: About -#+TAG[]: static +#+TAGS[]: static -and some content +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod +tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At +vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd +gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum +dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor +invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero +eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no +sea takimata sanctus est Lorem ipsum dolor sit amet. diff --git a/blorg/testdata/content/another-post.org b/blorg/testdata/content/another-post.org new file mode 100644 index 0000000..eb2cfc9 --- /dev/null +++ b/blorg/testdata/content/another-post.org @@ -0,0 +1,12 @@ +#+TITLE: another post +#+DATE: 2020-06-24 +#+TAGS[]: another + +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod +tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At +vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd +gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum +dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor +invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero +eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no +sea takimata sanctus est Lorem ipsum dolor sit amet. diff --git a/blorg/testdata/content/post.org b/blorg/testdata/content/post.org deleted file mode 100644 index fb0de80..0000000 --- a/blorg/testdata/content/post.org +++ /dev/null @@ -1,2 +0,0 @@ -#+TITLE: some post -#+TAG[]: post diff --git a/blorg/testdata/content/some-post.org b/blorg/testdata/content/some-post.org new file mode 100644 index 0000000..36b078c --- /dev/null +++ b/blorg/testdata/content/some-post.org @@ -0,0 +1,12 @@ +#+TITLE: some post +#+DATE: 2020-06-23 +#+TAGS[]: some + +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod +tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At +vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd +gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum +dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor +invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero +eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no +sea takimata sanctus est Lorem ipsum dolor sit amet. diff --git a/blorg/testdata/content/style.css b/blorg/testdata/content/style.css new file mode 100644 index 0000000..5809863 --- /dev/null +++ b/blorg/testdata/content/style.css @@ -0,0 +1,191 @@ +* { + box-sizing: border-box; + margin: 0; + padding: 0; + } + +html { + overflow-y: scroll; + height: 100%; + font: 100%/1.5 sans-serif; + word-wrap: break-word; + margin: 0 auto; + padding: 1.5em; + } + +@media (min-width: 768px) { + html { + font-size: 125%; + max-width: 42em; + } } + +h1, h2, h3, h4 { + margin: 2.5rem 0 1.5rem 0; + line-height: 1.25; + color: #333; + } + +a { + color: #fa6432; + text-decoration: none; + } +a:hover, a:focus, a:active { + text-decoration: underline; + } + +p { + margin: 1em 0; + line-height: 1.5; + } +p code { + background-color: #eee; + padding: 0.05em 0.2em; + border: 1px solid #ccc; + } + +ol, ul { + margin: 1em; + } +ol li ol, ol li ul, ul li ol, ul li ul { + margin: 0 2em; + } +ol li p, ul li p { + margin: 0; + } + +dl { + font-family: monospace, monospace; + } +dl dt { + font-weight: bold; + } +dl dd { + margin: -1em 0 1em 1em; + } + +img { + max-width: 100%; + display: block; + margin: 0 auto; + padding: 0.5em; + } + +blockquote { + padding-left: 1em; + font-style: italic; + border-left: solid 1px #fa6432; + } + +table { + font-size: 1rem; + text-align: left; + caption-side: bottom; + margin-bottom: 2em; + } +table * { + border: none; + } +table thead, table tr { + display: table; + table-layout: fixed; + width: 100%; + } +table tr:nth-child(even) { + background-color: rgba(200, 200, 200, 0.2); + } +table tbody { + display: block; + max-height: 70vh; + overflow-y: auto; + } +table td, table th { + padding: 0.25em; + } + +table, .highlight > pre, pre.example { + max-height: 70vh; + margin: 1em 0; + padding: 1em; + overflow: auto; + font-size: 0.85rem; + font-family: monospace, monospace; + border: 1px dashed rgba(250, 100, 50, 0.5); +} + +.title { + font-size: 2.5em; +} + +.subtitle { + font-weight: normal; + font-size: 0.75em; + color: #666; +} + +.tags { + margin-top: -1.5rem; + padding-bottom: 1.5em; +} +.tags li { + display: inline; + margin-right: 0.5em; +} + +figure { + margin: 1em 0; +} +figure figcaption { + font-family: monospace, monospace; + font-size: 0.75em; + text-align: center; + color: grey; +} + +.footnote-definition sup { + margin-left: -1.5em; + float: left; +} + +.footnote-definition .footnote-body { + margin: 1em 0; + padding: 0 1em; + border: 1px dashed rgba(250, 100, 50, 0.3); + background-color: rgba(200, 200, 200, 0.2); +} +.footnote-definition .footnote-body p:only-child { + margin: 0.2em 0; +} + +header { + display: flex; + justify-content: space-between; +} +header nav { + display: flex; + align-items: center; + justify-content: space-between; +} +header a + a { + margin-left: 1rem; +} + +.posts { + margin: 0; + list-style: none; +} +.posts .post a { + display: block; + padding: 0.5em 0; + color: black; +} +.posts .post a:hover, .posts .post a:focus, .posts .post a:active { + text-decoration: none; + background: rgba(200, 200, 200, 0.2); +} +.posts .post date { + font-family: monospace, monospace; + font-size: 0.8rem; + vertical-align: middle; + padding-right: 2rem; + color: grey; +} diff --git a/blorg/testdata/content/yet-another-post/index.org b/blorg/testdata/content/yet-another-post/index.org new file mode 100644 index 0000000..55a9e00 --- /dev/null +++ b/blorg/testdata/content/yet-another-post/index.org @@ -0,0 +1,12 @@ +#+TITLE: yet another post +#+DATE: 2020-06-25 +#+TAGS[]: yet another + +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod +tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At +vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd +gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum +dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor +invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero +eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no +sea takimata sanctus est Lorem ipsum dolor sit amet. diff --git a/blorg/testdata/public/about.html b/blorg/testdata/public/about.html index 9cdf912..33ca10c 100644 --- a/blorg/testdata/public/about.html +++ b/blorg/testdata/public/about.html @@ -3,16 +3,15 @@ - + About
- +
@@ -23,11 +22,18 @@ -

About

-

-

-and some content

+

+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod +tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At +vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd +gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum +dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor +invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero +eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no +sea takimata sanctus est Lorem ipsum dolor sit amet.

diff --git a/blorg/testdata/public/another-post.html b/blorg/testdata/public/another-post.html new file mode 100644 index 0000000..54d34aa --- /dev/null +++ b/blorg/testdata/public/another-post.html @@ -0,0 +1,40 @@ + + + + + + + another post + + + +
+ + +
+ +
+

another post +
+ +

+ +

+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod +tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At +vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd +gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum +dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor +invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero +eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no +sea takimata sanctus est Lorem ipsum dolor sit amet.

+ +
+ + diff --git a/blorg/testdata/public/index.html b/blorg/testdata/public/index.html index d3cb34e..38e6844 100644 --- a/blorg/testdata/public/index.html +++ b/blorg/testdata/public/index.html @@ -3,22 +3,46 @@ - - blog + + blorg
- +
-

blog

- +
+

blorg

+

Only pages that have a date will be listed here - e.g. not about.html +

+
diff --git a/blorg/testdata/public/post.html b/blorg/testdata/public/post.html deleted file mode 100644 index 470962e..0000000 --- a/blorg/testdata/public/post.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - some post - - - -
- - -
- -
-

some post -
- -

- -

some post

-

- -
- - diff --git a/blorg/testdata/public/some-post.html b/blorg/testdata/public/some-post.html new file mode 100644 index 0000000..14f11d2 --- /dev/null +++ b/blorg/testdata/public/some-post.html @@ -0,0 +1,40 @@ + + + + + + + some post + + + +
+ + +
+ +
+

some post +
+ +

+ +

+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod +tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At +vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd +gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum +dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor +invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero +eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no +sea takimata sanctus est Lorem ipsum dolor sit amet.

+ +
+ + diff --git a/blorg/testdata/public/style.css b/blorg/testdata/public/style.css new file mode 100644 index 0000000..5809863 --- /dev/null +++ b/blorg/testdata/public/style.css @@ -0,0 +1,191 @@ +* { + box-sizing: border-box; + margin: 0; + padding: 0; + } + +html { + overflow-y: scroll; + height: 100%; + font: 100%/1.5 sans-serif; + word-wrap: break-word; + margin: 0 auto; + padding: 1.5em; + } + +@media (min-width: 768px) { + html { + font-size: 125%; + max-width: 42em; + } } + +h1, h2, h3, h4 { + margin: 2.5rem 0 1.5rem 0; + line-height: 1.25; + color: #333; + } + +a { + color: #fa6432; + text-decoration: none; + } +a:hover, a:focus, a:active { + text-decoration: underline; + } + +p { + margin: 1em 0; + line-height: 1.5; + } +p code { + background-color: #eee; + padding: 0.05em 0.2em; + border: 1px solid #ccc; + } + +ol, ul { + margin: 1em; + } +ol li ol, ol li ul, ul li ol, ul li ul { + margin: 0 2em; + } +ol li p, ul li p { + margin: 0; + } + +dl { + font-family: monospace, monospace; + } +dl dt { + font-weight: bold; + } +dl dd { + margin: -1em 0 1em 1em; + } + +img { + max-width: 100%; + display: block; + margin: 0 auto; + padding: 0.5em; + } + +blockquote { + padding-left: 1em; + font-style: italic; + border-left: solid 1px #fa6432; + } + +table { + font-size: 1rem; + text-align: left; + caption-side: bottom; + margin-bottom: 2em; + } +table * { + border: none; + } +table thead, table tr { + display: table; + table-layout: fixed; + width: 100%; + } +table tr:nth-child(even) { + background-color: rgba(200, 200, 200, 0.2); + } +table tbody { + display: block; + max-height: 70vh; + overflow-y: auto; + } +table td, table th { + padding: 0.25em; + } + +table, .highlight > pre, pre.example { + max-height: 70vh; + margin: 1em 0; + padding: 1em; + overflow: auto; + font-size: 0.85rem; + font-family: monospace, monospace; + border: 1px dashed rgba(250, 100, 50, 0.5); +} + +.title { + font-size: 2.5em; +} + +.subtitle { + font-weight: normal; + font-size: 0.75em; + color: #666; +} + +.tags { + margin-top: -1.5rem; + padding-bottom: 1.5em; +} +.tags li { + display: inline; + margin-right: 0.5em; +} + +figure { + margin: 1em 0; +} +figure figcaption { + font-family: monospace, monospace; + font-size: 0.75em; + text-align: center; + color: grey; +} + +.footnote-definition sup { + margin-left: -1.5em; + float: left; +} + +.footnote-definition .footnote-body { + margin: 1em 0; + padding: 0 1em; + border: 1px dashed rgba(250, 100, 50, 0.3); + background-color: rgba(200, 200, 200, 0.2); +} +.footnote-definition .footnote-body p:only-child { + margin: 0.2em 0; +} + +header { + display: flex; + justify-content: space-between; +} +header nav { + display: flex; + align-items: center; + justify-content: space-between; +} +header a + a { + margin-left: 1rem; +} + +.posts { + margin: 0; + list-style: none; +} +.posts .post a { + display: block; + padding: 0.5em 0; + color: black; +} +.posts .post a:hover, .posts .post a:focus, .posts .post a:active { + text-decoration: none; + background: rgba(200, 200, 200, 0.2); +} +.posts .post date { + font-family: monospace, monospace; + font-size: 0.8rem; + vertical-align: middle; + padding-right: 2rem; + color: grey; +} diff --git a/blorg/testdata/public/tags/another/index.html b/blorg/testdata/public/tags/another/index.html new file mode 100644 index 0000000..615c6a6 --- /dev/null +++ b/blorg/testdata/public/tags/another/index.html @@ -0,0 +1,40 @@ + + + + + + + Another + + + +
+ + +
+ +
+

Another

+ +
+ + diff --git a/blorg/testdata/public/tag/post/index.html b/blorg/testdata/public/tags/some/index.html similarity index 55% rename from blorg/testdata/public/tag/post/index.html rename to blorg/testdata/public/tags/some/index.html index 45fb0d4..c0614f5 100644 --- a/blorg/testdata/public/tag/post/index.html +++ b/blorg/testdata/public/tags/some/index.html @@ -3,26 +3,25 @@ - - Post + + Some
- +
-

Post

+

Some