Project

highcarb

0.01
No release in over 3 years
Low commit activity in last 3 years
There's a lot of open issues
HighCarb can build a presentation based on HAML, Markdown or raw HTML
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

 Project Readme

HighCarb

HighCarb is a framework to create presentations.

Installation

$ gem install highcarb

Generate a presentation project

The -g flag generate a new tree with the base for the presentation

$ highcarb -g /my/slides/foobar

Adding content

The generated tree is something like

/slide
├── assets
│   ├── README
│   ├── base.scss
│   └── custom.js
├── slides
│   └── 0001.haml
└── snippets
    └── README

Slides

The content can be wrote in HAML, MarkDown or in raw HTML.

The generator will concatenate all the files when the presentation is shown.

Special tags

%snippet is used to load a file from the snippets directory.

%asset load a file from the assets directory. If the file is an image, an img will be created. If it is a CSS file (or SCSS), a link tag will be used. And, for JavaScript files, a script tag is used.

If type asset type can not be determined by the MIME type, a CSS class can be added to the asset tag to force the type. The class can be image, style or javascript

If the asset is something else, a link will be added with an anchor.

%external can be used to create link to external pages. The shown text is shorted to be less noisy.

Custom Haml Filters

You can register your own filters for use on the slide sources. Each filter is associated with a program that will be executed for each appearance of filter.

The content of the filter is sent to the standard input of the program. Its output will be added to the generated HTML. Filters are always executed in the root directory of the presentation.

Filters are registered in the config.yaml file in the root of the presentation directory, as items of the haml_filters key.

For example, we can add a filter notes to execute render-notes.sh:

haml_filters:
  notes: ./render-notes.sh

Then, in the presentation directory we create render-notes.sh, with execute permission and the following content:

#!/bin/sh

# Depends on https://github.com/commonmark/cmark

printf '<div class="notes">'
cmark
printf '</div>'

Finally, in the Haml sources the filter can be used with :notes:

.slide
  %h1 Title

  :notes
    Content that will be sent to `render-notes.sh`
Stream Protocol

If the program takes a long time to start, you can use the stream: protocol to send and receive the data.

First, in the config.yaml entry, declare the filter with the stream: prefix:

haml_filters:
  foo: stream:./render-foo

Then, when render-foo is executed, it will run as a background process. For each instance of the :foo filter in Haml, the program will receive a message with the following format:

<size, in bytes, of the content, decimal digits> "\n"
<content>

For example, if the source contains this code:

:foo
    test

The program will receive a message like this:

"5\ntest\n"

The response has to follow the same format: a line with the size (in bytes) of the HTML, and the HTML code.

Assets

Every file from the asset directory is accessible from the http://domain/asset/ URL.

Example

With this files

/slide
├── assets
│   ├── hacks.js
    └── first.png
└── snippets
    └── README

We could write

  %asset hacks.js

  .slide
    %h1 First slide
    
    %asset first.png

  .slide
    %h1 Second one

    %ul
      %li.slide this
      %li.slide and
      %li.slide that
      %li.slide
        See this:
        %external http://somewhere.tld/sometime

View the presentation

  $ highcarb /my/slides/foobar

Some options are available with the --help flag.

With the defaults options the web server will listen on 9090, so the presentation can be see at http://localhost:9090/

There is no need to restart the server if the content is changed. Everything will be regenerated when reload the page in the browser. The HTML generated for the snippets is cached. The cached key is the MD5 sum of the content.