goorgeous

package module
v2.0.0+incompatible Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 16, 2017 License: MIT Imports: 6 Imported by: 177

README

#+TITLE: chaseadamsio/goorgeous

[[https://travis-ci.org/chaseadamsio/goorgeous.svg?branch=master]]
[[https://coveralls.io/repos/github/chaseadamsio/goorgeous/badge.svg?branch=master]]

/goorgeous is a Go Org to HTML Parser./

[[file:gopher_small.gif]] 

*Pronounced: Go? Org? Yes!*

#+BEGIN_QUOTE
"Org mode is for keeping notes, maintaining TODO lists, planning projects, and authoring documents with a fast and effective plain-text system."

- [[http://orgmode.org/][orgmode.org]]
#+END_QUOTE

The purpose of this package is to come as close as possible as parsing an =*.org= document into HTML, the same way one might publish [[http://orgmode.org/worg/org-tutorials/org-publish-html-tutorial.html][with org-publish-html from Emacs]]. 

* Installation

#+BEGIN_SRC sh
  go get -u github.com/chaseadamsio/goorgeous
#+END_SRC

* Usage

** Org Headers

To retrieve the headers from a =[]byte=, call =OrgHeaders= and it will return a =map[string]interface{}=: 

#+BEGIN_SRC go
  input := "#+title: goorgeous\n* Some Headline\n"
  out, _ := goorgeous.OrgHeaders(input) 
#+END_SRC

#+BEGIN_SRC go
  map[string]interface{}{ 
          "title": "goorgeous"
  }
#+END_SRC

** Org Content

After importing =github.com/chaseadamsio/goorgeous=, you can call =Org= with a =[]byte= and it will return an =html= version of the content as a =[]byte=

#+BEGIN_SRC go
  input := "#+TITLE: goorgeous\n* Some Headline\n"
  out := goorgeous.OrgCommon([]byte(input)) 
#+END_SRC

=out= will be:

#+BEGIN_SRC html
  <h1>Some Headline</h1>/n
#+END_SRC

* Why? 

First off, I've become an unapologetic user of Emacs & ever since finding =org-mode= I use it for anything having to do with writing content, organizing my life and keeping documentation of my days/weeks/months.

Although I like Emacs & =emacs-lisp=, I publish all of my html sites with [[https://gohugo.io][Hugo Static Site Generator]] and wanted to be able to write my content in =org-mode= in Emacs rather than markdown.

Hugo's implementation of templating and speed are unmatched, so the only way I knew for sure I could continue to use Hugo and write in =org-mode= seamlessly was to write a golang parser for org content and submit a PR for Hugo to use it.
* Acknowledgements
I leaned heavily on russross' [[https://github.com/russross/blackfriday][blackfriday markdown renderer]] as both an example of how to write a parser (with some updates to leverage the go we know today) and reusing the blackfriday HTML Renderer so I didn't have to write my own!

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ExtractOrgHeaders

func ExtractOrgHeaders(r *bufio.Reader) (fm []byte, err error)

ExtractOrgHeaders finds and returns all of the headers from a bufio.Reader and returns them as their own byte slice

func IsKeyword

func IsKeyword(data []byte) bool

Elements ~~ Keywords

func NewParser

func NewParser(renderer blackfriday.Renderer) *parser

NewParser returns a new parser with the inlineCallbacks required for org content

func Org

func Org(input []byte, renderer blackfriday.Renderer) []byte

Org is a convenience name for OrgOptions

func OrgCommon

func OrgCommon(input []byte) []byte

OrgCommon is the easiest way to parse a byte slice of org content and makes assumptions that the caller wants to use blackfriday's HTMLRenderer with XHTML

func OrgHeaders

func OrgHeaders(input []byte) (map[string]interface{}, error)

OrgHeaders find all of the headers from a byte slice and returns them as a map of string interface

func OrgOptions

func OrgOptions(input []byte, renderer blackfriday.Renderer) []byte

OrgOptions takes an org content byte slice and a renderer to use

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL