Skip to content

Instantly share code, notes, and snippets.

@wulftone
Forked from joyrexus/demo.coffee.md
Created March 20, 2013 23:31
Show Gist options
  • Save wulftone/5209484 to your computer and use it in GitHub Desktop.
Save wulftone/5209484 to your computer and use it in GitHub Desktop.

Demo

console.log 'hello'
print 'world!'
$ cat demo.coffee.md
Demo
====
console.log 'hello'
```python
print 'world!'
```
$ marko.coffee -h
marko [options] FILES
options:
-h, --help show help
-r, --run run code blocks
-x, --extract extract code blocks
[-l, --lang LANG extract fenced code blocks of specified sort]
$ marko.coffee -x demo.coffee.md
console.log 'hello'
$ marko.coffee -x --lang=python demo.coffee.md
print 'world!'
$ marko.coffee -x --lang=python demo.coffee.md | python -
world!
#!/usr/bin/env coffee
help = '''
marko [options] FILES
options:
-h, --help show help
-r, --run run code blocks
-x, --extract extract code blocks
[-l, --lang LANG extract fenced code blocks of specified sort]
'''
fs = require 'fs'
coffee = require 'coffee-script'
marked = require 'marked'
argv = require('optimist')
.boolean(['h', 'r', 'x'])
.alias('h', 'help')
.alias('r', 'run')
.alias('x', 'extract')
.alias('l', 'lang')
.argv
print = console.log
print help if argv.help
head = '''
<!DOCTYPE html>
<meta charset="utf-8">
<link rel="stylesheet" href="style.css">
<body>
'''
codeFrom = (source, lang) ->
(t.text for t in marked.lexer(source) \
when t.type is 'code' and t.lang is lang).join "\n"
for file in argv._ when file.match /\.(litcoffee|md)/i
source = fs.readFileSync file, 'utf8'
if argv.run and /coffee/.test file
coffee.eval codeFrom source
else if argv.extract
print codeFrom(source, argv.lang)
else
print head, marked source
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment