diff --git a/index.html b/index.html index 6946013a..7f2964ce 100644 --- a/index.html +++ b/index.html @@ -29,8 +29,8 @@ your speed, take a look at Nick Fitzgerald's Pycco.

Main Documentation Generation Functions

Generate the documentation for a source file by reading it in, splitting it up into comment/code sections, highlighting them for the appropriate language, -and merging them into an HTML template.

generate_documentation = (source, callback) ->
-  fs.readFile source, "utf-8", (error, code) ->
+and merging them into an HTML template.

generate_documentation = (source, callback) ->
+  fs.readFile source, "utf-8", (error, code) ->
     throw error if error
     sections = parse source, code
     highlight source, sections, ->
@@ -45,14 +45,14 @@
   code_text: ...
   code_html: ...
 }
-
parse = (source, code) ->
+
parse = (source, code) ->
   lines    = code.split '\n'
   sections = []
   language = get_language source
   has_code = docs_text = code_text = ''
 
-  save = (docs, code) ->
-    sections.push docs_text: docs, code_text: code
+  save = (docs, code) ->
+    sections.push docs_text: docs, code_text: code
 
   for line in lines
     if line.match language.comment_matcher
@@ -70,13 +70,13 @@
 
 

We process the entire file in a single call to Pygments by inserting little marker comments between each section and then splitting the result string -wherever our markers occur.

highlight = (source, sections, callback) ->
+wherever our markers occur.

highlight = (source, sections, callback) ->
   language = get_language source
   pygments = spawn 'pygmentize', ['-l', language.name, '-f', 'html', '-O', 'encoding=utf-8']
   output   = ''
-  pygments.stderr.addListener 'data',  (error)  ->
+  pygments.stderr.addListener 'data',  (error)  ->
     puts error if error
-  pygments.stdout.addListener 'data', (result) ->
+  pygments.stdout.addListener 'data', (result) ->
     output += result if result
   pygments.addListener 'exit', ->
     output = output.replace(highlight_start, '').replace(highlight_end, '')
@@ -88,11 +88,11 @@
   pygments.stdin.write((section.code_text for section in sections).join(language.divider_text))
   pygments.stdin.end()

Once all of the code is finished highlighting, we can generate the HTML file and write out the documentation. Pass the completed sections into the template -found in resources/docco.jst

generate_html = (source, sections) ->
+found in resources/docco.jst

generate_html = (source, sections) ->
   title = path.basename source
   dest  = destination source
   html  = docco_template {
-    title: title, sections: sections, sources: sources, path: path, destination: destination
+    title: title, sections: sections, sources: sources, path: path, destination: destination
   }
   puts "docco: #{source} -> #{dest}"
   fs.writeFile dest, html

Helpers & Setup

Require our external dependencies, including Showdown.js @@ -104,20 +104,20 @@ the name of the Pygments lexer and the symbol that indicates a comment. To add another language to Docco's repertoire, add it here.

languages =
   '.coffee':
-    name: 'coffee-script', symbol: '#'
+    name: 'coffee-script', symbol: '#'
   '.js':
-    name: 'javascript', symbol: '//'
+    name: 'javascript', symbol: '//'
   '.rb':
-    name: 'ruby', symbol: '#'
+    name: 'ruby', symbol: '#'
   '.py':
-    name: 'python', symbol: '#'

Build out the appropriate matchers and delimiters for each language.

for ext, l of languages

Does the line begin with a comment?

  l.comment_matcher = new RegExp('^\\s*' + l.symbol + '\\s?')

The dividing token we feed into Pygments, to delimit the boundaries between + name: 'python', symbol: '#'

Build out the appropriate matchers and delimiters for each language.

for ext, l of languages

Does the line begin with a comment?

  l.comment_matcher = new RegExp('^\\s*' + l.symbol + '\\s?')

The dividing token we feed into Pygments, to delimit the boundaries between sections.

  l.divider_text = '\n' + l.symbol + 'DIVIDER\n'

The mirror of divider_text that we expect Pygments to return. We can split on this to recover the original sections. -Note: the class is "c" for Python and "c1" for the other languages

  l.divider_html = new RegExp('\\n*<span class="c1?">' + l.symbol + 'DIVIDER<\\/span>\\n*')

Get the current language we're documenting, based on the extension.

get_language = (source) -> languages[path.extname(source)]

Compute the destination HTML path for an input source file path. If the source -is lib/example.coffee, the HTML will be at docs/example.html

destination = (filepath) ->
-  'docs/' + path.basename(filepath, path.extname(filepath)) + '.html'

Ensure that the destination directory exists.

ensure_directory = (callback) ->
+Note: the class is "c" for Python and "c1" for the other languages

  l.divider_html = new RegExp('\\n*<span class="c1?">' + l.symbol + 'DIVIDER<\\/span>\\n*')

Get the current language we're documenting, based on the extension.

get_language = (source) -> languages[path.extname(source)]

Compute the destination HTML path for an input source file path. If the source +is lib/example.coffee, the HTML will be at docs/example.html

destination = (filepath) ->
+  'docs/' + path.basename(filepath, path.extname(filepath)) + '.html'

Ensure that the destination directory exists.

ensure_directory = (callback) ->
   exec 'mkdir -p docs', -> callback()

Micro-templating, originally by John Resig, borrowed by way of -Underscore.js.

template = (str) ->
+Underscore.js.

template = (str) ->
   new Function 'obj',
     'var p=[],print=function(){p.push.apply(p,arguments);};' +
     'with(obj){p.push(\'' +