mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			165 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Org Mode
		
	
	
	
	
	
			
		
		
	
	
			165 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Org Mode
		
	
	
	
	
	
#+OPTIONS:    H:3 num:nil toc:nil \n:nil @:t ::t |:t ^:t -:t f:t *:t TeX:t LaTeX:t skip:nil d:(HIDE) tags:not-in-toc
 | 
						|
#+STARTUP:    align fold nodlcheck hidestars oddeven lognotestate
 | 
						|
#+SEQ_TODO:   TODO(t) INPROGRESS(i) WAITING(w@) | DONE(d) CANCELED(c@)
 | 
						|
#+TAGS:       Write(w) Update(u) Fix(f) Check(c)
 | 
						|
#+TITLE:      org-ruby
 | 
						|
#+AUTHOR:     Brian Dewey
 | 
						|
#+EMAIL:      bdewey@gmail.com
 | 
						|
#+LANGUAGE:   en
 | 
						|
#+PRIORITIES: A C B
 | 
						|
#+CATEGORY:   worg
 | 
						|
 | 
						|
{Back to Worg's index}
 | 
						|
 | 
						|
* Motivation
 | 
						|
 | 
						|
  The dominant simple plain-text markup languages for the web are
 | 
						|
  Textile and Markdown. A factor for the popularity of those markup
 | 
						|
  formats is the widespread availability of simple, free packages for
 | 
						|
  converting the formats to HTML. For example, the world of
 | 
						|
  Ruby-powered websites has settled on RedCloth for converting Textile
 | 
						|
  to HTML.
 | 
						|
 | 
						|
  The default way to convert org-mode files to HTML is the powerful
 | 
						|
  publishing functionality provided by =emacs=. However, =emacs= does
 | 
						|
  not easiliy integrate into many existing website frameworks.
 | 
						|
 | 
						|
  =Org-ruby= tries to make it easier to use org-mode files in both
 | 
						|
  dyanmic and static website generation tools written in
 | 
						|
  Ruby. =Org-ruby= is a simple Ruby gem to convert org-mode files to
 | 
						|
  HTML.
 | 
						|
 | 
						|
* Using Org-ruby
 | 
						|
 | 
						|
  =Org-ruby= follows the same model as other Ruby markup
 | 
						|
  libraries. You install the gem:
 | 
						|
 | 
						|
  #+BEGIN_EXAMPLE
 | 
						|
  sudo gem install org-ruby
 | 
						|
  #+END_EXAMPLE
 | 
						|
 | 
						|
  Then, to convert an org-file to HTML in your Ruby code:
 | 
						|
 | 
						|
  #+BEGIN_EXAMPLE
 | 
						|
  require 'rubygems'
 | 
						|
  require 'org-ruby'
 | 
						|
 | 
						|
  data = IO.read(filename)
 | 
						|
  puts Orgmode::Parser.new(data).to_html
 | 
						|
  #+END_EXAMPLE
 | 
						|
 | 
						|
* Walkthrough: Using org-ruby with Webby
 | 
						|
 | 
						|
  Here is an example of how to integrate =org-ruby= into Webby, a
 | 
						|
  static website generation tool written in Ruby.
 | 
						|
 | 
						|
  Webby follows a similar pattern to other static site generation
 | 
						|
  tools (like nanoc, Jekyll, and webgen):
 | 
						|
 | 
						|
  - You author website content in text with simple markup
 | 
						|
  - Each page is fed through one or more /filters/ to produce HTML
 | 
						|
  - The HTML is mixed in with layouts to produce the final pages
 | 
						|
 | 
						|
  For a Webby site, a the source for a page may look like this:
 | 
						|
 | 
						|
  #+BEGIN_EXAMPLE
 | 
						|
  ---
 | 
						|
  title:           Special Directories
 | 
						|
  created_at:      2009-12-17
 | 
						|
  status:          Complete
 | 
						|
  filter:
 | 
						|
    - erb
 | 
						|
    - maruku
 | 
						|
  tags:
 | 
						|
    - powershell
 | 
						|
  ---
 | 
						|
  <%= @page.title %>
 | 
						|
  ==================
 | 
						|
 | 
						|
  Special Directories are a set of directories, each of which has a
 | 
						|
  function that will navigate you to the appropriate directory using
 | 
						|
  the push-location cmdlet. For example, the function `home` might
 | 
						|
  navigate to `c:\users\bdewey.`
 | 
						|
 | 
						|
  Install
 | 
						|
  -------
 | 
						|
 | 
						|
  Copy the module to somewhere in `ENV:PSModulePath`. Then,
 | 
						|
 | 
						|
      InstallModule SpecialDirectories
 | 
						|
  #+END_EXAMPLE
 | 
						|
 | 
						|
  In the above example, the text is written in Markdown. At the top of
 | 
						|
  the file, metadata informs Webby to pass the text through two
 | 
						|
  /filters/ to produce HTML. The first filter, =erb=, handles embedded
 | 
						|
  Ruby. In this case, it will replace ~<%= @page.title %>~ with the
 | 
						|
  page title (=Special Directories=). The second filter uses Maruku to
 | 
						|
  translate Markdown into HTML.
 | 
						|
 | 
						|
  You can use the exact same pattern to include org-mode files in a
 | 
						|
  Webby site. For this walkthrough, I assume you already have Webby
 | 
						|
  installed, and that you've already created a site.
 | 
						|
 | 
						|
  1. Make sure you have =org-ruby= installed: =sudo gem install
 | 
						|
     org-ruby=.
 | 
						|
  2. You need to register a new Webby filter to handle org-mode
 | 
						|
     content. Webby makes this easy. In the =lib/= folder of your
 | 
						|
     site, create a file =orgmode.rb=:
 | 
						|
 | 
						|
     #+BEGIN_EXAMPLE
 | 
						|
     require 'org-ruby'
 | 
						|
 | 
						|
     Webby::Filters.register :org do |input|
 | 
						|
       Orgmode::Parser.new(input).to_html
 | 
						|
     end
 | 
						|
     #+END_EXAMPLE
 | 
						|
 | 
						|
     This code creates a new filter, =org=, that will use the
 | 
						|
     =org-ruby= parser to translate org-mode input into HTML.
 | 
						|
  3. Create your content. For example:
 | 
						|
 | 
						|
     #+BEGIN_EXAMPLE
 | 
						|
---
 | 
						|
title:              Orgmode Parser
 | 
						|
created_at:         2009-12-21
 | 
						|
status:             Under development
 | 
						|
filter:
 | 
						|
  - erb
 | 
						|
  - org
 | 
						|
tags:
 | 
						|
  - orgmode
 | 
						|
  - ruby
 | 
						|
---
 | 
						|
<%= @page.title %>
 | 
						|
 | 
						|
  Status: <%= @page.status %>
 | 
						|
 | 
						|
* Description
 | 
						|
 | 
						|
  Helpful Ruby routines for parsing orgmode files. The most
 | 
						|
  significant thing this library does today is convert orgmode files
 | 
						|
  to textile. Currently, you cannot do much to customize the
 | 
						|
  conversion. The supplied textile conversion is optimized for
 | 
						|
  extracting "content" from the orgfile as opposed to "metadata."
 | 
						|
 | 
						|
 | 
						|
* History
 | 
						|
 | 
						|
** 2009-12-29: Version 0.4
 | 
						|
 | 
						|
   - The first thing output in HTML gets the class "title"
 | 
						|
   - HTML output is now indented
 | 
						|
   - Proper support for multi-paragraph list items.
 | 
						|
 | 
						|
     See? This paragraph is part of the last bullet.
 | 
						|
 | 
						|
   - Fixed bugs:
 | 
						|
     - "rake spec" wouldn't work on Linux. Needed "require 'rubygems'".
 | 
						|
       #+END_EXAMPLE
 | 
						|
 | 
						|
     This file will go through the =erb= and =org= filters; as defined
 | 
						|
     in the previous step, the =org= filter will use =org-ruby= to
 | 
						|
     generate HTML.
 | 
						|
 | 
						|
  That's all there is to it!
 |