diff --git a/.docco.json b/.docco.json
new file mode 100755
index 00000000..45e40fdb
--- /dev/null
+++ b/.docco.json
@@ -0,0 +1,7 @@
+{
+  "sources": [
+    "docco.litcoffee",
+    "README.md",
+    "src/**/*.litcoffee"
+  ]
+}
diff --git a/.gitignore b/.gitignore
old mode 100644
new mode 100755
index a3ac9700..ee006570
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,10 @@ output
 docs
 test/data
 node_modules
+doc
+#**/*.js
+#**/*.map
+artifacts
+.nyc_output
+!/test/sim/src/fake_litcoffee.js
+npm-debug.log
diff --git a/.idea/docco.iml b/.idea/docco.iml
new file mode 100755
index 00000000..24643cc3
--- /dev/null
+++ b/.idea/docco.iml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="WEB_MODULE" version="4">
+  <component name="NewModuleRootManager">
+    <content url="file://$MODULE_DIR$">
+      <excludeFolder url="file://$MODULE_DIR$/.tmp" />
+      <excludeFolder url="file://$MODULE_DIR$/temp" />
+      <excludeFolder url="file://$MODULE_DIR$/tmp" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>
\ No newline at end of file
diff --git a/.idea/libraries/Generated_files.xml b/.idea/libraries/Generated_files.xml
new file mode 100755
index 00000000..ae8e2a73
--- /dev/null
+++ b/.idea/libraries/Generated_files.xml
@@ -0,0 +1,101 @@
+<component name="libraryTable">
+  <library name="Generated files" type="javaScript">
+    <properties>
+      <sourceFilesUrls>
+        <item url="file://$PROJECT_DIR$/src/getLanguage.js" />
+        <item url="file://$PROJECT_DIR$/test/unit-tests/unit-test-typeIsArray.js" />
+        <item url="file://$PROJECT_DIR$/src/getSourceInformation.js" />
+        <item url="file://$PROJECT_DIR$/test/unit-tests/unit-test-getCSSPath.js" />
+        <item url="file://$PROJECT_DIR$/src/format.js" />
+        <item url="file://$PROJECT_DIR$/test/unit-tests/unit-test-getInformationOnFiles.js" />
+        <item url="file://$PROJECT_DIR$/src/getInformationOnFiles.js" />
+        <item url="file://$PROJECT_DIR$/test/unit-tests/unit-test-parse.js" />
+        <item url="file://$PROJECT_DIR$/src/buildMatchers.js" />
+        <item url="file://$PROJECT_DIR$/src/getRelativePath.js" />
+        <item url="file://$PROJECT_DIR$/test/unit-tests/unit-test-run.js" />
+        <item url="file://$PROJECT_DIR$/test/unit-tests/unit-test-getDestinationInformation.js" />
+        <item url="file://$PROJECT_DIR$/test/unit-tests/unit-test-getLanguage.js" />
+        <item url="file://$PROJECT_DIR$/src/getCSSPath.js" />
+        <item url="file://$PROJECT_DIR$/test/unit-tests/unit-test-write.js" />
+        <item url="file://$PROJECT_DIR$/src/getOthers.js" />
+        <item url="file://$PROJECT_DIR$/test/unit-tests/unit-test-document.js" />
+        <item url="file://$PROJECT_DIR$/test/unit-tests/unit-test-getOthers.js" />
+        <item url="file://$PROJECT_DIR$/test/unit-tests/unit-test-buildMatchers.js" />
+        <item url="file://$PROJECT_DIR$/test/unit-tests/unit-test-configure.js" />
+        <item url="file://$PROJECT_DIR$/test/unit-tests/unit-test-getRelativePath.js" />
+        <item url="file://$PROJECT_DIR$/test/unit-tests/unit-test-format.js" />
+        <item url="file://$PROJECT_DIR$/src/configure.js" />
+        <item url="file://$PROJECT_DIR$/test/unit-tests/fakes/fake-linear-jst-unflattened-result.js" />
+        <item url="file://$PROJECT_DIR$/test/unit-tests/fakes/informationOnFilesUnFlattened.js" />
+        <item url="file://$PROJECT_DIR$/test/unit-tests/fakes/fake-config.js" />
+        <item url="file://$PROJECT_DIR$/test/unit-tests/fakes/fake-linear-jst.js" />
+        <item url="file://$PROJECT_DIR$/test/unit-tests/fakes/fake-linear-jst-flattened-result.js" />
+        <item url="file://$PROJECT_DIR$/test/unit-tests/unit-test-fixForMatch.js" />
+        <item url="file://$PROJECT_DIR$/docco.js" />
+        <item url="file://$PROJECT_DIR$/test/unit-tests/fakes/informationOnFilesFlattened.js" />
+        <item url="file://$PROJECT_DIR$/test/unit-tests/fakes/fake-jst-result.js" />
+        <item url="file://$PROJECT_DIR$/test/unit-tests/fakes/fake-jst.js" />
+        <item url="file://$PROJECT_DIR$/src/write.js" />
+        <item url="file://$PROJECT_DIR$/src/parse.js" />
+        <item url="file://$PROJECT_DIR$/src/document.js" />
+        <item url="file://$PROJECT_DIR$/src/getDestinationInformation.js" />
+        <item url="file://$PROJECT_DIR$/test/unit-tests/utils/fixForMatch.js" />
+        <item url="file://$PROJECT_DIR$/test/unit-tests/utils/typeIsObject.js" />
+        <item url="file://$PROJECT_DIR$/test/unit-tests/utils/typeIsArray.js" />
+      </sourceFilesUrls>
+    </properties>
+    <CLASSES>
+      <root url="file://$PROJECT_DIR$/test/unit-tests/unit-test-getCSS.js" />
+      <root url="file://$PROJECT_DIR$/test/unit-tests/unit-test-getCSS.js" />
+      <root url="file://$PROJECT_DIR$/test/unit-tests/fakes/fake-linear-jst-result.js" />
+      <root url="file://$PROJECT_DIR$/test/unit-tests/fakes/fake-linear-jst-result.js" />
+      <root url="file://$PROJECT_DIR$/test/unit-tests/unit-test-a-write.js" />
+      <root url="file://$PROJECT_DIR$/test/unit-tests/unit-test-a-write.js" />
+      <root url="file://$PROJECT_DIR$/test/unit-tests/fakes/informationOnFilesFlattenedRelative.js" />
+      <root url="file://$PROJECT_DIR$/test/unit-tests/fakes/informationOnFilesFlattenedRelative.js" />
+      <root url="file://$PROJECT_DIR$/docco_original.js" />
+      <root url="file://$PROJECT_DIR$/docco_original.js" />
+      <root url="file://$PROJECT_DIR$/src/getLanguage.js" />
+      <root url="file://$PROJECT_DIR$/test/unit-tests/unit-test-typeIsArray.js" />
+      <root url="file://$PROJECT_DIR$/src/getSourceInformation.js" />
+      <root url="file://$PROJECT_DIR$/test/unit-tests/unit-test-getCSSPath.js" />
+      <root url="file://$PROJECT_DIR$/src/format.js" />
+      <root url="file://$PROJECT_DIR$/test/unit-tests/unit-test-getInformationOnFiles.js" />
+      <root url="file://$PROJECT_DIR$/src/getInformationOnFiles.js" />
+      <root url="file://$PROJECT_DIR$/test/unit-tests/unit-test-parse.js" />
+      <root url="file://$PROJECT_DIR$/src/buildMatchers.js" />
+      <root url="file://$PROJECT_DIR$/src/getRelativePath.js" />
+      <root url="file://$PROJECT_DIR$/test/unit-tests/unit-test-run.js" />
+      <root url="file://$PROJECT_DIR$/test/unit-tests/unit-test-getDestinationInformation.js" />
+      <root url="file://$PROJECT_DIR$/test/unit-tests/unit-test-getLanguage.js" />
+      <root url="file://$PROJECT_DIR$/src/getCSSPath.js" />
+      <root url="file://$PROJECT_DIR$/test/unit-tests/unit-test-write.js" />
+      <root url="file://$PROJECT_DIR$/src/getOthers.js" />
+      <root url="file://$PROJECT_DIR$/test/unit-tests/unit-test-document.js" />
+      <root url="file://$PROJECT_DIR$/test/unit-tests/unit-test-getOthers.js" />
+      <root url="file://$PROJECT_DIR$/test/unit-tests/unit-test-buildMatchers.js" />
+      <root url="file://$PROJECT_DIR$/test/unit-tests/unit-test-configure.js" />
+      <root url="file://$PROJECT_DIR$/test/unit-tests/unit-test-getRelativePath.js" />
+      <root url="file://$PROJECT_DIR$/test/unit-tests/unit-test-format.js" />
+      <root url="file://$PROJECT_DIR$/src/configure.js" />
+      <root url="file://$PROJECT_DIR$/test/unit-tests/fakes/fake-linear-jst-unflattened-result.js" />
+      <root url="file://$PROJECT_DIR$/test/unit-tests/fakes/informationOnFilesUnFlattened.js" />
+      <root url="file://$PROJECT_DIR$/test/unit-tests/fakes/fake-config.js" />
+      <root url="file://$PROJECT_DIR$/test/unit-tests/fakes/fake-linear-jst.js" />
+      <root url="file://$PROJECT_DIR$/test/unit-tests/fakes/fake-linear-jst-flattened-result.js" />
+      <root url="file://$PROJECT_DIR$/test/unit-tests/unit-test-fixForMatch.js" />
+      <root url="file://$PROJECT_DIR$/docco.js" />
+      <root url="file://$PROJECT_DIR$/test/unit-tests/fakes/informationOnFilesFlattened.js" />
+      <root url="file://$PROJECT_DIR$/test/unit-tests/fakes/fake-jst-result.js" />
+      <root url="file://$PROJECT_DIR$/test/unit-tests/fakes/fake-jst.js" />
+      <root url="file://$PROJECT_DIR$/src/write.js" />
+      <root url="file://$PROJECT_DIR$/src/parse.js" />
+      <root url="file://$PROJECT_DIR$/src/document.js" />
+      <root url="file://$PROJECT_DIR$/src/getDestinationInformation.js" />
+      <root url="file://$PROJECT_DIR$/test/unit-tests/utils/fixForMatch.js" />
+      <root url="file://$PROJECT_DIR$/test/unit-tests/utils/typeIsObject.js" />
+      <root url="file://$PROJECT_DIR$/test/unit-tests/utils/typeIsArray.js" />
+    </CLASSES>
+    <SOURCES />
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/markdown-navigator.xml b/.idea/markdown-navigator.xml
new file mode 100755
index 00000000..4fdc309a
--- /dev/null
+++ b/.idea/markdown-navigator.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="MarkdownProjectSettings">
+    <PreviewSettings splitEditorLayout="SPLIT" splitEditorPreview="PREVIEW" useGrayscaleRendering="false" zoomFactor="1.0" maxImageWidth="0" showGitHubPageIfSynced="false" allowBrowsingInPreview="false" synchronizePreviewPosition="true" highlightPreviewType="NONE" highlightFadeOut="5" highlightOnTyping="true" synchronizeSourcePosition="true" verticallyAlignSourceAndPreviewSyncPosition="true" showSearchHighlightsInPreview="false" showSelectionInPreview="true">
+      <PanelProvider>
+        <provider providerId="com.vladsch.idea.multimarkdown.editor.swing.html.panel" providerName="Default - Swing" />
+      </PanelProvider>
+    </PreviewSettings>
+    <ParserSettings>
+      <PegdownExtensions>
+        <option name="ABBREVIATIONS" value="false" />
+        <option name="ANCHORLINKS" value="true" />
+        <option name="ASIDE" value="false" />
+        <option name="ATXHEADERSPACE" value="true" />
+        <option name="AUTOLINKS" value="true" />
+        <option name="DEFINITIONS" value="false" />
+        <option name="FENCED_CODE_BLOCKS" value="true" />
+        <option name="FOOTNOTES" value="false" />
+        <option name="HARDWRAPS" value="false" />
+        <option name="INSERTED" value="false" />
+        <option name="QUOTES" value="false" />
+        <option name="RELAXEDHRULES" value="true" />
+        <option name="SMARTS" value="false" />
+        <option name="STRIKETHROUGH" value="true" />
+        <option name="SUBSCRIPT" value="false" />
+        <option name="SUPERSCRIPT" value="false" />
+        <option name="SUPPRESS_HTML_BLOCKS" value="false" />
+        <option name="SUPPRESS_INLINE_HTML" value="false" />
+        <option name="TABLES" value="true" />
+        <option name="TASKLISTITEMS" value="true" />
+        <option name="TOC" value="false" />
+        <option name="WIKILINKS" value="true" />
+      </PegdownExtensions>
+      <ParserOptions>
+        <option name="COMMONMARK_LISTS" value="false" />
+        <option name="DUMMY" value="false" />
+        <option name="EMOJI_SHORTCUTS" value="true" />
+        <option name="FLEXMARK_FRONT_MATTER" value="false" />
+        <option name="GFM_LOOSE_BLANK_LINE_AFTER_ITEM_PARA" value="true" />
+        <option name="GFM_TABLE_RENDERING" value="true" />
+        <option name="GITBOOK_URL_ENCODING" value="false" />
+        <option name="GITHUB_EMOJI_URL" value="false" />
+        <option name="GITHUB_LISTS" value="true" />
+        <option name="GITHUB_WIKI_LINKS" value="true" />
+        <option name="JEKYLL_FRONT_MATTER" value="false" />
+        <option name="SIM_TOC_BLANK_LINE_SPACER" value="true" />
+      </ParserOptions>
+    </ParserSettings>
+    <HtmlSettings headerTopEnabled="false" headerBottomEnabled="false" bodyTopEnabled="false" bodyBottomEnabled="false" embedUrlContent="false" addPageHeader="true">
+      <GeneratorProvider>
+        <provider providerId="com.vladsch.idea.multimarkdown.editor.swing.html.generator" providerName="Default Swing HTML Generator" />
+      </GeneratorProvider>
+      <headerTop />
+      <headerBottom />
+      <bodyTop />
+      <bodyBottom />
+    </HtmlSettings>
+    <CssSettings previewScheme="UI_SCHEME" cssUri="" isCssUriEnabled="false" isCssTextEnabled="false" isDynamicPageWidth="true">
+      <StylesheetProvider>
+        <provider providerId="com.vladsch.idea.multimarkdown.editor.swing.html.css" providerName="Default Swing Stylesheet" />
+      </StylesheetProvider>
+      <ScriptProviders />
+      <cssText />
+    </CssSettings>
+    <HtmlExportSettings updateOnSave="false" parentDir="$ProjectFileDir$" targetDir="$ProjectFileDir$" cssDir="" scriptDir="" plainHtml="false" imageDir="" copyLinkedImages="false" imageUniquifyType="0" targetExt="" useTargetExt="false" noCssNoScripts="false" linkToExportedHtml="true" exportOnSettingsChange="true" regenerateOnProjectOpen="false" />
+    <LinkMapSettings>
+      <textMaps />
+    </LinkMapSettings>
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/markdown-navigator/profiles_settings.xml b/.idea/markdown-navigator/profiles_settings.xml
new file mode 100755
index 00000000..57927c5a
--- /dev/null
+++ b/.idea/markdown-navigator/profiles_settings.xml
@@ -0,0 +1,3 @@
+<component name="MarkdownNavigator.ProfileManager">
+  <settings default="" pdf-export="" />
+</component>
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100755
index 00000000..28a804d8
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="JavaScriptSettings">
+    <option name="languageLevel" value="ES6" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100755
index 00000000..4cd901d2
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/docco.iml" filepath="$PROJECT_DIR$/.idea/docco.iml" />
+    </modules>
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100755
index 00000000..94a25f7f
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/watcherTasks.xml b/.idea/watcherTasks.xml
new file mode 100755
index 00000000..c7f43370
--- /dev/null
+++ b/.idea/watcherTasks.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectTasksOptions" suppressed-tasks="Babel">
+    <TaskOptions isEnabled="false">
+      <option name="arguments" value="--map --compile $FileName$ " />
+      <option name="checkSyntaxErrors" value="true" />
+      <option name="description" />
+      <option name="exitCodeBehavior" value="ALWAYS" />
+      <option name="fileExtension" value="litcoffee" />
+      <option name="immediateSync" value="true" />
+      <option name="name" value="CoffeeScript" />
+      <option name="output" value="$FileNameWithoutExtension$.js:$FileNameWithoutExtension$.map:$FileNameWithoutExtension$.js.map" />
+      <option name="outputFilters">
+        <array>
+          <FilterInfo>
+            <option name="description" value="coffee error format" />
+            <option name="name" value="coffee" />
+            <option name="regExp" value="$FILE_PATH$:$LINE$:$COLUMN$: $MESSAGE$$" />
+          </FilterInfo>
+        </array>
+      </option>
+      <option name="outputFromStdout" value="false" />
+      <option name="program" value="$USER_HOME$/.nvm/versions/node/v7.7.0/bin/coffee" />
+      <option name="scopeName" value="Project Files" />
+      <option name="trackOnlyRoot" value="true" />
+      <option name="workingDir" value="$FileDir$" />
+      <envs />
+    </TaskOptions>
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
new file mode 100755
index 00000000..f2e8c04e
--- /dev/null
+++ b/.idea/workspace.xml
@@ -0,0 +1,1696 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ChangeListManager">
+    <list default="true" id="276b0a16-5b5d-4c51-a0d3-f44cc53e2124" name="Default" comment="">
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/docco.iml" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/libraries/Generated_files.xml" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/markdown-navigator.xml" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/markdown-navigator/profiles_settings.xml" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/misc.xml" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/modules.xml" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/vcs.xml" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/watcherTasks.xml" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/package-lock.json" />
+      <change type="MOVED" beforePath="$PROJECT_DIR$/test/sim/.adocco.json" afterPath="$PROJECT_DIR$/test/sim/.docco.json" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/classic/public/fonts/aller-bold.eot" afterPath="$PROJECT_DIR$/resources/classic/public/fonts/aller-bold.eot" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/classic/public/fonts/aller-bold.ttf" afterPath="$PROJECT_DIR$/resources/classic/public/fonts/aller-bold.ttf" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/classic/public/fonts/aller-bold.woff" afterPath="$PROJECT_DIR$/resources/classic/public/fonts/aller-bold.woff" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/classic/public/fonts/aller-light.eot" afterPath="$PROJECT_DIR$/resources/classic/public/fonts/aller-light.eot" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/classic/public/fonts/aller-light.ttf" afterPath="$PROJECT_DIR$/resources/classic/public/fonts/aller-light.ttf" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/classic/public/fonts/aller-light.woff" afterPath="$PROJECT_DIR$/resources/classic/public/fonts/aller-light.woff" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/classic/public/fonts/fleurons.eot" afterPath="$PROJECT_DIR$/resources/classic/public/fonts/fleurons.eot" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/classic/public/fonts/fleurons.ttf" afterPath="$PROJECT_DIR$/resources/classic/public/fonts/fleurons.ttf" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/classic/public/fonts/fleurons.woff" afterPath="$PROJECT_DIR$/resources/classic/public/fonts/fleurons.woff" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/classic/public/images/gray.png" afterPath="$PROJECT_DIR$/resources/classic/public/images/gray.png" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/linear/public/fonts/aller-bold.eot" afterPath="$PROJECT_DIR$/resources/linear/public/fonts/aller-bold.eot" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/linear/public/fonts/aller-bold.ttf" afterPath="$PROJECT_DIR$/resources/linear/public/fonts/aller-bold.ttf" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/linear/public/fonts/aller-bold.woff" afterPath="$PROJECT_DIR$/resources/linear/public/fonts/aller-bold.woff" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/linear/public/fonts/aller-light.eot" afterPath="$PROJECT_DIR$/resources/linear/public/fonts/aller-light.eot" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/linear/public/fonts/aller-light.ttf" afterPath="$PROJECT_DIR$/resources/linear/public/fonts/aller-light.ttf" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/linear/public/fonts/aller-light.woff" afterPath="$PROJECT_DIR$/resources/linear/public/fonts/aller-light.woff" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/linear/public/fonts/fleurons.eot" afterPath="$PROJECT_DIR$/resources/linear/public/fonts/fleurons.eot" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/linear/public/fonts/fleurons.ttf" afterPath="$PROJECT_DIR$/resources/linear/public/fonts/fleurons.ttf" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/linear/public/fonts/fleurons.woff" afterPath="$PROJECT_DIR$/resources/linear/public/fonts/fleurons.woff" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/linear/public/images/gray.png" afterPath="$PROJECT_DIR$/resources/linear/public/images/gray.png" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/parallel/public/fonts/aller-bold.eot" afterPath="$PROJECT_DIR$/resources/parallel/public/fonts/aller-bold.eot" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/parallel/public/fonts/aller-bold.ttf" afterPath="$PROJECT_DIR$/resources/parallel/public/fonts/aller-bold.ttf" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/parallel/public/fonts/aller-bold.woff" afterPath="$PROJECT_DIR$/resources/parallel/public/fonts/aller-bold.woff" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/parallel/public/fonts/aller-light.eot" afterPath="$PROJECT_DIR$/resources/parallel/public/fonts/aller-light.eot" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/parallel/public/fonts/aller-light.ttf" afterPath="$PROJECT_DIR$/resources/parallel/public/fonts/aller-light.ttf" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/parallel/public/fonts/aller-light.woff" afterPath="$PROJECT_DIR$/resources/parallel/public/fonts/aller-light.woff" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/sidebyside/public/fonts/aller-bold.eot" afterPath="$PROJECT_DIR$/resources/sidebyside/public/fonts/aller-bold.eot" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/sidebyside/public/fonts/aller-bold.ttf" afterPath="$PROJECT_DIR$/resources/sidebyside/public/fonts/aller-bold.ttf" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/sidebyside/public/fonts/aller-bold.woff" afterPath="$PROJECT_DIR$/resources/sidebyside/public/fonts/aller-bold.woff" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/sidebyside/public/fonts/aller-light.eot" afterPath="$PROJECT_DIR$/resources/sidebyside/public/fonts/aller-light.eot" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/sidebyside/public/fonts/aller-light.ttf" afterPath="$PROJECT_DIR$/resources/sidebyside/public/fonts/aller-light.ttf" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/sidebyside/public/fonts/aller-light.woff" afterPath="$PROJECT_DIR$/resources/sidebyside/public/fonts/aller-light.woff" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/sim/images/fluffybunny1.jpg" afterPath="$PROJECT_DIR$/test/sim/images/fluffybunny1.jpg" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/sim/images/fluffybunny2.jpg" afterPath="$PROJECT_DIR$/test/sim/images/fluffybunny2.jpg" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/sim/images/fluffybunny3.jpg" afterPath="$PROJECT_DIR$/test/sim/images/fluffybunny3.jpg" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.docco.json" afterPath="$PROJECT_DIR$/.docco.json" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.gitignore" afterPath="$PROJECT_DIR$/.gitignore" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.npmignore" afterPath="$PROJECT_DIR$/.npmignore" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.travis.yml" afterPath="$PROJECT_DIR$/.travis.yml" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/Cakefile" afterPath="$PROJECT_DIR$/Cakefile" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/LICENSE" afterPath="$PROJECT_DIR$/LICENSE" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/README.md" afterPath="$PROJECT_DIR$/README.md" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/docco.js" afterPath="$PROJECT_DIR$/docco.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/docco.js.map" afterPath="$PROJECT_DIR$/docco.js.map" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/docco.litcoffee" afterPath="$PROJECT_DIR$/docco.litcoffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/gulpfile.coffee" afterPath="$PROJECT_DIR$/gulpfile.coffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/index.html" afterPath="$PROJECT_DIR$/index.html" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/package.json" afterPath="$PROJECT_DIR$/package.json" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/classic/docco.css" afterPath="$PROJECT_DIR$/resources/classic/docco.css" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/classic/docco.jst" afterPath="$PROJECT_DIR$/resources/classic/docco.jst" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/classic/public/stylesheets/normalize.css" afterPath="$PROJECT_DIR$/resources/classic/public/stylesheets/normalize.css" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/languages.json" afterPath="$PROJECT_DIR$/resources/languages.json" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/linear/docco.css" afterPath="$PROJECT_DIR$/resources/linear/docco.css" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/linear/docco.jst" afterPath="$PROJECT_DIR$/resources/linear/docco.jst" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/linear/public/stylesheets/normalize.css" afterPath="$PROJECT_DIR$/resources/linear/public/stylesheets/normalize.css" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/parallel/docco.css" afterPath="$PROJECT_DIR$/resources/parallel/docco.css" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/parallel/docco.jst" afterPath="$PROJECT_DIR$/resources/parallel/docco.jst" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/parallel/public/stylesheets/normalize.css" afterPath="$PROJECT_DIR$/resources/parallel/public/stylesheets/normalize.css" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/plain-markdown/README.md" afterPath="$PROJECT_DIR$/resources/plain-markdown/README.md" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/plain-markdown/docco.jst" afterPath="$PROJECT_DIR$/resources/plain-markdown/docco.jst" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/sidebyside/docco.css" afterPath="$PROJECT_DIR$/resources/sidebyside/docco.css" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/sidebyside/docco.jst" afterPath="$PROJECT_DIR$/resources/sidebyside/docco.jst" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/resources/sidebyside/public/stylesheets/normalize.css" afterPath="$PROJECT_DIR$/resources/sidebyside/public/stylesheets/normalize.css" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/buildMatchers.js" afterPath="$PROJECT_DIR$/src/buildMatchers.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/buildMatchers.js.map" afterPath="$PROJECT_DIR$/src/buildMatchers.js.map" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/buildMatchers.litcoffee" afterPath="$PROJECT_DIR$/src/buildMatchers.litcoffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/configure.js" afterPath="$PROJECT_DIR$/src/configure.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/configure.litcoffee" afterPath="$PROJECT_DIR$/src/configure.litcoffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/document.js" afterPath="$PROJECT_DIR$/src/document.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/document.litcoffee" afterPath="$PROJECT_DIR$/src/document.litcoffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/format.js" afterPath="$PROJECT_DIR$/src/format.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/format.js.map" afterPath="$PROJECT_DIR$/src/format.js.map" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/format.litcoffee" afterPath="$PROJECT_DIR$/src/format.litcoffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/getCSSPath.js" afterPath="$PROJECT_DIR$/src/getCSSPath.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/getCSSPath.litcoffee" afterPath="$PROJECT_DIR$/src/getCSSPath.litcoffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/getDestinationInformation.js" afterPath="$PROJECT_DIR$/src/getDestinationInformation.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/getDestinationInformation.litcoffee" afterPath="$PROJECT_DIR$/src/getDestinationInformation.litcoffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/getInformationOnFiles.js" afterPath="$PROJECT_DIR$/src/getInformationOnFiles.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/getInformationOnFiles.js.map" afterPath="$PROJECT_DIR$/src/getInformationOnFiles.js.map" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/getInformationOnFiles.litcoffee" afterPath="$PROJECT_DIR$/src/getInformationOnFiles.litcoffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/getLanguage.js" afterPath="$PROJECT_DIR$/src/getLanguage.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/getLanguage.litcoffee" afterPath="$PROJECT_DIR$/src/getLanguage.litcoffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/getOthers.js" afterPath="$PROJECT_DIR$/src/getOthers.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/getOthers.js.map" afterPath="$PROJECT_DIR$/src/getOthers.js.map" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/getOthers.litcoffee" afterPath="$PROJECT_DIR$/src/getOthers.litcoffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/getRelativePath.js" afterPath="$PROJECT_DIR$/src/getRelativePath.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/getRelativePath.litcoffee" afterPath="$PROJECT_DIR$/src/getRelativePath.litcoffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/getSourceInformation.js" afterPath="$PROJECT_DIR$/src/getSourceInformation.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/getSourceInformation.litcoffee" afterPath="$PROJECT_DIR$/src/getSourceInformation.litcoffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/parse.js" afterPath="$PROJECT_DIR$/src/parse.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/parse.js.map" afterPath="$PROJECT_DIR$/src/parse.js.map" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/parse.litcoffee" afterPath="$PROJECT_DIR$/src/parse.litcoffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/write.js" afterPath="$PROJECT_DIR$/src/write.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/write.js.map" afterPath="$PROJECT_DIR$/src/write.js.map" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/write.litcoffee" afterPath="$PROJECT_DIR$/src/write.litcoffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/sim/.groc.json" afterPath="$PROJECT_DIR$/test/sim/.groc.json" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/sim/README.md" afterPath="$PROJECT_DIR$/test/sim/README.md" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/sim/src/fake_coffee.coffee" afterPath="$PROJECT_DIR$/test/sim/src/fake_coffee.coffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/sim/src/fake_coffee2.coffee" afterPath="$PROJECT_DIR$/test/sim/src/fake_coffee2.coffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/sim/src/fake_java.java" afterPath="$PROJECT_DIR$/test/sim/src/fake_java.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/sim/src/fake_javascript.js" afterPath="$PROJECT_DIR$/test/sim/src/fake_javascript.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/sim/src/fake_litcoffee.litcoffee" afterPath="$PROJECT_DIR$/test/sim/src/fake_litcoffee.litcoffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/fakes/fake-config.js" afterPath="$PROJECT_DIR$/test/unit-tests/fakes/fake-config.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/fakes/fake-config.js.map" afterPath="$PROJECT_DIR$/test/unit-tests/fakes/fake-config.js.map" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/fakes/fake-config.litcoffee" afterPath="$PROJECT_DIR$/test/unit-tests/fakes/fake-config.litcoffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/fakes/fake-jst-result.js" afterPath="$PROJECT_DIR$/test/unit-tests/fakes/fake-jst-result.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/fakes/fake-jst-result.litcoffee" afterPath="$PROJECT_DIR$/test/unit-tests/fakes/fake-jst-result.litcoffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/fakes/fake-jst.js" afterPath="$PROJECT_DIR$/test/unit-tests/fakes/fake-jst.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/fakes/fake-jst.litcoffee" afterPath="$PROJECT_DIR$/test/unit-tests/fakes/fake-jst.litcoffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/fakes/fake-linear-jst-flattened-result.js" afterPath="$PROJECT_DIR$/test/unit-tests/fakes/fake-linear-jst-flattened-result.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/fakes/fake-linear-jst-flattened-result.litcoffee" afterPath="$PROJECT_DIR$/test/unit-tests/fakes/fake-linear-jst-flattened-result.litcoffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/fakes/fake-linear-jst-unflattened-result.js" afterPath="$PROJECT_DIR$/test/unit-tests/fakes/fake-linear-jst-unflattened-result.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/fakes/fake-linear-jst-unflattened-result.litcoffee" afterPath="$PROJECT_DIR$/test/unit-tests/fakes/fake-linear-jst-unflattened-result.litcoffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/fakes/fake-linear-jst.js" afterPath="$PROJECT_DIR$/test/unit-tests/fakes/fake-linear-jst.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/fakes/fake-linear-jst.litcoffee" afterPath="$PROJECT_DIR$/test/unit-tests/fakes/fake-linear-jst.litcoffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/fakes/fake_coffee.coffee" afterPath="$PROJECT_DIR$/test/unit-tests/fakes/fake_coffee.coffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/fakes/informationOnFilesFlattened.js" afterPath="$PROJECT_DIR$/test/unit-tests/fakes/informationOnFilesFlattened.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/fakes/informationOnFilesFlattened.js.map" afterPath="$PROJECT_DIR$/test/unit-tests/fakes/informationOnFilesFlattened.js.map" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/fakes/informationOnFilesFlattened.litcoffee" afterPath="$PROJECT_DIR$/test/unit-tests/fakes/informationOnFilesFlattened.litcoffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/fakes/informationOnFilesUnFlattened.js" afterPath="$PROJECT_DIR$/test/unit-tests/fakes/informationOnFilesUnFlattened.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/fakes/informationOnFilesUnFlattened.js.map" afterPath="$PROJECT_DIR$/test/unit-tests/fakes/informationOnFilesUnFlattened.js.map" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/fakes/informationOnFilesUnFlattened.litcoffee" afterPath="$PROJECT_DIR$/test/unit-tests/fakes/informationOnFilesUnFlattened.litcoffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/unit-test-buildMatchers.js" afterPath="$PROJECT_DIR$/test/unit-tests/unit-test-buildMatchers.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/unit-test-buildMatchers.js.map" afterPath="$PROJECT_DIR$/test/unit-tests/unit-test-buildMatchers.js.map" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/unit-test-buildMatchers.litcoffee" afterPath="$PROJECT_DIR$/test/unit-tests/unit-test-buildMatchers.litcoffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/unit-test-configure.js" afterPath="$PROJECT_DIR$/test/unit-tests/unit-test-configure.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/unit-test-configure.litcoffee" afterPath="$PROJECT_DIR$/test/unit-tests/unit-test-configure.litcoffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/unit-test-document.js" afterPath="$PROJECT_DIR$/test/unit-tests/unit-test-document.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/unit-test-document.litcoffee" afterPath="$PROJECT_DIR$/test/unit-tests/unit-test-document.litcoffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/unit-test-fixForMatch.js" afterPath="$PROJECT_DIR$/test/unit-tests/unit-test-fixForMatch.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/unit-test-fixForMatch.litcoffee" afterPath="$PROJECT_DIR$/test/unit-tests/unit-test-fixForMatch.litcoffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/unit-test-format.js" afterPath="$PROJECT_DIR$/test/unit-tests/unit-test-format.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/unit-test-format.litcoffee" afterPath="$PROJECT_DIR$/test/unit-tests/unit-test-format.litcoffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/unit-test-getCSSPath.js" afterPath="$PROJECT_DIR$/test/unit-tests/unit-test-getCSSPath.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/unit-test-getCSSPath.litcoffee" afterPath="$PROJECT_DIR$/test/unit-tests/unit-test-getCSSPath.litcoffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/unit-test-getDestinationInformation.js" afterPath="$PROJECT_DIR$/test/unit-tests/unit-test-getDestinationInformation.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/unit-test-getDestinationInformation.litcoffee" afterPath="$PROJECT_DIR$/test/unit-tests/unit-test-getDestinationInformation.litcoffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/unit-test-getInformationOnFiles.js" afterPath="$PROJECT_DIR$/test/unit-tests/unit-test-getInformationOnFiles.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/unit-test-getInformationOnFiles.litcoffee" afterPath="$PROJECT_DIR$/test/unit-tests/unit-test-getInformationOnFiles.litcoffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/unit-test-getLanguage.js" afterPath="$PROJECT_DIR$/test/unit-tests/unit-test-getLanguage.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/unit-test-getLanguage.litcoffee" afterPath="$PROJECT_DIR$/test/unit-tests/unit-test-getLanguage.litcoffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/unit-test-getOthers.js" afterPath="$PROJECT_DIR$/test/unit-tests/unit-test-getOthers.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/unit-test-getOthers.js.map" afterPath="$PROJECT_DIR$/test/unit-tests/unit-test-getOthers.js.map" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/unit-test-getOthers.litcoffee" afterPath="$PROJECT_DIR$/test/unit-tests/unit-test-getOthers.litcoffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/unit-test-getRelativePath.js" afterPath="$PROJECT_DIR$/test/unit-tests/unit-test-getRelativePath.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/unit-test-getRelativePath.litcoffee" afterPath="$PROJECT_DIR$/test/unit-tests/unit-test-getRelativePath.litcoffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/unit-test-parse.js" afterPath="$PROJECT_DIR$/test/unit-tests/unit-test-parse.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/unit-test-parse.litcoffee" afterPath="$PROJECT_DIR$/test/unit-tests/unit-test-parse.litcoffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/unit-test-run.js" afterPath="$PROJECT_DIR$/test/unit-tests/unit-test-run.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/unit-test-run.js.map" afterPath="$PROJECT_DIR$/test/unit-tests/unit-test-run.js.map" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/unit-test-run.litcoffee" afterPath="$PROJECT_DIR$/test/unit-tests/unit-test-run.litcoffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/unit-test-typeIsArray.js" afterPath="$PROJECT_DIR$/test/unit-tests/unit-test-typeIsArray.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/unit-test-typeIsArray.litcoffee" afterPath="$PROJECT_DIR$/test/unit-tests/unit-test-typeIsArray.litcoffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/unit-test-write.js" afterPath="$PROJECT_DIR$/test/unit-tests/unit-test-write.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/unit-test-write.litcoffee" afterPath="$PROJECT_DIR$/test/unit-tests/unit-test-write.litcoffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/utils/fixForMatch.js" afterPath="$PROJECT_DIR$/test/unit-tests/utils/fixForMatch.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/utils/fixForMatch.litcoffee" afterPath="$PROJECT_DIR$/test/unit-tests/utils/fixForMatch.litcoffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/utils/typeIsArray.js" afterPath="$PROJECT_DIR$/test/unit-tests/utils/typeIsArray.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/utils/typeIsArray.litcoffee" afterPath="$PROJECT_DIR$/test/unit-tests/utils/typeIsArray.litcoffee" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/utils/typeIsObject.js" afterPath="$PROJECT_DIR$/test/unit-tests/utils/typeIsObject.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test/unit-tests/utils/typeIsObject.litcoffee" afterPath="$PROJECT_DIR$/test/unit-tests/utils/typeIsObject.litcoffee" />
+    </list>
+    <ignored path="$PROJECT_DIR$/.tmp/" />
+    <ignored path="$PROJECT_DIR$/temp/" />
+    <ignored path="$PROJECT_DIR$/tmp/" />
+    <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
+    <option name="TRACKING_ENABLED" value="true" />
+    <option name="SHOW_DIALOG" value="false" />
+    <option name="HIGHLIGHT_CONFLICTS" value="true" />
+    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
+    <option name="LAST_RESOLUTION" value="IGNORE" />
+  </component>
+  <component name="FileEditorManager">
+    <leaf>
+      <file leaf-file-name="unit-test-getInformationOnFiles.litcoffee" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/test/unit-tests/unit-test-getInformationOnFiles.litcoffee">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="153">
+              <caret line="9" column="9" lean-forward="false" selection-start-line="9" selection-start-column="9" selection-end-line="9" selection-end-column="9" />
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="unit-test-getInformationOnFiles.js" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/test/unit-tests/unit-test-getInformationOnFiles.js">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="170">
+              <caret line="24" column="11" lean-forward="false" selection-start-line="24" selection-start-column="11" selection-end-line="24" selection-end-column="11" />
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="informationOnFilesUnFlattened.litcoffee" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/test/unit-tests/fakes/informationOnFilesUnFlattened.litcoffee">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="364">
+              <caret line="24" column="27" lean-forward="false" selection-start-line="24" selection-start-column="27" selection-end-line="24" selection-end-column="27" />
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="unit-test-run.litcoffee" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/test/unit-tests/unit-test-run.litcoffee">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="264">
+              <caret line="54" column="29" lean-forward="false" selection-start-line="54" selection-start-column="29" selection-end-line="54" selection-end-column="29" />
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="unit-test-buildMatchers.litcoffee" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/test/unit-tests/unit-test-buildMatchers.litcoffee">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="255">
+              <caret line="15" column="47" lean-forward="false" selection-start-line="15" selection-start-column="47" selection-end-line="15" selection-end-column="47" />
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name=".gitignore" pinned="false" current-in-tab="true">
+        <entry file="file://$PROJECT_DIR$/.gitignore">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="204">
+              <caret line="12" column="0" lean-forward="true" selection-start-line="12" selection-start-column="0" selection-end-line="12" selection-end-column="0" />
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="unit-test-buildMatchers.js" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/test/unit-tests/unit-test-buildMatchers.js">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="271">
+              <caret line="20" column="49" lean-forward="false" selection-start-line="20" selection-start-column="49" selection-end-line="20" selection-end-column="49" />
+              <folding>
+                <marker date="1531189548000" expanded="true" signature="272:898" ph="{...}" />
+                <marker date="1531189548000" expanded="true" signature="324:894" ph="{...}" />
+                <marker date="1531189548000" expanded="true" signature="438:870" ph="{...}" />
+                <marker date="1531189548000" expanded="true" signature="625:696" ph="{...}" />
+                <marker date="1531189548000" expanded="true" signature="718:819" ph="{...}" />
+                <marker date="1531189548000" expanded="true" signature="825:864" ph="{...}" />
+              </folding>
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="unit-test-run.js" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/test/unit-tests/unit-test-run.js">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="158">
+              <caret line="60" column="9" lean-forward="false" selection-start-line="60" selection-start-column="9" selection-end-line="60" selection-end-column="9" />
+              <folding>
+                <marker date="1531189548000" expanded="true" signature="1190:2044" ph="{...}" />
+                <marker date="1531189548000" expanded="true" signature="1638:1864" ph="{&quot;layout&quot;: &quot;parallel&quot;...}" />
+                <marker date="1531189548000" expanded="true" signature="2100:3322" ph="{...}" />
+                <marker date="1531189548000" expanded="true" signature="2131:2191" ph="{...}" />
+                <marker date="1531189548000" expanded="true" signature="2218:2287" ph="{...}" />
+                <marker date="1531189548000" expanded="true" signature="2336:3148" ph="{...}" />
+                <marker date="1531189548000" expanded="true" signature="2382:3127" ph="{...}" />
+                <marker date="1531189548000" expanded="true" signature="2397:2464" ph="..." />
+                <marker date="1531189548000" expanded="true" signature="2478:2550" ph="..." />
+                <marker date="1531189548000" expanded="true" signature="2564:2628" ph="..." />
+                <marker date="1531189548000" expanded="true" signature="2642:2715" ph="..." />
+                <marker date="1531189548000" expanded="true" signature="2729:2799" ph="..." />
+                <marker date="1531189548000" expanded="true" signature="2813:2883" ph="..." />
+                <marker date="1531189548000" expanded="true" signature="2897:2967" ph="..." />
+                <marker date="1531189548000" expanded="true" signature="2981:3050" ph="..." />
+                <marker date="1531189548000" expanded="true" signature="3064:3121" ph="..." />
+                <marker date="1531189548000" expanded="true" signature="3174:3239" ph="{...}" />
+                <marker date="1531189548000" expanded="true" signature="3264:3320" ph="{...}" />
+                <marker date="1531189548000" expanded="true" signature="3390:3531" ph="{...}" />
+                <marker date="1531189548000" expanded="true" signature="3440:3476" ph="{...}" />
+              </folding>
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="fake-config.litcoffee" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/test/unit-tests/fakes/fake-config.litcoffee">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="153">
+              <caret line="16" column="14" lean-forward="false" selection-start-line="16" selection-start-column="13" selection-end-line="16" selection-end-column="14" />
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="unit-test-typeIsArray.litcoffee" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/test/unit-tests/unit-test-typeIsArray.litcoffee">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="153">
+              <caret line="9" column="13" lean-forward="false" selection-start-line="9" selection-start-column="13" selection-end-line="9" selection-end-column="13" />
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+    </leaf>
+  </component>
+  <component name="FindInProjectRecents">
+    <findStrings>
+      <find>jumpwa</find>
+      <find>jumpw</find>
+      <find>jump_</find>
+      <find>jump_w</find>
+      <find>jump_wr</find>
+      <find>jump_wra</find>
+      <find>jump_wrap</find>
+      <find>jump_wrappe</find>
+      <find>jump_wrapper</find>
+      <find>jump_page_wrapper</find>
+      <find>display:</find>
+      <find>display: none</find>
+      <find>deepEqual</find>
+      <find>Version</find>
+      <find>hidden</find>
+      <find>block</find>
+      <find>wrapper</find>
+      <find>source</find>
+      <find>l</find>
+      <find>link</find>
+      <find>linkM</find>
+      <find>linkMa</find>
+      <find>linkMatc</find>
+      <find>linkMatcher</find>
+      <find>im</find>
+      <find>img</find>
+      <find>name</find>
+      <find>jump</find>
+      <find>layout</find>
+      <find>paral</find>
+    </findStrings>
+    <replaceStrings>
+      <replace>console.log</replace>
+      <replace>to</replace>
+      <replace>,</replace>
+      <replace>+&quot;/&quot;+</replace>
+      <replace>../..</replace>
+      <replace>../../fakes</replace>
+      <replace>../fakes</replace>
+      <replace>#{JSON.stringify(</replace>
+      <replace>\'</replace>
+      <replace>mockery</replace>
+      <replace>document</replace>
+      <replace>buildMatchers</replace>
+      <replace>format</replace>
+      <replace>multiline</replace>
+      <replace>stopMatcher</replace>
+      <replace>imgMatcher</replace>
+    </replaceStrings>
+  </component>
+  <component name="Git.Settings">
+    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
+  </component>
+  <component name="IdeDocumentHistory">
+    <option name="CHANGED_PATHS">
+      <list>
+        <option value="$PROJECT_DIR$/src/document.litcoffee" />
+        <option value="$PROJECT_DIR$/gulpfile.coffee" />
+        <option value="$PROJECT_DIR$/README" />
+        <option value="$PROJECT_DIR$/README.markdown" />
+        <option value="$PROJECT_DIR$/travis.yml" />
+        <option value="$PROJECT_DIR$/.travis.yml" />
+        <option value="$PROJECT_DIR$/test/unit-tests/unit-test-configure.litcoffee" />
+        <option value="$PROJECT_DIR$/test/unit-tests/utils/typeIsArray.litcoffee" />
+        <option value="$PROJECT_DIR$/test/unit-tests/utils/typeIsObject.litcoffee" />
+        <option value="$PROJECT_DIR$/test/unit-tests/unit-test-fixForMatch.coffee" />
+        <option value="vm:170" />
+        <option value="$PROJECT_DIR$/test/unit-tests/unit-test-fixForMatch.litcoffee" />
+        <option value="$PROJECT_DIR$/test/unit-tests/utils/fixForMatch.litcoffee" />
+        <option value="$PROJECT_DIR$/test/unit-tests/utils/fixForMatch.js" />
+        <option value="$PROJECT_DIR$/test/unit-tests/unit-test-typeIsArray.coffee" />
+        <option value="$PROJECT_DIR$/test/unit-tests/unit-test-typeIsArray.litcoffee" />
+        <option value="$PROJECT_DIR$/.docco.json" />
+        <option value="$PROJECT_DIR$/bin/docco" />
+        <option value="$PROJECT_DIR$/package.json" />
+        <option value="$PROJECT_DIR$/src/getInformationOnFiles.js" />
+        <option value="$PROJECT_DIR$/test/sim/src/fake_litcoffee.js" />
+        <option value="$PROJECT_DIR$/test/sim/src/fake_coffee2.coffee" />
+        <option value="$PROJECT_DIR$/test/sim/src/fake_coffee.coffee" />
+        <option value="$PROJECT_DIR$/src/write.js" />
+        <option value="$PROJECT_DIR$/src/getOthers.js" />
+        <option value="$PROJECT_DIR$/resources/parallel/docco.jst" />
+        <option value="$PROJECT_DIR$/src/write.litcoffee" />
+        <option value="$PROJECT_DIR$/resources/linear/docco.jst" />
+        <option value="$PROJECT_DIR$/test/sim/.adocco.json" />
+        <option value="$PROJECT_DIR$/src/getInformationOnFiles.litcoffee" />
+        <option value="$PROJECT_DIR$/src/getOthers.litcoffee" />
+        <option value="$PROJECT_DIR$/test/unit-tests/unit-test-getOthers.litcoffee" />
+        <option value="$PROJECT_DIR$/resources/sidebyside/docco.jst" />
+        <option value="$PROJECT_DIR$/test/sim/README.md" />
+        <option value="$PROJECT_DIR$/src/format.litcoffee" />
+        <option value="$PROJECT_DIR$/resources/sidebyside/docco.css" />
+        <option value="$PROJECT_DIR$/README.md" />
+        <option value="$PROJECT_DIR$/test/unit-tests/fakes/informationOnFilesUnFlattened.js" />
+        <option value="$PROJECT_DIR$/test/unit-tests/fakes/informationOnFilesFlattened.litcoffee" />
+        <option value="$PROJECT_DIR$/src/parse.litcoffee" />
+        <option value="$PROJECT_DIR$/resources/languages.json" />
+        <option value="$PROJECT_DIR$/src/buildMatchers.litcoffee" />
+        <option value="$PROJECT_DIR$/test/sim/.docco.json" />
+        <option value="$PROJECT_DIR$/docco.litcoffee" />
+        <option value="$PROJECT_DIR$/test/unit-tests/fakes/fake-config.litcoffee" />
+        <option value="$PROJECT_DIR$/test/unit-tests/unit-test-run.js" />
+        <option value="$PROJECT_DIR$/test/unit-tests/fakes/informationOnFilesUnFlattened.litcoffee" />
+        <option value="$PROJECT_DIR$/test/unit-tests/unit-test-run.litcoffee" />
+        <option value="$PROJECT_DIR$/test/unit-tests/unit-test-buildMatchers.js" />
+        <option value="$PROJECT_DIR$/test/unit-tests/unit-test-buildMatchers.litcoffee" />
+        <option value="$PROJECT_DIR$/.gitignore" />
+      </list>
+    </option>
+  </component>
+  <component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" />
+  <component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER" />
+  <component name="JsFlowSettings">
+    <service-enabled>true</service-enabled>
+    <exe-path />
+    <annotation-enable>false</annotation-enable>
+    <other-services-enabled>true</other-services-enabled>
+  </component>
+  <component name="JsGulpfileManager">
+    <detection-done>true</detection-done>
+    <sorting>DEFINITION_ORDER</sorting>
+  </component>
+  <component name="NodeModulesDirectoryManager">
+    <handled-path value="$PROJECT_DIR$/node_modules" />
+  </component>
+  <component name="ProjectFrameBounds">
+    <option name="x" value="4" />
+    <option name="y" value="23" />
+    <option name="width" value="1916" />
+    <option name="height" value="1057" />
+  </component>
+  <component name="ProjectInspectionProfilesVisibleTreeState">
+    <entry key="Project Default">
+      <profile-state>
+        <expanded-state>
+          <State>
+            <id />
+          </State>
+          <State>
+            <id>CoffeeScript</id>
+          </State>
+          <State>
+            <id>File Watchers</id>
+          </State>
+          <State>
+            <id>GeneralCoffeeScript</id>
+          </State>
+          <State>
+            <id>Probable bugsCoffeeScript</id>
+          </State>
+        </expanded-state>
+        <selected-state>
+          <State>
+            <id>AngularJS</id>
+          </State>
+        </selected-state>
+      </profile-state>
+    </entry>
+  </component>
+  <component name="ProjectLevelVcsManager">
+    <ConfirmationsSetting value="1" id="Add" />
+  </component>
+  <component name="ProjectView">
+    <navigator currentView="ProjectPane" proportions="" version="1">
+      <flattenPackages />
+      <showMembers />
+      <showModules />
+      <showLibraryContents />
+      <hideEmptyPackages />
+      <abbreviatePackageNames />
+      <autoscrollToSource />
+      <autoscrollFromSource />
+      <sortByType />
+      <manualOrder />
+      <foldersAlwaysOnTop value="true" />
+    </navigator>
+    <panes>
+      <pane id="Scope" />
+      <pane id="ProjectPane">
+        <subPane>
+          <expand>
+            <path>
+              <item name="docco" type="b2602c69:ProjectViewProjectNode" />
+              <item name="docco" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="docco" type="b2602c69:ProjectViewProjectNode" />
+              <item name="docco" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="docco" type="b2602c69:ProjectViewProjectNode" />
+              <item name="docco" type="462c0819:PsiDirectoryNode" />
+              <item name="test" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="docco" type="b2602c69:ProjectViewProjectNode" />
+              <item name="docco" type="462c0819:PsiDirectoryNode" />
+              <item name="test" type="462c0819:PsiDirectoryNode" />
+              <item name="unit-tests" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="docco" type="b2602c69:ProjectViewProjectNode" />
+              <item name="docco" type="462c0819:PsiDirectoryNode" />
+              <item name="test" type="462c0819:PsiDirectoryNode" />
+              <item name="unit-tests" type="462c0819:PsiDirectoryNode" />
+              <item name="fakes" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="docco" type="b2602c69:ProjectViewProjectNode" />
+              <item name="docco" type="462c0819:PsiDirectoryNode" />
+              <item name="docco.litcoffee" type="620a8d5e:NestingTreeNode" />
+            </path>
+          </expand>
+          <select />
+        </subPane>
+      </pane>
+      <pane id="Scratches" />
+    </panes>
+  </component>
+  <component name="PropertiesComponent">
+    <property name="nodejs_interpreter_path" value="$USER_HOME$/.nvm/versions/node/v7.7.0/bin/node" />
+    <property name="WebServerToolWindowFactoryState" value="false" />
+    <property name="last_opened_file_path" value="$PROJECT_DIR$" />
+    <property name="HbShouldOpenHtmlAsHb" value="" />
+    <property name="settings.editor.selected.configurable" value="watcher.settings" />
+    <property name="nodejs.mocha.mocha_node_package_dir" value="$PROJECT_DIR$/node_modules/mocha" />
+    <property name="JavaScriptPreferStrict" value="false" />
+    <property name="JavaScriptWeakerCompletionTypeGuess" value="true" />
+    <property name="settings.editor.splitter.proportion" value="0.23874755" />
+    <property name="add_unversioned_files" value="$PROJECT_DIR$/test/unit-tests/unit-test-getOthers.js&#10;/Users/rolov/Code/docco/test/unit-tests/unit-test-fixForMatch.js&#10;/Users/rolov/Code/docco/docco.js&#10;/Users/rolov/Code/docco/test/unit-tests/unit-test-getCSSPath.js&#10;/Users/rolov/Code/docco/test/unit-tests/utils/fixForMatch.js&#10;/Users/rolov/Code/docco/src/parse.js&#10;/Users/rolov/Code/docco/src/document.js" />
+  </component>
+  <component name="RecentsManager">
+    <key name="CopyFile.RECENT_KEYS">
+      <recent name="$PROJECT_DIR$/resources" />
+      <recent name="$PROJECT_DIR$/resources/groc" />
+      <recent name="$PROJECT_DIR$/test/unit-tests" />
+      <recent name="$PROJECT_DIR$/test/unit-tests/utils" />
+      <recent name="$PROJECT_DIR$/test/unit-tests/fakes" />
+    </key>
+    <key name="MoveFile.RECENT_KEYS">
+      <recent name="$PROJECT_DIR$/test/unit-tests" />
+      <recent name="$PROJECT_DIR$/test/fakes/images" />
+      <recent name="$PROJECT_DIR$/test" />
+    </key>
+  </component>
+  <component name="RunDashboard">
+    <option name="ruleStates">
+      <list>
+        <RuleState>
+          <option name="name" value="ConfigurationTypeDashboardGroupingRule" />
+        </RuleState>
+        <RuleState>
+          <option name="name" value="StatusDashboardGroupingRule" />
+        </RuleState>
+      </list>
+    </option>
+  </component>
+  <component name="RunManager" selected="Mocha.Unit Tests">
+    <configuration name="README.html (1)" type="JavascriptDebugType" factoryName="JavaScript Debug" temporary="true" nameIsGenerated="true" uri="http://localhost:63342/docco/docs/README.html" />
+    <configuration name="README.html" type="JavascriptDebugType" factoryName="JavaScript Debug" temporary="true" nameIsGenerated="true" uri="http://localhost:63342/docco/test/sim/docs/README.html" />
+    <configuration name="Unit Tests" type="mocha-javascript-test-runner" factoryName="Mocha" singleton="false">
+      <node-interpreter>$USER_HOME$/.nvm/versions/node/v10.4.0/bin/node</node-interpreter>
+      <node-options />
+      <working-directory>$PROJECT_DIR$</working-directory>
+      <pass-parent-env>true</pass-parent-env>
+      <envs />
+      <ui>bdd</ui>
+      <extra-mocha-options />
+      <test-kind>DIRECTORY</test-kind>
+      <test-directory>$PROJECT_DIR$/test/unit-tests</test-directory>
+      <recursive>false</recursive>
+    </configuration>
+    <configuration default="true" type="js.build_tools.gulp" factoryName="Gulp.js">
+      <node-interpreter>project</node-interpreter>
+      <node-options />
+      <gulpfile />
+      <tasks />
+      <arguments />
+      <envs />
+    </configuration>
+    <configuration default="true" type="BashConfigurationType" factoryName="Bash">
+      <option name="INTERPRETER_OPTIONS" value="" />
+      <option name="INTERPRETER_PATH" value="/bin/bash" />
+      <option name="WORKING_DIRECTORY" value="" />
+      <option name="PARENT_ENVS" value="true" />
+      <option name="SCRIPT_NAME" value="" />
+      <option name="PARAMETERS" value="" />
+      <module name="" />
+      <envs />
+      <method />
+    </configuration>
+    <configuration default="true" type="DartCommandLineRunConfigurationType" factoryName="Dart Command Line Application">
+      <method />
+    </configuration>
+    <configuration default="true" type="DartTestRunConfigurationType" factoryName="Dart Test">
+      <method />
+    </configuration>
+    <configuration default="true" type="JavaScriptTestRunnerJest" factoryName="Jest">
+      <node-interpreter value="project" />
+      <working-dir value="" />
+      <envs />
+      <scope-kind value="ALL" />
+      <method />
+    </configuration>
+    <configuration default="true" type="JavaScriptTestRunnerKarma" factoryName="Karma">
+      <config-file value="" />
+      <node-interpreter value="project" />
+      <envs />
+      <method />
+    </configuration>
+    <configuration default="true" type="JavaScriptTestRunnerProtractor" factoryName="Protractor">
+      <config-file value="" />
+      <node-interpreter value="project" />
+      <envs />
+      <method />
+    </configuration>
+    <configuration default="true" type="JavascriptDebugType" factoryName="JavaScript Debug">
+      <method />
+    </configuration>
+    <configuration default="true" type="NodeJSConfigurationType" factoryName="Node.js" path-to-node="project" working-dir="">
+      <method />
+    </configuration>
+    <configuration default="true" type="cucumber.js" factoryName="Cucumber.js">
+      <option name="cucumberJsArguments" value="" />
+      <option name="executablePath" />
+      <option name="filePath" />
+      <method />
+    </configuration>
+    <configuration default="true" type="js.build_tools.npm" factoryName="npm">
+      <command value="run" />
+      <scripts />
+      <node-interpreter value="project" />
+      <envs />
+      <method />
+    </configuration>
+    <configuration default="true" type="mocha-javascript-test-runner" factoryName="Mocha">
+      <node-interpreter>project</node-interpreter>
+      <node-options />
+      <working-directory />
+      <pass-parent-env>true</pass-parent-env>
+      <envs />
+      <ui />
+      <extra-mocha-options />
+      <test-kind>DIRECTORY</test-kind>
+      <test-directory />
+      <recursive>false</recursive>
+      <method />
+    </configuration>
+    <configuration name="buildMatchers" type="mocha-javascript-test-runner" factoryName="Mocha" singleton="false">
+      <node-interpreter>project</node-interpreter>
+      <node-options />
+      <working-directory>$PROJECT_DIR$</working-directory>
+      <pass-parent-env>true</pass-parent-env>
+      <envs />
+      <ui>bdd</ui>
+      <extra-mocha-options />
+      <test-kind>TEST_FILE</test-kind>
+      <test-file>$PROJECT_DIR$/test/unit-tests/unit-test-buildMatchers.js</test-file>
+    </configuration>
+    <configuration name="docco --setup only  --layout linear --template" type="NodeJSConfigurationType" factoryName="Node.js" singleton="false" path-to-node="project" path-to-js-file="$PROJECT_DIR$/bin/docco" application-parameters="--setup=.adocco.json --layout linear --css ../../resource/classic/docco.jst --template ../../resources/classic/docco.jst" working-dir="$PROJECT_DIR$/test/sim">
+      <EXTENSION ID="com.jetbrains.nodejs.remote.docker.NodeJSDockerRunConfigurationExtension">
+        <option name="envVars">
+          <list />
+        </option>
+        <option name="extraHosts">
+          <list />
+        </option>
+        <option name="links">
+          <list />
+        </option>
+        <option name="networkDisabled" value="false" />
+        <option name="networkMode" value="bridge" />
+        <option name="portBindings">
+          <list />
+        </option>
+        <option name="publishAllPorts" value="false" />
+        <option name="version" value="1" />
+        <option name="volumeBindings">
+          <list />
+        </option>
+      </EXTENSION>
+    </configuration>
+    <configuration name="docco --setup only  --layout linear" type="NodeJSConfigurationType" factoryName="Node.js" singleton="false" path-to-node="project" path-to-js-file="$PROJECT_DIR$/bin/docco" application-parameters="--setup=.adocco.json   --layout linear" working-dir="$PROJECT_DIR$/test/sim">
+      <EXTENSION ID="com.jetbrains.nodejs.remote.docker.NodeJSDockerRunConfigurationExtension">
+        <option name="envVars">
+          <list />
+        </option>
+        <option name="extraHosts">
+          <list />
+        </option>
+        <option name="links">
+          <list />
+        </option>
+        <option name="networkDisabled" value="false" />
+        <option name="networkMode" value="bridge" />
+        <option name="portBindings">
+          <list />
+        </option>
+        <option name="publishAllPorts" value="false" />
+        <option name="version" value="1" />
+        <option name="volumeBindings">
+          <list />
+        </option>
+      </EXTENSION>
+    </configuration>
+    <configuration name="docco --setup only  --layout sidebyside" type="NodeJSConfigurationType" factoryName="Node.js" singleton="false" path-to-node="project" path-to-js-file="$PROJECT_DIR$/bin/docco" application-parameters="--setup=.adocco.json   --layout sidebyside" working-dir="$PROJECT_DIR$/test/sim">
+      <EXTENSION ID="com.jetbrains.nodejs.remote.docker.NodeJSDockerRunConfigurationExtension">
+        <option name="envVars">
+          <list />
+        </option>
+        <option name="extraHosts">
+          <list />
+        </option>
+        <option name="links">
+          <list />
+        </option>
+        <option name="networkDisabled" value="false" />
+        <option name="networkMode" value="bridge" />
+        <option name="portBindings">
+          <list />
+        </option>
+        <option name="publishAllPorts" value="false" />
+        <option name="version" value="1" />
+        <option name="volumeBindings">
+          <list />
+        </option>
+      </EXTENSION>
+    </configuration>
+    <configuration name="docco --setup only" type="NodeJSConfigurationType" factoryName="Node.js" path-to-node="project" path-to-js-file="$PROJECT_DIR$/bin/docco" application-parameters="--setup=.adocco.json " working-dir="$PROJECT_DIR$/test/sim">
+      <EXTENSION ID="com.jetbrains.nodejs.remote.docker.NodeJSDockerRunConfigurationExtension">
+        <option name="envVars">
+          <list />
+        </option>
+        <option name="extraHosts">
+          <list />
+        </option>
+        <option name="links">
+          <list />
+        </option>
+        <option name="networkDisabled" value="false" />
+        <option name="networkMode" value="bridge" />
+        <option name="portBindings">
+          <list />
+        </option>
+        <option name="publishAllPorts" value="false" />
+        <option name="version" value="1" />
+        <option name="volumeBindings">
+          <list />
+        </option>
+      </EXTENSION>
+    </configuration>
+    <configuration name="docco --setup with --flatten --layout linear --css " type="NodeJSConfigurationType" factoryName="Node.js" singleton="false" path-to-node="project" path-to-js-file="$PROJECT_DIR$/bin/docco" application-parameters="--setup=.adocco.json --flatten  --layout linear -c ../../resources/classic/docco.css" working-dir="$PROJECT_DIR$/test/sim">
+      <EXTENSION ID="com.jetbrains.nodejs.remote.docker.NodeJSDockerRunConfigurationExtension">
+        <option name="envVars">
+          <list />
+        </option>
+        <option name="extraHosts">
+          <list />
+        </option>
+        <option name="links">
+          <list />
+        </option>
+        <option name="networkDisabled" value="false" />
+        <option name="networkMode" value="bridge" />
+        <option name="portBindings">
+          <list />
+        </option>
+        <option name="publishAllPorts" value="false" />
+        <option name="version" value="1" />
+        <option name="volumeBindings">
+          <list />
+        </option>
+      </EXTENSION>
+    </configuration>
+    <configuration name="docco --setup with --flatten --layout linear" type="NodeJSConfigurationType" factoryName="Node.js" singleton="false" path-to-node="project" path-to-js-file="$PROJECT_DIR$/bin/docco" application-parameters="--setup=.adocco.json --flatten  --layout linear" working-dir="$PROJECT_DIR$/test/sim">
+      <EXTENSION ID="com.jetbrains.nodejs.remote.docker.NodeJSDockerRunConfigurationExtension">
+        <option name="envVars">
+          <list />
+        </option>
+        <option name="extraHosts">
+          <list />
+        </option>
+        <option name="links">
+          <list />
+        </option>
+        <option name="networkDisabled" value="false" />
+        <option name="networkMode" value="bridge" />
+        <option name="portBindings">
+          <list />
+        </option>
+        <option name="publishAllPorts" value="false" />
+        <option name="version" value="1" />
+        <option name="volumeBindings">
+          <list />
+        </option>
+      </EXTENSION>
+    </configuration>
+    <configuration name="docco --setup with --flatten" type="NodeJSConfigurationType" factoryName="Node.js" singleton="false" path-to-node="project" path-to-js-file="$PROJECT_DIR$/bin/docco" application-parameters="--setup=.adocco.json --flatten " working-dir="$PROJECT_DIR$/test/sim">
+      <EXTENSION ID="com.jetbrains.nodejs.remote.docker.NodeJSDockerRunConfigurationExtension">
+        <option name="envVars">
+          <list />
+        </option>
+        <option name="extraHosts">
+          <list />
+        </option>
+        <option name="links">
+          <list />
+        </option>
+        <option name="networkDisabled" value="false" />
+        <option name="networkMode" value="bridge" />
+        <option name="portBindings">
+          <list />
+        </option>
+        <option name="publishAllPorts" value="false" />
+        <option name="version" value="1" />
+        <option name="volumeBindings">
+          <list />
+        </option>
+      </EXTENSION>
+    </configuration>
+    <configuration name="docco --setup with --languages resouces/languages.json" type="NodeJSConfigurationType" factoryName="Node.js" singleton="false" path-to-node="project" path-to-js-file="$PROJECT_DIR$/bin/docco" application-parameters="--setup=.adocco.json --languages ../../resources/languages.json" working-dir="$PROJECT_DIR$/test/sim">
+      <EXTENSION ID="com.jetbrains.nodejs.remote.docker.NodeJSDockerRunConfigurationExtension">
+        <option name="envVars">
+          <list />
+        </option>
+        <option name="extraHosts">
+          <list />
+        </option>
+        <option name="links">
+          <list />
+        </option>
+        <option name="networkDisabled" value="false" />
+        <option name="networkMode" value="bridge" />
+        <option name="portBindings">
+          <list />
+        </option>
+        <option name="publishAllPorts" value="false" />
+        <option name="version" value="1" />
+        <option name="volumeBindings">
+          <list />
+        </option>
+      </EXTENSION>
+    </configuration>
+    <configuration name="docco files on command line" type="NodeJSConfigurationType" factoryName="Node.js" singleton="false" path-to-node="project" path-to-js-file="$PROJECT_DIR$/bin/docco" application-parameters="README.md images/**/*.jpg" working-dir="$PROJECT_DIR$/test/sim">
+      <EXTENSION ID="com.jetbrains.nodejs.remote.docker.NodeJSDockerRunConfigurationExtension">
+        <option name="envVars">
+          <list />
+        </option>
+        <option name="extraHosts">
+          <list />
+        </option>
+        <option name="links">
+          <list />
+        </option>
+        <option name="networkDisabled" value="false" />
+        <option name="networkMode" value="bridge" />
+        <option name="portBindings">
+          <list />
+        </option>
+        <option name="publishAllPorts" value="false" />
+        <option name="version" value="1" />
+        <option name="volumeBindings">
+          <list />
+        </option>
+      </EXTENSION>
+    </configuration>
+    <configuration name="docco getOthers" type="mocha-javascript-test-runner" factoryName="Mocha" temporary="true" nameIsGenerated="true">
+      <node-interpreter>project</node-interpreter>
+      <node-options />
+      <working-directory>$PROJECT_DIR$</working-directory>
+      <pass-parent-env>true</pass-parent-env>
+      <envs />
+      <ui>bdd</ui>
+      <extra-mocha-options />
+      <test-kind>SUITE</test-kind>
+      <test-file>$PROJECT_DIR$/test/unit-tests/unit-test-getOthers.js</test-file>
+      <test-names>
+        <name value="docco getOthers" />
+      </test-names>
+    </configuration>
+    <configuration name="docco getOthers.gets paths to other destination files: 1 level down, flattened." type="mocha-javascript-test-runner" factoryName="Mocha" temporary="true" nameIsGenerated="true">
+      <node-interpreter>project</node-interpreter>
+      <node-options />
+      <working-directory>$PROJECT_DIR$</working-directory>
+      <pass-parent-env>true</pass-parent-env>
+      <envs />
+      <ui>bdd</ui>
+      <extra-mocha-options />
+      <test-kind>TEST</test-kind>
+      <test-file>$PROJECT_DIR$/test/unit-tests/unit-test-getOthers.litcoffee</test-file>
+      <test-names>
+        <name value="docco getOthers" />
+        <name value="gets paths to other destination files: 1 level down, flattened." />
+      </test-names>
+    </configuration>
+    <configuration name="docco no --setup  with --layout parallel" type="NodeJSConfigurationType" factoryName="Node.js" singleton="false" path-to-node="project" path-to-js-file="$PROJECT_DIR$/bin/docco" application-parameters="--setup=.adocco.json  --flatten  --layout parallel" working-dir="$PROJECT_DIR$/test/sim">
+      <EXTENSION ID="com.jetbrains.nodejs.remote.docker.NodeJSDockerRunConfigurationExtension">
+        <option name="envVars">
+          <list />
+        </option>
+        <option name="extraHosts">
+          <list />
+        </option>
+        <option name="links">
+          <list />
+        </option>
+        <option name="networkDisabled" value="false" />
+        <option name="networkMode" value="bridge" />
+        <option name="portBindings">
+          <list />
+        </option>
+        <option name="publishAllPorts" value="false" />
+        <option name="version" value="1" />
+        <option name="volumeBindings">
+          <list />
+        </option>
+      </EXTENSION>
+    </configuration>
+    <configuration name="document" type="mocha-javascript-test-runner" factoryName="Mocha" singleton="false">
+      <node-interpreter>project</node-interpreter>
+      <node-options />
+      <working-directory>$PROJECT_DIR$</working-directory>
+      <pass-parent-env>true</pass-parent-env>
+      <envs />
+      <ui>bdd</ui>
+      <extra-mocha-options />
+      <test-kind>TEST_FILE</test-kind>
+      <test-file>$PROJECT_DIR$/test/unit-tests/unit-test-document.js</test-file>
+    </configuration>
+    <configuration name="fake_javascript.html" type="JavascriptDebugType" factoryName="JavaScript Debug" temporary="true" nameIsGenerated="true" uri="http://localhost:63342/docco/test/sim/docs/src/fake_javascript.html" />
+    <configuration name="fix for match" type="mocha-javascript-test-runner" factoryName="Mocha">
+      <node-interpreter>project</node-interpreter>
+      <node-options />
+      <working-directory>$PROJECT_DIR$</working-directory>
+      <pass-parent-env>true</pass-parent-env>
+      <envs />
+      <ui>bdd</ui>
+      <extra-mocha-options />
+      <test-kind>TEST_FILE</test-kind>
+      <test-file>$PROJECT_DIR$/test/unit-tests/unit-test-fixForMatch.js</test-file>
+    </configuration>
+    <configuration name="format" type="mocha-javascript-test-runner" factoryName="Mocha" singleton="false">
+      <node-interpreter>project</node-interpreter>
+      <node-options />
+      <working-directory>$PROJECT_DIR$</working-directory>
+      <pass-parent-env>true</pass-parent-env>
+      <envs />
+      <ui>bdd</ui>
+      <extra-mocha-options />
+      <test-kind>TEST_FILE</test-kind>
+      <test-file>$PROJECT_DIR$/test/unit-tests/unit-test-format.js</test-file>
+    </configuration>
+    <configuration name="getCSSPath" type="mocha-javascript-test-runner" factoryName="Mocha">
+      <node-interpreter>project</node-interpreter>
+      <node-options />
+      <working-directory>$PROJECT_DIR$</working-directory>
+      <pass-parent-env>true</pass-parent-env>
+      <envs />
+      <ui>bdd</ui>
+      <extra-mocha-options />
+      <test-kind>TEST_FILE</test-kind>
+      <test-file>$PROJECT_DIR$/test/unit-tests/unit-test-getCSSPath.js</test-file>
+    </configuration>
+    <configuration name="getDestinationInformation" type="mocha-javascript-test-runner" factoryName="Mocha" singleton="false">
+      <node-interpreter>project</node-interpreter>
+      <node-options />
+      <working-directory>$PROJECT_DIR$</working-directory>
+      <pass-parent-env>true</pass-parent-env>
+      <envs />
+      <ui>bdd</ui>
+      <extra-mocha-options />
+      <test-kind>TEST_FILE</test-kind>
+      <test-file>$PROJECT_DIR$/test/unit-tests/unit-test-getDestinationInformation.js</test-file>
+    </configuration>
+    <configuration name="getInformationOnFiles" type="mocha-javascript-test-runner" factoryName="Mocha" singleton="false">
+      <node-interpreter>project</node-interpreter>
+      <node-options />
+      <working-directory>$PROJECT_DIR$</working-directory>
+      <pass-parent-env>true</pass-parent-env>
+      <envs />
+      <ui>bdd</ui>
+      <extra-mocha-options />
+      <test-kind>TEST_FILE</test-kind>
+      <test-file>$PROJECT_DIR$/test/unit-tests/unit-test-getInformationOnFiles.js</test-file>
+    </configuration>
+    <configuration name="getLanguage" type="mocha-javascript-test-runner" factoryName="Mocha">
+      <node-interpreter>project</node-interpreter>
+      <node-options />
+      <working-directory>$PROJECT_DIR$</working-directory>
+      <pass-parent-env>true</pass-parent-env>
+      <envs />
+      <ui>bdd</ui>
+      <extra-mocha-options />
+      <test-kind>TEST_FILE</test-kind>
+      <test-file>$PROJECT_DIR$/test/unit-tests/unit-test-getLanguage.js</test-file>
+    </configuration>
+    <configuration name="getOthers" type="mocha-javascript-test-runner" factoryName="Mocha" singleton="false">
+      <node-interpreter>project</node-interpreter>
+      <node-options />
+      <working-directory>$PROJECT_DIR$</working-directory>
+      <pass-parent-env>true</pass-parent-env>
+      <envs />
+      <ui>bdd</ui>
+      <extra-mocha-options />
+      <test-kind>TEST_FILE</test-kind>
+      <test-file>$PROJECT_DIR$/test/unit-tests/unit-test-getOthers.js</test-file>
+    </configuration>
+    <configuration name="getRelativePath" type="mocha-javascript-test-runner" factoryName="Mocha" singleton="false">
+      <node-interpreter>project</node-interpreter>
+      <node-options />
+      <working-directory>$PROJECT_DIR$</working-directory>
+      <pass-parent-env>true</pass-parent-env>
+      <envs />
+      <ui>bdd</ui>
+      <extra-mocha-options />
+      <test-kind>TEST_FILE</test-kind>
+      <test-file>$PROJECT_DIR$/test/unit-tests/unit-test-getRelativePath.js</test-file>
+    </configuration>
+    <configuration name="parse" type="mocha-javascript-test-runner" factoryName="Mocha" singleton="false">
+      <node-interpreter>project</node-interpreter>
+      <node-options />
+      <working-directory>$PROJECT_DIR$</working-directory>
+      <pass-parent-env>true</pass-parent-env>
+      <envs />
+      <ui>bdd</ui>
+      <extra-mocha-options />
+      <test-kind>TEST_FILE</test-kind>
+      <test-file>$PROJECT_DIR$/test/unit-tests/unit-test-parse.js</test-file>
+    </configuration>
+    <configuration name="run" type="mocha-javascript-test-runner" factoryName="Mocha" singleton="false">
+      <node-interpreter>project</node-interpreter>
+      <node-options />
+      <working-directory>$PROJECT_DIR$</working-directory>
+      <pass-parent-env>true</pass-parent-env>
+      <envs />
+      <ui>bdd</ui>
+      <extra-mocha-options />
+      <test-kind>TEST_FILE</test-kind>
+      <test-file>$PROJECT_DIR$/test/unit-tests/unit-test-run.js</test-file>
+    </configuration>
+    <configuration name="write" type="mocha-javascript-test-runner" factoryName="Mocha" singleton="false">
+      <node-interpreter>project</node-interpreter>
+      <node-options />
+      <working-directory>$PROJECT_DIR$</working-directory>
+      <pass-parent-env>true</pass-parent-env>
+      <envs />
+      <ui>bdd</ui>
+      <extra-mocha-options />
+      <test-kind>TEST_FILE</test-kind>
+      <test-file>$PROJECT_DIR$/test/unit-tests/unit-test-write.js</test-file>
+    </configuration>
+    <list size="29">
+      <item index="0" class="java.lang.String" itemvalue="Node.js.docco --setup only" />
+      <item index="1" class="java.lang.String" itemvalue="Node.js.docco --setup with --flatten" />
+      <item index="2" class="java.lang.String" itemvalue="Node.js.docco files on command line" />
+      <item index="3" class="java.lang.String" itemvalue="Node.js.docco --setup only  --layout linear" />
+      <item index="4" class="java.lang.String" itemvalue="Node.js.docco --setup with --flatten --layout linear" />
+      <item index="5" class="java.lang.String" itemvalue="Mocha.getLanguage" />
+      <item index="6" class="java.lang.String" itemvalue="Mocha.getInformationOnFiles" />
+      <item index="7" class="java.lang.String" itemvalue="Mocha.getCSSPath" />
+      <item index="8" class="java.lang.String" itemvalue="Mocha.getRelativePath" />
+      <item index="9" class="java.lang.String" itemvalue="Mocha.Unit Tests" />
+      <item index="10" class="java.lang.String" itemvalue="Mocha.getDestinationInformation" />
+      <item index="11" class="java.lang.String" itemvalue="Mocha.write" />
+      <item index="12" class="java.lang.String" itemvalue="Mocha.getOthers" />
+      <item index="13" class="java.lang.String" itemvalue="Node.js.docco no --setup  with --layout parallel" />
+      <item index="14" class="java.lang.String" itemvalue="Mocha.parse" />
+      <item index="15" class="java.lang.String" itemvalue="Mocha.format" />
+      <item index="16" class="java.lang.String" itemvalue="Mocha.document" />
+      <item index="17" class="java.lang.String" itemvalue="Mocha.buildMatchers" />
+      <item index="18" class="java.lang.String" itemvalue="Mocha.run" />
+      <item index="19" class="java.lang.String" itemvalue="Node.js.docco --setup with --flatten --layout linear --css " />
+      <item index="20" class="java.lang.String" itemvalue="Node.js.docco --setup with --languages resouces/languages.json" />
+      <item index="21" class="java.lang.String" itemvalue="Node.js.docco --setup only  --layout linear --template" />
+      <item index="22" class="java.lang.String" itemvalue="Mocha.fix for match" />
+      <item index="23" class="java.lang.String" itemvalue="Node.js.docco --setup only  --layout sidebyside" />
+      <item index="24" class="java.lang.String" itemvalue="JavaScript Debug.README.html" />
+      <item index="25" class="java.lang.String" itemvalue="JavaScript Debug.README.html (1)" />
+      <item index="26" class="java.lang.String" itemvalue="JavaScript Debug.fake_javascript.html" />
+      <item index="27" class="java.lang.String" itemvalue="Mocha.docco getOthers.gets paths to other destination files: 1 level down, flattened." />
+      <item index="28" class="java.lang.String" itemvalue="Mocha.docco getOthers" />
+    </list>
+    <recent_temporary>
+      <list size="5">
+        <item index="0" class="java.lang.String" itemvalue="JavaScript Debug.README.html" />
+        <item index="1" class="java.lang.String" itemvalue="JavaScript Debug.README.html (1)" />
+        <item index="2" class="java.lang.String" itemvalue="Mocha.docco getOthers" />
+        <item index="3" class="java.lang.String" itemvalue="Mocha.docco getOthers.gets paths to other destination files: 1 level down, flattened." />
+        <item index="4" class="java.lang.String" itemvalue="JavaScript Debug.fake_javascript.html" />
+      </list>
+    </recent_temporary>
+  </component>
+  <component name="ShelveChangesManager" show_recycled="false">
+    <option name="remove_strategy" value="false" />
+  </component>
+  <component name="TaskManager">
+    <task active="true" id="Default" summary="Default task">
+      <changelist id="276b0a16-5b5d-4c51-a0d3-f44cc53e2124" name="Default" comment="" />
+      <created>1499113411165</created>
+      <option name="number" value="Default" />
+      <option name="presentableId" value="Default" />
+      <updated>1499113411165</updated>
+      <workItem from="1499113413336" duration="48134000" />
+      <workItem from="1499270789324" duration="26498000" />
+      <workItem from="1499311905250" duration="7328000" />
+      <workItem from="1499363746950" duration="21026000" />
+      <workItem from="1499413604060" duration="10261000" />
+      <workItem from="1499463726746" duration="7655000" />
+      <workItem from="1499709490623" duration="6620000" />
+      <workItem from="1499721529302" duration="552000" />
+      <workItem from="1499722183283" duration="810000" />
+      <workItem from="1499727695046" duration="1103000" />
+      <workItem from="1499731477751" duration="1082000" />
+      <workItem from="1499736178047" duration="13868000" />
+      <workItem from="1499795270542" duration="619000" />
+      <workItem from="1499801213252" duration="8497000" />
+      <workItem from="1500051307473" duration="376000" />
+      <workItem from="1500052270841" duration="836000" />
+      <workItem from="1531187960815" duration="1681000" />
+    </task>
+    <servers />
+  </component>
+  <component name="TestHistory">
+    <history-entry file="Unit_Tests - 2018.07.09 at 19h 21m 16s.xml">
+      <configuration name="Unit Tests" configurationId="mocha-javascript-test-runner" />
+    </history-entry>
+    <history-entry file="Unit_Tests - 2018.07.09 at 19h 21m 47s.xml">
+      <configuration name="Unit Tests" configurationId="mocha-javascript-test-runner" />
+    </history-entry>
+    <history-entry file="Unit_Tests - 2018.07.09 at 19h 22m 35s.xml">
+      <configuration name="Unit Tests" configurationId="mocha-javascript-test-runner" />
+    </history-entry>
+    <history-entry file="Unit_Tests - 2018.07.09 at 19h 22m 52s.xml">
+      <configuration name="Unit Tests" configurationId="mocha-javascript-test-runner" />
+    </history-entry>
+    <history-entry file="Unit_Tests - 2018.07.09 at 19h 23m 27s.xml">
+      <configuration name="Unit Tests" configurationId="mocha-javascript-test-runner" />
+    </history-entry>
+    <history-entry file="Unit_Tests - 2018.07.09 at 19h 24m 06s.xml">
+      <configuration name="Unit Tests" configurationId="mocha-javascript-test-runner" />
+    </history-entry>
+    <history-entry file="Unit_Tests - 2018.07.09 at 19h 24m 08s.xml">
+      <configuration name="Unit Tests" configurationId="mocha-javascript-test-runner" />
+    </history-entry>
+    <history-entry file="Unit_Tests - 2018.07.09 at 19h 24m 18s.xml">
+      <configuration name="Unit Tests" configurationId="mocha-javascript-test-runner" />
+    </history-entry>
+    <history-entry file="Unit_Tests - 2018.07.09 at 19h 25m 18s.xml">
+      <configuration name="Unit Tests" configurationId="mocha-javascript-test-runner" />
+    </history-entry>
+    <history-entry file="Unit_Tests - 2018.07.09 at 19h 25m 51s.xml">
+      <configuration name="Unit Tests" configurationId="mocha-javascript-test-runner" />
+    </history-entry>
+  </component>
+  <component name="TimeTrackingManager">
+    <option name="totallyTimeSpent" value="156946000" />
+  </component>
+  <component name="TodoView" selected-index="2">
+    <todo-panel id="selected-file">
+      <is-autoscroll-to-source value="true" />
+    </todo-panel>
+    <todo-panel id="all">
+      <are-packages-shown value="true" />
+      <is-autoscroll-to-source value="true" />
+    </todo-panel>
+  </component>
+  <component name="ToolWindowManager">
+    <frame x="4" y="23" width="1916" height="1057" extended-state="0" />
+    <editor active="true" />
+    <layout>
+      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.20263852" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
+      <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.27608874" sideWeight="0.4983539" order="6" side_tool="false" content_ui="tabs" />
+      <window_info id="Buck" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
+      <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
+      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.47295082" sideWeight="0.49860057" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32851985" sideWeight="0.5871007" order="7" side_tool="false" content_ui="tabs" />
+      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.3985932" sideWeight="0.32332808" order="2" side_tool="true" content_ui="tabs" />
+      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.55146265" sideWeight="0.5676672" order="7" side_tool="false" content_ui="tabs" />
+      <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
+      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.39761648" sideWeight="0.6766719" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
+      <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
+      <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
+      <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
+      <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
+      <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+    </layout>
+    <layout-to-restore>
+      <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.27608874" sideWeight="0.4983539" order="6" side_tool="false" content_ui="tabs" />
+      <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
+      <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
+      <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
+      <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
+      <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
+      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.4051724" sideWeight="0.30053192" order="2" side_tool="true" content_ui="tabs" />
+      <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32949877" sideWeight="0.4983539" order="8" side_tool="false" content_ui="tabs" />
+      <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.3040263" sideWeight="0.4983539" order="9" side_tool="false" content_ui="tabs" />
+      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.1606383" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
+      <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
+      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.4051724" sideWeight="0.6994681" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
+    </layout-to-restore>
+  </component>
+  <component name="TypeScriptGeneratedFilesManager">
+    <option name="version" value="1" />
+  </component>
+  <component name="Vcs.Log.History.Properties">
+    <option name="COLUMN_ORDER">
+      <list>
+        <option value="0" />
+        <option value="2" />
+        <option value="3" />
+        <option value="1" />
+      </list>
+    </option>
+  </component>
+  <component name="VcsContentAnnotationSettings">
+    <option name="myLimit" value="2678400000" />
+  </component>
+  <component name="XDebuggerManager">
+    <breakpoint-manager>
+      <option name="time" value="87" />
+    </breakpoint-manager>
+    <watches-manager>
+      <configuration name="NodeJSConfigurationType">
+        <watch expression="links" language="JavaScript" />
+        <watch expression="files" language="JavaScript" />
+        <watch expression="fileInfo.others" language="JavaScript" />
+      </configuration>
+      <configuration name="mocha-javascript-test-runner">
+        <watch expression="result" language="JavaScript" />
+        <watch expression="result.thingId" language="JavaScript" />
+        <watch expression="indexOf.call(valuesToFake, ref)" language="JavaScript" />
+        <watch expression="valuesToFake" language="JavaScript" />
+        <watch expression="k" language="JavaScript" />
+      </configuration>
+    </watches-manager>
+  </component>
+  <component name="editorHistoryManager">
+    <entry file="file://$PROJECT_DIR$/resources/groc/default.coffee" />
+    <entry file="file://$PROJECT_DIR$/src/getLanguage.litcoffee">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="0">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/buildMatchers.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="120">
+          <caret line="8" column="31" lean-forward="false" selection-start-line="8" selection-start-column="31" selection-end-line="8" selection-end-column="31" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/sim/src/fake_javascript.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="120">
+          <caret line="8" column="48" lean-forward="false" selection-start-line="8" selection-start-column="48" selection-end-line="8" selection-end-column="48" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/sim/src/fake_java.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="0">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/sim/src/fake_coffee.coffee">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="120">
+          <caret line="8" column="13" lean-forward="false" selection-start-line="8" selection-start-column="13" selection-end-line="8" selection-end-column="13" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/sim/src/fake_coffee2.coffee">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="165">
+          <caret line="11" column="42" lean-forward="false" selection-start-line="11" selection-start-column="42" selection-end-line="11" selection-end-column="42" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/unit-tests/unit-test-format.litcoffee">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="180">
+          <caret line="12" column="31" lean-forward="false" selection-start-line="12" selection-start-column="23" selection-end-line="12" selection-end-column="31" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/configure.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="324">
+          <caret line="30" column="22" lean-forward="false" selection-start-line="30" selection-start-column="22" selection-end-line="30" selection-end-column="22" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/sim/.adocco.json">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="45">
+          <caret line="3" column="0" lean-forward="false" selection-start-line="3" selection-start-column="0" selection-end-line="3" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/resources/parallel/docco.jst">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="350">
+          <caret line="28" column="11" lean-forward="false" selection-start-line="28" selection-start-column="11" selection-end-line="28" selection-end-column="11" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/write.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="249">
+          <caret line="49" column="19" lean-forward="false" selection-start-line="49" selection-start-column="13" selection-end-line="49" selection-end-column="19" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/getDestinationInformation.litcoffee">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="6">
+          <caret line="4" column="41" lean-forward="false" selection-start-line="4" selection-start-column="33" selection-end-line="4" selection-end-column="41" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/unit-tests/unit-test-write.litcoffee">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="118">
+          <caret line="43" column="9" lean-forward="false" selection-start-line="43" selection-start-column="9" selection-end-line="43" selection-end-column="9" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/getOthers.litcoffee">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="195">
+          <caret line="13" column="21" lean-forward="false" selection-start-line="13" selection-start-column="21" selection-end-line="13" selection-end-column="21" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/unit-tests/unit-test-getOthers.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="1215">
+          <caret line="81" column="49" lean-forward="false" selection-start-line="81" selection-start-column="48" selection-end-line="81" selection-end-column="49" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/getInformationOnFiles.litcoffee">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="352">
+          <caret line="60" column="44" lean-forward="false" selection-start-line="60" selection-start-column="44" selection-end-line="60" selection-end-column="44" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/unit-tests/unit-test-getOthers.litcoffee">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="1425">
+          <caret line="95" column="11" lean-forward="false" selection-start-line="95" selection-start-column="11" selection-end-line="95" selection-end-column="11" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/getOthers.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="135">
+          <caret line="9" column="4" lean-forward="false" selection-start-line="9" selection-start-column="4" selection-end-line="9" selection-end-column="4" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/package.json">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="705">
+          <caret line="47" column="2" lean-forward="false" selection-start-line="47" selection-start-column="2" selection-end-line="47" selection-end-column="2" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/resources/parallel/docco.css">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="2655">
+          <caret line="177" column="7" lean-forward="false" selection-start-line="177" selection-start-column="0" selection-end-line="178" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/resources/sidebyside/docco.css">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="2625">
+          <caret line="175" column="0" lean-forward="false" selection-start-line="175" selection-start-column="0" selection-end-line="175" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/resources/sidebyside/docco.jst">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="540">
+          <caret line="36" column="22" lean-forward="false" selection-start-line="36" selection-start-column="22" selection-end-line="36" selection-end-column="22" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/resources/linear/docco.jst">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="292">
+          <caret line="37" column="21" lean-forward="false" selection-start-line="28" selection-start-column="14" selection-end-line="37" selection-end-column="21" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/README.md">
+      <provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
+        <state split_layout="SPLIT">
+          <first_editor relative-caret-position="1605">
+            <caret line="107" column="23" lean-forward="false" selection-start-line="107" selection-start-column="23" selection-end-line="107" selection-end-column="23" />
+          </first_editor>
+          <second_editor />
+        </state>
+      </provider>
+      <provider editor-type-id="text-editor">
+        <state relative-caret-position="570">
+          <caret line="38" column="118" lean-forward="false" selection-start-line="38" selection-start-column="118" selection-end-line="38" selection-end-column="118" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/bin/docco">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="90">
+          <caret line="6" column="0" lean-forward="false" selection-start-line="6" selection-start-column="0" selection-end-line="6" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/unit-tests/fakes/informationOnFilesUnFlattened.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="330">
+          <caret line="22" column="0" lean-forward="false" selection-start-line="22" selection-start-column="0" selection-end-line="24" selection-end-column="43" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/sim/README.md">
+      <provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
+        <state split_layout="SPLIT">
+          <first_editor relative-caret-position="810">
+            <caret line="54" column="19" lean-forward="false" selection-start-line="54" selection-start-column="19" selection-end-line="54" selection-end-column="19" />
+          </first_editor>
+          <second_editor />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/parse.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="1155">
+          <caret line="77" column="47" lean-forward="false" selection-start-line="77" selection-start-column="47" selection-end-line="77" selection-end-column="47" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/document.litcoffee">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="1020">
+          <caret line="68" column="45" lean-forward="false" selection-start-line="68" selection-start-column="45" selection-end-line="68" selection-end-column="45" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/parse.litcoffee">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="384">
+          <caret line="87" column="43" lean-forward="false" selection-start-line="87" selection-start-column="43" selection-end-line="87" selection-end-column="43" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/resources/languages.json">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="270">
+          <caret line="18" column="51" lean-forward="false" selection-start-line="18" selection-start-column="0" selection-end-line="19" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/unit-tests/fakes/informationOnFilesFlattened.litcoffee">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="360">
+          <caret line="24" column="45" lean-forward="false" selection-start-line="24" selection-start-column="45" selection-end-line="24" selection-end-column="45" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/buildMatchers.litcoffee">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="323">
+          <caret line="21" column="3" lean-forward="false" selection-start-line="21" selection-start-column="3" selection-end-line="21" selection-end-column="3" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/.docco.json">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="0">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="7" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/sim/.docco.json">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="170">
+          <caret line="10" column="1" lean-forward="false" selection-start-line="10" selection-start-column="1" selection-end-line="10" selection-end-column="1" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/sim/docs/README.html">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="-344">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+          <folding>
+            <marker date="1531189046000" expanded="true" signature="8027:8032" ph="..." />
+            <marker date="1531189046000" expanded="true" signature="8027:8040" ph="..." />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/format.litcoffee">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="714">
+          <caret line="42" column="45" lean-forward="false" selection-start-line="42" selection-start-column="45" selection-end-line="42" selection-end-column="45" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/write.litcoffee">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="731">
+          <caret line="43" column="17" lean-forward="false" selection-start-line="43" selection-start-column="17" selection-end-line="43" selection-end-column="17" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/configure.litcoffee">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="578">
+          <caret line="34" column="66" lean-forward="false" selection-start-line="34" selection-start-column="66" selection-end-line="34" selection-end-column="66" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/docco.litcoffee">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="236">
+          <caret line="161" column="39" lean-forward="false" selection-start-line="161" selection-start-column="39" selection-end-line="161" selection-end-column="39" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/unit-tests/unit-test-typeIsArray.litcoffee">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="153">
+          <caret line="9" column="13" lean-forward="false" selection-start-line="9" selection-start-column="13" selection-end-line="9" selection-end-column="13" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/unit-tests/fakes/fake-config.litcoffee">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="153">
+          <caret line="16" column="14" lean-forward="false" selection-start-line="16" selection-start-column="13" selection-end-line="16" selection-end-column="14" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/unit-tests/unit-test-getInformationOnFiles.litcoffee">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="153">
+          <caret line="9" column="9" lean-forward="false" selection-start-line="9" selection-start-column="9" selection-end-line="9" selection-end-column="9" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/unit-tests/unit-test-getInformationOnFiles.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="170">
+          <caret line="24" column="11" lean-forward="false" selection-start-line="24" selection-start-column="11" selection-end-line="24" selection-end-column="11" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/unit-tests/fakes/informationOnFilesUnFlattened.litcoffee">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="364">
+          <caret line="24" column="27" lean-forward="false" selection-start-line="24" selection-start-column="27" selection-end-line="24" selection-end-column="27" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/unit-tests/unit-test-run.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="158">
+          <caret line="60" column="9" lean-forward="false" selection-start-line="60" selection-start-column="9" selection-end-line="60" selection-end-column="9" />
+          <folding>
+            <marker date="1531189548000" expanded="true" signature="1190:2044" ph="{...}" />
+            <marker date="1531189548000" expanded="true" signature="1638:1864" ph="{&quot;layout&quot;: &quot;parallel&quot;...}" />
+            <marker date="1531189548000" expanded="true" signature="2100:3322" ph="{...}" />
+            <marker date="1531189548000" expanded="true" signature="2131:2191" ph="{...}" />
+            <marker date="1531189548000" expanded="true" signature="2218:2287" ph="{...}" />
+            <marker date="1531189548000" expanded="true" signature="2336:3148" ph="{...}" />
+            <marker date="1531189548000" expanded="true" signature="2382:3127" ph="{...}" />
+            <marker date="1531189548000" expanded="true" signature="2397:2464" ph="..." />
+            <marker date="1531189548000" expanded="true" signature="2478:2550" ph="..." />
+            <marker date="1531189548000" expanded="true" signature="2564:2628" ph="..." />
+            <marker date="1531189548000" expanded="true" signature="2642:2715" ph="..." />
+            <marker date="1531189548000" expanded="true" signature="2729:2799" ph="..." />
+            <marker date="1531189548000" expanded="true" signature="2813:2883" ph="..." />
+            <marker date="1531189548000" expanded="true" signature="2897:2967" ph="..." />
+            <marker date="1531189548000" expanded="true" signature="2981:3050" ph="..." />
+            <marker date="1531189548000" expanded="true" signature="3064:3121" ph="..." />
+            <marker date="1531189548000" expanded="true" signature="3174:3239" ph="{...}" />
+            <marker date="1531189548000" expanded="true" signature="3264:3320" ph="{...}" />
+            <marker date="1531189548000" expanded="true" signature="3390:3531" ph="{...}" />
+            <marker date="1531189548000" expanded="true" signature="3440:3476" ph="{...}" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/unit-tests/unit-test-run.litcoffee">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="264">
+          <caret line="54" column="29" lean-forward="false" selection-start-line="54" selection-start-column="29" selection-end-line="54" selection-end-column="29" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/unit-tests/unit-test-buildMatchers.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="271">
+          <caret line="20" column="49" lean-forward="false" selection-start-line="20" selection-start-column="49" selection-end-line="20" selection-end-column="49" />
+          <folding>
+            <marker date="1531189548000" expanded="true" signature="272:898" ph="{...}" />
+            <marker date="1531189548000" expanded="true" signature="324:894" ph="{...}" />
+            <marker date="1531189548000" expanded="true" signature="438:870" ph="{...}" />
+            <marker date="1531189548000" expanded="true" signature="625:696" ph="{...}" />
+            <marker date="1531189548000" expanded="true" signature="718:819" ph="{...}" />
+            <marker date="1531189548000" expanded="true" signature="825:864" ph="{...}" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/test/unit-tests/unit-test-buildMatchers.litcoffee">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="255">
+          <caret line="15" column="47" lean-forward="false" selection-start-line="15" selection-start-column="47" selection-end-line="15" selection-end-column="47" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/.gitignore">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="204">
+          <caret line="12" column="0" lean-forward="true" selection-start-line="12" selection-start-column="0" selection-end-line="12" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+  </component>
+  <component name="masterDetails">
+    <states>
+      <state key="ScopeChooserConfigurable.UI">
+        <settings>
+          <last-edited>Hide Literate Coffeescript js and map files</last-edited>
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+    </states>
+  </component>
+</project>
\ No newline at end of file
diff --git a/.npmignore b/.npmignore
old mode 100644
new mode 100755
diff --git a/.travis.yml b/.travis.yml
new file mode 100755
index 00000000..5c036be5
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,15 @@
+language: node_js
+
+node_js:
+  - "7"
+
+cache:
+  directories:
+    - "node_modules"
+
+install:
+  - npm install
+  - npm run build
+
+test:
+  - npm test
\ No newline at end of file
diff --git a/Cakefile b/Cakefile
old mode 100644
new mode 100755
diff --git a/LICENSE b/LICENSE
old mode 100644
new mode 100755
diff --git a/README b/README
deleted file mode 100644
index c1a5e030..00000000
--- a/README
+++ /dev/null
@@ -1,31 +0,0 @@
- ____
-/\  _`\
-\ \ \/\ \        ___         ___         ___         ___
- \ \ \ \ \      / __`\      /'___\      /'___\      / __`\
-  \ \ \_\ \    /\ \ \ \    /\ \__/     /\ \__/     /\ \ \ \
-   \ \____/    \ \____/    \ \____\    \ \____\    \ \____/
-    \/___/      \/___/      \/____/     \/____/     \/___/
-
-
-Docco is a quick-and-dirty, hundred-line-long, literate-programming-style
-documentation generator. For more information, see:
-
-http://jashkenas.github.com/docco/
-
-Installation:
-
-  sudo npm install -g docco
-
-Usage: docco [options] FILES
-
-  Options:
-
-    -h, --help             output usage information
-    -V, --version          output the version number
-    -l, --layout [layout]  choose a built-in layouts (parallel, linear)
-    -c, --css [file]       use a custom css file
-    -o, --output [path]    use a custom output path
-    -t, --template [file]  use a custom .jst template
-    -e, --extension [ext]  use the given file extension for all inputs
-    -L, --languages [file] use a custom languages.json
-    -m, --marked [file]    use custom marked options
diff --git a/README.md b/README.md
new file mode 100755
index 00000000..713087e8
--- /dev/null
+++ b/README.md
@@ -0,0 +1,129 @@
+```
+    ______
+   /\  __ \
+   \ \ \/\ \        ___         ___         ___         ___
+    \ \ \ \ \      / __`\      /'___\      /'___\      / __`\
+     \ \ \_\ \    /\ \ \ \    /\ \__/     /\ \__/     /\ \ \ \
+      \ \____/    \ \____/    \ \____\    \ \____\    \ \____/
+       \/___/      \/___/      \/____/     \/____/     \/___/
+
+```
+Docco is a quick-and-dirty, hundred-line-long, literate-programming-style
+documentation generator. For more information, see:
+
+http://jashkenas.github.com/docco/
+
+### Installation:
+
+  sudo npm install -g docco
+
+### Usage: docco [options] [FILES]
+
+  Options:
+
+    -c, --css [file]       use a custom css file
+    -e, --extension [ext]  use the given file extension for all inputs
+    -f, --flatten          flatten the directory hierarchy
+    -h, --help             output usage information
+    -l, --layout [layout]  choose a built-in layouts (parallel, linear)
+    -L, --languages [file] use a custom languages.json
+    -m, --marked [file]    use custom marked options
+    -o, --output [path]    use a custom output path
+    -s, --setup [file],    use configuration file, normally docco.json
+    -t, --template [file]  use a custom .jst template
+    -V, --version          output the version number
+
+### Configuring docco (.docco.json)
+
+Docco a JSON configuration file for use so that command line specification of files is unnecessary.
+The default file for this is .docco.json, but you can the command line parameter -s/--setup file to specify a different name.
+This file should be in the working directory where the command is run.
+
+```
+{
+  "sources": [
+    "docco.litcoffee",
+    "README.md"
+  ]
+  "layout": "linear"
+}
+```
+
+Other values possible are:
+
+```
+      layout:     'parallel'
+      output:     'doc'
+      css:        'somefile.css'
+      marked:     null
+      setup:      '.docco.json'
+      flatten:    true
+```
+
+### Build:
+
+[![Build Status](https://travis-ci.org/robblovell/docco.svg?branch=master)](https://travis-ci.org/robblovell/docco)
+
+```
+npm install
+npm run clean
+npm run build
+```
+
+### Release Notes:
+
+#### Functionality:
+
+    * Added configuration file capabilities with a .docco.json file
+    * --setup flag to specify a different configuration file
+    * Images (.png, .jpg, .jpeg and .tiff) can now be copied to the documentation directory
+    * The source directory structure is kept in the target location by default
+    * --flatten flag to override keeping the directory structure and flattening it
+    * For markdown files, referenced images are displayed in the code section
+      which means that in the parallel theme, images are displayed on the right
+    * Multiline comments
+    * Allow images to be removed from the link menu for templates 
+    * New layout: sidebyside
+
+#### Refactors:
+
+    * Code refactored into smaller chunks
+    * Unit testing framework added and unit tests written to %85 coverage (more work needed here)
+    * 'npm build' builds all javascript with gulp
+    * 'npm test' runs all unit tests
+    * travis ci build and badge
+
+#### Breaking Changes:
+
+    * .jst template files have a different set of data available for building links to other files.
+        The question here is are there other templates that have been created and should a backward compatibility flag be added to proved the old behaviour?
+
+This: 
+
+    `<a class="source" href="<%= path.basename(destination(source)) %>">`
+
+Can be changed to whatever is needed since links to all other files as well as other options are available:
+
+```
+     <% for (var i=0, l = links.length; i < l; i++) { %>
+        <li>
+          <a class="source" href="<%= links[i].link %>">
+            <% if (flatten) %>
+            <%= path.basename(links[i].file) %>
+            <% else %>
+            <%= links[i].file %>
+          </a>
+        </li>
+      <% } %>
+```
+
+    * hierarchical directory structure of source is kept by default.
+            Use --flatten to get the old behaviour
+            Should this flag be changed to something else with a default behaviour being flatten?
+
+### TODO:
+
+    * Links to files that are included or required
+    * publish to github
+    * index.html documentation update
+    * All built javascript is ignored in .gitignore (npm packaging is the problem here).
diff --git a/docco.js b/docco.js
old mode 100644
new mode 100755
index 68c94f17..470cea18
--- a/docco.js
+++ b/docco.js
@@ -1,267 +1,92 @@
-// Generated by CoffeeScript 1.9.1
-(function() {
-  var Docco, _, buildMatchers, commander, configure, defaults, document, format, fs, getLanguage, highlightjs, languages, marked, parse, path, run, version, write,
-    slice = [].slice;
+var Docco, _, commander, configure, defaults, document, format, fs, getInformationOnFiles, glob, highlightjs, languages, marked, parse, path, run, version;
 
-  document = function(options, callback) {
-    var config;
-    if (options == null) {
-      options = {};
-    }
-    config = configure(options);
-    return fs.mkdirs(config.output, function() {
-      var complete, copyAsset, files, nextFile;
-      callback || (callback = function(error) {
-        if (error) {
-          throw error;
-        }
-      });
-      copyAsset = function(file, callback) {
-        if (!fs.existsSync(file)) {
-          return callback();
-        }
-        return fs.copy(file, path.join(config.output, path.basename(file)), callback);
-      };
-      complete = function() {
-        return copyAsset(config.css, function(error) {
-          if (error) {
-            return callback(error);
-          }
-          if (fs.existsSync(config["public"])) {
-            return copyAsset(config["public"], callback);
-          }
-          return callback();
-        });
-      };
-      files = config.sources.slice();
-      nextFile = function() {
-        var source;
-        source = files.shift();
-        return fs.readFile(source, function(error, buffer) {
-          var code, sections;
-          if (error) {
-            return callback(error);
-          }
-          code = buffer.toString();
-          sections = parse(source, code, config);
-          format(source, sections, config);
-          write(source, sections, config);
-          if (files.length) {
-            return nextFile();
-          } else {
-            return complete();
-          }
-        });
-      };
-      return nextFile();
-    });
-  };
+document = require('./src/document');
 
-  parse = function(source, code, config) {
-    var codeText, docsText, hasCode, i, isText, j, k, lang, len, len1, line, lines, match, maybeCode, save, sections;
-    if (config == null) {
-      config = {};
-    }
-    lines = code.split('\n');
-    sections = [];
-    lang = getLanguage(source, config);
-    hasCode = docsText = codeText = '';
-    save = function() {
-      sections.push({
-        docsText: docsText,
-        codeText: codeText
-      });
-      return hasCode = docsText = codeText = '';
-    };
-    if (lang.literate) {
-      isText = maybeCode = true;
-      for (i = j = 0, len = lines.length; j < len; i = ++j) {
-        line = lines[i];
-        lines[i] = maybeCode && (match = /^([ ]{4}|[ ]{0,3}\t)/.exec(line)) ? (isText = false, line.slice(match[0].length)) : (maybeCode = /^\s*$/.test(line)) ? isText ? lang.symbol : '' : (isText = true, lang.symbol + ' ' + line);
-      }
-    }
-    for (k = 0, len1 = lines.length; k < len1; k++) {
-      line = lines[k];
-      if (line.match(lang.commentMatcher) && !line.match(lang.commentFilter)) {
-        if (hasCode) {
-          save();
-        }
-        docsText += (line = line.replace(lang.commentMatcher, '')) + '\n';
-        if (/^(---+|===+)$/.test(line)) {
-          save();
-        }
-      } else {
-        hasCode = true;
-        codeText += line + '\n';
-      }
-    }
-    save();
-    return sections;
-  };
+parse = require('./src/parse');
 
-  format = function(source, sections, config) {
-    var code, i, j, language, len, markedOptions, results, section;
-    language = getLanguage(source, config);
-    markedOptions = {
-      smartypants: true
-    };
-    if (config.marked) {
-      markedOptions = config.marked;
-    }
-    marked.setOptions(markedOptions);
-    marked.setOptions({
-      highlight: function(code, lang) {
-        lang || (lang = language.name);
-        if (highlightjs.getLanguage(lang)) {
-          return highlightjs.highlight(lang, code).value;
-        } else {
-          console.warn("docco: couldn't highlight code block with unknown language '" + lang + "' in " + source);
-          return code;
-        }
-      }
-    });
-    results = [];
-    for (i = j = 0, len = sections.length; j < len; i = ++j) {
-      section = sections[i];
-      code = highlightjs.highlight(language.name, section.codeText).value;
-      code = code.replace(/\s+$/, '');
-      section.codeHtml = "<div class='highlight'><pre>" + code + "</pre></div>";
-      results.push(section.docsHtml = marked(section.docsText));
-    }
-    return results;
-  };
+format = require('./src/format');
 
-  write = function(source, sections, config) {
-    var destination, first, firstSection, hasTitle, html, title;
-    destination = function(file) {
-      return path.join(config.output, path.basename(file, path.extname(file)) + '.html');
-    };
-    firstSection = _.find(sections, function(section) {
-      return section.docsText.length > 0;
-    });
-    if (firstSection) {
-      first = marked.lexer(firstSection.docsText)[0];
-    }
-    hasTitle = first && first.type === 'heading' && first.depth === 1;
-    title = hasTitle ? first.text : path.basename(source);
-    html = config.template({
-      sources: config.sources,
-      css: path.basename(config.css),
-      title: title,
-      hasTitle: hasTitle,
-      sections: sections,
-      path: path,
-      destination: destination
-    });
-    console.log("docco: " + source + " -> " + (destination(source)));
-    return fs.writeFileSync(destination(source), html);
-  };
+configure = require('./src/configure');
 
-  defaults = {
-    layout: 'parallel',
-    output: 'docs',
-    template: null,
-    css: null,
-    extension: null,
-    languages: {},
-    marked: null
-  };
+getInformationOnFiles = require('./src/getInformationOnFiles');
 
-  configure = function(options) {
-    var config, dir;
-    config = _.extend({}, defaults, _.pick.apply(_, [options].concat(slice.call(_.keys(defaults)))));
-    config.languages = buildMatchers(config.languages);
-    if (options.template) {
-      if (!options.css) {
-        console.warn("docco: no stylesheet file specified");
-      }
-      config.layout = null;
-    } else {
-      dir = config.layout = path.join(__dirname, 'resources', config.layout);
-      if (fs.existsSync(path.join(dir, 'public'))) {
-        config["public"] = path.join(dir, 'public');
-      }
-      config.template = path.join(dir, 'docco.jst');
-      config.css = options.css || path.join(dir, 'docco.css');
-    }
-    config.template = _.template(fs.readFileSync(config.template).toString());
-    if (options.marked) {
-      config.marked = JSON.parse(fs.readFileSync(options.marked));
-    }
-    config.sources = options.args.filter(function(source) {
-      var lang;
-      lang = getLanguage(source, config);
-      if (!lang) {
-        console.warn("docco: skipped unknown type (" + (path.basename(source)) + ")");
-      }
-      return lang;
-    }).sort();
-    return config;
-  };
+_ = require('underscore');
 
-  _ = require('underscore');
+fs = require('fs-extra');
 
-  fs = require('fs-extra');
+path = require('path');
 
-  path = require('path');
+marked = require('marked');
 
-  marked = require('marked');
+commander = require('commander');
 
-  commander = require('commander');
+highlightjs = require('highlight.js');
 
-  highlightjs = require('highlight.js');
+path = require('path');
 
-  languages = JSON.parse(fs.readFileSync(path.join(__dirname, 'resources', 'languages.json')));
+glob = require('glob');
 
-  buildMatchers = function(languages) {
-    var ext, l;
-    for (ext in languages) {
-      l = languages[ext];
-      l.commentMatcher = RegExp("^\\s*" + l.symbol + "\\s?");
-      l.commentFilter = /(^#![\/]|^\s*#\{)/;
-    }
-    return languages;
-  };
+languages = JSON.parse(fs.readFileSync(path.join(__dirname, 'resources', 'languages.json')));
 
-  languages = buildMatchers(languages);
+version = JSON.parse(fs.readFileSync(path.join(__dirname, 'package.json'))).version;
 
-  getLanguage = function(source, config) {
-    var codeExt, codeLang, ext, lang, ref;
-    ext = config.extension || path.extname(source) || path.basename(source);
-    lang = ((ref = config.languages) != null ? ref[ext] : void 0) || languages[ext];
-    if (lang && lang.name === 'markdown') {
-      codeExt = path.extname(path.basename(source, ext));
-      if (codeExt && (codeLang = languages[codeExt])) {
-        lang = _.extend({}, codeLang, {
-          literate: true
-        });
-      }
-    }
-    return lang;
-  };
+defaults = {
+  layout: 'sidebyside',
+  output: 'docs',
+  template: null,
+  css: null,
+  extension: null,
+  languages: {},
+  marked: null,
+  setup: '.docco.json',
+  help: false,
+  flatten: false
+};
 
-  version = JSON.parse(fs.readFileSync(path.join(__dirname, 'package.json'))).version;
-
-  run = function(args) {
-    var c;
-    if (args == null) {
-      args = process.argv;
+run = function(args) {
+  var config, file, files, globName, i, j, len, len1, ref, setup;
+  if (args == null) {
+    args = process.argv;
+  }
+  config = defaults;
+  commander.version(version).usage('[options] [file]').option('-c, --css [file]', 'use a custom css file', config.css).option('-e, --extension [ext]', 'assume a file extension for all inputs', config.extension).option('-f, --flatten', 'flatten the directory hierarchy', config.flatten).option('-g, --languages [file]', 'use a custom languages.json', _.compose(JSON.parse, fs.readFileSync)).option('-l, --layout [name]', 'choose a layout (parallel, linear or classic)', config.layout).option('-m, --marked [file]', 'use custom marked options', config.marked).option('-o, --output [path]', 'output to a given folder', config.output).option('-s, --setup [file]', 'use configuration file, normally docco.json', '.docco.json').option('-t, --template [file]', 'use a custom .jst template', config.template).parse(args).name = "docco";
+  config = configure(commander, defaults, languages);
+  setup = path.resolve(config.setup);
+  if (fs.existsSync(setup)) {
+    if (setup) {
+      config = _.extend(config, JSON.parse(fs.readFileSync(setup)));
     }
-    c = defaults;
-    commander.version(version).usage('[options] files').option('-L, --languages [file]', 'use a custom languages.json', _.compose(JSON.parse, fs.readFileSync)).option('-l, --layout [name]', 'choose a layout (parallel, linear or classic)', c.layout).option('-o, --output [path]', 'output to a given folder', c.output).option('-c, --css [file]', 'use a custom css file', c.css).option('-t, --template [file]', 'use a custom .jst template', c.template).option('-e, --extension [ext]', 'assume a file extension for all inputs', c.extension).option('-m, --marked [file]', 'use custom marked options', c.marked).parse(args).name = "docco";
-    if (commander.args.length) {
-      return document(commander);
-    } else {
-      return console.log(commander.helpInformation());
+  }
+  config.root = process.cwd();
+  if (config.sources.length !== 0) {
+    files = [];
+    ref = config.sources;
+    for (i = 0, len = ref.length; i < len; i++) {
+      globName = ref[i];
+      files = _.flatten(_.union(files, glob.sync(path.resolve(config.root, globName))));
+      if (files.length === 0) {
+        files.push(globName);
+      }
     }
-  };
-
-  Docco = module.exports = {
-    run: run,
-    document: document,
-    parse: parse,
-    format: format,
-    version: version
-  };
-
-}).call(this);
+    config.sources = [];
+    for (j = 0, len1 = files.length; j < len1; j++) {
+      file = files[j];
+      config.sources.push(path.relative(config.root, file));
+    }
+    config.informationOnFiles = getInformationOnFiles(config);
+    document(config);
+  } else {
+    console.log(commander.helpInformation());
+  }
+};
+
+module.exports = Docco = {
+  run: run,
+  document: document,
+  parse: parse,
+  format: format,
+  languages: languages,
+  version: version
+};
+
+//# sourceMappingURL=docco.js.map
diff --git a/docco.js.map b/docco.js.map
new file mode 100644
index 00000000..4f7ed1cc
--- /dev/null
+++ b/docco.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"docco.js","sources":["docco.litcoffee"],"names":[],"mappings":"AA+EI,IAAA;;AAAA,QAAA,GAAW,OAAA,CAAQ,gBAAR;;AAOX,KAAA,GAAQ,OAAA,CAAQ,aAAR;;AAMR,MAAA,GAAS,OAAA,CAAQ,cAAR;;AAST,SAAA,GAAY,OAAA,CAAQ,iBAAR;;AAEZ,qBAAA,GAAwB,OAAA,CAAQ,6BAAR;;AAOxB,CAAA,GAAc,OAAA,CAAQ,YAAR;;AACd,EAAA,GAAc,OAAA,CAAQ,UAAR;;AACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;AACd,MAAA,GAAc,OAAA,CAAQ,QAAR;;AACd,SAAA,GAAc,OAAA,CAAQ,WAAR;;AACd,WAAA,GAAc,OAAA,CAAQ,cAAR;;AACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;AACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;AAOd,SAAA,GAAY,IAAI,CAAC,KAAL,CAAW,EAAE,CAAC,YAAH,CAAgB,IAAI,CAAC,IAAL,CAAU,SAAV,EAAqB,WAArB,EAAkC,gBAAlC,CAAhB,CAAX;;AAIZ,OAAA,GAAU,IAAI,CAAC,KAAL,CAAW,EAAE,CAAC,YAAH,CAAgB,IAAI,CAAC,IAAL,CAAU,SAAV,EAAqB,cAArB,CAAhB,CAAX,CAAiE,CAAC;;AAK5E,QAAA,GACE;EAAA,MAAA,EAAY,YAAZ;EACA,MAAA,EAAY,MADZ;EAEA,QAAA,EAAY,IAFZ;EAGA,GAAA,EAAY,IAHZ;EAIA,SAAA,EAAY,IAJZ;EAKA,SAAA,EAAY,EALZ;EAMA,MAAA,EAAY,IANZ;EAOA,KAAA,EAAY,aAPZ;EAQA,IAAA,EAAW,KARX;EASA,OAAA,EAAS,KATT;;;AAiBF,GAAA,GAAM,SAAC,IAAD;AACJ,MAAA;;IADK,OAAO,OAAO,CAAC;;EACpB,MAAA,GAAS;EAET,SAAS,CAAC,OAAV,CAAkB,OAAlB,CACE,CAAC,KADH,CACS,kBADT,CAEE,CAAC,MAFH,CAEU,kBAFV,EAEoC,uBAFpC,EAE6D,MAAM,CAAC,GAFpE,CAGE,CAAC,MAHH,CAGU,uBAHV,EAGoC,wCAHpC,EAG8E,MAAM,CAAC,SAHrF,CAIE,CAAC,MAJH,CAIU,eAJV,EAIoC,iCAJpC,EAIuE,MAAM,CAAC,OAJ9E,CAKE,CAAC,MALH,CAKU,wBALV,EAKoC,6BALpC,EAKmE,CAAC,CAAC,OAAF,CAAU,IAAI,CAAC,KAAf,EAAsB,EAAE,CAAC,YAAzB,CALnE,CAME,CAAC,MANH,CAMU,qBANV,EAMoC,+CANpC,EAMqF,MAAM,CAAC,MAN5F,CAOE,CAAC,MAPH,CAOU,qBAPV,EAOoC,2BAPpC,EAOiE,MAAM,CAAC,MAPxE,CAQE,CAAC,MARH,CAQU,qBARV,EAQoC,0BARpC,EAQgE,MAAM,CAAC,MARvE,CASE,CAAC,MATH,CASU,oBATV,EASoC,6CATpC,EASmF,aATnF,CAUE,CAAC,MAVH,CAUU,uBAVV,EAUoC,4BAVpC,EAUkE,MAAM,CAAC,QAVzE,CAWE,CAAC,KAXH,CAWS,IAXT,CAYE,CAAC,IAZH,GAYU;EAEV,MAAA,GAAS,SAAA,CAAU,SAAV,EAAqB,QAArB,EAA+B,SAA/B;EAET,KAAA,GAAQ,IAAI,CAAC,OAAL,CAAa,MAAM,CAAC,KAApB;EACR,IAAG,EAAE,CAAC,UAAH,CAAc,KAAd,CAAH;IACE,IAA+D,KAA/D;MAAA,MAAA,GAAS,CAAC,CAAC,MAAF,CAAS,MAAT,EAAiB,IAAI,CAAC,KAAL,CAAW,EAAE,CAAC,YAAH,CAAgB,KAAhB,CAAX,CAAjB,EAAT;KADF;;EAGA,MAAM,CAAC,IAAP,GAAc,OAAO,CAAC,GAAR,CAAA;EACd,IAAG,MAAM,CAAC,OAAO,CAAC,MAAf,KAA2B,CAA9B;IACE,KAAA,GAAO;AACP;AAAA,SAAA,qCAAA;;MACE,KAAA,GAAQ,CAAC,CAAC,OAAF,CAAU,CAAC,CAAC,KAAF,CAAQ,KAAR,EAAe,IAAI,CAAC,IAAL,CAAU,IAAI,CAAC,OAAL,CAAa,MAAM,CAAC,IAApB,EAA0B,QAA1B,CAAV,CAAf,CAAV;MACR,IAAG,KAAK,CAAC,MAAN,KAAgB,CAAnB;QACE,KAAK,CAAC,IAAN,CAAW,QAAX,EADF;;AAFF;IAKA,MAAM,CAAC,OAAP,GAAiB;AACjB,SAAA,yCAAA;;MACE,MAAM,CAAC,OAAO,CAAC,IAAf,CAAoB,IAAI,CAAC,QAAL,CAAc,MAAM,CAAC,IAArB,EAA2B,IAA3B,CAApB;AADF;IAGA,MAAM,CAAC,kBAAP,GAA4B,qBAAA,CAAsB,MAAtB;IAE5B,QAAA,CAAS,MAAT,EAbF;GAAA,MAAA;IAeE,OAAO,CAAC,GAAR,CAAY,SAAS,CAAC,eAAV,CAAA,CAAZ,EAfF;;AAxBI;;AA6CN,MAAM,CAAC,OAAP,GAAiB,KAAA,GAAQ;EAAC,KAAA,GAAD;EAAM,UAAA,QAAN;EAAgB,OAAA,KAAhB;EAAuB,QAAA,MAAvB;EAA+B,WAAA,SAA/B;EAA0C,SAAA,OAA1C","sourcesContent":["Docco\n=====\n\n**Docco** is a quick-and-dirty documentation generator, written in\n[Literate CoffeeScript](http://coffeescript.org/#literate).\nIt produces an HTML document that displays your comments intermingled with your\ncode. All prose is passed through\n[Markdown](http://daringfireball.net/projects/markdown/syntax), and code is\npassed through [Highlight.js](http://highlightjs.org/) syntax highlighting.\nThis page is the result of running Docco against its own\n[source file](https://github.com/jashkenas/docco/blob/master/docco.litcoffee).\n\n1. Install Docco with **npm**: `sudo npm install -g docco`\n\n2. Run it against your code: `docco src/*.coffee`\n\nThere is no \"Step 3\". This will generate an HTML page for each of the named\nsource files, with a menu linking to the other pages, saving the whole mess\ninto a `docs` folder (configurable).\n\nThe [Docco source](http://github.com/jashkenas/docco) is available on GitHub,\nand is released under the [MIT license](http://opensource.org/licenses/MIT).\n\nDocco can be used to process code written in any programming language. If it\ndoesn't handle your favorite yet, feel free to\n[add it to the list](https://github.com/jashkenas/docco/blob/master/resources/languages.json).\nFinally, the [\"literate\" style](http://coffeescript.org/#literate) of *any*\nlanguage is also supported — just tack an `.md` extension on the end:\n`.coffee.md`, `.py.md`, and so on.\n\n\nPartners in Crime:\n------------------\n\n* If Node.js doesn't run on your platform, or you'd prefer a more\nconvenient package, get [Ryan Tomayko](http://github.com/rtomayko)'s\n[Rocco](http://rtomayko.github.io/rocco/rocco.html), the **Ruby** port that's\navailable as a gem.\n\n* If you're writing shell scripts, try\n[Shocco](http://rtomayko.github.io/shocco/), a port for the **POSIX shell**,\nalso by Mr. Tomayko.\n\n* If **Python** is more your speed, take a look at\n[Nick Fitzgerald](http://github.com/fitzgen)'s [Pycco](https://pycco-docs.github.io/pycco/).\n\n* For **Clojure** fans, [Fogus](http://blog.fogus.me/)'s\n[Marginalia](http://fogus.me/fun/marginalia/) is a bit of a departure from\n\"quick-and-dirty\", but it'll get the job done.\n\n* There's a **Go** port called [Gocco](http://nikhilm.github.io/gocco/),\nwritten by [Nikhil Marathe](https://github.com/nikhilm).\n\n* For all you **PHP** buffs out there, Fredi Bach's\n[sourceMakeup](http://jquery-jkit.com/sourcemakeup/) (we'll let the faux pas\nwith respect to our naming scheme slide), should do the trick nicely.\n\n* **Lua** enthusiasts can get their fix with\n[Robert Gieseke](https://github.com/rgieseke)'s [Locco](http://rgieseke.github.io/locco/).\n\n* And if you happen to be a **.NET**\naficionado, check out [Don Wilson](https://github.com/dontangg)'s\n[Nocco](http://dontangg.github.io/nocco/).\n\n* Going further afield from the quick-and-dirty, [Groc](http://nevir.github.io/groc/)\nis a **CoffeeScript** fork of Docco that adds a searchable table of contents,\nand aims to gracefully handle large projects with complex hierarchies of code.\n\nNote that not all ports will support all Docco features ... yet.\n\n\nMain Documentation Generation Functions\n---------------------------------------\n\nGenerate the documentation for our configured source file by copying over static\nassets, reading all the source files in, splitting them up into prose+code\nsections, highlighting each file in the appropriate language, and printing them\nout in an HTML template.\n\n    document = require './src/document'\n\nGiven a string of source code, **parse** out each block of prose and the code that\nfollows it — by detecting which is which, line by line — and then create an\nindividual **section** for it. Each section is an object with `docsText` and\n`codeText` properties, and eventually `docsHtml` and `codeHtml` as well.\n\n    parse = require './src/parse'\n\nTo **format** and highlight the now-parsed sections of code, we use **Highlight.js**\nover stdio, and run the text of their corresponding comments through\n**Markdown**, using [Marked](https://github.com/chjj/marked).\n\n    format = require './src/format'\n\nConfiguration\n-------------\n\n**Configure** this particular run of Docco. We might use a passed-in external\ntemplate, or one of the built-in **layouts**. We only attempt to process\nsource files for languages for which we have definitions.\n\n    configure = require './src/configure'\n\n    getInformationOnFiles = require './src/getInformationOnFiles'\n\nHelpers & Initial Setup\n-----------------------\n\nRequire our external dependencies.\n\n    _           = require 'underscore'\n    fs          = require 'fs-extra'\n    path        = require 'path'\n    marked      = require 'marked'\n    commander   = require 'commander'\n    highlightjs = require 'highlight.js'\n    path        = require 'path'\n    glob        = require 'glob'\n\nLanguages are stored in JSON in the file `resources/languages.json`.\nEach item maps the file extension to the name of the language and the\n`symbol` that indicates a line comment. To add support for a new programming\nlanguage to Docco, just add it to the file.\n\n    languages = JSON.parse fs.readFileSync(path.join(__dirname, 'resources', 'languages.json'))\n\nKeep it DRY. Extract the docco **version** from `package.json`\n\n    version = JSON.parse(fs.readFileSync(path.join(__dirname, 'package.json'))).version\n\nDefault configuration **options**. All of these may be extended by\nuser-specified options.\n\n    defaults =\n      layout:     'sidebyside'\n      output:     'docs'\n      template:   null\n      css:        null\n      extension:  null\n      languages:  {}\n      marked:     null\n      setup:      '.docco.json'\n      help:      false\n      flatten: false\n\nCommand Line Interface\n----------------------\n\nFinally, let's define the interface to run Docco from the command line.\nParse options using [Commander](https://github.com/visionmedia/commander.js).\n\n    run = (args = process.argv) ->\n      config = defaults\n\n      commander.version(version)\n        .usage('[options] [file]')\n        .option('-c, --css [file]',       'use a custom css file', config.css)\n        .option('-e, --extension [ext]',  'assume a file extension for all inputs', config.extension)\n        .option('-f, --flatten',          'flatten the directory hierarchy', config.flatten)\n        .option('-g, --languages [file]', 'use a custom languages.json', _.compose JSON.parse, fs.readFileSync)\n        .option('-l, --layout [name]',    'choose a layout (parallel, linear or classic)', config.layout)\n        .option('-m, --marked [file]',    'use custom marked options', config.marked)\n        .option('-o, --output [path]',    'output to a given folder', config.output)\n        .option('-s, --setup [file]',     'use configuration file, normally docco.json', '.docco.json')\n        .option('-t, --template [file]',  'use a custom .jst template', config.template)\n        .parse(args)\n        .name = \"docco\"\n\n      config = configure commander, defaults, languages\n\n      setup = path.resolve config.setup\n      if fs.existsSync(setup)\n        config = _.extend(config, JSON.parse fs.readFileSync setup) if setup\n\n      config.root = process.cwd()\n      if config.sources.length isnt 0\n        files =[]\n        for globName in config.sources\n          files = _.flatten _.union files, glob.sync path.resolve config.root, globName\n          if files.length is 0\n            files.push(globName) # not a glob.\n\n        config.sources = []\n        for file in files\n          config.sources.push path.relative(config.root, file)\n\n        config.informationOnFiles = getInformationOnFiles config\n\n        document config\n      else\n        console.log commander.helpInformation()\n      return\n\nPublic API\n----------\n\n    module.exports = Docco = {run, document, parse, format, languages, version}\n"]}
\ No newline at end of file
diff --git a/docco.litcoffee b/docco.litcoffee
old mode 100644
new mode 100755
index cb0a291e..e665226a
--- a/docco.litcoffee
+++ b/docco.litcoffee
@@ -77,193 +77,31 @@ assets, reading all the source files in, splitting them up into prose+code
 sections, highlighting each file in the appropriate language, and printing them
 out in an HTML template.
 
-    document = (options = {}, callback) ->
-      config = configure options
-
-      fs.mkdirs config.output, ->
-
-        callback or= (error) -> throw error if error
-        copyAsset  = (file, callback) ->
-          return callback() unless fs.existsSync file
-          fs.copy file, path.join(config.output, path.basename(file)), callback
-        complete   = ->
-          copyAsset config.css, (error) ->
-            return callback error if error
-            return copyAsset config.public, callback if fs.existsSync config.public
-            callback()
-
-        files = config.sources.slice()
-
-        nextFile = ->
-          source = files.shift()
-          fs.readFile source, (error, buffer) ->
-            return callback error if error
-
-            code = buffer.toString()
-            sections = parse source, code, config
-            format source, sections, config
-            write source, sections, config
-            if files.length then nextFile() else complete()
-
-        nextFile()
+    document = require './src/document'
 
 Given a string of source code, **parse** out each block of prose and the code that
 follows it — by detecting which is which, line by line — and then create an
 individual **section** for it. Each section is an object with `docsText` and
 `codeText` properties, and eventually `docsHtml` and `codeHtml` as well.
 
-    parse = (source, code, config = {}) ->
-      lines    = code.split '\n'
-      sections = []
-      lang     = getLanguage source, config
-      hasCode  = docsText = codeText = ''
-
-      save = ->
-        sections.push {docsText, codeText}
-        hasCode = docsText = codeText = ''
-
-Our quick-and-dirty implementation of the literate programming style. Simply
-invert the prose and code relationship on a per-line basis, and then continue as
-normal below.
-
-      if lang.literate
-        isText = maybeCode = yes
-        for line, i in lines
-          lines[i] = if maybeCode and match = /^([ ]{4}|[ ]{0,3}\t)/.exec line
-            isText = no
-            line[match[0].length..]
-          else if maybeCode = /^\s*$/.test line
-            if isText then lang.symbol else ''
-          else
-            isText = yes
-            lang.symbol + ' ' + line
-
-      for line in lines
-        if line.match(lang.commentMatcher) and not line.match(lang.commentFilter)
-          save() if hasCode
-          docsText += (line = line.replace(lang.commentMatcher, '')) + '\n'
-          save() if /^(---+|===+)$/.test line
-        else
-          hasCode = yes
-          codeText += line + '\n'
-      save()
-
-      sections
+    parse = require './src/parse'
 
 To **format** and highlight the now-parsed sections of code, we use **Highlight.js**
 over stdio, and run the text of their corresponding comments through
 **Markdown**, using [Marked](https://github.com/chjj/marked).
 
-    format = (source, sections, config) ->
-      language = getLanguage source, config
-
-Pass any user defined options to Marked if specified via command line option
-
-      markedOptions =
-        smartypants: true
-
-      if config.marked
-        markedOptions = config.marked
-
-      marked.setOptions markedOptions
-
-Tell Marked how to highlight code blocks within comments, treating that code
-as either the language specified in the code block or the language of the file
-if not specified.
-
-      marked.setOptions {
-        highlight: (code, lang) ->
-          lang or= language.name
-
-          if highlightjs.getLanguage(lang)
-            highlightjs.highlight(lang, code).value
-          else
-            console.warn "docco: couldn't highlight code block with unknown language '#{lang}' in #{source}"
-            code
-      }
-
-      for section, i in sections
-        code = highlightjs.highlight(language.name, section.codeText).value
-        code = code.replace(/\s+$/, '')
-        section.codeHtml = "<div class='highlight'><pre>#{code}</pre></div>"
-        section.docsHtml = marked(section.docsText)
-
-Once all of the code has finished highlighting, we can **write** the resulting
-documentation file by passing the completed HTML sections into the template,
-and rendering it to the specified output path.
-
-    write = (source, sections, config) ->
-
-      destination = (file) ->
-        path.join(config.output, path.basename(file, path.extname(file)) + '.html')
-
-The **title** of the file is either the first heading in the prose, or the
-name of the source file.
-
-      firstSection = _.find sections, (section) ->
-        section.docsText.length > 0
-      first = marked.lexer(firstSection.docsText)[0] if firstSection
-      hasTitle = first and first.type is 'heading' and first.depth is 1
-      title = if hasTitle then first.text else path.basename source
-
-      html = config.template {sources: config.sources, css: path.basename(config.css),
-        title, hasTitle, sections, path, destination,}
-
-      console.log "docco: #{source} -> #{destination source}"
-      fs.writeFileSync destination(source), html
-
+    format = require './src/format'
 
 Configuration
 -------------
 
-Default configuration **options**. All of these may be extended by
-user-specified options.
-
-    defaults =
-      layout:     'parallel'
-      output:     'docs'
-      template:   null
-      css:        null
-      extension:  null
-      languages:  {}
-      marked:     null
-
 **Configure** this particular run of Docco. We might use a passed-in external
 template, or one of the built-in **layouts**. We only attempt to process
 source files for languages for which we have definitions.
 
-    configure = (options) ->
-      config = _.extend {}, defaults, _.pick(options, _.keys(defaults)...)
-
-      config.languages = buildMatchers config.languages
-
-The user is able to override the layout file used with the `--template` parameter.
-In this case, it is also neccessary to explicitly specify a stylesheet file.
-These custom templates are compiled exactly like the predefined ones, but the `public` folder
-is only copied for the latter.
-
-      if options.template
-        unless options.css
-          console.warn "docco: no stylesheet file specified"
-        config.layout = null
-      else
-        dir = config.layout = path.join __dirname, 'resources', config.layout
-        config.public       = path.join dir, 'public' if fs.existsSync path.join dir, 'public'
-        config.template     = path.join dir, 'docco.jst'
-        config.css          = options.css or path.join dir, 'docco.css'
-      config.template = _.template fs.readFileSync(config.template).toString()
-
-      if options.marked
-        config.marked = JSON.parse fs.readFileSync(options.marked)
-
-      config.sources = options.args.filter((source) ->
-        lang = getLanguage source, config
-        console.warn "docco: skipped unknown type (#{path.basename source})" unless lang
-        lang
-      ).sort()
-
-      config
+    configure = require './src/configure'
 
+    getInformationOnFiles = require './src/getInformationOnFiles'
 
 Helpers & Initial Setup
 -----------------------
@@ -276,6 +114,8 @@ Require our external dependencies.
     marked      = require 'marked'
     commander   = require 'commander'
     highlightjs = require 'highlight.js'
+    path        = require 'path'
+    glob        = require 'glob'
 
 Languages are stored in JSON in the file `resources/languages.json`.
 Each item maps the file extension to the name of the language and the
@@ -284,37 +124,24 @@ language to Docco, just add it to the file.
 
     languages = JSON.parse fs.readFileSync(path.join(__dirname, 'resources', 'languages.json'))
 
-Build out the appropriate matchers and delimiters for each language.
-
-    buildMatchers = (languages) ->
-      for ext, l of languages
-
-Does the line begin with a comment?
-
-        l.commentMatcher = ///^\s*#{l.symbol}\s?///
-
-Ignore [hashbangs](http://en.wikipedia.org/wiki/Shebang_%28Unix%29) and interpolations...
-
-        l.commentFilter = /(^#![/]|^\s*#\{)/
-      languages
-    languages = buildMatchers languages
-
-A function to get the current language we're documenting, based on the
-file extension. Detect and tag "literate" `.ext.md` variants.
-
-    getLanguage = (source, config) ->
-      ext  = config.extension or path.extname(source) or path.basename(source)
-      lang = config.languages?[ext] or languages[ext]
-      if lang and lang.name is 'markdown'
-        codeExt = path.extname(path.basename(source, ext))
-        if codeExt and codeLang = languages[codeExt]
-          lang = _.extend {}, codeLang, {literate: yes}
-      lang
-
 Keep it DRY. Extract the docco **version** from `package.json`
 
     version = JSON.parse(fs.readFileSync(path.join(__dirname, 'package.json'))).version
 
+Default configuration **options**. All of these may be extended by
+user-specified options.
+
+    defaults =
+      layout:     'sidebyside'
+      output:     'docs'
+      template:   null
+      css:        null
+      extension:  null
+      languages:  {}
+      marked:     null
+      setup:      '.docco.json'
+      help:      false
+      flatten: false
 
 Command Line Interface
 ----------------------
@@ -323,25 +150,48 @@ Finally, let's define the interface to run Docco from the command line.
 Parse options using [Commander](https://github.com/visionmedia/commander.js).
 
     run = (args = process.argv) ->
-      c = defaults
+      config = defaults
+
       commander.version(version)
-        .usage('[options] files')
-        .option('-L, --languages [file]', 'use a custom languages.json', _.compose JSON.parse, fs.readFileSync)
-        .option('-l, --layout [name]',    'choose a layout (parallel, linear or classic)', c.layout)
-        .option('-o, --output [path]',    'output to a given folder', c.output)
-        .option('-c, --css [file]',       'use a custom css file', c.css)
-        .option('-t, --template [file]',  'use a custom .jst template', c.template)
-        .option('-e, --extension [ext]',  'assume a file extension for all inputs', c.extension)
-        .option('-m, --marked [file]',    'use custom marked options', c.marked)
+        .usage('[options] [file]')
+        .option('-c, --css [file]',       'use a custom css file', config.css)
+        .option('-e, --extension [ext]',  'assume a file extension for all inputs', config.extension)
+        .option('-f, --flatten',          'flatten the directory hierarchy', config.flatten)
+        .option('-g, --languages [file]', 'use a custom languages.json', _.compose JSON.parse, fs.readFileSync)
+        .option('-l, --layout [name]',    'choose a layout (parallel, linear or classic)', config.layout)
+        .option('-m, --marked [file]',    'use custom marked options', config.marked)
+        .option('-o, --output [path]',    'output to a given folder', config.output)
+        .option('-s, --setup [file]',     'use configuration file, normally docco.json', '.docco.json')
+        .option('-t, --template [file]',  'use a custom .jst template', config.template)
         .parse(args)
         .name = "docco"
-      if commander.args.length
-        document commander
+
+      config = configure commander, defaults, languages
+
+      setup = path.resolve config.setup
+      if fs.existsSync(setup)
+        config = _.extend(config, JSON.parse fs.readFileSync setup) if setup
+
+      config.root = process.cwd()
+      if config.sources.length isnt 0
+        files =[]
+        for globName in config.sources
+          files = _.flatten _.union files, glob.sync path.resolve config.root, globName
+          if files.length is 0
+            files.push(globName) # not a glob.
+
+        config.sources = []
+        for file in files
+          config.sources.push path.relative(config.root, file)
+
+        config.informationOnFiles = getInformationOnFiles config
+
+        document config
       else
         console.log commander.helpInformation()
-
+      return
 
 Public API
 ----------
 
-    Docco = module.exports = {run, document, parse, format, version}
+    module.exports = Docco = {run, document, parse, format, languages, version}
diff --git a/gulpfile.coffee b/gulpfile.coffee
new file mode 100755
index 00000000..7f211d83
--- /dev/null
+++ b/gulpfile.coffee
@@ -0,0 +1,47 @@
+# Gulp stuff.
+gulp = require('gulp')
+clean = require('gulp-clean')
+gutil = require('gulp-util')
+coffee = require('gulp-coffee')
+sourcemaps = require('gulp-sourcemaps')
+touch = require('touch')
+path = require('path')
+tap = require('gulp-tap')
+parallelize = require("concurrent-transform")
+
+threads = 100
+
+coffeeFiles = ['docco.litcoffee', 'src/**/*.litcoffee', 'test/unit-tests/**/*.litcoffee']
+
+javascriptFiles = ['docco.js', 'docco.js.map', 'src/**/*.js', 'src/**/*.js.map', 'test/unit-tests/**/*.js', 'test/unit-tests/**/*.js.map']
+
+gulp.task('touch', () ->
+  gulp.src(coffeeFiles)
+    .pipe(tap((file, t) ->
+      touch(file.path)
+    )
+  )
+)
+
+gulp.task('coffeescripts', () ->
+  gulp.src(coffeeFiles)
+    .pipe(sourcemaps.init())
+    .pipe(parallelize(coffee({bare: true}).on('error', gutil.log), threads))
+    .pipe(parallelize(sourcemaps.write('./'), threads))
+    .pipe(parallelize(gulp.dest((file) -> return file.base), threads))
+)
+
+gulp.task('watch', () ->
+  gulp.watch(coffeeFiles, ['compile-and-test'])
+)
+
+gulp.task('clean', () ->
+  return gulp.src(javascriptFiles, {read: false})
+    .pipe(clean())
+)
+
+gulp.task('build', ['coffeescripts']) # ,'jadescripts','stylusscripts'])
+
+gulp.task('default', ['watch', 'coffeescripts'])
+
+gulp.task('done', (() -> ))
\ No newline at end of file
diff --git a/index.html b/index.html
old mode 100644
new mode 100755
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 00000000..ed7313c9
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,5194 @@
+{
+  "name": "docco",
+  "version": "1.0.0",
+  "lockfileVersion": 1,
+  "requires": true,
+  "dependencies": {
+    "@gulp-sourcemaps/identity-map": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/identity-map/-/identity-map-1.0.2.tgz",
+      "integrity": "sha512-ciiioYMLdo16ShmfHBXJBOFm3xPC4AuwO4xeRpFeHz7WK9PYsWCmigagG2XyzZpubK4a3qNKoUBDhbzHfa50LQ==",
+      "dev": true,
+      "requires": {
+        "acorn": "^5.0.3",
+        "css": "^2.2.1",
+        "normalize-path": "^2.1.1",
+        "source-map": "^0.6.0",
+        "through2": "^2.0.3"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        }
+      }
+    },
+    "@gulp-sourcemaps/map-sources": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz",
+      "integrity": "sha1-iQrnxdjId/bThIYCFazp1+yUW9o=",
+      "dev": true,
+      "requires": {
+        "normalize-path": "^2.0.1",
+        "through2": "^2.0.3"
+      }
+    },
+    "abbrev": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+      "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
+      "dev": true
+    },
+    "acorn": {
+      "version": "5.7.1",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz",
+      "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==",
+      "dev": true
+    },
+    "align-text": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
+      "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
+      "requires": {
+        "kind-of": "^3.0.2",
+        "longest": "^1.0.1",
+        "repeat-string": "^1.5.2"
+      }
+    },
+    "amdefine": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+      "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
+    },
+    "ansi-gray": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz",
+      "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=",
+      "dev": true,
+      "requires": {
+        "ansi-wrap": "0.1.0"
+      }
+    },
+    "ansi-regex": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+      "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+      "dev": true
+    },
+    "ansi-styles": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+      "dev": true
+    },
+    "ansi-wrap": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
+      "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=",
+      "dev": true
+    },
+    "archy": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
+      "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=",
+      "dev": true
+    },
+    "arr-diff": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+      "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+      "dev": true
+    },
+    "arr-flatten": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+      "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+      "dev": true
+    },
+    "arr-union": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+      "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+      "dev": true
+    },
+    "array-differ": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz",
+      "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=",
+      "dev": true
+    },
+    "array-each": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
+      "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=",
+      "dev": true
+    },
+    "array-find-index": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+      "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
+      "dev": true
+    },
+    "array-slice": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
+      "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==",
+      "dev": true
+    },
+    "array-uniq": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+      "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+      "dev": true
+    },
+    "array-unique": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+      "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+      "dev": true
+    },
+    "assertion-error": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
+      "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
+      "dev": true
+    },
+    "assign-symbols": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+      "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+      "dev": true
+    },
+    "async": {
+      "version": "1.5.2",
+      "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+      "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo="
+    },
+    "atob": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz",
+      "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=",
+      "dev": true
+    },
+    "balanced-match": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+    },
+    "base": {
+      "version": "0.11.2",
+      "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+      "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+      "dev": true,
+      "requires": {
+        "cache-base": "^1.0.1",
+        "class-utils": "^0.3.5",
+        "component-emitter": "^1.2.1",
+        "define-property": "^1.0.0",
+        "isobject": "^3.0.1",
+        "mixin-deep": "^1.2.0",
+        "pascalcase": "^0.1.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^1.0.0"
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        },
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+          "dev": true
+        }
+      }
+    },
+    "beeper": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz",
+      "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=",
+      "dev": true
+    },
+    "brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "requires": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "braces": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+      "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+      "dev": true,
+      "requires": {
+        "arr-flatten": "^1.1.0",
+        "array-unique": "^0.3.2",
+        "extend-shallow": "^2.0.1",
+        "fill-range": "^4.0.0",
+        "isobject": "^3.0.1",
+        "repeat-element": "^1.1.2",
+        "snapdragon": "^0.8.1",
+        "snapdragon-node": "^2.0.1",
+        "split-string": "^3.0.2",
+        "to-regex": "^3.0.1"
+      },
+      "dependencies": {
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        }
+      }
+    },
+    "browser-stdout": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz",
+      "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=",
+      "dev": true
+    },
+    "builtin-modules": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+      "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
+      "dev": true
+    },
+    "cache-base": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+      "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+      "dev": true,
+      "requires": {
+        "collection-visit": "^1.0.0",
+        "component-emitter": "^1.2.1",
+        "get-value": "^2.0.6",
+        "has-value": "^1.0.0",
+        "isobject": "^3.0.1",
+        "set-value": "^2.0.0",
+        "to-object-path": "^0.3.0",
+        "union-value": "^1.0.0",
+        "unset-value": "^1.0.0"
+      }
+    },
+    "camelcase": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+      "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
+      "optional": true
+    },
+    "camelcase-keys": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+      "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+      "dev": true,
+      "requires": {
+        "camelcase": "^2.0.0",
+        "map-obj": "^1.0.0"
+      },
+      "dependencies": {
+        "camelcase": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+          "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+          "dev": true
+        }
+      }
+    },
+    "center-align": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
+      "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
+      "optional": true,
+      "requires": {
+        "align-text": "^0.1.3",
+        "lazy-cache": "^1.0.3"
+      }
+    },
+    "chai": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz",
+      "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=",
+      "dev": true,
+      "requires": {
+        "assertion-error": "^1.0.1",
+        "check-error": "^1.0.1",
+        "deep-eql": "^3.0.0",
+        "get-func-name": "^2.0.0",
+        "pathval": "^1.0.0",
+        "type-detect": "^4.0.0"
+      }
+    },
+    "chalk": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+      "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+      "dev": true,
+      "requires": {
+        "ansi-styles": "^2.2.1",
+        "escape-string-regexp": "^1.0.2",
+        "has-ansi": "^2.0.0",
+        "strip-ansi": "^3.0.0",
+        "supports-color": "^2.0.0"
+      }
+    },
+    "check-error": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
+      "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
+      "dev": true
+    },
+    "class-utils": {
+      "version": "0.3.6",
+      "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+      "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+      "dev": true,
+      "requires": {
+        "arr-union": "^3.1.0",
+        "define-property": "^0.2.5",
+        "isobject": "^3.0.0",
+        "static-extend": "^0.1.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        }
+      }
+    },
+    "cliui": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
+      "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
+      "optional": true,
+      "requires": {
+        "center-align": "^0.1.1",
+        "right-align": "^0.1.1",
+        "wordwrap": "0.0.2"
+      },
+      "dependencies": {
+        "wordwrap": {
+          "version": "0.0.2",
+          "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
+          "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
+          "optional": true
+        }
+      }
+    },
+    "clone": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+      "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
+      "dev": true
+    },
+    "clone-stats": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
+      "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
+      "dev": true
+    },
+    "coffeescript": {
+      "version": "1.12.7",
+      "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-1.12.7.tgz",
+      "integrity": "sha512-pLXHFxQMPklVoEekowk8b3erNynC+DVJzChxS/LCBBgR6/8AJkHivkm//zbowcfc7BTCAjryuhx6gPqPRfsFoA==",
+      "dev": true
+    },
+    "collection-visit": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+      "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+      "dev": true,
+      "requires": {
+        "map-visit": "^1.0.0",
+        "object-visit": "^1.0.0"
+      }
+    },
+    "color-support": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
+      "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
+      "dev": true
+    },
+    "commander": {
+      "version": "2.16.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-2.16.0.tgz",
+      "integrity": "sha512-sVXqklSaotK9at437sFlFpyOcJonxe0yST/AG9DkQKUdIE6IqGIMv4SfAQSKaJbSdVEJYItASCrBiVQHq1HQew=="
+    },
+    "component-emitter": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+      "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+      "dev": true
+    },
+    "concat-map": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+    },
+    "concurrent-transform": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/concurrent-transform/-/concurrent-transform-1.0.0.tgz",
+      "integrity": "sha1-eg/eovgJYjlIf9sK3bXtqn9Zb2w=",
+      "dev": true
+    },
+    "convert-source-map": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz",
+      "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=",
+      "dev": true
+    },
+    "copy-descriptor": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+      "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+      "dev": true
+    },
+    "core-util-is": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+      "dev": true
+    },
+    "css": {
+      "version": "2.2.3",
+      "resolved": "https://registry.npmjs.org/css/-/css-2.2.3.tgz",
+      "integrity": "sha512-0W171WccAjQGGTKLhw4m2nnl0zPHUlTO/I8td4XzJgIB8Hg3ZZx71qT4G4eX8OVsSiaAKiUMy73E3nsbPlg2DQ==",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.1",
+        "source-map": "^0.1.38",
+        "source-map-resolve": "^0.5.1",
+        "urix": "^0.1.0"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.1.43",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
+          "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
+          "dev": true,
+          "requires": {
+            "amdefine": ">=0.0.4"
+          }
+        }
+      }
+    },
+    "currently-unhandled": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+      "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+      "dev": true,
+      "requires": {
+        "array-find-index": "^1.0.1"
+      }
+    },
+    "d": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz",
+      "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=",
+      "dev": true,
+      "requires": {
+        "es5-ext": "^0.10.9"
+      }
+    },
+    "dateformat": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz",
+      "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=",
+      "dev": true
+    },
+    "debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "dev": true,
+      "requires": {
+        "ms": "2.0.0"
+      }
+    },
+    "debug-fabulous": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-1.1.0.tgz",
+      "integrity": "sha512-GZqvGIgKNlUnHUPQhepnUZFIMoi3dgZKQBzKDeL2g7oJF9SNAji/AAu36dusFUas0O+pae74lNeoIPHqXWDkLg==",
+      "dev": true,
+      "requires": {
+        "debug": "3.X",
+        "memoizee": "0.4.X",
+        "object-assign": "4.X"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+          "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "object-assign": {
+          "version": "4.1.1",
+          "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+          "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+          "dev": true
+        }
+      }
+    },
+    "decamelize": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+    },
+    "decode-uri-component": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+      "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+      "dev": true
+    },
+    "deep-eql": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
+      "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
+      "dev": true,
+      "requires": {
+        "type-detect": "^4.0.0"
+      }
+    },
+    "defaults": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
+      "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+      "dev": true,
+      "requires": {
+        "clone": "^1.0.2"
+      }
+    },
+    "define-property": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+      "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+      "dev": true,
+      "requires": {
+        "is-descriptor": "^1.0.2",
+        "isobject": "^3.0.1"
+      },
+      "dependencies": {
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        },
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+          "dev": true
+        }
+      }
+    },
+    "deprecated": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz",
+      "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=",
+      "dev": true
+    },
+    "detect-file": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
+      "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
+      "dev": true
+    },
+    "detect-newline": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz",
+      "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=",
+      "dev": true
+    },
+    "diff": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz",
+      "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=",
+      "dev": true
+    },
+    "duplexer2": {
+      "version": "0.0.2",
+      "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
+      "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=",
+      "dev": true,
+      "requires": {
+        "readable-stream": "~1.1.9"
+      }
+    },
+    "end-of-stream": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz",
+      "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=",
+      "dev": true,
+      "requires": {
+        "once": "~1.3.0"
+      },
+      "dependencies": {
+        "once": {
+          "version": "1.3.3",
+          "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz",
+          "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=",
+          "dev": true,
+          "requires": {
+            "wrappy": "1"
+          }
+        }
+      }
+    },
+    "error-ex": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+      "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+      "dev": true,
+      "requires": {
+        "is-arrayish": "^0.2.1"
+      }
+    },
+    "es5-ext": {
+      "version": "0.10.45",
+      "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.45.tgz",
+      "integrity": "sha512-FkfM6Vxxfmztilbxxz5UKSD4ICMf5tSpRFtDNtkAhOxZ0EKtX6qwmXNyH/sFyIbX2P/nU5AMiA9jilWsUGJzCQ==",
+      "dev": true,
+      "requires": {
+        "es6-iterator": "~2.0.3",
+        "es6-symbol": "~3.1.1",
+        "next-tick": "1"
+      }
+    },
+    "es6-iterator": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
+      "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
+      "dev": true,
+      "requires": {
+        "d": "1",
+        "es5-ext": "^0.10.35",
+        "es6-symbol": "^3.1.1"
+      }
+    },
+    "es6-symbol": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz",
+      "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
+      "dev": true,
+      "requires": {
+        "d": "1",
+        "es5-ext": "~0.10.14"
+      }
+    },
+    "es6-weak-map": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz",
+      "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=",
+      "dev": true,
+      "requires": {
+        "d": "1",
+        "es5-ext": "^0.10.14",
+        "es6-iterator": "^2.0.1",
+        "es6-symbol": "^3.1.1"
+      }
+    },
+    "escape-string-regexp": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+      "dev": true
+    },
+    "event-emitter": {
+      "version": "0.3.5",
+      "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
+      "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=",
+      "dev": true,
+      "requires": {
+        "d": "1",
+        "es5-ext": "~0.10.14"
+      }
+    },
+    "expand-brackets": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+      "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+      "dev": true,
+      "requires": {
+        "debug": "^2.3.3",
+        "define-property": "^0.2.5",
+        "extend-shallow": "^2.0.1",
+        "posix-character-classes": "^0.1.0",
+        "regex-not": "^1.0.0",
+        "snapdragon": "^0.8.1",
+        "to-regex": "^3.0.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        },
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        }
+      }
+    },
+    "expand-tilde": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+      "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+      "dev": true,
+      "requires": {
+        "homedir-polyfill": "^1.0.1"
+      }
+    },
+    "extend": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
+      "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=",
+      "dev": true
+    },
+    "extend-shallow": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+      "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+      "dev": true,
+      "requires": {
+        "assign-symbols": "^1.0.0",
+        "is-extendable": "^1.0.1"
+      },
+      "dependencies": {
+        "is-extendable": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+          "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+          "dev": true,
+          "requires": {
+            "is-plain-object": "^2.0.4"
+          }
+        }
+      }
+    },
+    "extglob": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+      "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+      "dev": true,
+      "requires": {
+        "array-unique": "^0.3.2",
+        "define-property": "^1.0.0",
+        "expand-brackets": "^2.1.4",
+        "extend-shallow": "^2.0.1",
+        "fragment-cache": "^0.2.1",
+        "regex-not": "^1.0.0",
+        "snapdragon": "^0.8.1",
+        "to-regex": "^3.0.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^1.0.0"
+          }
+        },
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        },
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+          "dev": true
+        }
+      }
+    },
+    "fancy-log": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz",
+      "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=",
+      "dev": true,
+      "requires": {
+        "ansi-gray": "^0.1.1",
+        "color-support": "^1.1.3",
+        "time-stamp": "^1.0.0"
+      }
+    },
+    "fill-range": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+      "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+      "dev": true,
+      "requires": {
+        "extend-shallow": "^2.0.1",
+        "is-number": "^3.0.0",
+        "repeat-string": "^1.6.1",
+        "to-regex-range": "^2.1.0"
+      },
+      "dependencies": {
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        }
+      }
+    },
+    "find-index": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz",
+      "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=",
+      "dev": true
+    },
+    "find-up": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+      "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+      "dev": true,
+      "requires": {
+        "path-exists": "^2.0.0",
+        "pinkie-promise": "^2.0.0"
+      }
+    },
+    "findup-sync": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
+      "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=",
+      "dev": true,
+      "requires": {
+        "detect-file": "^1.0.0",
+        "is-glob": "^3.1.0",
+        "micromatch": "^3.0.4",
+        "resolve-dir": "^1.0.1"
+      }
+    },
+    "fined": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/fined/-/fined-1.1.0.tgz",
+      "integrity": "sha1-s33IRLdqL15wgeiE98CuNE8VNHY=",
+      "dev": true,
+      "requires": {
+        "expand-tilde": "^2.0.2",
+        "is-plain-object": "^2.0.3",
+        "object.defaults": "^1.1.0",
+        "object.pick": "^1.2.0",
+        "parse-filepath": "^1.0.1"
+      }
+    },
+    "first-chunk-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz",
+      "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=",
+      "dev": true
+    },
+    "flagged-respawn": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.0.tgz",
+      "integrity": "sha1-Tnmumy6zi/hrO7Vr8+ClaqX8q9c=",
+      "dev": true
+    },
+    "for-in": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+      "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+      "dev": true
+    },
+    "for-own": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
+      "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
+      "dev": true,
+      "requires": {
+        "for-in": "^1.0.1"
+      }
+    },
+    "fragment-cache": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+      "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+      "dev": true,
+      "requires": {
+        "map-cache": "^0.2.2"
+      }
+    },
+    "fs-extra": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz",
+      "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=",
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "jsonfile": "^3.0.0",
+        "universalify": "^0.1.0"
+      }
+    },
+    "fs.realpath": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+    },
+    "gaze": {
+      "version": "0.5.2",
+      "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz",
+      "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=",
+      "dev": true,
+      "requires": {
+        "globule": "~0.1.0"
+      }
+    },
+    "get-func-name": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
+      "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
+      "dev": true
+    },
+    "get-stdin": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+      "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+      "dev": true
+    },
+    "get-value": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+      "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+      "dev": true
+    },
+    "glob": {
+      "version": "7.1.2",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+      "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+      "requires": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.0.4",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      }
+    },
+    "glob-stream": {
+      "version": "3.1.18",
+      "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz",
+      "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=",
+      "dev": true,
+      "requires": {
+        "glob": "^4.3.1",
+        "glob2base": "^0.0.12",
+        "minimatch": "^2.0.1",
+        "ordered-read-streams": "^0.1.0",
+        "through2": "^0.6.1",
+        "unique-stream": "^1.0.0"
+      },
+      "dependencies": {
+        "glob": {
+          "version": "4.5.3",
+          "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz",
+          "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=",
+          "dev": true,
+          "requires": {
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^2.0.1",
+            "once": "^1.3.0"
+          }
+        },
+        "minimatch": {
+          "version": "2.0.10",
+          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz",
+          "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=",
+          "dev": true,
+          "requires": {
+            "brace-expansion": "^1.0.0"
+          }
+        },
+        "readable-stream": {
+          "version": "1.0.34",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+          "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+          "dev": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.1",
+            "isarray": "0.0.1",
+            "string_decoder": "~0.10.x"
+          }
+        },
+        "through2": {
+          "version": "0.6.5",
+          "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+          "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+          "dev": true,
+          "requires": {
+            "readable-stream": ">=1.0.33-1 <1.1.0-0",
+            "xtend": ">=4.0.0 <4.1.0-0"
+          }
+        }
+      }
+    },
+    "glob-watcher": {
+      "version": "0.0.6",
+      "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz",
+      "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=",
+      "dev": true,
+      "requires": {
+        "gaze": "^0.5.1"
+      }
+    },
+    "glob2base": {
+      "version": "0.0.12",
+      "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz",
+      "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=",
+      "dev": true,
+      "requires": {
+        "find-index": "^0.1.1"
+      }
+    },
+    "global-modules": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
+      "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
+      "dev": true,
+      "requires": {
+        "global-prefix": "^1.0.1",
+        "is-windows": "^1.0.1",
+        "resolve-dir": "^1.0.0"
+      }
+    },
+    "global-prefix": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
+      "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
+      "dev": true,
+      "requires": {
+        "expand-tilde": "^2.0.2",
+        "homedir-polyfill": "^1.0.1",
+        "ini": "^1.3.4",
+        "is-windows": "^1.0.1",
+        "which": "^1.2.14"
+      }
+    },
+    "globule": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz",
+      "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=",
+      "dev": true,
+      "requires": {
+        "glob": "~3.1.21",
+        "lodash": "~1.0.1",
+        "minimatch": "~0.2.11"
+      },
+      "dependencies": {
+        "glob": {
+          "version": "3.1.21",
+          "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz",
+          "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=",
+          "dev": true,
+          "requires": {
+            "graceful-fs": "~1.2.0",
+            "inherits": "1",
+            "minimatch": "~0.2.11"
+          }
+        },
+        "graceful-fs": {
+          "version": "1.2.3",
+          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz",
+          "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=",
+          "dev": true
+        },
+        "inherits": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz",
+          "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=",
+          "dev": true
+        },
+        "minimatch": {
+          "version": "0.2.14",
+          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
+          "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=",
+          "dev": true,
+          "requires": {
+            "lru-cache": "2",
+            "sigmund": "~1.0.0"
+          }
+        }
+      }
+    },
+    "glogg": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.1.tgz",
+      "integrity": "sha512-ynYqXLoluBKf9XGR1gA59yEJisIL7YHEH4xr3ZziHB5/yl4qWfaK8Js9jGe6gBGCSCKVqiyO30WnRZADvemUNw==",
+      "dev": true,
+      "requires": {
+        "sparkles": "^1.0.0"
+      }
+    },
+    "graceful-fs": {
+      "version": "4.1.11",
+      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+      "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="
+    },
+    "graceful-readlink": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
+      "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
+      "dev": true
+    },
+    "growl": {
+      "version": "1.9.2",
+      "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz",
+      "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=",
+      "dev": true
+    },
+    "gulp": {
+      "version": "3.9.1",
+      "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz",
+      "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=",
+      "dev": true,
+      "requires": {
+        "archy": "^1.0.0",
+        "chalk": "^1.0.0",
+        "deprecated": "^0.0.1",
+        "gulp-util": "^3.0.0",
+        "interpret": "^1.0.0",
+        "liftoff": "^2.1.0",
+        "minimist": "^1.1.0",
+        "orchestrator": "^0.3.0",
+        "pretty-hrtime": "^1.0.0",
+        "semver": "^4.1.0",
+        "tildify": "^1.0.0",
+        "v8flags": "^2.0.2",
+        "vinyl-fs": "^0.3.0"
+      },
+      "dependencies": {
+        "minimist": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+          "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+          "dev": true
+        }
+      }
+    },
+    "gulp-clean": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/gulp-clean/-/gulp-clean-0.3.2.tgz",
+      "integrity": "sha1-o0fUc6zqQBgvk1WHpFGUFnGSgQI=",
+      "dev": true,
+      "requires": {
+        "gulp-util": "^2.2.14",
+        "rimraf": "^2.2.8",
+        "through2": "^0.4.2"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "0.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz",
+          "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=",
+          "dev": true
+        },
+        "ansi-styles": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz",
+          "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=",
+          "dev": true
+        },
+        "chalk": {
+          "version": "0.5.1",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz",
+          "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^1.1.0",
+            "escape-string-regexp": "^1.0.0",
+            "has-ansi": "^0.1.0",
+            "strip-ansi": "^0.3.0",
+            "supports-color": "^0.2.0"
+          }
+        },
+        "dateformat": {
+          "version": "1.0.12",
+          "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz",
+          "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=",
+          "dev": true,
+          "requires": {
+            "get-stdin": "^4.0.1",
+            "meow": "^3.3.0"
+          }
+        },
+        "gulp-util": {
+          "version": "2.2.20",
+          "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-2.2.20.tgz",
+          "integrity": "sha1-1xRuVyiRC9jwR6awseVJvCLb1kw=",
+          "dev": true,
+          "requires": {
+            "chalk": "^0.5.0",
+            "dateformat": "^1.0.7-1.2.3",
+            "lodash._reinterpolate": "^2.4.1",
+            "lodash.template": "^2.4.1",
+            "minimist": "^0.2.0",
+            "multipipe": "^0.1.0",
+            "through2": "^0.5.0",
+            "vinyl": "^0.2.1"
+          },
+          "dependencies": {
+            "through2": {
+              "version": "0.5.1",
+              "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz",
+              "integrity": "sha1-390BLrnHAOIyP9M084rGIqs3Lac=",
+              "dev": true,
+              "requires": {
+                "readable-stream": "~1.0.17",
+                "xtend": "~3.0.0"
+              }
+            }
+          }
+        },
+        "has-ansi": {
+          "version": "0.1.0",
+          "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz",
+          "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^0.2.0"
+          }
+        },
+        "lodash._reinterpolate": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-2.4.1.tgz",
+          "integrity": "sha1-TxInqlqHEfxjL1sHofRgequLMiI=",
+          "dev": true
+        },
+        "lodash.escape": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-2.4.1.tgz",
+          "integrity": "sha1-LOEsXghNsKV92l5dHu659dF1o7Q=",
+          "dev": true,
+          "requires": {
+            "lodash._escapehtmlchar": "~2.4.1",
+            "lodash._reunescapedhtml": "~2.4.1",
+            "lodash.keys": "~2.4.1"
+          }
+        },
+        "lodash.keys": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz",
+          "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=",
+          "dev": true,
+          "requires": {
+            "lodash._isnative": "~2.4.1",
+            "lodash._shimkeys": "~2.4.1",
+            "lodash.isobject": "~2.4.1"
+          }
+        },
+        "lodash.template": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-2.4.1.tgz",
+          "integrity": "sha1-nmEQB+32KRKal0qzxIuBez4c8g0=",
+          "dev": true,
+          "requires": {
+            "lodash._escapestringchar": "~2.4.1",
+            "lodash._reinterpolate": "~2.4.1",
+            "lodash.defaults": "~2.4.1",
+            "lodash.escape": "~2.4.1",
+            "lodash.keys": "~2.4.1",
+            "lodash.templatesettings": "~2.4.1",
+            "lodash.values": "~2.4.1"
+          }
+        },
+        "lodash.templatesettings": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-2.4.1.tgz",
+          "integrity": "sha1-6nbHXRHrhtTb6JqDiTu4YZKaxpk=",
+          "dev": true,
+          "requires": {
+            "lodash._reinterpolate": "~2.4.1",
+            "lodash.escape": "~2.4.1"
+          }
+        },
+        "minimist": {
+          "version": "0.2.0",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.2.0.tgz",
+          "integrity": "sha1-Tf/lJdriuGTGbC4jxicdev3s784=",
+          "dev": true
+        },
+        "readable-stream": {
+          "version": "1.0.34",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+          "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+          "dev": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.1",
+            "isarray": "0.0.1",
+            "string_decoder": "~0.10.x"
+          }
+        },
+        "strip-ansi": {
+          "version": "0.3.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz",
+          "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^0.2.1"
+          }
+        },
+        "supports-color": {
+          "version": "0.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz",
+          "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=",
+          "dev": true
+        },
+        "through2": {
+          "version": "0.4.2",
+          "resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz",
+          "integrity": "sha1-2/WGYDEVHsg1K7bE22SiKSqEC5s=",
+          "dev": true,
+          "requires": {
+            "readable-stream": "~1.0.17",
+            "xtend": "~2.1.1"
+          },
+          "dependencies": {
+            "xtend": {
+              "version": "2.1.2",
+              "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
+              "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=",
+              "dev": true,
+              "requires": {
+                "object-keys": "~0.4.0"
+              }
+            }
+          }
+        },
+        "vinyl": {
+          "version": "0.2.3",
+          "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.2.3.tgz",
+          "integrity": "sha1-vKk4IJWC7FpJrVOKAPofEl5RMlI=",
+          "dev": true,
+          "requires": {
+            "clone-stats": "~0.0.1"
+          }
+        },
+        "xtend": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz",
+          "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=",
+          "dev": true
+        }
+      }
+    },
+    "gulp-coffee": {
+      "version": "2.3.5",
+      "resolved": "https://registry.npmjs.org/gulp-coffee/-/gulp-coffee-2.3.5.tgz",
+      "integrity": "sha512-PbgPGZVyYFnBTYtfYkVN6jcK8Qsuh3BxycPzvu8y5lZroCw3/x1m25KeyEDX110KsVLDmJxoULjscR21VEN4wA==",
+      "dev": true,
+      "requires": {
+        "coffeescript": "^1.10.0",
+        "gulp-util": "^3.0.2",
+        "merge": "^1.2.0",
+        "through2": "^2.0.1",
+        "vinyl-sourcemaps-apply": "^0.2.1"
+      }
+    },
+    "gulp-sourcemaps": {
+      "version": "2.6.4",
+      "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-2.6.4.tgz",
+      "integrity": "sha1-y7IAhFCxvM5s0jv5gze+dRv24wo=",
+      "dev": true,
+      "requires": {
+        "@gulp-sourcemaps/identity-map": "1.X",
+        "@gulp-sourcemaps/map-sources": "1.X",
+        "acorn": "5.X",
+        "convert-source-map": "1.X",
+        "css": "2.X",
+        "debug-fabulous": "1.X",
+        "detect-newline": "2.X",
+        "graceful-fs": "4.X",
+        "source-map": "~0.6.0",
+        "strip-bom-string": "1.X",
+        "through2": "2.X"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        }
+      }
+    },
+    "gulp-tap": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/gulp-tap/-/gulp-tap-1.0.1.tgz",
+      "integrity": "sha1-5nESThJZtM6iGe0cqXt/WFwzRpA=",
+      "dev": true,
+      "requires": {
+        "through2": "^2.0.3"
+      }
+    },
+    "gulp-util": {
+      "version": "3.0.8",
+      "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz",
+      "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=",
+      "dev": true,
+      "requires": {
+        "array-differ": "^1.0.0",
+        "array-uniq": "^1.0.2",
+        "beeper": "^1.0.0",
+        "chalk": "^1.0.0",
+        "dateformat": "^2.0.0",
+        "fancy-log": "^1.1.0",
+        "gulplog": "^1.0.0",
+        "has-gulplog": "^0.1.0",
+        "lodash._reescape": "^3.0.0",
+        "lodash._reevaluate": "^3.0.0",
+        "lodash._reinterpolate": "^3.0.0",
+        "lodash.template": "^3.0.0",
+        "minimist": "^1.1.0",
+        "multipipe": "^0.1.2",
+        "object-assign": "^3.0.0",
+        "replace-ext": "0.0.1",
+        "through2": "^2.0.0",
+        "vinyl": "^0.5.0"
+      },
+      "dependencies": {
+        "minimist": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+          "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+          "dev": true
+        }
+      }
+    },
+    "gulplog": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz",
+      "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=",
+      "dev": true,
+      "requires": {
+        "glogg": "^1.0.0"
+      }
+    },
+    "handlebars": {
+      "version": "4.0.11",
+      "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz",
+      "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=",
+      "requires": {
+        "async": "^1.4.0",
+        "optimist": "^0.6.1",
+        "source-map": "^0.4.4",
+        "uglify-js": "^2.6"
+      }
+    },
+    "has-ansi": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+      "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+      "dev": true,
+      "requires": {
+        "ansi-regex": "^2.0.0"
+      }
+    },
+    "has-flag": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+      "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+      "dev": true
+    },
+    "has-gulplog": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz",
+      "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=",
+      "dev": true,
+      "requires": {
+        "sparkles": "^1.0.0"
+      }
+    },
+    "has-value": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+      "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+      "dev": true,
+      "requires": {
+        "get-value": "^2.0.6",
+        "has-values": "^1.0.0",
+        "isobject": "^3.0.0"
+      }
+    },
+    "has-values": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+      "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+      "dev": true,
+      "requires": {
+        "is-number": "^3.0.0",
+        "kind-of": "^4.0.0"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+          "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "he": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
+      "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=",
+      "dev": true
+    },
+    "highlight.js": {
+      "version": "9.12.0",
+      "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.12.0.tgz",
+      "integrity": "sha1-5tnb5Xy+/mB1HwKvM2GVhwyQwB4="
+    },
+    "homedir-polyfill": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz",
+      "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=",
+      "dev": true,
+      "requires": {
+        "parse-passwd": "^1.0.0"
+      }
+    },
+    "hosted-git-info": {
+      "version": "2.7.1",
+      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
+      "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==",
+      "dev": true
+    },
+    "indent-string": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+      "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+      "dev": true,
+      "requires": {
+        "repeating": "^2.0.0"
+      }
+    },
+    "inflight": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+      "requires": {
+        "once": "^1.3.0",
+        "wrappy": "1"
+      }
+    },
+    "inherits": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+      "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+    },
+    "ini": {
+      "version": "1.3.5",
+      "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+      "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+      "dev": true
+    },
+    "interpret": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz",
+      "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=",
+      "dev": true
+    },
+    "is-absolute": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
+      "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
+      "dev": true,
+      "requires": {
+        "is-relative": "^1.0.0",
+        "is-windows": "^1.0.1"
+      }
+    },
+    "is-accessor-descriptor": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+      "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.0.2"
+      }
+    },
+    "is-arrayish": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+      "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+      "dev": true
+    },
+    "is-buffer": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+    },
+    "is-builtin-module": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
+      "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
+      "dev": true,
+      "requires": {
+        "builtin-modules": "^1.0.0"
+      }
+    },
+    "is-data-descriptor": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+      "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.0.2"
+      }
+    },
+    "is-descriptor": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+      "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+      "dev": true,
+      "requires": {
+        "is-accessor-descriptor": "^0.1.6",
+        "is-data-descriptor": "^0.1.4",
+        "kind-of": "^5.0.0"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+          "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+          "dev": true
+        }
+      }
+    },
+    "is-extendable": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+      "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+      "dev": true
+    },
+    "is-extglob": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+      "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+      "dev": true
+    },
+    "is-finite": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+      "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+      "dev": true,
+      "requires": {
+        "number-is-nan": "^1.0.0"
+      }
+    },
+    "is-glob": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+      "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+      "dev": true,
+      "requires": {
+        "is-extglob": "^2.1.0"
+      }
+    },
+    "is-number": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+      "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.0.2"
+      }
+    },
+    "is-plain-object": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+      "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+      "dev": true,
+      "requires": {
+        "isobject": "^3.0.1"
+      }
+    },
+    "is-promise": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+      "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
+      "dev": true
+    },
+    "is-relative": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
+      "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
+      "dev": true,
+      "requires": {
+        "is-unc-path": "^1.0.0"
+      }
+    },
+    "is-unc-path": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
+      "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
+      "dev": true,
+      "requires": {
+        "unc-path-regex": "^0.1.2"
+      }
+    },
+    "is-utf8": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+      "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+      "dev": true
+    },
+    "is-windows": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+      "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+      "dev": true
+    },
+    "isarray": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+      "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+      "dev": true
+    },
+    "isexe": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+      "dev": true
+    },
+    "isobject": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+      "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+      "dev": true
+    },
+    "jenkins-mocha": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/jenkins-mocha/-/jenkins-mocha-4.1.2.tgz",
+      "integrity": "sha1-3b3rQEpnt8Vuwz9i2/RjD6GxhUQ=",
+      "dev": true,
+      "requires": {
+        "mocha": "^3.0.0",
+        "npm-which": "^3.0.0",
+        "nyc": "^10.0.0",
+        "shell-escape": "^0.2.0",
+        "shelljs": "^0.7.5",
+        "spec-xunit-file": "0.0.1-3"
+      }
+    },
+    "json3": {
+      "version": "3.3.2",
+      "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz",
+      "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=",
+      "dev": true
+    },
+    "jsonfile": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz",
+      "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=",
+      "requires": {
+        "graceful-fs": "^4.1.6"
+      }
+    },
+    "kind-of": {
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+      "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+      "requires": {
+        "is-buffer": "^1.1.5"
+      }
+    },
+    "lazy-cache": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
+      "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
+      "optional": true
+    },
+    "liftoff": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz",
+      "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=",
+      "dev": true,
+      "requires": {
+        "extend": "^3.0.0",
+        "findup-sync": "^2.0.0",
+        "fined": "^1.0.1",
+        "flagged-respawn": "^1.0.0",
+        "is-plain-object": "^2.0.4",
+        "object.map": "^1.0.0",
+        "rechoir": "^0.6.2",
+        "resolve": "^1.1.7"
+      }
+    },
+    "load-json-file": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+      "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "parse-json": "^2.2.0",
+        "pify": "^2.0.0",
+        "pinkie-promise": "^2.0.0",
+        "strip-bom": "^2.0.0"
+      },
+      "dependencies": {
+        "strip-bom": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+          "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+          "dev": true,
+          "requires": {
+            "is-utf8": "^0.2.0"
+          }
+        }
+      }
+    },
+    "lodash": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz",
+      "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=",
+      "dev": true
+    },
+    "lodash._baseassign": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz",
+      "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=",
+      "dev": true,
+      "requires": {
+        "lodash._basecopy": "^3.0.0",
+        "lodash.keys": "^3.0.0"
+      }
+    },
+    "lodash._basecopy": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
+      "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=",
+      "dev": true
+    },
+    "lodash._basecreate": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz",
+      "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=",
+      "dev": true
+    },
+    "lodash._basetostring": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz",
+      "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=",
+      "dev": true
+    },
+    "lodash._basevalues": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz",
+      "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=",
+      "dev": true
+    },
+    "lodash._escapehtmlchar": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/lodash._escapehtmlchar/-/lodash._escapehtmlchar-2.4.1.tgz",
+      "integrity": "sha1-32fDu2t+jh6DGrSL+geVuSr+iZ0=",
+      "dev": true,
+      "requires": {
+        "lodash._htmlescapes": "~2.4.1"
+      }
+    },
+    "lodash._escapestringchar": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/lodash._escapestringchar/-/lodash._escapestringchar-2.4.1.tgz",
+      "integrity": "sha1-7P4iYYoq3lC/7qQ5N+Ud9m8O23I=",
+      "dev": true
+    },
+    "lodash._getnative": {
+      "version": "3.9.1",
+      "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
+      "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=",
+      "dev": true
+    },
+    "lodash._htmlescapes": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/lodash._htmlescapes/-/lodash._htmlescapes-2.4.1.tgz",
+      "integrity": "sha1-MtFL8IRLbeb4tioFG09nwii2JMs=",
+      "dev": true
+    },
+    "lodash._isiterateecall": {
+      "version": "3.0.9",
+      "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
+      "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=",
+      "dev": true
+    },
+    "lodash._isnative": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/lodash._isnative/-/lodash._isnative-2.4.1.tgz",
+      "integrity": "sha1-PqZAS3hKe+g2x7V1gOHN95sUgyw=",
+      "dev": true
+    },
+    "lodash._objecttypes": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz",
+      "integrity": "sha1-fAt/admKH3ZSn4kLDNsbTf7BHBE=",
+      "dev": true
+    },
+    "lodash._reescape": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz",
+      "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=",
+      "dev": true
+    },
+    "lodash._reevaluate": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz",
+      "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=",
+      "dev": true
+    },
+    "lodash._reinterpolate": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
+      "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
+      "dev": true
+    },
+    "lodash._reunescapedhtml": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/lodash._reunescapedhtml/-/lodash._reunescapedhtml-2.4.1.tgz",
+      "integrity": "sha1-dHxPxAED6zu4oJduVx96JlnpO6c=",
+      "dev": true,
+      "requires": {
+        "lodash._htmlescapes": "~2.4.1",
+        "lodash.keys": "~2.4.1"
+      },
+      "dependencies": {
+        "lodash.keys": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz",
+          "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=",
+          "dev": true,
+          "requires": {
+            "lodash._isnative": "~2.4.1",
+            "lodash._shimkeys": "~2.4.1",
+            "lodash.isobject": "~2.4.1"
+          }
+        }
+      }
+    },
+    "lodash._root": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz",
+      "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=",
+      "dev": true
+    },
+    "lodash._shimkeys": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz",
+      "integrity": "sha1-bpzJZm/wgfC1psl4uD4kLmlJ0gM=",
+      "dev": true,
+      "requires": {
+        "lodash._objecttypes": "~2.4.1"
+      }
+    },
+    "lodash.create": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz",
+      "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=",
+      "dev": true,
+      "requires": {
+        "lodash._baseassign": "^3.0.0",
+        "lodash._basecreate": "^3.0.0",
+        "lodash._isiterateecall": "^3.0.0"
+      }
+    },
+    "lodash.defaults": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-2.4.1.tgz",
+      "integrity": "sha1-p+iIXwXmiFEUS24SqPNngCa8TFQ=",
+      "dev": true,
+      "requires": {
+        "lodash._objecttypes": "~2.4.1",
+        "lodash.keys": "~2.4.1"
+      },
+      "dependencies": {
+        "lodash.keys": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz",
+          "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=",
+          "dev": true,
+          "requires": {
+            "lodash._isnative": "~2.4.1",
+            "lodash._shimkeys": "~2.4.1",
+            "lodash.isobject": "~2.4.1"
+          }
+        }
+      }
+    },
+    "lodash.escape": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz",
+      "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=",
+      "dev": true,
+      "requires": {
+        "lodash._root": "^3.0.0"
+      }
+    },
+    "lodash.isarguments": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
+      "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=",
+      "dev": true
+    },
+    "lodash.isarray": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
+      "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
+      "dev": true
+    },
+    "lodash.isobject": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz",
+      "integrity": "sha1-Wi5H/mmVPx7mMafrof5k0tBlWPU=",
+      "dev": true,
+      "requires": {
+        "lodash._objecttypes": "~2.4.1"
+      }
+    },
+    "lodash.keys": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
+      "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
+      "dev": true,
+      "requires": {
+        "lodash._getnative": "^3.0.0",
+        "lodash.isarguments": "^3.0.0",
+        "lodash.isarray": "^3.0.0"
+      }
+    },
+    "lodash.restparam": {
+      "version": "3.6.1",
+      "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz",
+      "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=",
+      "dev": true
+    },
+    "lodash.template": {
+      "version": "3.6.2",
+      "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz",
+      "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=",
+      "dev": true,
+      "requires": {
+        "lodash._basecopy": "^3.0.0",
+        "lodash._basetostring": "^3.0.0",
+        "lodash._basevalues": "^3.0.0",
+        "lodash._isiterateecall": "^3.0.0",
+        "lodash._reinterpolate": "^3.0.0",
+        "lodash.escape": "^3.0.0",
+        "lodash.keys": "^3.0.0",
+        "lodash.restparam": "^3.0.0",
+        "lodash.templatesettings": "^3.0.0"
+      }
+    },
+    "lodash.templatesettings": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz",
+      "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=",
+      "dev": true,
+      "requires": {
+        "lodash._reinterpolate": "^3.0.0",
+        "lodash.escape": "^3.0.0"
+      }
+    },
+    "lodash.values": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/lodash.values/-/lodash.values-2.4.1.tgz",
+      "integrity": "sha1-q/UUQ2s8twUAFieXjLzzCxKA7qQ=",
+      "dev": true,
+      "requires": {
+        "lodash.keys": "~2.4.1"
+      },
+      "dependencies": {
+        "lodash.keys": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz",
+          "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=",
+          "dev": true,
+          "requires": {
+            "lodash._isnative": "~2.4.1",
+            "lodash._shimkeys": "~2.4.1",
+            "lodash.isobject": "~2.4.1"
+          }
+        }
+      }
+    },
+    "longest": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
+      "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc="
+    },
+    "loud-rejection": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
+      "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+      "dev": true,
+      "requires": {
+        "currently-unhandled": "^0.4.1",
+        "signal-exit": "^3.0.0"
+      }
+    },
+    "lru-cache": {
+      "version": "2.7.3",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
+      "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=",
+      "dev": true
+    },
+    "lru-queue": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz",
+      "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=",
+      "dev": true,
+      "requires": {
+        "es5-ext": "~0.10.2"
+      }
+    },
+    "make-iterator": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
+      "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==",
+      "dev": true,
+      "requires": {
+        "kind-of": "^6.0.2"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+          "dev": true
+        }
+      }
+    },
+    "map-cache": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+      "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+      "dev": true
+    },
+    "map-obj": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+      "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+      "dev": true
+    },
+    "map-visit": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+      "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+      "dev": true,
+      "requires": {
+        "object-visit": "^1.0.0"
+      }
+    },
+    "marked": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/marked/-/marked-0.4.0.tgz",
+      "integrity": "sha512-tMsdNBgOsrUophCAFQl0XPe6Zqk/uy9gnue+jIIKhykO51hxyu6uNx7zBPy0+y/WKYVZZMspV9YeXLNdKk+iYw=="
+    },
+    "memoizee": {
+      "version": "0.4.12",
+      "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.12.tgz",
+      "integrity": "sha512-sprBu6nwxBWBvBOh5v2jcsGqiGLlL2xr2dLub3vR8dnE8YB17omwtm/0NSHl8jjNbcsJd5GMWJAnTSVe/O0Wfg==",
+      "dev": true,
+      "requires": {
+        "d": "1",
+        "es5-ext": "^0.10.30",
+        "es6-weak-map": "^2.0.2",
+        "event-emitter": "^0.3.5",
+        "is-promise": "^2.1",
+        "lru-queue": "0.1",
+        "next-tick": "1",
+        "timers-ext": "^0.1.2"
+      }
+    },
+    "meow": {
+      "version": "3.7.0",
+      "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+      "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+      "dev": true,
+      "requires": {
+        "camelcase-keys": "^2.0.0",
+        "decamelize": "^1.1.2",
+        "loud-rejection": "^1.0.0",
+        "map-obj": "^1.0.1",
+        "minimist": "^1.1.3",
+        "normalize-package-data": "^2.3.4",
+        "object-assign": "^4.0.1",
+        "read-pkg-up": "^1.0.1",
+        "redent": "^1.0.0",
+        "trim-newlines": "^1.0.0"
+      },
+      "dependencies": {
+        "minimist": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+          "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+          "dev": true
+        },
+        "object-assign": {
+          "version": "4.1.1",
+          "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+          "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+          "dev": true
+        }
+      }
+    },
+    "merge": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.0.tgz",
+      "integrity": "sha1-dTHjnUlJwoGma4xabgJl6LBYlNo=",
+      "dev": true
+    },
+    "micromatch": {
+      "version": "3.1.10",
+      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+      "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+      "dev": true,
+      "requires": {
+        "arr-diff": "^4.0.0",
+        "array-unique": "^0.3.2",
+        "braces": "^2.3.1",
+        "define-property": "^2.0.2",
+        "extend-shallow": "^3.0.2",
+        "extglob": "^2.0.4",
+        "fragment-cache": "^0.2.1",
+        "kind-of": "^6.0.2",
+        "nanomatch": "^1.2.9",
+        "object.pick": "^1.3.0",
+        "regex-not": "^1.0.0",
+        "snapdragon": "^0.8.1",
+        "to-regex": "^3.0.2"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+          "dev": true
+        }
+      }
+    },
+    "minimatch": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+      "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+      "requires": {
+        "brace-expansion": "^1.1.7"
+      }
+    },
+    "minimist": {
+      "version": "0.0.10",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
+      "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8="
+    },
+    "mixin-deep": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+      "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+      "dev": true,
+      "requires": {
+        "for-in": "^1.0.2",
+        "is-extendable": "^1.0.1"
+      },
+      "dependencies": {
+        "is-extendable": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+          "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+          "dev": true,
+          "requires": {
+            "is-plain-object": "^2.0.4"
+          }
+        }
+      }
+    },
+    "mkdirp": {
+      "version": "0.5.1",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+      "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+      "dev": true,
+      "requires": {
+        "minimist": "0.0.8"
+      },
+      "dependencies": {
+        "minimist": {
+          "version": "0.0.8",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+          "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+          "dev": true
+        }
+      }
+    },
+    "mocha": {
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.3.tgz",
+      "integrity": "sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg==",
+      "dev": true,
+      "requires": {
+        "browser-stdout": "1.3.0",
+        "commander": "2.9.0",
+        "debug": "2.6.8",
+        "diff": "3.2.0",
+        "escape-string-regexp": "1.0.5",
+        "glob": "7.1.1",
+        "growl": "1.9.2",
+        "he": "1.1.1",
+        "json3": "3.3.2",
+        "lodash.create": "3.1.1",
+        "mkdirp": "0.5.1",
+        "supports-color": "3.1.2"
+      },
+      "dependencies": {
+        "commander": {
+          "version": "2.9.0",
+          "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
+          "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
+          "dev": true,
+          "requires": {
+            "graceful-readlink": ">= 1.0.0"
+          }
+        },
+        "debug": {
+          "version": "2.6.8",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
+          "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "glob": {
+          "version": "7.1.1",
+          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz",
+          "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=",
+          "dev": true,
+          "requires": {
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.2",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
+          }
+        },
+        "supports-color": {
+          "version": "3.1.2",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz",
+          "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^1.0.0"
+          }
+        }
+      }
+    },
+    "mockery": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz",
+      "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA==",
+      "dev": true
+    },
+    "ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+      "dev": true
+    },
+    "multipipe": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz",
+      "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=",
+      "dev": true,
+      "requires": {
+        "duplexer2": "0.0.2"
+      }
+    },
+    "nanomatch": {
+      "version": "1.2.13",
+      "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+      "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+      "dev": true,
+      "requires": {
+        "arr-diff": "^4.0.0",
+        "array-unique": "^0.3.2",
+        "define-property": "^2.0.2",
+        "extend-shallow": "^3.0.2",
+        "fragment-cache": "^0.2.1",
+        "is-windows": "^1.0.2",
+        "kind-of": "^6.0.2",
+        "object.pick": "^1.3.0",
+        "regex-not": "^1.0.0",
+        "snapdragon": "^0.8.1",
+        "to-regex": "^3.0.1"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+          "dev": true
+        }
+      }
+    },
+    "natives": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.4.tgz",
+      "integrity": "sha512-Q29yeg9aFKwhLVdkTAejM/HvYG0Y1Am1+HUkFQGn5k2j8GS+v60TVmZh6nujpEAj/qql+wGUrlryO8bF+b1jEg==",
+      "dev": true
+    },
+    "next-tick": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
+      "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=",
+      "dev": true
+    },
+    "nopt": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
+      "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=",
+      "dev": true,
+      "requires": {
+        "abbrev": "1"
+      }
+    },
+    "normalize-package-data": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+      "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
+      "dev": true,
+      "requires": {
+        "hosted-git-info": "^2.1.4",
+        "is-builtin-module": "^1.0.0",
+        "semver": "2 || 3 || 4 || 5",
+        "validate-npm-package-license": "^3.0.1"
+      }
+    },
+    "normalize-path": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+      "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+      "dev": true,
+      "requires": {
+        "remove-trailing-separator": "^1.0.1"
+      }
+    },
+    "npm-path": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz",
+      "integrity": "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==",
+      "dev": true,
+      "requires": {
+        "which": "^1.2.10"
+      }
+    },
+    "npm-which": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz",
+      "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=",
+      "dev": true,
+      "requires": {
+        "commander": "^2.9.0",
+        "npm-path": "^2.0.2",
+        "which": "^1.2.10"
+      }
+    },
+    "number-is-nan": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+      "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+      "dev": true
+    },
+    "nyc": {
+      "version": "10.3.2",
+      "resolved": "https://registry.npmjs.org/nyc/-/nyc-10.3.2.tgz",
+      "integrity": "sha1-8n9NkfKp2zbCT1dP9cbv/wIz3kY=",
+      "dev": true,
+      "requires": {
+        "archy": "^1.0.0",
+        "arrify": "^1.0.1",
+        "caching-transform": "^1.0.0",
+        "convert-source-map": "^1.3.0",
+        "debug-log": "^1.0.1",
+        "default-require-extensions": "^1.0.0",
+        "find-cache-dir": "^0.1.1",
+        "find-up": "^1.1.2",
+        "foreground-child": "^1.5.3",
+        "glob": "^7.0.6",
+        "istanbul-lib-coverage": "^1.1.0",
+        "istanbul-lib-hook": "^1.0.6",
+        "istanbul-lib-instrument": "^1.7.1",
+        "istanbul-lib-report": "^1.1.0",
+        "istanbul-lib-source-maps": "^1.2.0",
+        "istanbul-reports": "^1.1.0",
+        "md5-hex": "^1.2.0",
+        "merge-source-map": "^1.0.2",
+        "micromatch": "^2.3.11",
+        "mkdirp": "^0.5.0",
+        "resolve-from": "^2.0.0",
+        "rimraf": "^2.5.4",
+        "signal-exit": "^3.0.1",
+        "spawn-wrap": "1.2.4",
+        "test-exclude": "^4.1.0",
+        "yargs": "^7.1.0",
+        "yargs-parser": "^5.0.0"
+      },
+      "dependencies": {
+        "align-text": {
+          "version": "0.1.4",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2",
+            "longest": "^1.0.1",
+            "repeat-string": "^1.5.2"
+          }
+        },
+        "amdefine": {
+          "version": "1.0.1",
+          "bundled": true,
+          "dev": true
+        },
+        "ansi-regex": {
+          "version": "2.1.1",
+          "bundled": true,
+          "dev": true
+        },
+        "ansi-styles": {
+          "version": "2.2.1",
+          "bundled": true,
+          "dev": true
+        },
+        "append-transform": {
+          "version": "0.4.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "default-require-extensions": "^1.0.0"
+          }
+        },
+        "archy": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true
+        },
+        "arr-diff": {
+          "version": "2.0.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "arr-flatten": "^1.0.1"
+          }
+        },
+        "arr-flatten": {
+          "version": "1.0.3",
+          "bundled": true,
+          "dev": true
+        },
+        "array-unique": {
+          "version": "0.2.1",
+          "bundled": true,
+          "dev": true
+        },
+        "arrify": {
+          "version": "1.0.1",
+          "bundled": true,
+          "dev": true
+        },
+        "async": {
+          "version": "1.5.2",
+          "bundled": true,
+          "dev": true
+        },
+        "babel-code-frame": {
+          "version": "6.22.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "chalk": "^1.1.0",
+            "esutils": "^2.0.2",
+            "js-tokens": "^3.0.0"
+          }
+        },
+        "babel-generator": {
+          "version": "6.24.1",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "babel-messages": "^6.23.0",
+            "babel-runtime": "^6.22.0",
+            "babel-types": "^6.24.1",
+            "detect-indent": "^4.0.0",
+            "jsesc": "^1.3.0",
+            "lodash": "^4.2.0",
+            "source-map": "^0.5.0",
+            "trim-right": "^1.0.1"
+          }
+        },
+        "babel-messages": {
+          "version": "6.23.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "babel-runtime": "^6.22.0"
+          }
+        },
+        "babel-runtime": {
+          "version": "6.23.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "core-js": "^2.4.0",
+            "regenerator-runtime": "^0.10.0"
+          }
+        },
+        "babel-template": {
+          "version": "6.24.1",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "babel-runtime": "^6.22.0",
+            "babel-traverse": "^6.24.1",
+            "babel-types": "^6.24.1",
+            "babylon": "^6.11.0",
+            "lodash": "^4.2.0"
+          }
+        },
+        "babel-traverse": {
+          "version": "6.24.1",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "babel-code-frame": "^6.22.0",
+            "babel-messages": "^6.23.0",
+            "babel-runtime": "^6.22.0",
+            "babel-types": "^6.24.1",
+            "babylon": "^6.15.0",
+            "debug": "^2.2.0",
+            "globals": "^9.0.0",
+            "invariant": "^2.2.0",
+            "lodash": "^4.2.0"
+          }
+        },
+        "babel-types": {
+          "version": "6.24.1",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "babel-runtime": "^6.22.0",
+            "esutils": "^2.0.2",
+            "lodash": "^4.2.0",
+            "to-fast-properties": "^1.0.1"
+          }
+        },
+        "babylon": {
+          "version": "6.17.0",
+          "bundled": true,
+          "dev": true
+        },
+        "balanced-match": {
+          "version": "0.4.2",
+          "bundled": true,
+          "dev": true
+        },
+        "brace-expansion": {
+          "version": "1.1.7",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "balanced-match": "^0.4.1",
+            "concat-map": "0.0.1"
+          }
+        },
+        "braces": {
+          "version": "1.8.5",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "expand-range": "^1.8.1",
+            "preserve": "^0.2.0",
+            "repeat-element": "^1.1.2"
+          }
+        },
+        "builtin-modules": {
+          "version": "1.1.1",
+          "bundled": true,
+          "dev": true
+        },
+        "caching-transform": {
+          "version": "1.0.1",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "md5-hex": "^1.2.0",
+            "mkdirp": "^0.5.1",
+            "write-file-atomic": "^1.1.4"
+          }
+        },
+        "camelcase": {
+          "version": "1.2.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "center-align": {
+          "version": "0.1.3",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "align-text": "^0.1.3",
+            "lazy-cache": "^1.0.3"
+          }
+        },
+        "chalk": {
+          "version": "1.1.3",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
+          }
+        },
+        "cliui": {
+          "version": "2.1.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "center-align": "^0.1.1",
+            "right-align": "^0.1.1",
+            "wordwrap": "0.0.2"
+          },
+          "dependencies": {
+            "wordwrap": {
+              "version": "0.0.2",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            }
+          }
+        },
+        "code-point-at": {
+          "version": "1.1.0",
+          "bundled": true,
+          "dev": true
+        },
+        "commondir": {
+          "version": "1.0.1",
+          "bundled": true,
+          "dev": true
+        },
+        "concat-map": {
+          "version": "0.0.1",
+          "bundled": true,
+          "dev": true
+        },
+        "convert-source-map": {
+          "version": "1.5.0",
+          "bundled": true,
+          "dev": true
+        },
+        "core-js": {
+          "version": "2.4.1",
+          "bundled": true,
+          "dev": true
+        },
+        "cross-spawn": {
+          "version": "4.0.2",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "lru-cache": "^4.0.1",
+            "which": "^1.2.9"
+          }
+        },
+        "debug": {
+          "version": "2.6.6",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "ms": "0.7.3"
+          }
+        },
+        "debug-log": {
+          "version": "1.0.1",
+          "bundled": true,
+          "dev": true
+        },
+        "decamelize": {
+          "version": "1.2.0",
+          "bundled": true,
+          "dev": true
+        },
+        "default-require-extensions": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "strip-bom": "^2.0.0"
+          }
+        },
+        "detect-indent": {
+          "version": "4.0.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "repeating": "^2.0.0"
+          }
+        },
+        "error-ex": {
+          "version": "1.3.1",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "is-arrayish": "^0.2.1"
+          }
+        },
+        "escape-string-regexp": {
+          "version": "1.0.5",
+          "bundled": true,
+          "dev": true
+        },
+        "esutils": {
+          "version": "2.0.2",
+          "bundled": true,
+          "dev": true
+        },
+        "expand-brackets": {
+          "version": "0.1.5",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "is-posix-bracket": "^0.1.0"
+          }
+        },
+        "expand-range": {
+          "version": "1.8.2",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "fill-range": "^2.1.0"
+          }
+        },
+        "extglob": {
+          "version": "0.3.2",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "is-extglob": "^1.0.0"
+          }
+        },
+        "filename-regex": {
+          "version": "2.0.1",
+          "bundled": true,
+          "dev": true
+        },
+        "fill-range": {
+          "version": "2.2.3",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "is-number": "^2.1.0",
+            "isobject": "^2.0.0",
+            "randomatic": "^1.1.3",
+            "repeat-element": "^1.1.2",
+            "repeat-string": "^1.5.2"
+          }
+        },
+        "find-cache-dir": {
+          "version": "0.1.1",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "commondir": "^1.0.1",
+            "mkdirp": "^0.5.1",
+            "pkg-dir": "^1.0.0"
+          }
+        },
+        "find-up": {
+          "version": "1.1.2",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "path-exists": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
+          }
+        },
+        "for-in": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true
+        },
+        "for-own": {
+          "version": "0.1.5",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "for-in": "^1.0.1"
+          }
+        },
+        "foreground-child": {
+          "version": "1.5.6",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "cross-spawn": "^4",
+            "signal-exit": "^3.0.0"
+          }
+        },
+        "fs.realpath": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true
+        },
+        "get-caller-file": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true
+        },
+        "glob": {
+          "version": "7.1.1",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.2",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
+          }
+        },
+        "glob-base": {
+          "version": "0.3.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "glob-parent": "^2.0.0",
+            "is-glob": "^2.0.0"
+          }
+        },
+        "glob-parent": {
+          "version": "2.0.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "is-glob": "^2.0.0"
+          }
+        },
+        "globals": {
+          "version": "9.17.0",
+          "bundled": true,
+          "dev": true
+        },
+        "graceful-fs": {
+          "version": "4.1.11",
+          "bundled": true,
+          "dev": true
+        },
+        "handlebars": {
+          "version": "4.0.8",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "async": "^1.4.0",
+            "optimist": "^0.6.1",
+            "source-map": "^0.4.4",
+            "uglify-js": "^2.6"
+          },
+          "dependencies": {
+            "source-map": {
+              "version": "0.4.4",
+              "bundled": true,
+              "dev": true,
+              "requires": {
+                "amdefine": ">=0.0.4"
+              }
+            }
+          }
+        },
+        "has-ansi": {
+          "version": "2.0.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^2.0.0"
+          }
+        },
+        "has-flag": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true
+        },
+        "hosted-git-info": {
+          "version": "2.4.2",
+          "bundled": true,
+          "dev": true
+        },
+        "imurmurhash": {
+          "version": "0.1.4",
+          "bundled": true,
+          "dev": true
+        },
+        "inflight": {
+          "version": "1.0.6",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "once": "^1.3.0",
+            "wrappy": "1"
+          }
+        },
+        "inherits": {
+          "version": "2.0.3",
+          "bundled": true,
+          "dev": true
+        },
+        "invariant": {
+          "version": "2.2.2",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "loose-envify": "^1.0.0"
+          }
+        },
+        "invert-kv": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true
+        },
+        "is-arrayish": {
+          "version": "0.2.1",
+          "bundled": true,
+          "dev": true
+        },
+        "is-buffer": {
+          "version": "1.1.5",
+          "bundled": true,
+          "dev": true
+        },
+        "is-builtin-module": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "builtin-modules": "^1.0.0"
+          }
+        },
+        "is-dotfile": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true
+        },
+        "is-equal-shallow": {
+          "version": "0.1.3",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "is-primitive": "^2.0.0"
+          }
+        },
+        "is-extendable": {
+          "version": "0.1.1",
+          "bundled": true,
+          "dev": true
+        },
+        "is-extglob": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true
+        },
+        "is-finite": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "number-is-nan": "^1.0.0"
+          }
+        },
+        "is-fullwidth-code-point": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "number-is-nan": "^1.0.0"
+          }
+        },
+        "is-glob": {
+          "version": "2.0.1",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "is-extglob": "^1.0.0"
+          }
+        },
+        "is-number": {
+          "version": "2.1.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          }
+        },
+        "is-posix-bracket": {
+          "version": "0.1.1",
+          "bundled": true,
+          "dev": true
+        },
+        "is-primitive": {
+          "version": "2.0.0",
+          "bundled": true,
+          "dev": true
+        },
+        "is-utf8": {
+          "version": "0.2.1",
+          "bundled": true,
+          "dev": true
+        },
+        "isarray": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true
+        },
+        "isexe": {
+          "version": "2.0.0",
+          "bundled": true,
+          "dev": true
+        },
+        "isobject": {
+          "version": "2.1.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "isarray": "1.0.0"
+          }
+        },
+        "istanbul-lib-coverage": {
+          "version": "1.1.0",
+          "bundled": true,
+          "dev": true
+        },
+        "istanbul-lib-hook": {
+          "version": "1.0.6",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "append-transform": "^0.4.0"
+          }
+        },
+        "istanbul-lib-instrument": {
+          "version": "1.7.1",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "babel-generator": "^6.18.0",
+            "babel-template": "^6.16.0",
+            "babel-traverse": "^6.18.0",
+            "babel-types": "^6.18.0",
+            "babylon": "^6.13.0",
+            "istanbul-lib-coverage": "^1.1.0",
+            "semver": "^5.3.0"
+          }
+        },
+        "istanbul-lib-report": {
+          "version": "1.1.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "istanbul-lib-coverage": "^1.1.0",
+            "mkdirp": "^0.5.1",
+            "path-parse": "^1.0.5",
+            "supports-color": "^3.1.2"
+          },
+          "dependencies": {
+            "supports-color": {
+              "version": "3.2.3",
+              "bundled": true,
+              "dev": true,
+              "requires": {
+                "has-flag": "^1.0.0"
+              }
+            }
+          }
+        },
+        "istanbul-lib-source-maps": {
+          "version": "1.2.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "debug": "^2.6.3",
+            "istanbul-lib-coverage": "^1.1.0",
+            "mkdirp": "^0.5.1",
+            "rimraf": "^2.6.1",
+            "source-map": "^0.5.3"
+          }
+        },
+        "istanbul-reports": {
+          "version": "1.1.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "handlebars": "^4.0.3"
+          }
+        },
+        "js-tokens": {
+          "version": "3.0.1",
+          "bundled": true,
+          "dev": true
+        },
+        "jsesc": {
+          "version": "1.3.0",
+          "bundled": true,
+          "dev": true
+        },
+        "kind-of": {
+          "version": "3.2.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        },
+        "lazy-cache": {
+          "version": "1.0.4",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "lcid": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "invert-kv": "^1.0.0"
+          }
+        },
+        "load-json-file": {
+          "version": "1.1.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "graceful-fs": "^4.1.2",
+            "parse-json": "^2.2.0",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0",
+            "strip-bom": "^2.0.0"
+          }
+        },
+        "lodash": {
+          "version": "4.17.4",
+          "bundled": true,
+          "dev": true
+        },
+        "longest": {
+          "version": "1.0.1",
+          "bundled": true,
+          "dev": true
+        },
+        "loose-envify": {
+          "version": "1.3.1",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "js-tokens": "^3.0.0"
+          }
+        },
+        "lru-cache": {
+          "version": "4.0.2",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "pseudomap": "^1.0.1",
+            "yallist": "^2.0.0"
+          }
+        },
+        "md5-hex": {
+          "version": "1.3.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "md5-o-matic": "^0.1.1"
+          }
+        },
+        "md5-o-matic": {
+          "version": "0.1.1",
+          "bundled": true,
+          "dev": true
+        },
+        "merge-source-map": {
+          "version": "1.0.3",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "source-map": "^0.5.3"
+          }
+        },
+        "micromatch": {
+          "version": "2.3.11",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "arr-diff": "^2.0.0",
+            "array-unique": "^0.2.1",
+            "braces": "^1.8.2",
+            "expand-brackets": "^0.1.4",
+            "extglob": "^0.3.1",
+            "filename-regex": "^2.0.0",
+            "is-extglob": "^1.0.0",
+            "is-glob": "^2.0.1",
+            "kind-of": "^3.0.2",
+            "normalize-path": "^2.0.1",
+            "object.omit": "^2.0.0",
+            "parse-glob": "^3.0.4",
+            "regex-cache": "^0.4.2"
+          }
+        },
+        "minimatch": {
+          "version": "3.0.3",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "brace-expansion": "^1.0.0"
+          }
+        },
+        "minimist": {
+          "version": "0.0.8",
+          "bundled": true,
+          "dev": true
+        },
+        "mkdirp": {
+          "version": "0.5.1",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "minimist": "0.0.8"
+          }
+        },
+        "ms": {
+          "version": "0.7.3",
+          "bundled": true,
+          "dev": true
+        },
+        "normalize-package-data": {
+          "version": "2.3.8",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "hosted-git-info": "^2.1.4",
+            "is-builtin-module": "^1.0.0",
+            "semver": "2 || 3 || 4 || 5",
+            "validate-npm-package-license": "^3.0.1"
+          }
+        },
+        "normalize-path": {
+          "version": "2.1.1",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "remove-trailing-separator": "^1.0.1"
+          }
+        },
+        "number-is-nan": {
+          "version": "1.0.1",
+          "bundled": true,
+          "dev": true
+        },
+        "object-assign": {
+          "version": "4.1.1",
+          "bundled": true,
+          "dev": true
+        },
+        "object.omit": {
+          "version": "2.0.1",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "for-own": "^0.1.4",
+            "is-extendable": "^0.1.1"
+          }
+        },
+        "once": {
+          "version": "1.4.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "wrappy": "1"
+          }
+        },
+        "optimist": {
+          "version": "0.6.1",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "minimist": "~0.0.1",
+            "wordwrap": "~0.0.2"
+          }
+        },
+        "os-homedir": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true
+        },
+        "os-locale": {
+          "version": "1.4.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "lcid": "^1.0.0"
+          }
+        },
+        "parse-glob": {
+          "version": "3.0.4",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "glob-base": "^0.3.0",
+            "is-dotfile": "^1.0.0",
+            "is-extglob": "^1.0.0",
+            "is-glob": "^2.0.0"
+          }
+        },
+        "parse-json": {
+          "version": "2.2.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "error-ex": "^1.2.0"
+          }
+        },
+        "path-exists": {
+          "version": "2.1.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "pinkie-promise": "^2.0.0"
+          }
+        },
+        "path-is-absolute": {
+          "version": "1.0.1",
+          "bundled": true,
+          "dev": true
+        },
+        "path-parse": {
+          "version": "1.0.5",
+          "bundled": true,
+          "dev": true
+        },
+        "path-type": {
+          "version": "1.1.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "graceful-fs": "^4.1.2",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
+          }
+        },
+        "pify": {
+          "version": "2.3.0",
+          "bundled": true,
+          "dev": true
+        },
+        "pinkie": {
+          "version": "2.0.4",
+          "bundled": true,
+          "dev": true
+        },
+        "pinkie-promise": {
+          "version": "2.0.1",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "pinkie": "^2.0.0"
+          }
+        },
+        "pkg-dir": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "find-up": "^1.0.0"
+          }
+        },
+        "preserve": {
+          "version": "0.2.0",
+          "bundled": true,
+          "dev": true
+        },
+        "pseudomap": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true
+        },
+        "randomatic": {
+          "version": "1.1.6",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "is-number": "^2.0.2",
+            "kind-of": "^3.0.2"
+          }
+        },
+        "read-pkg": {
+          "version": "1.1.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "load-json-file": "^1.0.0",
+            "normalize-package-data": "^2.3.2",
+            "path-type": "^1.0.0"
+          }
+        },
+        "read-pkg-up": {
+          "version": "1.0.1",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "find-up": "^1.0.0",
+            "read-pkg": "^1.0.0"
+          }
+        },
+        "regenerator-runtime": {
+          "version": "0.10.5",
+          "bundled": true,
+          "dev": true
+        },
+        "regex-cache": {
+          "version": "0.4.3",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "is-equal-shallow": "^0.1.3",
+            "is-primitive": "^2.0.0"
+          }
+        },
+        "remove-trailing-separator": {
+          "version": "1.0.1",
+          "bundled": true,
+          "dev": true
+        },
+        "repeat-element": {
+          "version": "1.1.2",
+          "bundled": true,
+          "dev": true
+        },
+        "repeat-string": {
+          "version": "1.6.1",
+          "bundled": true,
+          "dev": true
+        },
+        "repeating": {
+          "version": "2.0.1",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "is-finite": "^1.0.0"
+          }
+        },
+        "require-directory": {
+          "version": "2.1.1",
+          "bundled": true,
+          "dev": true
+        },
+        "require-main-filename": {
+          "version": "1.0.1",
+          "bundled": true,
+          "dev": true
+        },
+        "resolve-from": {
+          "version": "2.0.0",
+          "bundled": true,
+          "dev": true
+        },
+        "right-align": {
+          "version": "0.1.3",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "align-text": "^0.1.1"
+          }
+        },
+        "rimraf": {
+          "version": "2.6.1",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "glob": "^7.0.5"
+          }
+        },
+        "semver": {
+          "version": "5.3.0",
+          "bundled": true,
+          "dev": true
+        },
+        "set-blocking": {
+          "version": "2.0.0",
+          "bundled": true,
+          "dev": true
+        },
+        "signal-exit": {
+          "version": "3.0.2",
+          "bundled": true,
+          "dev": true
+        },
+        "slide": {
+          "version": "1.1.6",
+          "bundled": true,
+          "dev": true
+        },
+        "source-map": {
+          "version": "0.5.6",
+          "bundled": true,
+          "dev": true
+        },
+        "spawn-wrap": {
+          "version": "1.2.4",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "foreground-child": "^1.3.3",
+            "mkdirp": "^0.5.0",
+            "os-homedir": "^1.0.1",
+            "rimraf": "^2.3.3",
+            "signal-exit": "^2.0.0",
+            "which": "^1.2.4"
+          },
+          "dependencies": {
+            "signal-exit": {
+              "version": "2.1.2",
+              "bundled": true,
+              "dev": true
+            }
+          }
+        },
+        "spdx-correct": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "spdx-license-ids": "^1.0.2"
+          }
+        },
+        "spdx-expression-parse": {
+          "version": "1.0.4",
+          "bundled": true,
+          "dev": true
+        },
+        "spdx-license-ids": {
+          "version": "1.2.2",
+          "bundled": true,
+          "dev": true
+        },
+        "string-width": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "code-point-at": "^1.0.0",
+            "is-fullwidth-code-point": "^1.0.0",
+            "strip-ansi": "^3.0.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^2.0.0"
+          }
+        },
+        "strip-bom": {
+          "version": "2.0.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "is-utf8": "^0.2.0"
+          }
+        },
+        "supports-color": {
+          "version": "2.0.0",
+          "bundled": true,
+          "dev": true
+        },
+        "test-exclude": {
+          "version": "4.1.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "arrify": "^1.0.1",
+            "micromatch": "^2.3.11",
+            "object-assign": "^4.1.0",
+            "read-pkg-up": "^1.0.1",
+            "require-main-filename": "^1.0.1"
+          }
+        },
+        "to-fast-properties": {
+          "version": "1.0.3",
+          "bundled": true,
+          "dev": true
+        },
+        "trim-right": {
+          "version": "1.0.1",
+          "bundled": true,
+          "dev": true
+        },
+        "uglify-js": {
+          "version": "2.8.22",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "source-map": "~0.5.1",
+            "uglify-to-browserify": "~1.0.0",
+            "yargs": "~3.10.0"
+          },
+          "dependencies": {
+            "yargs": {
+              "version": "3.10.0",
+              "bundled": true,
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "camelcase": "^1.0.2",
+                "cliui": "^2.1.0",
+                "decamelize": "^1.0.0",
+                "window-size": "0.1.0"
+              }
+            }
+          }
+        },
+        "uglify-to-browserify": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "validate-npm-package-license": {
+          "version": "3.0.1",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "spdx-correct": "~1.0.0",
+            "spdx-expression-parse": "~1.0.0"
+          }
+        },
+        "which": {
+          "version": "1.2.14",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "isexe": "^2.0.0"
+          }
+        },
+        "which-module": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true
+        },
+        "window-size": {
+          "version": "0.1.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "wordwrap": {
+          "version": "0.0.3",
+          "bundled": true,
+          "dev": true
+        },
+        "wrap-ansi": {
+          "version": "2.1.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "string-width": "^1.0.1",
+            "strip-ansi": "^3.0.1"
+          }
+        },
+        "wrappy": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true
+        },
+        "write-file-atomic": {
+          "version": "1.3.4",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "graceful-fs": "^4.1.11",
+            "imurmurhash": "^0.1.4",
+            "slide": "^1.1.5"
+          }
+        },
+        "y18n": {
+          "version": "3.2.1",
+          "bundled": true,
+          "dev": true
+        },
+        "yallist": {
+          "version": "2.1.2",
+          "bundled": true,
+          "dev": true
+        },
+        "yargs": {
+          "version": "7.1.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "camelcase": "^3.0.0",
+            "cliui": "^3.2.0",
+            "decamelize": "^1.1.1",
+            "get-caller-file": "^1.0.1",
+            "os-locale": "^1.4.0",
+            "read-pkg-up": "^1.0.1",
+            "require-directory": "^2.1.1",
+            "require-main-filename": "^1.0.1",
+            "set-blocking": "^2.0.0",
+            "string-width": "^1.0.2",
+            "which-module": "^1.0.0",
+            "y18n": "^3.2.1",
+            "yargs-parser": "^5.0.0"
+          },
+          "dependencies": {
+            "camelcase": {
+              "version": "3.0.0",
+              "bundled": true,
+              "dev": true
+            },
+            "cliui": {
+              "version": "3.2.0",
+              "bundled": true,
+              "dev": true,
+              "requires": {
+                "string-width": "^1.0.1",
+                "strip-ansi": "^3.0.1",
+                "wrap-ansi": "^2.0.0"
+              }
+            }
+          }
+        },
+        "yargs-parser": {
+          "version": "5.0.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "camelcase": "^3.0.0"
+          },
+          "dependencies": {
+            "camelcase": {
+              "version": "3.0.0",
+              "bundled": true,
+              "dev": true
+            }
+          }
+        }
+      }
+    },
+    "object-assign": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
+      "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=",
+      "dev": true
+    },
+    "object-copy": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+      "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+      "dev": true,
+      "requires": {
+        "copy-descriptor": "^0.1.0",
+        "define-property": "^0.2.5",
+        "kind-of": "^3.0.3"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        }
+      }
+    },
+    "object-keys": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz",
+      "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=",
+      "dev": true
+    },
+    "object-visit": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+      "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+      "dev": true,
+      "requires": {
+        "isobject": "^3.0.0"
+      }
+    },
+    "object.defaults": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
+      "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=",
+      "dev": true,
+      "requires": {
+        "array-each": "^1.0.1",
+        "array-slice": "^1.0.0",
+        "for-own": "^1.0.0",
+        "isobject": "^3.0.0"
+      }
+    },
+    "object.map": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz",
+      "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=",
+      "dev": true,
+      "requires": {
+        "for-own": "^1.0.0",
+        "make-iterator": "^1.0.0"
+      }
+    },
+    "object.pick": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+      "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+      "dev": true,
+      "requires": {
+        "isobject": "^3.0.1"
+      }
+    },
+    "once": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+      "requires": {
+        "wrappy": "1"
+      }
+    },
+    "optimist": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
+      "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+      "requires": {
+        "minimist": "~0.0.1",
+        "wordwrap": "~0.0.2"
+      }
+    },
+    "orchestrator": {
+      "version": "0.3.8",
+      "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz",
+      "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=",
+      "dev": true,
+      "requires": {
+        "end-of-stream": "~0.1.5",
+        "sequencify": "~0.0.7",
+        "stream-consume": "~0.1.0"
+      }
+    },
+    "ordered-read-streams": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz",
+      "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=",
+      "dev": true
+    },
+    "os-homedir": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+      "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+      "dev": true
+    },
+    "parse-filepath": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
+      "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=",
+      "dev": true,
+      "requires": {
+        "is-absolute": "^1.0.0",
+        "map-cache": "^0.2.0",
+        "path-root": "^0.1.1"
+      }
+    },
+    "parse-json": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+      "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+      "dev": true,
+      "requires": {
+        "error-ex": "^1.2.0"
+      }
+    },
+    "parse-passwd": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
+      "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
+      "dev": true
+    },
+    "pascalcase": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+      "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+      "dev": true
+    },
+    "path": {
+      "version": "0.12.7",
+      "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz",
+      "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=",
+      "requires": {
+        "process": "^0.11.1",
+        "util": "^0.10.3"
+      }
+    },
+    "path-exists": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+      "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+      "dev": true,
+      "requires": {
+        "pinkie-promise": "^2.0.0"
+      }
+    },
+    "path-is-absolute": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+    },
+    "path-parse": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+      "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+      "dev": true
+    },
+    "path-root": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
+      "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
+      "dev": true,
+      "requires": {
+        "path-root-regex": "^0.1.0"
+      }
+    },
+    "path-root-regex": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
+      "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=",
+      "dev": true
+    },
+    "path-type": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+      "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "pify": "^2.0.0",
+        "pinkie-promise": "^2.0.0"
+      }
+    },
+    "pathval": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz",
+      "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=",
+      "dev": true
+    },
+    "pify": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+      "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+      "dev": true
+    },
+    "pinkie": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+      "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+      "dev": true
+    },
+    "pinkie-promise": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+      "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+      "dev": true,
+      "requires": {
+        "pinkie": "^2.0.0"
+      }
+    },
+    "posix-character-classes": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+      "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+      "dev": true
+    },
+    "pretty-hrtime": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
+      "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=",
+      "dev": true
+    },
+    "process": {
+      "version": "0.11.10",
+      "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+      "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
+    },
+    "process-nextick-args": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+      "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+      "dev": true
+    },
+    "read-pkg": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+      "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+      "dev": true,
+      "requires": {
+        "load-json-file": "^1.0.0",
+        "normalize-package-data": "^2.3.2",
+        "path-type": "^1.0.0"
+      }
+    },
+    "read-pkg-up": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+      "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+      "dev": true,
+      "requires": {
+        "find-up": "^1.0.0",
+        "read-pkg": "^1.0.0"
+      }
+    },
+    "readable-stream": {
+      "version": "1.1.14",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+      "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+      "dev": true,
+      "requires": {
+        "core-util-is": "~1.0.0",
+        "inherits": "~2.0.1",
+        "isarray": "0.0.1",
+        "string_decoder": "~0.10.x"
+      }
+    },
+    "rechoir": {
+      "version": "0.6.2",
+      "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+      "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
+      "dev": true,
+      "requires": {
+        "resolve": "^1.1.6"
+      }
+    },
+    "redent": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+      "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+      "dev": true,
+      "requires": {
+        "indent-string": "^2.1.0",
+        "strip-indent": "^1.0.1"
+      }
+    },
+    "regex-not": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+      "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+      "dev": true,
+      "requires": {
+        "extend-shallow": "^3.0.2",
+        "safe-regex": "^1.1.0"
+      }
+    },
+    "remove-trailing-separator": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+      "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+      "dev": true
+    },
+    "repeat-element": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+      "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+      "dev": true
+    },
+    "repeat-string": {
+      "version": "1.6.1",
+      "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+      "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
+    },
+    "repeating": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+      "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+      "dev": true,
+      "requires": {
+        "is-finite": "^1.0.0"
+      }
+    },
+    "replace-ext": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz",
+      "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=",
+      "dev": true
+    },
+    "resolve": {
+      "version": "1.8.1",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
+      "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==",
+      "dev": true,
+      "requires": {
+        "path-parse": "^1.0.5"
+      }
+    },
+    "resolve-dir": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
+      "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
+      "dev": true,
+      "requires": {
+        "expand-tilde": "^2.0.0",
+        "global-modules": "^1.0.0"
+      }
+    },
+    "resolve-url": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+      "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+      "dev": true
+    },
+    "ret": {
+      "version": "0.1.15",
+      "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+      "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+      "dev": true
+    },
+    "right-align": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
+      "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
+      "optional": true,
+      "requires": {
+        "align-text": "^0.1.1"
+      }
+    },
+    "rimraf": {
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+      "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+      "dev": true,
+      "requires": {
+        "glob": "^7.0.5"
+      }
+    },
+    "safe-buffer": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+      "dev": true
+    },
+    "safe-regex": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+      "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+      "dev": true,
+      "requires": {
+        "ret": "~0.1.10"
+      }
+    },
+    "semver": {
+      "version": "4.3.6",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
+      "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=",
+      "dev": true
+    },
+    "sequencify": {
+      "version": "0.0.7",
+      "resolved": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz",
+      "integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw=",
+      "dev": true
+    },
+    "set-value": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+      "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+      "dev": true,
+      "requires": {
+        "extend-shallow": "^2.0.1",
+        "is-extendable": "^0.1.1",
+        "is-plain-object": "^2.0.3",
+        "split-string": "^3.0.1"
+      },
+      "dependencies": {
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        }
+      }
+    },
+    "shell-escape": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/shell-escape/-/shell-escape-0.2.0.tgz",
+      "integrity": "sha1-aP0CXrBJC09WegJ/C/IkgLX4QTM=",
+      "dev": true
+    },
+    "shelljs": {
+      "version": "0.7.8",
+      "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz",
+      "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=",
+      "dev": true,
+      "requires": {
+        "glob": "^7.0.0",
+        "interpret": "^1.0.0",
+        "rechoir": "^0.6.2"
+      }
+    },
+    "sigmund": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
+      "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
+      "dev": true
+    },
+    "signal-exit": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+      "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+      "dev": true
+    },
+    "snapdragon": {
+      "version": "0.8.2",
+      "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+      "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+      "dev": true,
+      "requires": {
+        "base": "^0.11.1",
+        "debug": "^2.2.0",
+        "define-property": "^0.2.5",
+        "extend-shallow": "^2.0.1",
+        "map-cache": "^0.2.2",
+        "source-map": "^0.5.6",
+        "source-map-resolve": "^0.5.0",
+        "use": "^3.1.0"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        },
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.5.7",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+          "dev": true
+        }
+      }
+    },
+    "snapdragon-node": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+      "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+      "dev": true,
+      "requires": {
+        "define-property": "^1.0.0",
+        "isobject": "^3.0.0",
+        "snapdragon-util": "^3.0.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^1.0.0"
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        },
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+          "dev": true
+        }
+      }
+    },
+    "snapdragon-util": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+      "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.2.0"
+      }
+    },
+    "source-map": {
+      "version": "0.4.4",
+      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
+      "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+      "requires": {
+        "amdefine": ">=0.0.4"
+      }
+    },
+    "source-map-resolve": {
+      "version": "0.5.2",
+      "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
+      "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
+      "dev": true,
+      "requires": {
+        "atob": "^2.1.1",
+        "decode-uri-component": "^0.2.0",
+        "resolve-url": "^0.2.1",
+        "source-map-url": "^0.4.0",
+        "urix": "^0.1.0"
+      }
+    },
+    "source-map-url": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+      "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+      "dev": true
+    },
+    "sparkles": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz",
+      "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==",
+      "dev": true
+    },
+    "spdx-correct": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
+      "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
+      "dev": true,
+      "requires": {
+        "spdx-expression-parse": "^3.0.0",
+        "spdx-license-ids": "^3.0.0"
+      }
+    },
+    "spdx-exceptions": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",
+      "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==",
+      "dev": true
+    },
+    "spdx-expression-parse": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+      "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+      "dev": true,
+      "requires": {
+        "spdx-exceptions": "^2.1.0",
+        "spdx-license-ids": "^3.0.0"
+      }
+    },
+    "spdx-license-ids": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz",
+      "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==",
+      "dev": true
+    },
+    "spec-xunit-file": {
+      "version": "0.0.1-3",
+      "resolved": "https://registry.npmjs.org/spec-xunit-file/-/spec-xunit-file-0.0.1-3.tgz",
+      "integrity": "sha1-hVpmq4w4LrMWXfkoqB0HSQKdI4Y=",
+      "dev": true
+    },
+    "split-string": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+      "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+      "dev": true,
+      "requires": {
+        "extend-shallow": "^3.0.0"
+      }
+    },
+    "static-extend": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+      "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+      "dev": true,
+      "requires": {
+        "define-property": "^0.2.5",
+        "object-copy": "^0.1.0"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        }
+      }
+    },
+    "stream-consume": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.1.tgz",
+      "integrity": "sha512-tNa3hzgkjEP7XbCkbRXe1jpg+ievoa0O4SCFlMOYEscGSS4JJsckGL8swUyAa/ApGU3Ae4t6Honor4HhL+tRyg==",
+      "dev": true
+    },
+    "string_decoder": {
+      "version": "0.10.31",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+      "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+      "dev": true
+    },
+    "strip-ansi": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+      "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+      "dev": true,
+      "requires": {
+        "ansi-regex": "^2.0.0"
+      }
+    },
+    "strip-bom": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz",
+      "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=",
+      "dev": true,
+      "requires": {
+        "first-chunk-stream": "^1.0.0",
+        "is-utf8": "^0.2.0"
+      }
+    },
+    "strip-bom-string": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz",
+      "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=",
+      "dev": true
+    },
+    "strip-indent": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+      "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+      "dev": true,
+      "requires": {
+        "get-stdin": "^4.0.1"
+      }
+    },
+    "supports-color": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+      "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+      "dev": true
+    },
+    "through2": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+      "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+      "dev": true,
+      "requires": {
+        "readable-stream": "^2.1.5",
+        "xtend": "~4.0.1"
+      },
+      "dependencies": {
+        "isarray": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+          "dev": true
+        },
+        "readable-stream": {
+          "version": "2.3.6",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+          "dev": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.3",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~2.0.0",
+            "safe-buffer": "~5.1.1",
+            "string_decoder": "~1.1.1",
+            "util-deprecate": "~1.0.1"
+          }
+        },
+        "string_decoder": {
+          "version": "1.1.1",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+          "dev": true,
+          "requires": {
+            "safe-buffer": "~5.1.0"
+          }
+        }
+      }
+    },
+    "tildify": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz",
+      "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=",
+      "dev": true,
+      "requires": {
+        "os-homedir": "^1.0.0"
+      }
+    },
+    "time-stamp": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz",
+      "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=",
+      "dev": true
+    },
+    "timers-ext": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.5.tgz",
+      "integrity": "sha512-tsEStd7kmACHENhsUPaxb8Jf8/+GZZxyNFQbZD07HQOyooOa6At1rQqjffgvg7n+dxscQa9cjjMdWhJtsP2sxg==",
+      "dev": true,
+      "requires": {
+        "es5-ext": "~0.10.14",
+        "next-tick": "1"
+      }
+    },
+    "to-object-path": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+      "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.0.2"
+      }
+    },
+    "to-regex": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+      "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+      "dev": true,
+      "requires": {
+        "define-property": "^2.0.2",
+        "extend-shallow": "^3.0.2",
+        "regex-not": "^1.0.2",
+        "safe-regex": "^1.1.0"
+      }
+    },
+    "to-regex-range": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+      "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+      "dev": true,
+      "requires": {
+        "is-number": "^3.0.0",
+        "repeat-string": "^1.6.1"
+      }
+    },
+    "touch": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz",
+      "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==",
+      "dev": true,
+      "requires": {
+        "nopt": "~1.0.10"
+      }
+    },
+    "trim-newlines": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+      "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
+      "dev": true
+    },
+    "type-detect": {
+      "version": "4.0.8",
+      "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
+      "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
+      "dev": true
+    },
+    "uglify-js": {
+      "version": "2.8.29",
+      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
+      "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
+      "optional": true,
+      "requires": {
+        "source-map": "~0.5.1",
+        "uglify-to-browserify": "~1.0.0",
+        "yargs": "~3.10.0"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.5.7",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+          "optional": true
+        }
+      }
+    },
+    "uglify-to-browserify": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
+      "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
+      "optional": true
+    },
+    "unc-path-regex": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
+      "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=",
+      "dev": true
+    },
+    "underscore": {
+      "version": "1.9.1",
+      "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz",
+      "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg=="
+    },
+    "union-value": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+      "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+      "dev": true,
+      "requires": {
+        "arr-union": "^3.1.0",
+        "get-value": "^2.0.6",
+        "is-extendable": "^0.1.1",
+        "set-value": "^0.4.3"
+      },
+      "dependencies": {
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        },
+        "set-value": {
+          "version": "0.4.3",
+          "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+          "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+          "dev": true,
+          "requires": {
+            "extend-shallow": "^2.0.1",
+            "is-extendable": "^0.1.1",
+            "is-plain-object": "^2.0.1",
+            "to-object-path": "^0.3.0"
+          }
+        }
+      }
+    },
+    "unique-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz",
+      "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=",
+      "dev": true
+    },
+    "universalify": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+      "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
+    },
+    "unset-value": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+      "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+      "dev": true,
+      "requires": {
+        "has-value": "^0.3.1",
+        "isobject": "^3.0.0"
+      },
+      "dependencies": {
+        "has-value": {
+          "version": "0.3.1",
+          "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+          "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+          "dev": true,
+          "requires": {
+            "get-value": "^2.0.3",
+            "has-values": "^0.1.4",
+            "isobject": "^2.0.0"
+          },
+          "dependencies": {
+            "isobject": {
+              "version": "2.1.0",
+              "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+              "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+              "dev": true,
+              "requires": {
+                "isarray": "1.0.0"
+              }
+            }
+          }
+        },
+        "has-values": {
+          "version": "0.1.4",
+          "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+          "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+          "dev": true
+        },
+        "isarray": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+          "dev": true
+        }
+      }
+    },
+    "urix": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+      "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+      "dev": true
+    },
+    "use": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz",
+      "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==",
+      "dev": true,
+      "requires": {
+        "kind-of": "^6.0.2"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+          "dev": true
+        }
+      }
+    },
+    "user-home": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz",
+      "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=",
+      "dev": true
+    },
+    "util": {
+      "version": "0.10.4",
+      "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
+      "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
+      "requires": {
+        "inherits": "2.0.3"
+      }
+    },
+    "util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+      "dev": true
+    },
+    "v8flags": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz",
+      "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=",
+      "dev": true,
+      "requires": {
+        "user-home": "^1.1.1"
+      }
+    },
+    "validate-npm-package-license": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz",
+      "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==",
+      "dev": true,
+      "requires": {
+        "spdx-correct": "^3.0.0",
+        "spdx-expression-parse": "^3.0.0"
+      }
+    },
+    "vinyl": {
+      "version": "0.5.3",
+      "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz",
+      "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=",
+      "dev": true,
+      "requires": {
+        "clone": "^1.0.0",
+        "clone-stats": "^0.0.1",
+        "replace-ext": "0.0.1"
+      }
+    },
+    "vinyl-fs": {
+      "version": "0.3.14",
+      "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz",
+      "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=",
+      "dev": true,
+      "requires": {
+        "defaults": "^1.0.0",
+        "glob-stream": "^3.1.5",
+        "glob-watcher": "^0.0.6",
+        "graceful-fs": "^3.0.0",
+        "mkdirp": "^0.5.0",
+        "strip-bom": "^1.0.0",
+        "through2": "^0.6.1",
+        "vinyl": "^0.4.0"
+      },
+      "dependencies": {
+        "clone": {
+          "version": "0.2.0",
+          "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
+          "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
+          "dev": true
+        },
+        "graceful-fs": {
+          "version": "3.0.11",
+          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz",
+          "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=",
+          "dev": true,
+          "requires": {
+            "natives": "^1.1.0"
+          }
+        },
+        "readable-stream": {
+          "version": "1.0.34",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+          "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+          "dev": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.1",
+            "isarray": "0.0.1",
+            "string_decoder": "~0.10.x"
+          }
+        },
+        "through2": {
+          "version": "0.6.5",
+          "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+          "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+          "dev": true,
+          "requires": {
+            "readable-stream": ">=1.0.33-1 <1.1.0-0",
+            "xtend": ">=4.0.0 <4.1.0-0"
+          }
+        },
+        "vinyl": {
+          "version": "0.4.6",
+          "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
+          "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
+          "dev": true,
+          "requires": {
+            "clone": "^0.2.0",
+            "clone-stats": "^0.0.1"
+          }
+        }
+      }
+    },
+    "vinyl-sourcemaps-apply": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz",
+      "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=",
+      "dev": true,
+      "requires": {
+        "source-map": "^0.5.1"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.5.7",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+          "dev": true
+        }
+      }
+    },
+    "which": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+      "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+      "dev": true,
+      "requires": {
+        "isexe": "^2.0.0"
+      }
+    },
+    "window-size": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
+      "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
+      "optional": true
+    },
+    "wordwrap": {
+      "version": "0.0.3",
+      "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
+      "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc="
+    },
+    "wrappy": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+    },
+    "xtend": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+      "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+      "dev": true
+    },
+    "yargs": {
+      "version": "3.10.0",
+      "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
+      "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
+      "optional": true,
+      "requires": {
+        "camelcase": "^1.0.2",
+        "cliui": "^2.1.0",
+        "decamelize": "^1.0.0",
+        "window-size": "0.1.0"
+      }
+    }
+  }
+}
diff --git a/package.json b/package.json
old mode 100644
new mode 100755
index e80f85fa..deff7bb3
--- a/package.json
+++ b/package.json
@@ -1,26 +1,55 @@
 {
-  "name":         "docco",
-  "description":  "The Quick and Dirty Literate Programming Documentation Generator",
-  "keywords":     ["documentation", "docs", "generator", "literate", "coffeescript"],
-  "author":       "Jeremy Ashkenas",
-  "version":      "0.7.0",
-  "license":      "MIT",
+  "name": "docco",
+  "description": "The Quick and Dirty Literate Programming Documentation Generator",
+  "keywords": [
+    "documentation",
+    "docs",
+    "generator",
+    "literate",
+    "coffeescript"
+  ],
+  "author": "Jeremy Ashkenas",
+  "version": "1.0.0",
+  "license": "MIT",
   "repository": {
     "type": "git",
     "url": "https://github.com/jashkenas/docco.git"
   },
   "engines": {
-    "node":       ">=0.2.0"
+    "node": ">=0.2.0"
   },
   "dependencies": {
-    "commander":  ">= 0.5.2",
-    "marked":     ">= 0.2.7",
-    "fs-extra":   ">= 0.6.0",
-    "underscore": ">= 1.0.0",
-    "highlight.js": ">= 8.0.x"
+    "commander": ">= 0.5.2",
+    "fs-extra": "^3.0.1",
+    "glob": "^7.1.2",
+    "handlebars": "^4.0.10",
+    "highlight.js": ">= 8.0.x",
+    "marked": ">= 0.2.7",
+    "path": "^0.12.7",
+    "underscore": ">= 1.0.0"
   },
-  "main" :        "./docco",
+  "main": "./docco",
   "bin": {
-    "docco":      "./bin/docco"
+    "docco": "./bin/docco"
+  },
+  "devDependencies": {
+    "chai": "^4.0.2",
+    "concurrent-transform": "^1.0.0",
+    "gulp": "^3.9.1",
+    "gulp-clean": "^0.3.2",
+    "gulp-coffee": "^2.3.4",
+    "gulp-sourcemaps": "^2.6.0",
+    "gulp-tap": "^1.0.1",
+    "gulp-util": "^3.0.8",
+    "jenkins-mocha": "^4.1.2",
+    "mocha": "^3.4.2",
+    "mockery": "^2.1.0",
+    "touch": "^3.1.0"
+  },
+  "scripts": {
+    "test": "npm run test:unit",
+    "test:unit": "jenkins-mocha test/unit-tests/*.js; jenkins-mocha --cobertura test/unit-tests/*.js",
+    "build": "node_modules/gulp/bin/gulp.js build",
+    "clean": "node_modules/gulp/bin/gulp.js clean"
   }
 }
diff --git a/resources/classic/docco.css b/resources/classic/docco.css
old mode 100644
new mode 100755
diff --git a/resources/classic/docco.jst b/resources/classic/docco.jst
old mode 100644
new mode 100755
index bc956dbe..f4a57404
--- a/resources/classic/docco.jst
+++ b/resources/classic/docco.jst
@@ -19,7 +19,7 @@
           <div id="jump_page">
             <% for (var i=0, l=sources.length; i<l; i++) { %>
               <% var source = sources[i]; %>
-              <a class="source" href="<%= path.basename(destination(source)) %>">
+              <a class="source" href="<%= destination(source) %>">
                 <%= path.basename(source) %>
               </a>
             <% } %>
diff --git a/resources/classic/public/fonts/aller-bold.eot b/resources/classic/public/fonts/aller-bold.eot
old mode 100644
new mode 100755
diff --git a/resources/classic/public/fonts/aller-bold.ttf b/resources/classic/public/fonts/aller-bold.ttf
old mode 100644
new mode 100755
diff --git a/resources/classic/public/fonts/aller-bold.woff b/resources/classic/public/fonts/aller-bold.woff
old mode 100644
new mode 100755
diff --git a/resources/classic/public/fonts/aller-light.eot b/resources/classic/public/fonts/aller-light.eot
old mode 100644
new mode 100755
diff --git a/resources/classic/public/fonts/aller-light.ttf b/resources/classic/public/fonts/aller-light.ttf
old mode 100644
new mode 100755
diff --git a/resources/classic/public/fonts/aller-light.woff b/resources/classic/public/fonts/aller-light.woff
old mode 100644
new mode 100755
diff --git a/resources/classic/public/fonts/fleurons.eot b/resources/classic/public/fonts/fleurons.eot
old mode 100644
new mode 100755
diff --git a/resources/classic/public/fonts/fleurons.ttf b/resources/classic/public/fonts/fleurons.ttf
old mode 100644
new mode 100755
diff --git a/resources/classic/public/fonts/fleurons.woff b/resources/classic/public/fonts/fleurons.woff
old mode 100644
new mode 100755
diff --git a/resources/classic/public/images/gray.png b/resources/classic/public/images/gray.png
old mode 100644
new mode 100755
diff --git a/resources/classic/public/stylesheets/normalize.css b/resources/classic/public/stylesheets/normalize.css
old mode 100644
new mode 100755
diff --git a/resources/languages.json b/resources/languages.json
old mode 100644
new mode 100755
index c1b6799d..9ad66b13
--- a/resources/languages.json
+++ b/resources/languages.json
@@ -11,11 +11,12 @@
   ".cls":         {"name": "tex", "symbol": "%"},
   ".cmake":       {"name": "cmake", "symbol": "#"},
   ".cmd":         {"name": "dos", "symbol": "@?rem"},
-  ".coffee":      {"name": "coffeescript", "symbol": "#"},
+  ".coffee":      {"name": "coffeescript", "symbol": "#", "multiline": {"start": "###", "stop": "###"}},
   ".cpp":         {"name": "cpp", "symbol": "//"},
   ".cs":          {"name": "cs", "symbol": "//"},
   ".cson":        {"name": "coffeescript", "symbol": "#"},
   ".d":           {"name": "d", "symbol": "//"},
+  "not-supported":{"name": "Not Supported", "symbol": "//"},
   ".dtx":         {"name": "tex", "symbol": "%"},
   ".erl":         {"name": "erlang", "symbol": "%"},
   ".f":           {"name": "fortran", "symbol": "!"},
@@ -29,21 +30,23 @@
   ".hs":          {"name": "haskell", "symbol": "--"},
   ".ini":         {"name": "ini", "symbol": ";"},
   ".jade":        {"name": "jade", "symbol": "//-"},
-  ".js":          {"name": "javascript", "symbol": "//"},
+  ".jpeg":        {"name": "image", "copy": true},
+  ".jpg":         {"name": "image", "copy": true},
+  ".js":          {"name": "javascript", "symbol": "//", "multiline": {"start": "/*", "stop": "*/"}},
   ".jsm":         {"name": "javascript", "symbol": "//"},
   ".jsx":         {"name": "javascript", "symbol": "//"},
-  ".java":        {"name": "java", "symbol": "//"},
+  ".java":        {"name": "java", "symbol": "//", "multiline": {"start": "/*", "stop": "*/"}},
   ".latex":       {"name": "tex", "symbol": "%"},
   ".less":        {"name": "less", "symbol": "//"},
-  ".lisp":        {"name": "lisp", "symbol": ";"},
-  ".litcoffee":   {"name": "coffeescript", "symbol": "#", "literate": true},
+  ".lisp":        {"name": "lisp", "symbol": ";" },
+  ".litcoffee":   {"name": "coffeescript", "symbol": "#", "literate": true },
   ".ls":          {"name": "coffeescript", "symbol": "#"},
   ".lua":         {"name": "lua", "symbol": "--"},
   ".n":           {"name": "nemerle", "symbol": "//"},
   ".m":           {"name": "objectivec", "symbol": "//"},
   ".mel":         {"name": "mel", "symbol": "//"},
-  ".markdown":    {"name": "markdown", "symbol": ""},
-  ".md":          {"name": "markdown", "symbol": ""},
+  ".markdown":    {"name": "markdown", "symbol": "", "section": "#", "link": "!", "html": true, "code": "```"},
+  ".md":          {"name": "markdown", "symbol": "", "section": "#", "link": "!", "html": true, "code": "```"},
   ".mm":          {"name": "objectivec", "symbol": "//"},
   ".p":           {"name": "delphi", "symbol": "//"},
   ".pas":         {"name": "delphi", "symbol": "//"},
@@ -51,6 +54,7 @@
   ".pl":          {"name": "perl", "symbol": "#"},
   ".pm":          {"name": "perl", "symbol": "#"},
   ".pod":         {"name": "perl", "symbol": "#"},
+  ".png":         {"name": "image", "copy": true},
   ".pp":          {"name": "delphi", "symbol": "//"},
   ".py":          {"name": "python", "symbol": "#"},
   ".rb":          {"name": "ruby", "symbol": "#"},
@@ -63,8 +67,10 @@
   ".sty":         {"name": "tex", "symbol": "%"},
   ".styl":        {"name": "stylus", "symbol": "//"},
   ".stylus":      {"name": "stylus", "symbol": "//"},
+  ".svg":         {"name": "image", "copy": true},
   ".swift":       {"name": "swift", "symbol": "//"},
   ".t":           {"name": "perl", "symbol": "#"},
+  ".tiff":        {"name": "image", "copy": true},
   ".ts":          {"name": "typescript", "symbol": "//"},
   ".v":           {"name": "verilog", "symbol": "//"},
   ".vala":        {"name": "vala", "symbol": "//"},
diff --git a/resources/linear/docco.css b/resources/linear/docco.css
old mode 100644
new mode 100755
diff --git a/resources/linear/docco.jst b/resources/linear/docco.jst
old mode 100644
new mode 100755
index c536828b..41ae3352
--- a/resources/linear/docco.jst
+++ b/resources/linear/docco.jst
@@ -26,11 +26,13 @@
           <div class="toc">
             <h3>Table of Contents</h3>
             <ol>
-              <% for (var i=0, l = sources.length; i < l; i++) { %>
-                <% var source = sources[i]; %>
+              <% for (var i=0, l = links.length; i < l; i++) { %>
                 <li>
-                  <a class="source" href="<%= path.basename(destination(source)) %>">
-                    <%= path.basename(source) %>
+                  <a class="source" href="<%= links[i].link %>">
+                    <% if (flatten) %>
+                    <%= path.basename(links[i].file) %>
+                    <% else %>
+                    <%= links[i].file %>
                   </a>
                 </li>
               <% } %>
diff --git a/resources/linear/public/fonts/aller-bold.eot b/resources/linear/public/fonts/aller-bold.eot
old mode 100644
new mode 100755
diff --git a/resources/linear/public/fonts/aller-bold.ttf b/resources/linear/public/fonts/aller-bold.ttf
old mode 100644
new mode 100755
diff --git a/resources/linear/public/fonts/aller-bold.woff b/resources/linear/public/fonts/aller-bold.woff
old mode 100644
new mode 100755
diff --git a/resources/linear/public/fonts/aller-light.eot b/resources/linear/public/fonts/aller-light.eot
old mode 100644
new mode 100755
diff --git a/resources/linear/public/fonts/aller-light.ttf b/resources/linear/public/fonts/aller-light.ttf
old mode 100644
new mode 100755
diff --git a/resources/linear/public/fonts/aller-light.woff b/resources/linear/public/fonts/aller-light.woff
old mode 100644
new mode 100755
diff --git a/resources/linear/public/fonts/fleurons.eot b/resources/linear/public/fonts/fleurons.eot
old mode 100644
new mode 100755
diff --git a/resources/linear/public/fonts/fleurons.ttf b/resources/linear/public/fonts/fleurons.ttf
old mode 100644
new mode 100755
diff --git a/resources/linear/public/fonts/fleurons.woff b/resources/linear/public/fonts/fleurons.woff
old mode 100644
new mode 100755
diff --git a/resources/linear/public/images/gray.png b/resources/linear/public/images/gray.png
old mode 100644
new mode 100755
diff --git a/resources/linear/public/stylesheets/normalize.css b/resources/linear/public/stylesheets/normalize.css
old mode 100644
new mode 100755
diff --git a/resources/parallel/docco.css b/resources/parallel/docco.css
old mode 100644
new mode 100755
diff --git a/resources/parallel/docco.jst b/resources/parallel/docco.jst
old mode 100644
new mode 100755
index 1cea1ab5..22675734
--- a/resources/parallel/docco.jst
+++ b/resources/parallel/docco.jst
@@ -3,8 +3,8 @@
 <html>
 <head>
   <title><%= title %></title>
-  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
-  <meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1.0; maximum-scale=1.0; user-scalable=0;">
+  <meta http-equiv="content-type" content="text/html,charset=UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
   <link rel="stylesheet" media="all" href="<%= css %>" />
 </head>
 <body>
@@ -18,10 +18,9 @@
           <div id="jump_wrapper">
           <div id="jump_page_wrapper">
             <div id="jump_page">
-              <% for (var i=0, l=sources.length; i<l; i++) { %>
-                <% var source = sources[i]; %>
-                <a class="source" href="<%= path.basename(destination(source)) %>">
-                  <%= path.basename(source) %>
+              <% for (var i=0, l=links.length; i<l; i++) { %>
+                <a class="source" href="<%= links[i].link %>">
+                  <%= links[i].file %>
                 </a>
               <% } %>
             </div>
diff --git a/resources/parallel/public/fonts/aller-bold.eot b/resources/parallel/public/fonts/aller-bold.eot
old mode 100644
new mode 100755
diff --git a/resources/parallel/public/fonts/aller-bold.ttf b/resources/parallel/public/fonts/aller-bold.ttf
old mode 100644
new mode 100755
diff --git a/resources/parallel/public/fonts/aller-bold.woff b/resources/parallel/public/fonts/aller-bold.woff
old mode 100644
new mode 100755
diff --git a/resources/parallel/public/fonts/aller-light.eot b/resources/parallel/public/fonts/aller-light.eot
old mode 100644
new mode 100755
diff --git a/resources/parallel/public/fonts/aller-light.ttf b/resources/parallel/public/fonts/aller-light.ttf
old mode 100644
new mode 100755
diff --git a/resources/parallel/public/fonts/aller-light.woff b/resources/parallel/public/fonts/aller-light.woff
old mode 100644
new mode 100755
diff --git a/resources/parallel/public/stylesheets/normalize.css b/resources/parallel/public/stylesheets/normalize.css
old mode 100644
new mode 100755
diff --git a/resources/plain-markdown/README.md b/resources/plain-markdown/README.md
old mode 100644
new mode 100755
diff --git a/resources/plain-markdown/docco.jst b/resources/plain-markdown/docco.jst
old mode 100644
new mode 100755
diff --git a/resources/sidebyside/docco.css b/resources/sidebyside/docco.css
new file mode 100755
index 00000000..b60f6fa3
--- /dev/null
+++ b/resources/sidebyside/docco.css
@@ -0,0 +1,518 @@
+/*--------------------- Typography ----------------------------*/
+
+@font-face {
+    font-family: 'aller-light';
+    src: url('public/fonts/aller-light.eot');
+    src: url('public/fonts/aller-light.eot?#iefix') format('embedded-opentype'),
+         url('public/fonts/aller-light.woff') format('woff'),
+         url('public/fonts/aller-light.ttf') format('truetype');
+    font-weight: normal;
+    font-style: normal;
+}
+
+@font-face {
+    font-family: 'aller-bold';
+    src: url('public/fonts/aller-bold.eot');
+    src: url('public/fonts/aller-bold.eot?#iefix') format('embedded-opentype'),
+         url('public/fonts/aller-bold.woff') format('woff'),
+         url('public/fonts/aller-bold.ttf') format('truetype');
+    font-weight: normal;
+    font-style: normal;
+}
+
+@font-face {
+    font-family: 'roboto-black';
+    src: url('public/fonts/roboto-black.eot');
+    src: url('public/fonts/roboto-black.eot?#iefix') format('embedded-opentype'),
+         url('public/fonts/roboto-black.woff') format('woff'),
+         url('public/fonts/roboto-black.ttf') format('truetype');
+    font-weight: normal;
+    font-style: normal;
+}
+
+/*--------------------- Layout ----------------------------*/
+html { height: 100%; }
+body {
+  font-family: "aller-light";
+  font-size: 14px;
+  line-height: 18px;
+  color: #30404f;
+  margin: 0; padding: 0;
+  height:100%;
+}
+#container { min-height: 100%; }
+
+a {
+  color: #000;
+}
+
+b, strong {
+  font-weight: normal;
+  font-family: "aller-bold";
+}
+
+p {
+  margin: 15px 0 0px;
+}
+  .annotation ul, .annotation ol {
+    margin: 25px 0;
+  }
+    .annotation ul li, .annotation ol li {
+      font-size: 14px;
+      line-height: 18px;
+      margin: 10px 0;
+    }
+
+h1, h2, h3, h4, h5, h6 {
+  color: #112233;
+  line-height: 1em;
+  font-weight: normal;
+  font-family: "roboto-black";
+  text-transform: uppercase;
+  margin: 30px 0 15px 0;
+}
+
+h1 {
+  margin-top: 40px;
+}
+h2 {
+  font-size: 1.26em;
+}
+
+hr {
+  border: 0;
+  background: 1px #ddd;
+  height: 1px;
+  margin: 20px 0;
+}
+
+pre, tt, code {
+  font-size: 12px; line-height: 16px;
+  font-family: Menlo, Monaco, Consolas, "Lucida Console", monospace;
+  margin: 0; padding: 0;
+}
+  .annotation pre {
+    display: block;
+    margin: 0;
+    padding: 7px 10px;
+    background: #fcfcfc;
+    -moz-box-shadow:    inset 0 0 10px rgba(0,0,0,0.1);
+    -webkit-box-shadow: inset 0 0 10px rgba(0,0,0,0.1);
+    box-shadow:         inset 0 0 10px rgba(0,0,0,0.1);
+    overflow-x: auto;
+  }
+    .annotation pre code {
+      border: 0;
+      padding: 0;
+      background: transparent;
+    }
+
+
+blockquote {
+  border-left: 5px solid #ccc;
+  margin: 0;
+  padding: 1px 0 1px 1em;
+}
+  .sections blockquote p {
+    font-family: Menlo, Consolas, Monaco, monospace;
+    font-size: 12px; line-height: 16px;
+    color: #999;
+    margin: 10px 0 0;
+    white-space: pre-wrap;
+  }
+
+ul.sections {
+  list-style: none;
+  padding:0 0 5px 0;;
+  margin:0;
+}
+
+/*
+  Force border-box so that % widths fit the parent
+  container without overlap because of margin/padding.
+
+  More Info : http://www.quirksmode.org/css/box.html
+*/
+ul.sections > li > div {
+  -moz-box-sizing: border-box;    /* firefox */
+  -ms-box-sizing: border-box;     /* ie */
+  -webkit-box-sizing: border-box; /* webkit */
+  -khtml-box-sizing: border-box;  /* konqueror */
+  box-sizing: border-box;         /* css3 */
+}
+
+
+/*---------------------- Jump Page -----------------------------*/
+#jump_to, #jump_page {
+  margin: 0;
+  background: white;
+  -webkit-box-shadow: 0 0 25px #777; -moz-box-shadow: 0 0 25px #777;
+  -webkit-border-bottom-left-radius: 5px; -moz-border-radius-bottomleft: 5px;
+  font: 16px Arial;
+  cursor: pointer;
+  text-align: right;
+  list-style: none;
+}
+
+#jump_to a {
+  text-decoration: none;
+}
+
+#jump_to a.large {
+  display: none;
+}
+#jump_to a.small {
+  font-size: 22px;
+  font-weight: bold;
+  color: #676767;
+}
+
+#jump_to, #jump_wrapper {
+  position: fixed;
+  right: 0; top: 0;
+  padding: 10px 15px;
+  margin:0;
+}
+
+#jump_wrapper {
+  display: none;
+  padding:0;
+}
+
+#jump_to:hover #jump_wrapper {
+  display: block;
+}
+
+#jump_page_wrapper{
+  position: fixed;
+  right: 0;
+  top: 0;
+  bottom: 0;
+}
+
+#jump_page {
+  padding: 5px 0 3px;
+  margin: 0 0 25px 25px;
+  max-height: 100%;
+  overflow: auto;
+}
+
+#jump_page .source {
+  display: block;
+  padding: 15px;
+  text-decoration: none;
+  border-top: 1px solid #eee;
+}
+
+#jump_page .source:hover {
+  background: #f5f5ff;
+}
+
+#jump_page .source:first-child {
+}
+
+/*---------------------- Low resolutions (> 320px) ---------------------*/
+@media only screen and (min-width: 320px) {
+  .pilwrap { display: none; }
+
+  ul.sections > li > div {
+    display: block;
+    padding:5px 10px 0 10px;
+  }
+
+  ul.sections > li > div.annotation ul, ul.sections > li > div.annotation ol {
+    padding-left: 30px;
+  }
+
+  ul.sections > li > div.content {
+    overflow-x:auto;
+    -webkit-box-shadow: inset 0 0 5px #e5e5ee;
+    box-shadow: inset 0 0 5px #e5e5ee;
+    border: 1px solid #dedede;
+    margin:5px 10px 5px 10px;
+    padding-bottom: 5px;
+  }
+
+  ul.sections > li > div.annotation pre {
+    margin: 7px 0 7px;
+    padding-left: 15px;
+  }
+
+  ul.sections > li > div.annotation p tt, .annotation code {
+    background: #f8f8ff;
+    border: 1px solid #dedede;
+    font-size: 12px;
+    padding: 0 0.2em;
+  }
+}
+
+/*----------------------  (> 481px) ---------------------*/
+@media only screen and (min-width: 481px) {
+  #container {
+    position: relative;
+  }
+  body {
+    background-color: #F5F5FF;
+    font-size: 15px;
+    line-height: 21px;
+  }
+  pre, tt, code {
+    line-height: 18px;
+  }
+  p, ul, ol {
+    margin: 0 0 15px;
+  }
+
+
+  #jump_to {
+    padding: 5px 10px;
+  }
+  #jump_wrapper {
+    padding: 0;
+  }
+  #jump_to, #jump_page {
+    font: 10px Arial;
+    text-transform: uppercase;
+  }
+  #jump_page .source {
+    padding: 5px 10px;
+  }
+  #jump_to a.large {
+    display: inline-block;
+  }
+  #jump_to a.small {
+    display: none;
+  }
+
+
+
+  #background {
+    position: absolute;
+    top: 0; bottom: 0;
+    width: 350px;
+    background: #fff;
+    border-right: 1px solid #e5e5ee;
+    z-index: -1;
+  }
+
+  ul.sections > li > div.annotation ul, ul.sections > li > div.annotation ol {
+    padding-left: 40px;
+  }
+
+  ul.sections > li {
+    white-space: nowrap;
+  }
+
+  ul.sections > li > div {
+    display: inline-block;
+  }
+
+  ul.sections > li > div.annotation {
+    max-width: 350px;
+    min-width: 350px;
+    min-height: 5px;
+    padding: 13px;
+    overflow-x: hidden;
+    white-space: normal;
+    vertical-align: top;
+    text-align: left;
+  }
+  ul.sections > li > div.annotation pre {
+    margin: 15px 0 15px;
+    padding-left: 15px;
+  }
+
+  ul.sections > li > div.content {
+    padding: 13px;
+    vertical-align: top;
+    border: none;
+    -webkit-box-shadow: none;
+    box-shadow: none;
+  }
+
+  .pilwrap {
+    position: relative;
+    display: inline;
+  }
+
+  .pilcrow {
+    font: 12px Arial;
+    text-decoration: none;
+    color: #454545;
+    position: absolute;
+    top: 3px; left: -20px;
+    padding: 1px 2px;
+    opacity: 0;
+    -webkit-transition: opacity 0.2s linear;
+  }
+    .for-h1 .pilcrow {
+      top: 47px;
+    }
+    .for-h2 .pilcrow, .for-h3 .pilcrow, .for-h4 .pilcrow {
+      top: 35px;
+    }
+
+  ul.sections > li > div.annotation:hover .pilcrow {
+    opacity: 1;
+  }
+}
+
+/*---------------------- (> 1025px) ---------------------*/
+@media only screen and (min-width: 1025px) {
+
+  body {
+    font-size: 16px;
+    line-height: 24px;
+  }
+
+  #background {
+    width: 525px;
+  }
+  ul.sections > li > div.annotation {
+    max-width: 525px;
+    min-width: 525px;
+    padding: 10px 25px 1px 50px;
+  }
+  ul.sections > li > div.content {
+    padding: 9px 15px 16px 25px;
+  }
+}
+
+/*---------------------- Syntax Highlighting -----------------------------*/
+
+td.linenos { background-color: #f0f0f0; padding-right: 10px; }
+span.lineno { background-color: #f0f0f0; padding: 0 5px 0 5px; }
+/*
+
+github.com style (c) Vasily Polovnyov <vast@whiteants.net>
+
+*/
+
+pre code {
+  display: block; padding: 0.5em;
+  color: #000;
+  background: #f8f8ff
+}
+
+pre .hljs-comment,
+pre .hljs-template_comment,
+pre .hljs-diff .hljs-header,
+pre .hljs-javadoc {
+  color: #408080;
+  font-style: italic
+}
+
+pre .hljs-keyword,
+pre .hljs-assignment,
+pre .hljs-literal,
+pre .hljs-css .hljs-rule .hljs-keyword,
+pre .hljs-winutils,
+pre .hljs-javascript .hljs-title,
+pre .hljs-lisp .hljs-title,
+pre .hljs-subst {
+  color: #954121;
+  /*font-weight: bold*/
+}
+
+pre .hljs-number,
+pre .hljs-hexcolor {
+  color: #40a070
+}
+
+pre .hljs-string,
+pre .hljs-tag .hljs-value,
+pre .hljs-phpdoc,
+pre .hljs-tex .hljs-formula {
+  color: #219161;
+}
+
+pre .hljs-title,
+pre .hljs-id {
+  color: #19469D;
+}
+pre .hljs-params {
+  color: #00F;
+}
+
+pre .hljs-javascript .hljs-title,
+pre .hljs-lisp .hljs-title,
+pre .hljs-subst {
+  font-weight: normal
+}
+
+pre .hljs-class .hljs-title,
+pre .hljs-haskell .hljs-label,
+pre .hljs-tex .hljs-command {
+  color: #458;
+  font-weight: bold
+}
+
+pre .hljs-tag,
+pre .hljs-tag .hljs-title,
+pre .hljs-rules .hljs-property,
+pre .hljs-django .hljs-tag .hljs-keyword {
+  color: #000080;
+  font-weight: normal
+}
+
+pre .hljs-attribute,
+pre .hljs-variable,
+pre .hljs-instancevar,
+pre .hljs-lisp .hljs-body {
+  color: #008080
+}
+
+pre .hljs-regexp {
+  color: #B68
+}
+
+pre .hljs-class {
+  color: #458;
+  font-weight: bold
+}
+
+pre .hljs-symbol,
+pre .hljs-ruby .hljs-symbol .hljs-string,
+pre .hljs-ruby .hljs-symbol .hljs-keyword,
+pre .hljs-ruby .hljs-symbol .hljs-keymethods,
+pre .hljs-lisp .hljs-keyword,
+pre .hljs-tex .hljs-special,
+pre .hljs-input_number {
+  color: #990073
+}
+
+pre .hljs-builtin,
+pre .hljs-constructor,
+pre .hljs-built_in,
+pre .hljs-lisp .hljs-title {
+  color: #0086b3
+}
+
+pre .hljs-preprocessor,
+pre .hljs-pi,
+pre .hljs-doctype,
+pre .hljs-shebang,
+pre .hljs-cdata {
+  color: #999;
+  font-weight: bold
+}
+
+pre .hljs-deletion {
+  background: #fdd
+}
+
+pre .hljs-addition {
+  background: #dfd
+}
+
+pre .hljs-diff .hljs-change {
+  background: #0086b3
+}
+
+pre .hljs-chunk {
+  color: #aaa
+}
+
+pre .hljs-tex .hljs-formula {
+  opacity: 0.5;
+}
diff --git a/resources/sidebyside/docco.jst b/resources/sidebyside/docco.jst
new file mode 100755
index 00000000..79d88a68
--- /dev/null
+++ b/resources/sidebyside/docco.jst
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+    <title><%= title %></title>
+    <meta http-equiv="content-type" content="text/html,charset=UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <link rel="stylesheet" media="all" href="<%= css %>"/>
+</head>
+<body>
+<div id="container">
+    <div id="background"></div>
+    <% if (sources.length > 1) { %>
+    <ul id="jump_to">
+        <li>
+            <a class="large" href="javascript:void(0);">Jump To &hellip;</a>
+            <a class="small" href="javascript:void(0);">+</a>
+            <div id="jump_wrapper">
+                <div id="jump_page_wrapper">
+                    <div id="jump_page">
+                        <% for (var i=0, l=links.length, later='', now=''; i<l; i++) { %>
+                        <% if (!links[i].image) { %></l>
+                        <% now = path.dirname(links[i].file) %>
+                        <% if (now != later) {%>
+                            <p style="text-align: left">
+                                <%= now %>
+                                <span style="float:right;text-align: right">
+                                    <a class="source" href="<%= links[i].link %>"><%= path.basename(links[i].file) %>
+                                    </a>
+                                </span>
+                            </p>
+                        <% } else { %>
+                            <a class="source" href="<%= links[i].link %>"><%= path.basename(links[i].file) %>
+                            </a>
+                        <% } %>
+                        <% later = now %>
+                        <% } }%>
+                    </div>
+                </div>
+        </li>
+    </ul>
+    <% } %>
+    <ul class="sections">
+        <% if (!hasTitle) { %>
+        <li id="title">
+            <div class="annotation">
+                <h1><%= title %></h1>
+            </div>
+        </li>
+        <% } %>
+        <% for (var i=0, l=sections.length; i
+        <l
+        ; i++) { %>
+        <% var section = sections[i]; %>
+        <li id="section-<%= i + 1 %>">
+            <div class="annotation">
+                <% heading = section.docsHtml.match(/^\s*<(h\d)>/) %>
+                <div class="pilwrap <%= heading ? 'for-' + heading[1] : '' %>">
+                    <a class="pilcrow" href="#section-<%= i + 1 %>">&#182;</a>
+                </div>
+                <%= section.docsHtml %>
+            </div>
+            <% if (section.codeText.replace(/\s/gm, '') != '') { %>
+            <div class="content"><%= section.codeHtml %></div>
+            <% } %>
+        </li>
+        <% } %>
+    </ul>
+</div>
+</body>
+</html>
diff --git a/resources/sidebyside/public/fonts/aller-bold.eot b/resources/sidebyside/public/fonts/aller-bold.eot
new file mode 100755
index 00000000..1b32532a
Binary files /dev/null and b/resources/sidebyside/public/fonts/aller-bold.eot differ
diff --git a/resources/sidebyside/public/fonts/aller-bold.ttf b/resources/sidebyside/public/fonts/aller-bold.ttf
new file mode 100755
index 00000000..dc4cc9c2
Binary files /dev/null and b/resources/sidebyside/public/fonts/aller-bold.ttf differ
diff --git a/resources/sidebyside/public/fonts/aller-bold.woff b/resources/sidebyside/public/fonts/aller-bold.woff
new file mode 100755
index 00000000..fa16fd0a
Binary files /dev/null and b/resources/sidebyside/public/fonts/aller-bold.woff differ
diff --git a/resources/sidebyside/public/fonts/aller-light.eot b/resources/sidebyside/public/fonts/aller-light.eot
new file mode 100755
index 00000000..40bd654b
Binary files /dev/null and b/resources/sidebyside/public/fonts/aller-light.eot differ
diff --git a/resources/sidebyside/public/fonts/aller-light.ttf b/resources/sidebyside/public/fonts/aller-light.ttf
new file mode 100755
index 00000000..c2c72902
Binary files /dev/null and b/resources/sidebyside/public/fonts/aller-light.ttf differ
diff --git a/resources/sidebyside/public/fonts/aller-light.woff b/resources/sidebyside/public/fonts/aller-light.woff
new file mode 100755
index 00000000..81a09d18
Binary files /dev/null and b/resources/sidebyside/public/fonts/aller-light.woff differ
diff --git a/resources/sidebyside/public/fonts/roboto-black.eot b/resources/sidebyside/public/fonts/roboto-black.eot
new file mode 100755
index 00000000..571ed491
Binary files /dev/null and b/resources/sidebyside/public/fonts/roboto-black.eot differ
diff --git a/resources/sidebyside/public/fonts/roboto-black.ttf b/resources/sidebyside/public/fonts/roboto-black.ttf
new file mode 100755
index 00000000..e0300b3e
Binary files /dev/null and b/resources/sidebyside/public/fonts/roboto-black.ttf differ
diff --git a/resources/sidebyside/public/fonts/roboto-black.woff b/resources/sidebyside/public/fonts/roboto-black.woff
new file mode 100755
index 00000000..642e5b60
Binary files /dev/null and b/resources/sidebyside/public/fonts/roboto-black.woff differ
diff --git a/resources/sidebyside/public/stylesheets/normalize.css b/resources/sidebyside/public/stylesheets/normalize.css
new file mode 100755
index 00000000..73abb76f
--- /dev/null
+++ b/resources/sidebyside/public/stylesheets/normalize.css
@@ -0,0 +1,375 @@
+/*! normalize.css v2.0.1 | MIT License | git.io/normalize */
+
+/* ==========================================================================
+   HTML5 display definitions
+   ========================================================================== */
+
+/*
+ * Corrects `block` display not defined in IE 8/9.
+ */
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+nav,
+section,
+summary {
+    display: block;
+}
+
+/*
+ * Corrects `inline-block` display not defined in IE 8/9.
+ */
+
+audio,
+canvas,
+video {
+    display: inline-block;
+}
+
+/*
+ * Prevents modern browsers from displaying `audio` without controls.
+ * Remove excess height in iOS 5 devices.
+ */
+
+audio:not([controls]) {
+    display: none;
+    height: 0;
+}
+
+/*
+ * Addresses styling for `hidden` attribute not present in IE 8/9.
+ */
+
+[hidden] {
+    display: none;
+}
+
+/* ==========================================================================
+   Base
+   ========================================================================== */
+
+/*
+ * 1. Sets default font family to sans-serif.
+ * 2. Prevents iOS text size adjust after orientation change, without disabling
+ *    user zoom.
+ */
+
+html {
+    font-family: sans-serif; /* 1 */
+    -webkit-text-size-adjust: 100%; /* 2 */
+    -ms-text-size-adjust: 100%; /* 2 */
+}
+
+/*
+ * Removes default margin.
+ */
+
+body {
+    margin: 0;
+}
+
+/* ==========================================================================
+   Links
+   ========================================================================== */
+
+/*
+ * Addresses `outline` inconsistency between Chrome and other browsers.
+ */
+
+a:focus {
+    outline: thin dotted;
+}
+
+/*
+ * Improves readability when focused and also mouse hovered in all browsers.
+ */
+
+a:active,
+a:hover {
+    outline: 0;
+}
+
+/* ==========================================================================
+   Typography
+   ========================================================================== */
+
+/*
+ * Addresses `h1` font sizes within `section` and `article` in Firefox 4+,
+ * Safari 5, and Chrome.
+ */
+
+h1 {
+    font-size: 2em;
+}
+
+/*
+ * Addresses styling not present in IE 8/9, Safari 5, and Chrome.
+ */
+
+abbr[title] {
+    border-bottom: 1px dotted;
+}
+
+/*
+ * Addresses style set to `bolder` in Firefox 4+, Safari 5, and Chrome.
+ */
+
+b,
+strong {
+    font-weight: bold;
+}
+
+/*
+ * Addresses styling not present in Safari 5 and Chrome.
+ */
+
+dfn {
+    font-style: italic;
+}
+
+/*
+ * Addresses styling not present in IE 8/9.
+ */
+
+mark {
+    background: #ff0;
+    color: #000;
+}
+
+
+/*
+ * Corrects font family set oddly in Safari 5 and Chrome.
+ */
+
+code,
+kbd,
+pre,
+samp {
+    font-family: monospace, serif;
+    font-size: 1em;
+}
+
+/*
+ * Improves readability of pre-formatted text in all browsers.
+ */
+
+pre {
+    white-space: pre;
+    white-space: pre-wrap;
+    word-wrap: break-word;
+}
+
+/*
+ * Sets consistent quote types.
+ */
+
+q {
+    quotes: "\201C" "\201D" "\2018" "\2019";
+}
+
+/*
+ * Addresses inconsistent and variable font size in all browsers.
+ */
+
+small {
+    font-size: 80%;
+}
+
+/*
+ * Prevents `sub` and `sup` affecting `line-height` in all browsers.
+ */
+
+sub,
+sup {
+    font-size: 75%;
+    line-height: 0;
+    position: relative;
+    vertical-align: baseline;
+}
+
+sup {
+    top: -0.5em;
+}
+
+sub {
+    bottom: -0.25em;
+}
+
+/* ==========================================================================
+   Embedded content
+   ========================================================================== */
+
+/*
+ * Removes border when inside `a` element in IE 8/9.
+ */
+
+img {
+    border: 0;
+}
+
+/*
+ * Corrects overflow displayed oddly in IE 9.
+ */
+
+svg:not(:root) {
+    overflow: hidden;
+}
+
+/* ==========================================================================
+   Figures
+   ========================================================================== */
+
+/*
+ * Addresses margin not present in IE 8/9 and Safari 5.
+ */
+
+figure {
+    margin: 0;
+}
+
+/* ==========================================================================
+   Forms
+   ========================================================================== */
+
+/*
+ * Define consistent border, margin, and padding.
+ */
+
+fieldset {
+    border: 1px solid #c0c0c0;
+    margin: 0 2px;
+    padding: 0.35em 0.625em 0.75em;
+}
+
+/*
+ * 1. Corrects color not being inherited in IE 8/9.
+ * 2. Remove padding so people aren't caught out if they zero out fieldsets.
+ */
+
+legend {
+    border: 0; /* 1 */
+    padding: 0; /* 2 */
+}
+
+/*
+ * 1. Corrects font family not being inherited in all browsers.
+ * 2. Corrects font size not being inherited in all browsers.
+ * 3. Addresses margins set differently in Firefox 4+, Safari 5, and Chrome
+ */
+
+button,
+input,
+select,
+textarea {
+    font-family: inherit; /* 1 */
+    font-size: 100%; /* 2 */
+    margin: 0; /* 3 */
+}
+
+/*
+ * Addresses Firefox 4+ setting `line-height` on `input` using `!important` in
+ * the UA stylesheet.
+ */
+
+button,
+input {
+    line-height: normal;
+}
+
+/*
+ * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
+ *    and `video` controls.
+ * 2. Corrects inability to style clickable `input` types in iOS.
+ * 3. Improves usability and consistency of cursor style between image-type
+ *    `input` and others.
+ */
+
+button,
+html input[type="button"], /* 1 */
+input[type="reset"],
+input[type="submit"] {
+    -webkit-appearance: button; /* 2 */
+    cursor: pointer; /* 3 */
+}
+
+/*
+ * Re-set default cursor for disabled elements.
+ */
+
+button[disabled],
+input[disabled] {
+    cursor: default;
+}
+
+/*
+ * 1. Addresses box sizing set to `content-box` in IE 8/9.
+ * 2. Removes excess padding in IE 8/9.
+ */
+
+input[type="checkbox"],
+input[type="radio"] {
+    box-sizing: border-box; /* 1 */
+    padding: 0; /* 2 */
+}
+
+/*
+ * 1. Addresses `appearance` set to `searchfield` in Safari 5 and Chrome.
+ * 2. Addresses `box-sizing` set to `border-box` in Safari 5 and Chrome
+ *    (include `-moz` to future-proof).
+ */
+
+input[type="search"] {
+    -webkit-appearance: textfield; /* 1 */
+    -moz-box-sizing: content-box;
+    -webkit-box-sizing: content-box; /* 2 */
+    box-sizing: content-box;
+}
+
+/*
+ * Removes inner padding and search cancel button in Safari 5 and Chrome
+ * on OS X.
+ */
+
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+    -webkit-appearance: none;
+}
+
+/*
+ * Removes inner padding and border in Firefox 4+.
+ */
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+    border: 0;
+    padding: 0;
+}
+
+/*
+ * 1. Removes default vertical scrollbar in IE 8/9.
+ * 2. Improves readability and alignment in all browsers.
+ */
+
+textarea {
+    overflow: auto; /* 1 */
+    vertical-align: top; /* 2 */
+}
+
+/* ==========================================================================
+   Tables
+   ========================================================================== */
+
+/*
+ * Remove most spacing between table cells.
+ */
+
+table {
+    border-collapse: collapse;
+    border-spacing: 0;
+}
\ No newline at end of file
diff --git a/src/buildMatchers.js b/src/buildMatchers.js
new file mode 100755
index 00000000..b554446a
--- /dev/null
+++ b/src/buildMatchers.js
@@ -0,0 +1,30 @@
+var buildMatchers;
+
+module.exports = buildMatchers = function(languages) {
+  var ext, l, start, stop;
+  for (ext in languages) {
+    l = languages[ext];
+    l.commentMatcher = RegExp("^\\s*" + l.symbol + "\\s?");
+    l.commentFilter = /(^#![\/]|^\s*#\{)/;
+    if (l.link) {
+      l.imageMatcher = RegExp("^" + l.link + "\\[(.+)\\]\\((.+)\\)");
+      l.linkMatcher = /^\[(.+)\]\((.+)\)/;
+    }
+    if (l.section) {
+      l.sectionMatcher = RegExp("^" + l.section + "\\s?");
+    }
+    if (l.multiline) {
+      start = l.multiline.start.replace(/(.{1})/g, "\\$1");
+      stop = l.multiline.stop.replace(/(.{1})/g, "\\$1");
+      l.startMatcher = RegExp("^\\s*" + start);
+      l.stopMatcher = RegExp("^\\s*" + stop);
+    }
+    if (l.code) {
+      l.code = l.code.replace(/(.{1})/g, "\\$1");
+      l.codeMatcher = RegExp("^\\s*" + l.code);
+    }
+  }
+  return languages;
+};
+
+//# sourceMappingURL=buildMatchers.js.map
diff --git a/src/buildMatchers.js.map b/src/buildMatchers.js.map
new file mode 100644
index 00000000..f7625b18
--- /dev/null
+++ b/src/buildMatchers.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"buildMatchers.js","sources":["buildMatchers.litcoffee"],"names":[],"mappings":"AAEI,IAAA;;AAAA,MAAM,CAAC,OAAP,GAAiB,aAAA,GAAgB,SAAC,SAAD;AAC/B,MAAA;AAAA,OAAA,gBAAA;;IAIE,CAAC,CAAC,cAAF,GAAmB,MAAA,CAAA,OAAA,GAAS,CAAC,CAAC,MAAX,GAAkB,MAAlB;IAInB,CAAC,CAAC,aAAF,GAAkB;IAIlB,IAAG,CAAC,CAAC,IAAL;MACE,CAAC,CAAC,YAAF,GAAiB,MAAA,CAAA,GAAA,GAAM,CAAC,CAAC,IAAR,GAAa,sBAAb;MACjB,CAAC,CAAC,WAAF,GAAgB,oBAFlB;;IAKA,IAAG,CAAC,CAAC,OAAL;MACE,CAAC,CAAC,cAAF,GAAmB,MAAA,CAAA,GAAA,GAAM,CAAC,CAAC,OAAR,GAAgB,MAAhB,EADrB;;IAMA,IAAG,CAAC,CAAC,SAAL;MAEE,KAAA,GAAQ,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,OAAlB,CAA0B,SAA1B,EAAoC,MAApC;MACR,IAAA,GAAO,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,OAAjB,CAAyB,SAAzB,EAAmC,MAAnC;MAEP,CAAC,CAAC,YAAF,GAAiB,MAAA,CAAA,OAAA,GAAS,KAAT;MACjB,CAAC,CAAC,WAAF,GAAgB,MAAA,CAAA,OAAA,GAAS,IAAT,EANlB;;IAQA,IAAG,CAAC,CAAC,IAAL;MACE,CAAC,CAAC,IAAF,GAAS,CAAC,CAAC,IAAI,CAAC,OAAP,CAAe,SAAf,EAAyB,MAAzB;MACT,CAAC,CAAC,WAAF,GAAgB,MAAA,CAAA,OAAA,GAAS,CAAC,CAAC,IAAX,EAFlB;;AA/BF;SAmCA;AApC+B","sourcesContent":["Build out the appropriate matchers and delimiters for each language.\n\n    module.exports = buildMatchers = (languages) ->\n      for ext, l of languages\n\nDoes the line begin with a comment?\n\n        l.commentMatcher = ///^\\s*#{l.symbol}\\s?///\n\nIgnore [hashbangs](http://en.wikipedia.org/wiki/Shebang_%28Unix%29) and interpolations...\n\n        l.commentFilter = /(^#![/]|^\\s*#\\{)/\n\nLook for links if necessary.\n\n        if l.link\n          l.imageMatcher = ///^#{l.link}\\[(.+)\\]\\((.+)\\)///\n          l.linkMatcher = ///^\\[(.+)\\]\\((.+)\\)///\nLook for explict section breaks\n\n        if l.section\n          l.sectionMatcher = ///^#{l.section}\\s?///\n\nLook for multiline comments.  The tricky part here is that the characters need to be escaped.\n\n\n        if l.multiline\n          # use replace to insert a '\\' in front of every character\n          start = l.multiline.start.replace(/(.{1})/g,\"\\\\$1\")\n          stop = l.multiline.stop.replace(/(.{1})/g,\"\\\\$1\")\n\n          l.startMatcher = ///^\\s*#{start}///\n          l.stopMatcher = ///^\\s*#{stop}///\n\n        if l.code\n          l.code = l.code.replace(/(.{1})/g,\"\\\\$1\")\n          l.codeMatcher = ///^\\s*#{l.code}///\n\n      languages\n"]}
\ No newline at end of file
diff --git a/src/buildMatchers.litcoffee b/src/buildMatchers.litcoffee
new file mode 100755
index 00000000..cee09aa0
--- /dev/null
+++ b/src/buildMatchers.litcoffee
@@ -0,0 +1,39 @@
+Build out the appropriate matchers and delimiters for each language.
+
+    module.exports = buildMatchers = (languages) ->
+      for ext, l of languages
+
+Does the line begin with a comment?
+
+        l.commentMatcher = ///^\s*#{l.symbol}\s?///
+
+Ignore [hashbangs](http://en.wikipedia.org/wiki/Shebang_%28Unix%29) and interpolations...
+
+        l.commentFilter = /(^#![/]|^\s*#\{)/
+
+Look for links if necessary.
+
+        if l.link
+          l.imageMatcher = ///^#{l.link}\[(.+)\]\((.+)\)///
+          l.linkMatcher = ///^\[(.+)\]\((.+)\)///
+Look for explict section breaks
+
+        if l.section
+          l.sectionMatcher = ///^#{l.section}\s?///
+
+Look for multiline comments.  The tricky part here is that the characters need to be escaped.
+
+
+        if l.multiline
+          # use replace to insert a '\' in front of every character
+          start = l.multiline.start.replace(/(.{1})/g,"\\$1")
+          stop = l.multiline.stop.replace(/(.{1})/g,"\\$1")
+
+          l.startMatcher = ///^\s*#{start}///
+          l.stopMatcher = ///^\s*#{stop}///
+
+        if l.code
+          l.code = l.code.replace(/(.{1})/g,"\\$1")
+          l.codeMatcher = ///^\s*#{l.code}///
+
+      languages
diff --git a/src/configure.js b/src/configure.js
new file mode 100755
index 00000000..6b3ce94f
--- /dev/null
+++ b/src/configure.js
@@ -0,0 +1,46 @@
+var _, buildMatchers, configure, fs, getLanguage, path,
+  slice = [].slice;
+
+_ = require('underscore');
+
+fs = require('fs-extra');
+
+path = require('path');
+
+getLanguage = require('./getLanguage');
+
+buildMatchers = require('./buildMatchers');
+
+module.exports = configure = function(options, defaults, languages) {
+  var config, dir;
+  config = _.extend({}, defaults, _.pick.apply(_, [options].concat(slice.call(_.keys(defaults)))));
+  config.languages = buildMatchers(languages);
+  if (options.template) {
+    if (!options.css) {
+      console.warn("docco: no stylesheet file specified");
+    }
+    config.layout = null;
+  } else {
+    dir = config.layout = path.join(__dirname, '../resources', config.layout);
+    if (fs.existsSync(path.join(dir, 'public'))) {
+      config["public"] = path.join(dir, 'public');
+    }
+    config.template = path.join(dir, 'docco.jst');
+    config.css = options.css || path.join(dir, 'docco.css');
+  }
+  config.template = _.template(fs.readFileSync(config.template).toString());
+  if (options.marked) {
+    config.marked = JSON.parse(fs.readFileSync(options.marked));
+  }
+  config.sources = options.args.filter(function(source) {
+    var lang;
+    lang = getLanguage(source, languages, config.extension);
+    if (!lang) {
+      console.warn("docco: skipped unknown type (" + (path.basename(source)) + ")");
+    }
+    return lang;
+  }).sort();
+  return config;
+};
+
+//# sourceMappingURL=configure.js.map
diff --git a/src/configure.js.map b/src/configure.js.map
new file mode 100644
index 00000000..fde4574f
--- /dev/null
+++ b/src/configure.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"configure.js","sources":["configure.litcoffee"],"names":[],"mappings":"AAAI,IAAA,kDAAA;EAAA;;AAAA,CAAA,GAAI,OAAA,CAAQ,YAAR;;AACJ,EAAA,GAAK,OAAA,CAAQ,UAAR;;AACL,IAAA,GAAO,OAAA,CAAQ,MAAR;;AACP,WAAA,GAAc,OAAA,CAAQ,eAAR;;AACd,aAAA,GAAgB,OAAA,CAAQ,iBAAR;;AAMhB,MAAM,CAAC,OAAP,GAAiB,SAAA,GAAY,SAAC,OAAD,EAAU,QAAV,EAAoB,SAApB;AAC3B,MAAA;EAAA,MAAA,GAAS,CAAC,CAAC,MAAF,CAAS,EAAT,EAAa,QAAb,EAAuB,CAAC,CAAC,IAAF,UAAO,CAAA,OAAS,SAAA,WAAA,CAAC,CAAC,IAAF,CAAO,QAAP,CAAA,CAAA,CAAhB,CAAvB;EAIT,MAAM,CAAC,SAAP,GAAmB,aAAA,CAAc,SAAd;EAOnB,IAAG,OAAO,CAAC,QAAX;IACE,IAAA,CAAO,OAAO,CAAC,GAAf;MACE,OAAO,CAAC,IAAR,CAAa,qCAAb,EADF;;IAEA,MAAM,CAAC,MAAP,GAAgB,KAHlB;GAAA,MAAA;IAKE,GAAA,GAAM,MAAM,CAAC,MAAP,GAAgB,IAAI,CAAC,IAAL,CAAU,SAAV,EAAqB,cAArB,EAAqC,MAAM,CAAC,MAA5C;IACtB,IAAiD,EAAE,CAAC,UAAH,CAAc,IAAI,CAAC,IAAL,CAAU,GAAV,EAAe,QAAf,CAAd,CAAjD;MAAA,MAAM,EAAC,MAAD,EAAN,GAAsB,IAAI,CAAC,IAAL,CAAU,GAAV,EAAe,QAAf,EAAtB;;IACA,MAAM,CAAC,QAAP,GAAsB,IAAI,CAAC,IAAL,CAAU,GAAV,EAAe,WAAf;IACtB,MAAM,CAAC,GAAP,GAAsB,OAAO,CAAC,GAAR,IAAe,IAAI,CAAC,IAAL,CAAU,GAAV,EAAe,WAAf,EARvC;;EASA,MAAM,CAAC,QAAP,GAAkB,CAAC,CAAC,QAAF,CAAW,EAAE,CAAC,YAAH,CAAgB,MAAM,CAAC,QAAvB,CAAgC,CAAC,QAAjC,CAAA,CAAX;EAElB,IAAG,OAAO,CAAC,MAAX;IACE,MAAM,CAAC,MAAP,GAAgB,IAAI,CAAC,KAAL,CAAW,EAAE,CAAC,YAAH,CAAgB,OAAO,CAAC,MAAxB,CAAX,EADlB;;EAGA,MAAM,CAAC,OAAP,GAAiB,OAAO,CAAC,IAAI,CAAC,MAAb,CAAoB,SAAC,MAAD;AACnC,QAAA;IAAA,IAAA,GAAO,WAAA,CAAY,MAAZ,EAAoB,SAApB,EAA+B,MAAM,CAAC,SAAtC;IACP,IAAA,CAA4E,IAA5E;MAAA,OAAO,CAAC,IAAR,CAAa,+BAAA,GAA+B,CAAC,IAAI,CAAC,QAAL,CAAc,MAAd,CAAD,CAA/B,GAAqD,GAAlE,EAAA;;WACA;EAHmC,CAApB,CAIhB,CAAC,IAJe,CAAA;SAMjB;AAhC2B","sourcesContent":["    _ = require 'underscore'\n    fs = require 'fs-extra'\n    path = require 'path'\n    getLanguage = require './getLanguage'\n    buildMatchers = require './buildMatchers'\n\n**Configure** this particular run of Docco. We might use a passed-in external\ntemplate, or one of the built-in **layouts**. We only attempt to process\nsource files for languages for which we have definitions.\n\n    module.exports = configure = (options, defaults, languages) ->\n      config = _.extend {}, defaults, _.pick(options, _.keys(defaults)...)\n\nBuild out the appropriate matchers and delimiters for each language.\n\n      config.languages = buildMatchers languages\n\nThe user is able to override the layout file used with the `--template` parameter.\nIn this case, it is also neccessary to explicitly specify a stylesheet file.\nThese custom templates are compiled exactly like the predefined ones, but the `public` folder\nis only copied for the latter.\n\n      if options.template\n        unless options.css\n          console.warn \"docco: no stylesheet file specified\"\n        config.layout = null\n      else\n        dir = config.layout = path.join __dirname, '../resources', config.layout\n        config.public       = path.join dir, 'public' if fs.existsSync path.join dir, 'public'\n        config.template     = path.join dir, 'docco.jst'\n        config.css          = options.css or path.join dir, 'docco.css'\n      config.template = _.template fs.readFileSync(config.template).toString()\n\n      if options.marked\n        config.marked = JSON.parse fs.readFileSync(options.marked)\n\n      config.sources = options.args.filter((source) ->\n        lang = getLanguage source, languages, config.extension\n        console.warn \"docco: skipped unknown type (#{path.basename source})\" unless lang\n        lang\n      ).sort()\n\n      config\n"]}
\ No newline at end of file
diff --git a/src/configure.litcoffee b/src/configure.litcoffee
new file mode 100755
index 00000000..92ef6a66
--- /dev/null
+++ b/src/configure.litcoffee
@@ -0,0 +1,43 @@
+    _ = require 'underscore'
+    fs = require 'fs-extra'
+    path = require 'path'
+    getLanguage = require './getLanguage'
+    buildMatchers = require './buildMatchers'
+
+**Configure** this particular run of Docco. We might use a passed-in external
+template, or one of the built-in **layouts**. We only attempt to process
+source files for languages for which we have definitions.
+
+    module.exports = configure = (options, defaults, languages) ->
+      config = _.extend {}, defaults, _.pick(options, _.keys(defaults)...)
+
+Build out the appropriate matchers and delimiters for each language.
+
+      config.languages = buildMatchers languages
+
+The user is able to override the layout file used with the `--template` parameter.
+In this case, it is also neccessary to explicitly specify a stylesheet file.
+These custom templates are compiled exactly like the predefined ones, but the `public` folder
+is only copied for the latter.
+
+      if options.template
+        unless options.css
+          console.warn "docco: no stylesheet file specified"
+        config.layout = null
+      else
+        dir = config.layout = path.join __dirname, '../resources', config.layout
+        config.public       = path.join dir, 'public' if fs.existsSync path.join dir, 'public'
+        config.template     = path.join dir, 'docco.jst'
+        config.css          = options.css or path.join dir, 'docco.css'
+      config.template = _.template fs.readFileSync(config.template).toString()
+
+      if options.marked
+        config.marked = JSON.parse fs.readFileSync(options.marked)
+
+      config.sources = options.args.filter((source) ->
+        lang = getLanguage source, languages, config.extension
+        console.warn "docco: skipped unknown type (#{path.basename source})" unless lang
+        lang
+      ).sort()
+
+      config
diff --git a/src/document.js b/src/document.js
new file mode 100755
index 00000000..c0e40727
--- /dev/null
+++ b/src/document.js
@@ -0,0 +1,106 @@
+var _, commander, document, format, fs, getLanguage, glob, highlightjs, marked, parse, path, write;
+
+_ = require('underscore');
+
+fs = require('fs-extra');
+
+path = require('path');
+
+marked = require('marked');
+
+commander = require('commander');
+
+highlightjs = require('highlight.js');
+
+path = require('path');
+
+glob = require('glob');
+
+getLanguage = require('./getLanguage');
+
+parse = require('./parse');
+
+format = require('./format');
+
+write = require('./write');
+
+document = function(config, callback) {
+  if (config == null) {
+    config = {};
+  }
+  fs.mkdirs(config.output, function() {
+    var complete, copyAsset, files, nextFile;
+    callback || (callback = function(error) {
+      if (error) {
+        throw error;
+      }
+    });
+    copyAsset = function(file, callback) {
+      if (!fs.existsSync(file)) {
+        return callback();
+      }
+      return fs.copy(file, path.join(config.output, path.basename(file)), callback);
+    };
+    complete = function() {
+      return copyAsset(config.css, function(error) {
+        if (error) {
+          return callback(error);
+        }
+        if (fs.existsSync(config["public"])) {
+          return copyAsset(config["public"], callback);
+        }
+        return callback();
+      });
+    };
+    files = config.sources.slice();
+    nextFile = function() {
+      var language, source, toDirectory, toFile;
+      source = files.shift();
+      language = config.informationOnFiles[source].language;
+      if (config.flatten && !language.copy) {
+        toDirectory = config.output;
+      } else {
+        toDirectory = config.root + '/' + config.output + '/' + (path.dirname(source));
+      }
+      if (!fs.existsSync(toDirectory)) {
+        fs.mkdirsSync(toDirectory);
+      }
+      if (language.copy) {
+        toFile = toDirectory + '/' + path.basename(source);
+        console.log("docco: " + source + " -> " + toFile);
+        return fs.copy(source, toFile, function(error, result) {
+          if (error) {
+            return callback(error);
+          }
+          if (files.length) {
+            return nextFile();
+          } else {
+            return complete();
+          }
+        });
+      } else {
+        return fs.readFile(source, function(error, buffer) {
+          var code, sections;
+          if (error) {
+            return callback(error);
+          }
+          code = buffer.toString();
+          sections = parse(source, language, code, config);
+          format(source, language, sections, config);
+          toFile = toDirectory + '/' + (path.basename(source, path.extname(source)));
+          write(source, sections, config);
+          if (files.length) {
+            return nextFile();
+          } else {
+            return complete();
+          }
+        });
+      }
+    };
+    return nextFile();
+  });
+};
+
+module.exports = document;
+
+//# sourceMappingURL=document.js.map
diff --git a/src/document.js.map b/src/document.js.map
new file mode 100644
index 00000000..5d32045d
--- /dev/null
+++ b/src/document.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"document.js","sources":["document.litcoffee"],"names":[],"mappings":"AAAI,IAAA;;AAAA,CAAA,GAAc,OAAA,CAAQ,YAAR;;AACd,EAAA,GAAc,OAAA,CAAQ,UAAR;;AACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;AACd,MAAA,GAAc,OAAA,CAAQ,QAAR;;AACd,SAAA,GAAc,OAAA,CAAQ,WAAR;;AACd,WAAA,GAAc,OAAA,CAAQ,cAAR;;AACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;AACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;AAEd,WAAA,GAAc,OAAA,CAAQ,eAAR;;AACd,KAAA,GAAQ,OAAA,CAAQ,SAAR;;AACR,MAAA,GAAS,OAAA,CAAQ,UAAR;;AACT,KAAA,GAAQ,OAAA,CAAQ,SAAR;;AAOR,QAAA,GAAW,SAAC,MAAD,EAAc,QAAd;;IAAC,SAAS;;EAEnB,EAAE,CAAC,MAAH,CAAU,MAAM,CAAC,MAAjB,EAAyB,SAAA;AAEvB,QAAA;IAAA,aAAA,WAAa,SAAC,KAAD;MAAW,IAAe,KAAf;AAAA,cAAM,MAAN;;IAAX;IACb,SAAA,GAAa,SAAC,IAAD,EAAO,QAAP;MACX,IAAA,CAAyB,EAAE,CAAC,UAAH,CAAc,IAAd,CAAzB;AAAA,eAAO,QAAA,CAAA,EAAP;;aACA,EAAE,CAAC,IAAH,CAAQ,IAAR,EAAc,IAAI,CAAC,IAAL,CAAU,MAAM,CAAC,MAAjB,EAAyB,IAAI,CAAC,QAAL,CAAc,IAAd,CAAzB,CAAd,EAA6D,QAA7D;IAFW;IAIb,QAAA,GAAa,SAAA;aACX,SAAA,CAAU,MAAM,CAAC,GAAjB,EAAsB,SAAC,KAAD;QACpB,IAAyB,KAAzB;AAAA,iBAAO,QAAA,CAAS,KAAT,EAAP;;QACA,IAA4C,EAAE,CAAC,UAAH,CAAc,MAAM,EAAC,MAAD,EAApB,CAA5C;AAAA,iBAAO,SAAA,CAAU,MAAM,EAAC,MAAD,EAAhB,EAAyB,QAAzB,EAAP;;eACA,QAAA,CAAA;MAHoB,CAAtB;IADW;IAMb,KAAA,GAAQ,MAAM,CAAC,OAAO,CAAC,KAAf,CAAA;IAER,QAAA,GAAW,SAAA;AACT,UAAA;MAAA,MAAA,GAAS,KAAK,CAAC,KAAN,CAAA;MAIT,QAAA,GAAW,MAAM,CAAC,kBAAmB,CAAA,MAAA,CAAO,CAAC;MAE7C,IAAG,MAAM,CAAC,OAAP,IAAmB,CAAC,QAAQ,CAAC,IAAhC;QACE,WAAA,GAAc,MAAM,CAAC,OADvB;OAAA,MAAA;QAGE,WAAA,GAAc,MAAM,CAAC,IAAP,GAAc,GAAd,GAAoB,MAAM,CAAC,MAA3B,GAAoC,GAApC,GAA0C,CAAC,IAAI,CAAC,OAAL,CAAa,MAAb,CAAD,EAH1D;;MAQA,IAAG,CAAC,EAAE,CAAC,UAAH,CAAc,WAAd,CAAJ;QACE,EAAE,CAAC,UAAH,CAAc,WAAd,EADF;;MAKA,IAAG,QAAQ,CAAC,IAAZ;QACE,MAAA,GAAS,WAAA,GAAc,GAAd,GAAoB,IAAI,CAAC,QAAL,CAAc,MAAd;QAC7B,OAAO,CAAC,GAAR,CAAY,SAAA,GAAU,MAAV,GAAiB,MAAjB,GAAuB,MAAnC;eAEA,EAAE,CAAC,IAAH,CAAQ,MAAR,EAAgB,MAAhB,EAAwB,SAAC,KAAD,EAAQ,MAAR;UACtB,IAA0B,KAA1B;AAAA,mBAAO,QAAA,CAAS,KAAT,EAAP;;UACA,IAAG,KAAK,CAAC,MAAT;mBAAqB,QAAA,CAAA,EAArB;WAAA,MAAA;mBAAqC,QAAA,CAAA,EAArC;;QAFsB,CAAxB,EAJF;OAAA,MAAA;eAWE,EAAE,CAAC,QAAH,CAAY,MAAZ,EAAoB,SAAC,KAAD,EAAQ,MAAR;AAClB,cAAA;UAAA,IAA0B,KAA1B;AAAA,mBAAO,QAAA,CAAS,KAAT,EAAP;;UAEA,IAAA,GAAO,MAAM,CAAC,QAAP,CAAA;UAEP,QAAA,GAAW,KAAA,CAAM,MAAN,EAAc,QAAd,EAAwB,IAAxB,EAA8B,MAA9B;UACX,MAAA,CAAO,MAAP,EAAe,QAAf,EAAyB,QAAzB,EAAmC,MAAnC;UACA,MAAA,GAAS,WAAA,GAAc,GAAd,GAAoB,CAAC,IAAI,CAAC,QAAL,CAAc,MAAd,EAAsB,IAAI,CAAC,OAAL,CAAa,MAAb,CAAtB,CAAD;UAE7B,KAAA,CAAM,MAAN,EAAc,QAAd,EAAwB,MAAxB;UACA,IAAG,KAAK,CAAC,MAAT;mBAAqB,QAAA,CAAA,EAArB;WAAA,MAAA;mBAAqC,QAAA,CAAA,EAArC;;QAVkB,CAApB,EAXF;;IApBS;WA2CX,QAAA,CAAA;EA1DuB,CAAzB;AAFS;;AA+DX,MAAM,CAAC,OAAP,GAAiB","sourcesContent":["    _           = require 'underscore'\n    fs          = require 'fs-extra'\n    path        = require 'path'\n    marked      = require 'marked'\n    commander   = require 'commander'\n    highlightjs = require 'highlight.js'\n    path        = require 'path'\n    glob        = require 'glob'\n\n    getLanguage = require './getLanguage'\n    parse = require './parse'\n    format = require './format'\n    write = require './write'\n\nGenerate the documentation for our configured source file by copying over static\nassets, reading all the source files in, splitting them up into prose+code\nsections, highlighting each file in the appropriate language, and printing them\nout in an HTML template.\n\n    document = (config = {}, callback) ->\n\n      fs.mkdirs config.output, ->\n\n        callback or= (error) -> throw error if error\n        copyAsset  = (file, callback) ->\n          return callback() unless fs.existsSync file\n          fs.copy file, path.join(config.output, path.basename(file)), callback\n\n        complete   = ->\n          copyAsset config.css, (error) ->\n            return callback error if error\n            return copyAsset config.public, callback if fs.existsSync config.public\n            callback()\n\n        files = config.sources.slice()\n\n        nextFile = () ->\n          source = files.shift()\n\nIf keeping the directory hierarchy, then insert the file's relative directory in to the path.\n\n          language = config.informationOnFiles[source].language\n\n          if config.flatten and !language.copy\n            toDirectory = config.output\n          else\n            toDirectory = config.root + '/' + config.output + '/' + (path.dirname source)\n\nMake sure the target directory exits.\n\n          # todo: async versions of exits and mkdir.\n          if !fs.existsSync(toDirectory)\n            fs.mkdirsSync(toDirectory)\n\nImplementation of copying files if specified in the language file\n\n          if language.copy\n            toFile = toDirectory + '/' + path.basename source\n            console.log \"docco: #{source} -> #{toFile}\"\n\n            fs.copy source, toFile, (error, result) ->\n              return callback(error) if error\n              if files.length then nextFile() else complete()\n\nImplementation of spliting comments and code into split view html files.\n\n          else\n            fs.readFile source, (error, buffer) ->\n              return callback(error) if error\n\n              code = buffer.toString()\n\n              sections = parse source, language, code, config\n              format source, language, sections, config\n              toFile = toDirectory + '/' + (path.basename source, path.extname source)\n\n              write source, sections, config\n              if files.length then nextFile() else complete()\n\n        nextFile()\n      return\n\n    module.exports = document\n"]}
\ No newline at end of file
diff --git a/src/document.litcoffee b/src/document.litcoffee
new file mode 100755
index 00000000..8bddbe6c
--- /dev/null
+++ b/src/document.litcoffee
@@ -0,0 +1,83 @@
+    _           = require 'underscore'
+    fs          = require 'fs-extra'
+    path        = require 'path'
+    marked      = require 'marked'
+    commander   = require 'commander'
+    highlightjs = require 'highlight.js'
+    path        = require 'path'
+    glob        = require 'glob'
+
+    getLanguage = require './getLanguage'
+    parse = require './parse'
+    format = require './format'
+    write = require './write'
+
+Generate the documentation for our configured source file by copying over static
+assets, reading all the source files in, splitting them up into prose+code
+sections, highlighting each file in the appropriate language, and printing them
+out in an HTML template.
+
+    document = (config = {}, callback) ->
+
+      fs.mkdirs config.output, ->
+
+        callback or= (error) -> throw error if error
+        copyAsset  = (file, callback) ->
+          return callback() unless fs.existsSync file
+          fs.copy file, path.join(config.output, path.basename(file)), callback
+
+        complete   = ->
+          copyAsset config.css, (error) ->
+            return callback error if error
+            return copyAsset config.public, callback if fs.existsSync config.public
+            callback()
+
+        files = config.sources.slice()
+
+        nextFile = () ->
+          source = files.shift()
+
+If keeping the directory hierarchy, then insert the file's relative directory in to the path.
+
+          language = config.informationOnFiles[source].language
+
+          if config.flatten and !language.copy
+            toDirectory = config.output
+          else
+            toDirectory = config.root + '/' + config.output + '/' + (path.dirname source)
+
+Make sure the target directory exits.
+
+          # todo: async versions of exits and mkdir.
+          if !fs.existsSync(toDirectory)
+            fs.mkdirsSync(toDirectory)
+
+Implementation of copying files if specified in the language file
+
+          if language.copy
+            toFile = toDirectory + '/' + path.basename source
+            console.log "docco: #{source} -> #{toFile}"
+
+            fs.copy source, toFile, (error, result) ->
+              return callback(error) if error
+              if files.length then nextFile() else complete()
+
+Implementation of spliting comments and code into split view html files.
+
+          else
+            fs.readFile source, (error, buffer) ->
+              return callback(error) if error
+
+              code = buffer.toString()
+
+              sections = parse source, language, code, config
+              format source, language, sections, config
+              toFile = toDirectory + '/' + (path.basename source, path.extname source)
+
+              write source, sections, config
+              if files.length then nextFile() else complete()
+
+        nextFile()
+      return
+
+    module.exports = document
diff --git a/src/format.js b/src/format.js
new file mode 100755
index 00000000..8f3c9860
--- /dev/null
+++ b/src/format.js
@@ -0,0 +1,54 @@
+var _, commander, format, fs, glob, highlightjs, marked, path;
+
+_ = require('underscore');
+
+fs = require('fs-extra');
+
+path = require('path');
+
+marked = require('marked');
+
+commander = require('commander');
+
+highlightjs = require('highlight.js');
+
+path = require('path');
+
+glob = require('glob');
+
+module.exports = format = function(source, language, sections, config) {
+  var code, i, j, len, markedOptions, results, section;
+  markedOptions = {
+    smartypants: true
+  };
+  if (config.marked) {
+    markedOptions = config.marked;
+  }
+  marked.setOptions(markedOptions);
+  marked.setOptions({
+    highlight: function(code, lang) {
+      lang || (lang = language.name);
+      if (highlightjs.getLanguage(lang)) {
+        return highlightjs.highlight(lang, code).value;
+      } else {
+        console.warn("docco: couldn't highlight code block with unknown language '" + lang + "' in " + source);
+        return code;
+      }
+    }
+  });
+  results = [];
+  for (i = j = 0, len = sections.length; j < len; i = ++j) {
+    section = sections[i];
+    if (language.html) {
+      section.codeHtml = section.codeText;
+    } else {
+      code = highlightjs.highlight(language.name, section.codeText).value;
+      code = code.replace(/\s+$/, '');
+      section.codeHtml = "<div class='highlight'><pre>" + code + "</pre></div>";
+    }
+    results.push(section.docsHtml = marked(section.docsText));
+  }
+  return results;
+};
+
+//# sourceMappingURL=format.js.map
diff --git a/src/format.js.map b/src/format.js.map
new file mode 100644
index 00000000..8dd398f0
--- /dev/null
+++ b/src/format.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"format.js","sources":["format.litcoffee"],"names":[],"mappings":"AAAI,IAAA;;AAAA,CAAA,GAAc,OAAA,CAAQ,YAAR;;AACd,EAAA,GAAc,OAAA,CAAQ,UAAR;;AACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;AACd,MAAA,GAAc,OAAA,CAAQ,QAAR;;AACd,SAAA,GAAc,OAAA,CAAQ,WAAR;;AACd,WAAA,GAAc,OAAA,CAAQ,cAAR;;AACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;AACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;AAMd,MAAM,CAAC,OAAP,GAAiB,MAAA,GAAS,SAAC,MAAD,EAAS,QAAT,EAAmB,QAAnB,EAA6B,MAA7B;AAIxB,MAAA;EAAA,aAAA,GACE;IAAA,WAAA,EAAa,IAAb;;EAEF,IAAG,MAAM,CAAC,MAAV;IACE,aAAA,GAAgB,MAAM,CAAC,OADzB;;EAGA,MAAM,CAAC,UAAP,CAAkB,aAAlB;EAMA,MAAM,CAAC,UAAP,CAAkB;IAChB,SAAA,EAAW,SAAC,IAAD,EAAO,IAAP;MACT,SAAA,OAAS,QAAQ,CAAC;MAElB,IAAG,WAAW,CAAC,WAAZ,CAAwB,IAAxB,CAAH;eACE,WAAW,CAAC,SAAZ,CAAsB,IAAtB,EAA4B,IAA5B,CAAiC,CAAC,MADpC;OAAA,MAAA;QAGE,OAAO,CAAC,IAAR,CAAa,8DAAA,GAA+D,IAA/D,GAAoE,OAApE,GAA2E,MAAxF;eACA,KAJF;;IAHS,CADK;GAAlB;AAWA;OAAA,kDAAA;;IACE,IAAG,QAAQ,CAAC,IAAZ;MACE,OAAO,CAAC,QAAR,GAAmB,OAAO,CAAC,SAD7B;KAAA,MAAA;MAGE,IAAA,GAAO,WAAW,CAAC,SAAZ,CAAsB,QAAQ,CAAC,IAA/B,EAAqC,OAAO,CAAC,QAA7C,CAAsD,CAAC;MAC9D,IAAA,GAAO,IAAI,CAAC,OAAL,CAAa,MAAb,EAAqB,EAArB;MACP,OAAO,CAAC,QAAR,GAAmB,8BAAA,GAA+B,IAA/B,GAAoC,eALzD;;iBAMA,OAAO,CAAC,QAAR,GAAmB,MAAA,CAAO,OAAO,CAAC,QAAf;AAPrB;;AA3BwB","sourcesContent":["    _           = require 'underscore'\n    fs          = require 'fs-extra'\n    path        = require 'path'\n    marked      = require 'marked'\n    commander   = require 'commander'\n    highlightjs = require 'highlight.js'\n    path        = require 'path'\n    glob        = require 'glob'\n\nTo **format** and highlight the now-parsed sections of code, we use **Highlight.js**\nover stdio, and run the text of their corresponding comments through\n**Markdown**, using [Marked](https://github.com/chjj/marked).\n\n    module.exports = format = (source, language, sections, config) ->\n\nPass any user defined options to Marked if specified via command line option\n\n      markedOptions =\n        smartypants: true\n\n      if config.marked\n        markedOptions = config.marked\n\n      marked.setOptions markedOptions\n\nTell Marked how to highlight code blocks within comments, treating that code\nas either the language specified in the code block or the language of the file\nif not specified.\n\n      marked.setOptions {\n        highlight: (code, lang) ->\n          lang or= language.name\n\n          if highlightjs.getLanguage(lang)\n            highlightjs.highlight(lang, code).value\n          else\n            console.warn \"docco: couldn't highlight code block with unknown language '#{lang}' in #{source}\"\n            code\n      }\n\n      for section, i in sections\n        if language.html\n          section.codeHtml = section.codeText\n        else\n          code = highlightjs.highlight(language.name, section.codeText).value\n          code = code.replace(/\\s+$/, '')\n          section.codeHtml = \"<div class='highlight'><pre>#{code}</pre></div>\"\n        section.docsHtml = marked(section.docsText)\n\n"]}
\ No newline at end of file
diff --git a/src/format.litcoffee b/src/format.litcoffee
new file mode 100755
index 00000000..e49dbab7
--- /dev/null
+++ b/src/format.litcoffee
@@ -0,0 +1,49 @@
+    _           = require 'underscore'
+    fs          = require 'fs-extra'
+    path        = require 'path'
+    marked      = require 'marked'
+    commander   = require 'commander'
+    highlightjs = require 'highlight.js'
+    path        = require 'path'
+    glob        = require 'glob'
+
+To **format** and highlight the now-parsed sections of code, we use **Highlight.js**
+over stdio, and run the text of their corresponding comments through
+**Markdown**, using [Marked](https://github.com/chjj/marked).
+
+    module.exports = format = (source, language, sections, config) ->
+
+Pass any user defined options to Marked if specified via command line option
+
+      markedOptions =
+        smartypants: true
+
+      if config.marked
+        markedOptions = config.marked
+
+      marked.setOptions markedOptions
+
+Tell Marked how to highlight code blocks within comments, treating that code
+as either the language specified in the code block or the language of the file
+if not specified.
+
+      marked.setOptions {
+        highlight: (code, lang) ->
+          lang or= language.name
+
+          if highlightjs.getLanguage(lang)
+            highlightjs.highlight(lang, code).value
+          else
+            console.warn "docco: couldn't highlight code block with unknown language '#{lang}' in #{source}"
+            code
+      }
+
+      for section, i in sections
+        if language.html
+          section.codeHtml = section.codeText
+        else
+          code = highlightjs.highlight(language.name, section.codeText).value
+          code = code.replace(/\s+$/, '')
+          section.codeHtml = "<div class='highlight'><pre>#{code}</pre></div>"
+        section.docsHtml = marked(section.docsText)
+
diff --git a/src/getCSSPath.js b/src/getCSSPath.js
new file mode 100755
index 00000000..4bf32d61
--- /dev/null
+++ b/src/getCSSPath.js
@@ -0,0 +1,16 @@
+var getCSSPath, path;
+
+path = require('path');
+
+getCSSPath = function(cssFile, targetDirectory, file) {
+  var css, cssPath;
+  css = path.parse(cssFile);
+  css.file = targetDirectory + '/' + css.base;
+  cssPath = path.relative(file, css.file);
+  cssPath = cssPath.slice(3);
+  return cssPath;
+};
+
+module.exports = getCSSPath;
+
+//# sourceMappingURL=getCSSPath.js.map
diff --git a/src/getCSSPath.js.map b/src/getCSSPath.js.map
new file mode 100644
index 00000000..504d325d
--- /dev/null
+++ b/src/getCSSPath.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"getCSSPath.js","sources":["getCSSPath.litcoffee"],"names":[],"mappings":"AAEI,IAAA;;AAAA,IAAA,GAAc,OAAA,CAAQ,MAAR;;AAEd,UAAA,GAAa,SAAC,OAAD,EAAU,eAAV,EAA2B,IAA3B;AACX,MAAA;EAAA,GAAA,GAAM,IAAI,CAAC,KAAL,CAAW,OAAX;EACN,GAAG,CAAC,IAAJ,GAAW,eAAA,GAAgB,GAAhB,GAAoB,GAAG,CAAC;EAEnC,OAAA,GAAU,IAAI,CAAC,QAAL,CAAc,IAAd,EAAoB,GAAG,CAAC,IAAxB;EACV,OAAA,GAAU,OAAO,CAAC,KAAR,CAAc,CAAd;SAEV;AAPW;;AASb,MAAM,CAAC,OAAP,GAAiB","sourcesContent":["This function determines the relative path of any html file in the destination folder to the css file.\n\n    path        = require 'path'\n\n    getCSSPath = (cssFile, targetDirectory, file) ->\n      css = path.parse(cssFile)\n      css.file = targetDirectory+'/'+css.base\n\n      cssPath = path.relative(file, css.file)\n      cssPath = cssPath.slice(3)\n\n      cssPath\n\n    module.exports = getCSSPath"]}
\ No newline at end of file
diff --git a/src/getCSSPath.litcoffee b/src/getCSSPath.litcoffee
new file mode 100755
index 00000000..49ad668c
--- /dev/null
+++ b/src/getCSSPath.litcoffee
@@ -0,0 +1,14 @@
+This function determines the relative path of any html file in the destination folder to the css file.
+
+    path        = require 'path'
+
+    getCSSPath = (cssFile, targetDirectory, file) ->
+      css = path.parse(cssFile)
+      css.file = targetDirectory+'/'+css.base
+
+      cssPath = path.relative(file, css.file)
+      cssPath = cssPath.slice(3)
+
+      cssPath
+
+    module.exports = getCSSPath
\ No newline at end of file
diff --git a/src/getDestinationInformation.js b/src/getDestinationInformation.js
new file mode 100755
index 00000000..eb2d652a
--- /dev/null
+++ b/src/getDestinationInformation.js
@@ -0,0 +1,34 @@
+var getDestinationInformation, path;
+
+path = require('path');
+
+getDestinationInformation = function(language, source, rootDirectory, targetDirectory, flatten) {
+  var destination;
+  destination = {};
+  destination.root = rootDirectory;
+  if (flatten && !language.copy) {
+    destination.dir = targetDirectory;
+  } else {
+    destination.dir = source.dir === '' ? targetDirectory : targetDirectory + "/" + source.dir;
+  }
+  if (language.copy) {
+    destination.ext = source.ext;
+  } else {
+    destination.ext = '.html';
+  }
+  destination.base = source.name + destination.ext;
+  destination.name = source.name;
+  destination.file = destination.dir + '/' + source.name + destination.ext;
+  if (flatten && !language.copy) {
+    destination.relativefile = source.name + destination.ext;
+  } else {
+    destination.relativefile = source.dir === '' ? source.name + destination.ext : source.dir + '/' + source.name + destination.ext;
+  }
+  destination.path = destination.root + '/' + destination.file;
+  destination.pathdir = path.dirname(destination.path);
+  return destination;
+};
+
+module.exports = getDestinationInformation;
+
+//# sourceMappingURL=getDestinationInformation.js.map
diff --git a/src/getDestinationInformation.js.map b/src/getDestinationInformation.js.map
new file mode 100644
index 00000000..19e3034e
--- /dev/null
+++ b/src/getDestinationInformation.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"getDestinationInformation.js","sources":["getDestinationInformation.litcoffee"],"names":[],"mappings":"AACI,IAAA;;AAAA,IAAA,GAAc,OAAA,CAAQ,MAAR;;AAGd,yBAAA,GAA4B,SAAC,QAAD,EAAW,MAAX,EAAmB,aAAnB,EAAkC,eAAlC,EAAmD,OAAnD;AAC1B,MAAA;EAAA,WAAA,GAAc;EACd,WAAW,CAAC,IAAZ,GAAmB;EAEnB,IAAG,OAAA,IAAY,CAAC,QAAQ,CAAC,IAAzB;IACE,WAAW,CAAC,GAAZ,GAAkB,gBADpB;GAAA,MAAA;IAGE,WAAW,CAAC,GAAZ,GAAqB,MAAM,CAAC,GAAP,KAAc,EAAjB,GAAyB,eAAzB,GAA8C,eAAA,GAAgB,GAAhB,GAAoB,MAAM,CAAC,IAH7F;;EAKA,IAAG,QAAQ,CAAC,IAAZ;IACE,WAAW,CAAC,GAAZ,GAAkB,MAAM,CAAC,IAD3B;GAAA,MAAA;IAGE,WAAW,CAAC,GAAZ,GAAkB,QAHpB;;EAKA,WAAW,CAAC,IAAZ,GAAmB,MAAM,CAAC,IAAP,GAAc,WAAW,CAAC;EAC7C,WAAW,CAAC,IAAZ,GAAmB,MAAM,CAAC;EAC1B,WAAW,CAAC,IAAZ,GAAmB,WAAW,CAAC,GAAZ,GAAgB,GAAhB,GAAoB,MAAM,CAAC,IAA3B,GAAkC,WAAW,CAAC;EACjE,IAAG,OAAA,IAAY,CAAC,QAAQ,CAAC,IAAzB;IACE,WAAW,CAAC,YAAZ,GAA2B,MAAM,CAAC,IAAP,GAAY,WAAW,CAAC,IADrD;GAAA,MAAA;IAGE,WAAW,CAAC,YAAZ,GAA8B,MAAM,CAAC,GAAP,KAAc,EAAjB,GAAyB,MAAM,CAAC,IAAP,GAAY,WAAW,CAAC,GAAjD,GAA0D,MAAM,CAAC,GAAP,GAAW,GAAX,GAAe,MAAM,CAAC,IAAtB,GAA6B,WAAW,CAAC,IAHhI;;EAKA,WAAW,CAAC,IAAZ,GAAmB,WAAW,CAAC,IAAZ,GAAiB,GAAjB,GAAqB,WAAW,CAAC;EACpD,WAAW,CAAC,OAAZ,GAAsB,IAAI,CAAC,OAAL,CAAa,WAAW,CAAC,IAAzB;SAEtB;AAzB0B;;AA2B5B,MAAM,CAAC,OAAP,GAAiB","sourcesContent":["\n    path        = require 'path'\n\n\n    getDestinationInformation = (language, source, rootDirectory, targetDirectory, flatten) ->\n      destination = { }\n      destination.root = rootDirectory\n\n      if flatten and !language.copy\n        destination.dir = targetDirectory\n      else\n        destination.dir = if source.dir is '' then targetDirectory else targetDirectory+\"/\"+source.dir\n\n      if language.copy\n        destination.ext = source.ext\n      else\n        destination.ext = '.html'\n\n      destination.base = source.name + destination.ext\n      destination.name = source.name\n      destination.file = destination.dir+'/'+source.name + destination.ext\n      if flatten and !language.copy\n        destination.relativefile = source.name+destination.ext\n      else\n        destination.relativefile = if source.dir is '' then source.name+destination.ext else source.dir+'/'+source.name + destination.ext\n\n      destination.path = destination.root+'/'+destination.file\n      destination.pathdir = path.dirname destination.path\n\n      destination\n\n    module.exports = getDestinationInformation"]}
\ No newline at end of file
diff --git a/src/getDestinationInformation.litcoffee b/src/getDestinationInformation.litcoffee
new file mode 100755
index 00000000..70726504
--- /dev/null
+++ b/src/getDestinationInformation.litcoffee
@@ -0,0 +1,32 @@
+
+    path        = require 'path'
+
+
+    getDestinationInformation = (language, source, rootDirectory, targetDirectory, flatten) ->
+      destination = { }
+      destination.root = rootDirectory
+
+      if flatten and !language.copy
+        destination.dir = targetDirectory
+      else
+        destination.dir = if source.dir is '' then targetDirectory else targetDirectory+"/"+source.dir
+
+      if language.copy
+        destination.ext = source.ext
+      else
+        destination.ext = '.html'
+
+      destination.base = source.name + destination.ext
+      destination.name = source.name
+      destination.file = destination.dir+'/'+source.name + destination.ext
+      if flatten and !language.copy
+        destination.relativefile = source.name+destination.ext
+      else
+        destination.relativefile = if source.dir is '' then source.name+destination.ext else source.dir+'/'+source.name + destination.ext
+
+      destination.path = destination.root+'/'+destination.file
+      destination.pathdir = path.dirname destination.path
+
+      destination
+
+    module.exports = getDestinationInformation
\ No newline at end of file
diff --git a/src/getInformationOnFiles.js b/src/getInformationOnFiles.js
new file mode 100755
index 00000000..ce535fb3
--- /dev/null
+++ b/src/getInformationOnFiles.js
@@ -0,0 +1,62 @@
+var _, commander, fs, getCSSPath, getDestinationInformation, getInformationOnFiles, getLanguage, getOthers, getRelativePath, getSourceInformation, glob, highlightjs, marked, path;
+
+_ = require('underscore');
+
+fs = require('fs-extra');
+
+path = require('path');
+
+marked = require('marked');
+
+commander = require('commander');
+
+highlightjs = require('highlight.js');
+
+path = require('path');
+
+glob = require('glob');
+
+getSourceInformation = require('./getSourceInformation');
+
+getDestinationInformation = require('./getDestinationInformation');
+
+getRelativePath = require('./getRelativePath');
+
+getCSSPath = require('./getCSSPath');
+
+getOthers = require('./getOthers');
+
+getLanguage = require('./getLanguage');
+
+module.exports = getInformationOnFiles = function(config) {
+  var destination, destinations, file, i, informationOnFiles, j, language, len, len1, others, ref, ref1, rootDirectory, source, sourceDirectory, targetDirectory;
+  targetDirectory = config.output;
+  sourceDirectory = config.root;
+  rootDirectory = config.root;
+  informationOnFiles = {};
+  ref = config.sources;
+  for (i = 0, len = ref.length; i < len; i++) {
+    file = ref[i];
+    language = getLanguage(file, config.languages, config.extension);
+    if (language == null) {
+      language = getLanguage('not-supported', config.languages);
+    }
+    source = getSourceInformation(file, rootDirectory, config.flatten);
+    destinations = {};
+    destination = getDestinationInformation(language, source, rootDirectory, targetDirectory, config.flatten);
+    destination.css = getCSSPath(config.css, targetDirectory, destination.file);
+    informationOnFiles[file] = {};
+    informationOnFiles[file].destination = destination;
+    informationOnFiles[file].source = source;
+    informationOnFiles[file].language = language;
+  }
+  ref1 = config.sources;
+  for (j = 0, len1 = ref1.length; j < len1; j++) {
+    file = ref1[j];
+    others = getOthers(file, informationOnFiles, config);
+    informationOnFiles[file].others = others;
+  }
+  return informationOnFiles;
+};
+
+//# sourceMappingURL=getInformationOnFiles.js.map
diff --git a/src/getInformationOnFiles.js.map b/src/getInformationOnFiles.js.map
new file mode 100644
index 00000000..0964cc90
--- /dev/null
+++ b/src/getInformationOnFiles.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"getInformationOnFiles.js","sources":["getInformationOnFiles.litcoffee"],"names":[],"mappings":"AAAI,IAAA;;AAAA,CAAA,GAAc,OAAA,CAAQ,YAAR;;AACd,EAAA,GAAc,OAAA,CAAQ,UAAR;;AACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;AACd,MAAA,GAAc,OAAA,CAAQ,QAAR;;AACd,SAAA,GAAc,OAAA,CAAQ,WAAR;;AACd,WAAA,GAAc,OAAA,CAAQ,cAAR;;AACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;AACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;AAEd,oBAAA,GAAuB,OAAA,CAAQ,wBAAR;;AAEvB,yBAAA,GAA4B,OAAA,CAAQ,6BAAR;;AAE5B,eAAA,GAAkB,OAAA,CAAQ,mBAAR;;AAElB,UAAA,GAAa,OAAA,CAAQ,cAAR;;AAEb,SAAA,GAAY,OAAA,CAAQ,aAAR;;AAEZ,WAAA,GAAc,OAAA,CAAQ,eAAR;;AAEd,MAAM,CAAC,OAAP,GAAiB,qBAAA,GAAwB,SAAC,MAAD;AACvC,MAAA;EAAA,eAAA,GAAkB,MAAM,CAAC;EACzB,eAAA,GAAkB,MAAM,CAAC;EACzB,aAAA,GAAgB,MAAM,CAAC;EAOvB,kBAAA,GAAqB;AACrB;AAAA,OAAA,qCAAA;;IACE,QAAA,GAAW,WAAA,CAAY,IAAZ,EAAkB,MAAM,CAAC,SAAzB,EAAoC,MAAM,CAAC,SAA3C;IACX,IAAI,gBAAJ;MACE,QAAA,GAAW,WAAA,CAAY,eAAZ,EAA6B,MAAM,CAAC,SAApC,EADb;;IAKA,MAAA,GAAS,oBAAA,CAAqB,IAArB,EAA2B,aAA3B,EAA0C,MAAM,CAAC,OAAjD;IAIT,YAAA,GAAe;IACf,WAAA,GAAc,yBAAA,CAA0B,QAA1B,EAAoC,MAApC,EAA4C,aAA5C,EAA2D,eAA3D,EAA4E,MAAM,CAAC,OAAnF;IAId,WAAW,CAAC,GAAZ,GAAkB,UAAA,CAAW,MAAM,CAAC,GAAlB,EAAuB,eAAvB,EAAwC,WAAW,CAAC,IAApD;IAElB,kBAAmB,CAAA,IAAA,CAAnB,GAA2B;IAC3B,kBAAmB,CAAA,IAAA,CAAK,CAAC,WAAzB,GAAuC;IACvC,kBAAmB,CAAA,IAAA,CAAK,CAAC,MAAzB,GAAkC;IAClC,kBAAmB,CAAA,IAAA,CAAK,CAAC,QAAzB,GAAoC;AArBtC;AAyBA;AAAA,OAAA,wCAAA;;IACE,MAAA,GAAS,SAAA,CAAU,IAAV,EAAgB,kBAAhB,EAAoC,MAApC;IAET,kBAAmB,CAAA,IAAA,CAAK,CAAC,MAAzB,GAAkC;AAHpC;AAKA,SAAO;AAzCgC","sourcesContent":["    _           = require 'underscore'\n    fs          = require 'fs-extra'\n    path        = require 'path'\n    marked      = require 'marked'\n    commander   = require 'commander'\n    highlightjs = require 'highlight.js'\n    path        = require 'path'\n    glob        = require 'glob'\n\n    getSourceInformation = require './getSourceInformation'\n\n    getDestinationInformation = require './getDestinationInformation'\n\n    getRelativePath = require './getRelativePath'\n\n    getCSSPath = require './getCSSPath'\n\n    getOthers = require './getOthers'\n\n    getLanguage = require './getLanguage'\n\n    module.exports = getInformationOnFiles = (config) ->\n      targetDirectory = config.output\n      sourceDirectory = config.root\n      rootDirectory = config.root\n\nFor each source file, figure out it's relative path to the source directory,\nthe filename without and extension, and the extension.  Then figure out the\nrelative path to the targetDirectory. Then figure out the relative path between\nthe two.\n\n      informationOnFiles = {}\n      for file in config.sources\n        language = getLanguage file, config.languages, config.extension\n        if !language?\n          language = getLanguage 'not-supported', config.languages\n\nFirst the source name:\n\n        source = getSourceInformation(file, rootDirectory, config.flatten)\n\nNext the destination:\n\n        destinations = {}\n        destination = getDestinationInformation(language, source, rootDirectory, targetDirectory, config.flatten)\n\nNow, figure out the relative paths the css:\n\n        destination.css = getCSSPath(config.css, targetDirectory, destination.file)\n\n        informationOnFiles[file] = {}\n        informationOnFiles[file].destination = destination\n        informationOnFiles[file].source = source\n        informationOnFiles[file].language = language\n\nNow, figure out the relative paths to the other source files:\n\n      for file in config.sources\n        others = getOthers(file, informationOnFiles, config)\n\n        informationOnFiles[file].others = others\n\n      return informationOnFiles\n"]}
\ No newline at end of file
diff --git a/src/getInformationOnFiles.litcoffee b/src/getInformationOnFiles.litcoffee
new file mode 100755
index 00000000..f2aa8c0f
--- /dev/null
+++ b/src/getInformationOnFiles.litcoffee
@@ -0,0 +1,63 @@
+    _           = require 'underscore'
+    fs          = require 'fs-extra'
+    path        = require 'path'
+    marked      = require 'marked'
+    commander   = require 'commander'
+    highlightjs = require 'highlight.js'
+    path        = require 'path'
+    glob        = require 'glob'
+
+    getSourceInformation = require './getSourceInformation'
+
+    getDestinationInformation = require './getDestinationInformation'
+
+    getRelativePath = require './getRelativePath'
+
+    getCSSPath = require './getCSSPath'
+
+    getOthers = require './getOthers'
+
+    getLanguage = require './getLanguage'
+
+    module.exports = getInformationOnFiles = (config) ->
+      targetDirectory = config.output
+      sourceDirectory = config.root
+      rootDirectory = config.root
+
+For each source file, figure out it's relative path to the source directory,
+the filename without and extension, and the extension.  Then figure out the
+relative path to the targetDirectory. Then figure out the relative path between
+the two.
+
+      informationOnFiles = {}
+      for file in config.sources
+        language = getLanguage file, config.languages, config.extension
+        if !language?
+          language = getLanguage 'not-supported', config.languages
+
+First the source name:
+
+        source = getSourceInformation(file, rootDirectory, config.flatten)
+
+Next the destination:
+
+        destinations = {}
+        destination = getDestinationInformation(language, source, rootDirectory, targetDirectory, config.flatten)
+
+Now, figure out the relative paths the css:
+
+        destination.css = getCSSPath(config.css, targetDirectory, destination.file)
+
+        informationOnFiles[file] = {}
+        informationOnFiles[file].destination = destination
+        informationOnFiles[file].source = source
+        informationOnFiles[file].language = language
+
+Now, figure out the relative paths to the other source files:
+
+      for file in config.sources
+        others = getOthers(file, informationOnFiles, config)
+
+        informationOnFiles[file].others = others
+
+      return informationOnFiles
diff --git a/src/getLanguage.js b/src/getLanguage.js
new file mode 100755
index 00000000..58746775
--- /dev/null
+++ b/src/getLanguage.js
@@ -0,0 +1,22 @@
+var getLanguage, path;
+
+path = require('path');
+
+getLanguage = function(source, languages, extension) {
+  var codeExt, codeLang, ext, lang;
+  ext = extension || path.extname(source) || path.basename(source);
+  lang = languages[ext];
+  if (lang && lang.name === 'markdown') {
+    codeExt = path.extname(path.basename(source, ext));
+    if (codeExt && (codeLang = languages[codeExt])) {
+      lang = _.extend({}, codeLang, {
+        literate: true
+      });
+    }
+  }
+  return lang;
+};
+
+module.exports = getLanguage;
+
+//# sourceMappingURL=getLanguage.js.map
diff --git a/src/getLanguage.js.map b/src/getLanguage.js.map
new file mode 100644
index 00000000..e447e991
--- /dev/null
+++ b/src/getLanguage.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"getLanguage.js","sources":["getLanguage.litcoffee"],"names":[],"mappings":"AACI,IAAA;;AAAA,IAAA,GAAO,OAAA,CAAQ,MAAR;;AAKP,WAAA,GAAc,SAAC,MAAD,EAAS,SAAT,EAAoB,SAApB;AACZ,MAAA;EAAA,GAAA,GAAO,SAAA,IAAa,IAAI,CAAC,OAAL,CAAa,MAAb,CAAb,IAAqC,IAAI,CAAC,QAAL,CAAc,MAAd;EAC5C,IAAA,GAAO,SAAU,CAAA,GAAA;EACjB,IAAG,IAAA,IAAS,IAAI,CAAC,IAAL,KAAa,UAAzB;IACE,OAAA,GAAU,IAAI,CAAC,OAAL,CAAa,IAAI,CAAC,QAAL,CAAc,MAAd,EAAsB,GAAtB,CAAb;IACV,IAAG,OAAA,IAAY,CAAA,QAAA,GAAW,SAAU,CAAA,OAAA,CAArB,CAAf;MACE,IAAA,GAAO,CAAC,CAAC,MAAF,CAAS,EAAT,EAAa,QAAb,EAAuB;QAAC,QAAA,EAAU,IAAX;OAAvB,EADT;KAFF;;SAIA;AAPY;;AASd,MAAM,CAAC,OAAP,GAAiB","sourcesContent":["\n    path = require 'path'\n\nA function to get the current language we're documenting, based on the\nfile extension. Detect and tag \"literate\" `.ext.md` variants.\n\n    getLanguage = (source, languages, extension) ->\n      ext  = extension or path.extname(source) or path.basename(source)\n      lang = languages[ext]\n      if lang and lang.name is 'markdown'\n        codeExt = path.extname(path.basename(source, ext))\n        if codeExt and codeLang = languages[codeExt]\n          lang = _.extend {}, codeLang, {literate: yes}\n      lang\n\n    module.exports = getLanguage"]}
\ No newline at end of file
diff --git a/src/getLanguage.litcoffee b/src/getLanguage.litcoffee
new file mode 100755
index 00000000..5f416406
--- /dev/null
+++ b/src/getLanguage.litcoffee
@@ -0,0 +1,16 @@
+
+    path = require 'path'
+
+A function to get the current language we're documenting, based on the
+file extension. Detect and tag "literate" `.ext.md` variants.
+
+    getLanguage = (source, languages, extension) ->
+      ext  = extension or path.extname(source) or path.basename(source)
+      lang = languages[ext]
+      if lang and lang.name is 'markdown'
+        codeExt = path.extname(path.basename(source, ext))
+        if codeExt and codeLang = languages[codeExt]
+          lang = _.extend {}, codeLang, {literate: yes}
+      lang
+
+    module.exports = getLanguage
\ No newline at end of file
diff --git a/src/getOthers.js b/src/getOthers.js
new file mode 100755
index 00000000..87f0f59e
--- /dev/null
+++ b/src/getOthers.js
@@ -0,0 +1,27 @@
+var getOthers, getRelativePath;
+
+getRelativePath = require('./getRelativePath');
+
+getOthers = function(file, informationOnFiles, config) {
+  var destinationFileInformation, i, image, len, other, others, ref, source, sourceFileInformation, target;
+  sourceFileInformation = informationOnFiles[file];
+  source = sourceFileInformation.source;
+  others = {};
+  ref = config.sources;
+  for (i = 0, len = ref.length; i < len; i++) {
+    other = ref[i];
+    destinationFileInformation = informationOnFiles[other];
+    target = destinationFileInformation.destination;
+    image = destinationFileInformation.language.name === 'image';
+    others[target.base] = {
+      link: getRelativePath(source.relativefile, target.relativefile, target.base),
+      file: other,
+      image: image
+    };
+  }
+  return others;
+};
+
+module.exports = getOthers;
+
+//# sourceMappingURL=getOthers.js.map
diff --git a/src/getOthers.js.map b/src/getOthers.js.map
new file mode 100644
index 00000000..5326014e
--- /dev/null
+++ b/src/getOthers.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"getOthers.js","sources":["getOthers.litcoffee"],"names":[],"mappings":"AAAI,IAAA;;AAAA,eAAA,GAAkB,OAAA,CAAQ,mBAAR;;AAElB,SAAA,GAAY,SAAC,IAAD,EAAO,kBAAP,EAA2B,MAA3B;AACV,MAAA;EAAA,qBAAA,GAAwB,kBAAmB,CAAA,IAAA;EAC3C,MAAA,GAAS,qBAAqB,CAAC;EAC/B,MAAA,GAAS;AACT;AAAA,OAAA,qCAAA;;IACE,0BAAA,GAA6B,kBAAmB,CAAA,KAAA;IAChD,MAAA,GAAS,0BAA0B,CAAC;IACpC,KAAA,GAAQ,0BAA0B,CAAC,QAAQ,CAAC,IAApC,KAA4C;IAEpD,MAAO,CAAA,MAAM,CAAC,IAAP,CAAP,GAAsB;MACpB,IAAA,EAAM,eAAA,CAAgB,MAAM,CAAC,YAAvB,EAAqC,MAAM,CAAC,YAA5C,EAA0D,MAAM,CAAC,IAAjE,CADc;MAEpB,IAAA,EAAM,KAFc;MAGpB,KAAA,EAAO,KAHa;;AALxB;SAWA;AAfU;;AAiBZ,MAAM,CAAC,OAAP,GAAiB","sourcesContent":["    getRelativePath = require './getRelativePath'\n\n    getOthers = (file, informationOnFiles, config) ->\n      sourceFileInformation = informationOnFiles[file]\n      source = sourceFileInformation.source\n      others = {}\n      for other in config.sources\n        destinationFileInformation = informationOnFiles[other]\n        target = destinationFileInformation.destination\n        image = destinationFileInformation.language.name is 'image'\n\n        others[target.base] = {\n          link: getRelativePath source.relativefile, target.relativefile, target.base\n          file: other\n          image: image\n        }\n\n      others\n\n    module.exports = getOthers\n"]}
\ No newline at end of file
diff --git a/src/getOthers.litcoffee b/src/getOthers.litcoffee
new file mode 100755
index 00000000..28b4b14d
--- /dev/null
+++ b/src/getOthers.litcoffee
@@ -0,0 +1,20 @@
+    getRelativePath = require './getRelativePath'
+
+    getOthers = (file, informationOnFiles, config) ->
+      sourceFileInformation = informationOnFiles[file]
+      source = sourceFileInformation.source
+      others = {}
+      for other in config.sources
+        destinationFileInformation = informationOnFiles[other]
+        target = destinationFileInformation.destination
+        image = destinationFileInformation.language.name is 'image'
+
+        others[target.base] = {
+          link: getRelativePath source.relativefile, target.relativefile, target.base
+          file: other
+          image: image
+        }
+
+      others
+
+    module.exports = getOthers
diff --git a/src/getRelativePath.js b/src/getRelativePath.js
new file mode 100755
index 00000000..e67561f9
--- /dev/null
+++ b/src/getRelativePath.js
@@ -0,0 +1,18 @@
+var getRelativePath, path;
+
+path = require('path');
+
+getRelativePath = function(fromFile, toFile, base) {
+  var fromTo;
+  fromTo = path.relative(fromFile, toFile);
+  if (fromTo === '' || fromTo === '.' || fromTo === '..' || fromTo === '../') {
+    fromTo = base;
+  } else {
+    fromTo = fromTo.slice(3);
+  }
+  return fromTo;
+};
+
+module.exports = getRelativePath;
+
+//# sourceMappingURL=getRelativePath.js.map
diff --git a/src/getRelativePath.js.map b/src/getRelativePath.js.map
new file mode 100644
index 00000000..c4a504e8
--- /dev/null
+++ b/src/getRelativePath.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"getRelativePath.js","sources":["getRelativePath.litcoffee"],"names":[],"mappings":"AAEI,IAAA;;AAAA,IAAA,GAAc,OAAA,CAAQ,MAAR;;AAEd,eAAA,GAAkB,SAAC,QAAD,EAAW,MAAX,EAAmB,IAAnB;AAChB,MAAA;EAAA,MAAA,GAAS,IAAI,CAAC,QAAL,CAAc,QAAd,EAAuB,MAAvB;EACT,IAAG,MAAA,KAAU,EAAV,IAAgB,MAAA,KAAU,GAA1B,IAAiC,MAAA,KAAU,IAA3C,IAAmD,MAAA,KAAU,KAAhE;IACE,MAAA,GAAS,KADX;GAAA,MAAA;IAGE,MAAA,GAAS,MAAM,CAAC,KAAP,CAAa,CAAb,EAHX;;SAKA;AAPgB;;AASlB,MAAM,CAAC,OAAP,GAAiB","sourcesContent":["This function determines the relative path of any html file in the destination folder to the css file.\n\n    path        = require 'path'\n\n    getRelativePath = (fromFile, toFile, base) ->\n      fromTo = path.relative(fromFile,toFile)\n      if fromTo is '' or fromTo is '.' or fromTo is '..' or fromTo is '../'\n        fromTo = base\n      else\n        fromTo = fromTo.slice(3)\n\n      fromTo\n      \n    module.exports = getRelativePath"]}
\ No newline at end of file
diff --git a/src/getRelativePath.litcoffee b/src/getRelativePath.litcoffee
new file mode 100755
index 00000000..ff00a751
--- /dev/null
+++ b/src/getRelativePath.litcoffee
@@ -0,0 +1,14 @@
+This function determines the relative path of any html file in the destination folder to the css file.
+
+    path        = require 'path'
+
+    getRelativePath = (fromFile, toFile, base) ->
+      fromTo = path.relative(fromFile,toFile)
+      if fromTo is '' or fromTo is '.' or fromTo is '..' or fromTo is '../'
+        fromTo = base
+      else
+        fromTo = fromTo.slice(3)
+
+      fromTo
+      
+    module.exports = getRelativePath
\ No newline at end of file
diff --git a/src/getSourceInformation.js b/src/getSourceInformation.js
new file mode 100755
index 00000000..b7fbce31
--- /dev/null
+++ b/src/getSourceInformation.js
@@ -0,0 +1,21 @@
+var getSourceInformation, path;
+
+path = require('path');
+
+getSourceInformation = function(file, rootDirectory, flatten) {
+  var source;
+  source = path.parse(file);
+  source.root = rootDirectory;
+  source.file = file;
+  source.path = source.root + '/' + source.file;
+  if (flatten) {
+    source.relativefile = source.base;
+  } else {
+    source.relativefile = source.file;
+  }
+  return source;
+};
+
+module.exports = getSourceInformation;
+
+//# sourceMappingURL=getSourceInformation.js.map
diff --git a/src/getSourceInformation.js.map b/src/getSourceInformation.js.map
new file mode 100644
index 00000000..b3f31a0a
--- /dev/null
+++ b/src/getSourceInformation.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"getSourceInformation.js","sources":["getSourceInformation.litcoffee"],"names":[],"mappings":"AAAI,IAAA;;AAAA,IAAA,GAAc,OAAA,CAAQ,MAAR;;AAGd,oBAAA,GAAuB,SAAC,IAAD,EAAO,aAAP,EAAsB,OAAtB;AACrB,MAAA;EAAA,MAAA,GAAS,IAAI,CAAC,KAAL,CAAW,IAAX;EACT,MAAM,CAAC,IAAP,GAAc;EACd,MAAM,CAAC,IAAP,GAAc;EACd,MAAM,CAAC,IAAP,GAAc,MAAM,CAAC,IAAP,GAAY,GAAZ,GAAgB,MAAM,CAAC;EACrC,IAAG,OAAH;IACE,MAAM,CAAC,YAAP,GAAsB,MAAM,CAAC,KAD/B;GAAA,MAAA;IAGE,MAAM,CAAC,YAAP,GAAsB,MAAM,CAAC,KAH/B;;SAIA;AATqB;;AAWvB,MAAM,CAAC,OAAP,GAAiB","sourcesContent":["    path        = require 'path'\n\n\n    getSourceInformation = (file, rootDirectory, flatten) ->\n      source = path.parse file\n      source.root = rootDirectory\n      source.file = file\n      source.path = source.root+'/'+source.file\n      if flatten\n        source.relativefile = source.base\n      else\n        source.relativefile = source.file\n      source\n\n    module.exports = getSourceInformation"]}
\ No newline at end of file
diff --git a/src/getSourceInformation.litcoffee b/src/getSourceInformation.litcoffee
new file mode 100755
index 00000000..9835269f
--- /dev/null
+++ b/src/getSourceInformation.litcoffee
@@ -0,0 +1,15 @@
+    path        = require 'path'
+
+
+    getSourceInformation = (file, rootDirectory, flatten) ->
+      source = path.parse file
+      source.root = rootDirectory
+      source.file = file
+      source.path = source.root+'/'+source.file
+      if flatten
+        source.relativefile = source.base
+      else
+        source.relativefile = source.file
+      source
+
+    module.exports = getSourceInformation
\ No newline at end of file
diff --git a/src/parse.js b/src/parse.js
new file mode 100755
index 00000000..f83a17ae
--- /dev/null
+++ b/src/parse.js
@@ -0,0 +1,151 @@
+var Handlebars, _, commander, fs, glob, highlightjs, hrefLinkTemplate, htmlImageMatcher, imageLinkTemplate, marked, parse, path;
+
+_ = require('underscore');
+
+fs = require('fs-extra');
+
+path = require('path');
+
+marked = require('marked');
+
+commander = require('commander');
+
+Handlebars = require('handlebars');
+
+highlightjs = require('highlight.js');
+
+path = require('path');
+
+glob = require('glob');
+
+htmlImageMatcher = /^<img .*\/>/;
+
+imageLinkTemplate = Handlebars.compile('<div><img src="{{link}}" style="{{style}}"></img><p>{{text}}</p></div>\n');
+
+hrefLinkTemplate = Handlebars.compile('<div><a href="{{link}}" style="{{style}}">{{text}}</a></div>\n');
+
+module.exports = parse = function(source, language, code, config) {
+  var codeText, docsText, getLinkComponents, hasCode, i, isText, j, k, len, len1, line, lines, makeLink, match, maybeCode, multilineComment, parts, save, sections, text, textToCode;
+  if (config == null) {
+    config = {};
+  }
+  lines = code.split('\n');
+  sections = [];
+  hasCode = docsText = codeText = '';
+  save = function() {
+    sections.push({
+      docsText: docsText,
+      codeText: codeText
+    });
+    hasCode = docsText = codeText = '';
+  };
+  if (language.literate) {
+    isText = maybeCode = true;
+    for (i = j = 0, len = lines.length; j < len; i = ++j) {
+      line = lines[i];
+      lines[i] = maybeCode && (match = /^([ ]{4}|[ ]{0,3}\t)/.exec(line)) ? (isText = false, line.slice(match[0].length)) : (maybeCode = /^\s*$/.test(line)) ? isText ? language.symbol : '' : (isText = true, language.symbol + ' ' + line);
+    }
+  }
+  getLinkComponents = function(line, matcher) {
+    var LINK_REGEX, STYLE_REGEX, TEXT_REGEX, link, links, style, styles, text, texts;
+    LINK_REGEX = /\((.+?)\)/;
+    TEXT_REGEX = /\[(.+?)\]/;
+    STYLE_REGEX = /\{(.+?)\}/;
+    links = LINK_REGEX.exec(line);
+    texts = TEXT_REGEX.exec(line);
+    styles = STYLE_REGEX.exec(line);
+    if ((links != null) && links.length > 0 && (texts != null) && texts.length > 1) {
+      link = links[1];
+      if (texts && texts.length > 0) {
+        text = texts[1];
+      } else {
+        text = '';
+      }
+      if (styles && styles.length > 0) {
+        style = styles[1];
+      } else {
+        style = '';
+      }
+      return {
+        link: link,
+        text: text,
+        style: style
+      };
+    } else {
+      return null;
+    }
+  };
+  makeLink = function(line, parts, template) {
+    return template(parts);
+  };
+  for (k = 0, len1 = lines.length; k < len1; k++) {
+    line = lines[k];
+    if (language.imageMatcher && line.match(language.imageMatcher)) {
+      parts = getLinkComponents(line, language.imageMatcher);
+      if (parts != null) {
+        codeText += imageLinkTemplate(parts);
+      }
+      hasCode = true;
+    } else if (language.linkMatcher && line.match(language.linkMatcher)) {
+      parts = getLinkComponents(line, language.linkMatcher);
+      if (parts != null) {
+        codeText += hrefLinkTemplate(parts);
+      }
+      hasCode = true;
+    } else if (line.match(htmlImageMatcher)) {
+      codeText += line + '\n';
+      hasCode = true;
+    } else if (multilineComment && (language.stopMatcher && line.match(language.stopMatcher))) {
+      multilineComment = false;
+      docsText += (line = line.replace(language.stopMatcher, '')) + '\n';
+      hasCode = true;
+    } else if (multilineComment || (language.startMatcher && line.match(language.startMatcher))) {
+      multilineComment = true;
+      if (hasCode) {
+        save();
+      }
+      docsText += (line = line.replace(language.startMatcher, '')) + '\n';
+    } else if (textToCode && (language.codeMatcher && line.match(language.codeMatcher))) {
+      textToCode = false;
+      text = (line = line.replace(language.codeMatcher, '')) + '\n';
+      if (language.html) {
+        text += "</pre>";
+      }
+      if (hasCode) {
+        save();
+      }
+      codeText += text;
+    } else if (textToCode || (language.codeMatcher && line.match(language.codeMatcher))) {
+      textToCode = true;
+      hasCode = true;
+      if (language.html) {
+        text = "<pre>";
+      } else {
+        text = "";
+      }
+      text += (line = line.replace(language.codeMatcher, '')) + '\n';
+      codeText += text;
+    } else if (language.sectionMatcher && line.match(language.sectionMatcher)) {
+      if (hasCode) {
+        save();
+      }
+      docsText += (line = line.replace(language.commentMatcher, '')) + '\n';
+      save();
+    } else if (line.match(language.commentMatcher) && !line.match(language.commentFilter)) {
+      if (hasCode) {
+        save();
+      }
+      docsText += (line = line.replace(language.commentMatcher, '')) + '\n';
+      if (/^(---+|===+)$/.test(line)) {
+        save();
+      }
+    } else {
+      hasCode = true;
+      codeText += line + '\n';
+    }
+  }
+  save();
+  return sections;
+};
+
+//# sourceMappingURL=parse.js.map
diff --git a/src/parse.js.map b/src/parse.js.map
new file mode 100644
index 00000000..a5db11b2
--- /dev/null
+++ b/src/parse.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"parse.js","sources":["parse.litcoffee"],"names":[],"mappings":"AAAI,IAAA;;AAAA,CAAA,GAAc,OAAA,CAAQ,YAAR;;AACd,EAAA,GAAc,OAAA,CAAQ,UAAR;;AACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;AACd,MAAA,GAAc,OAAA,CAAQ,QAAR;;AACd,SAAA,GAAc,OAAA,CAAQ,WAAR;;AACd,UAAA,GAAc,OAAA,CAAQ,YAAR;;AACd,WAAA,GAAc,OAAA,CAAQ,cAAR;;AACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;AACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;AACd,gBAAA,GAAmB;;AAEnB,iBAAA,GAAoB,UAAU,CAAC,OAAX,CAAmB,0EAAnB;;AACpB,gBAAA,GAAmB,UAAU,CAAC,OAAX,CAAmB,gEAAnB;;AAOnB,MAAM,CAAC,OAAP,GAAiB,KAAA,GAAQ,SAAC,MAAD,EAAS,QAAT,EAAmB,IAAnB,EAAyB,MAAzB;AACvB,MAAA;;IADgD,SAAS;;EACzD,KAAA,GAAW,IAAI,CAAC,KAAL,CAAW,IAAX;EACX,QAAA,GAAW;EAEX,OAAA,GAAW,QAAA,GAAW,QAAA,GAAW;EAEjC,IAAA,GAAO,SAAA;IACL,QAAQ,CAAC,IAAT,CAAc;MAAC,UAAA,QAAD;MAAW,UAAA,QAAX;KAAd;IACA,OAAA,GAAU,QAAA,GAAW,QAAA,GAAW;EAF3B;EASP,IAAG,QAAQ,CAAC,QAAZ;IACE,MAAA,GAAS,SAAA,GAAY;AACrB,SAAA,+CAAA;;MACE,KAAM,CAAA,CAAA,CAAN,GAAc,SAAA,IAAc,CAAA,KAAA,GAAQ,sBAAsB,CAAC,IAAvB,CAA4B,IAA5B,CAAR,CAAjB,GACT,CAAA,MAAA,GAAS,KAAT,EACA,IAAK,uBADL,CADS,GAGH,CAAA,SAAA,GAAY,OAAO,CAAC,IAAR,CAAa,IAAb,CAAZ,CAAH,GACA,MAAH,GAAe,QAAQ,CAAC,MAAxB,GAAoC,EADjC,GAGH,CAAA,MAAA,GAAS,IAAT,EACA,QAAQ,CAAC,MAAT,GAAkB,GAAlB,GAAwB,IADxB;AAPJ,KAFF;;EAYA,iBAAA,GAAoB,SAAC,IAAD,EAAO,OAAP;AAElB,QAAA;IAAA,UAAA,GAAa;IACb,UAAA,GAAa;IACb,WAAA,GAAc;IACd,KAAA,GAAQ,UAAU,CAAC,IAAX,CAAgB,IAAhB;IACR,KAAA,GAAQ,UAAU,CAAC,IAAX,CAAgB,IAAhB;IACR,MAAA,GAAS,WAAW,CAAC,IAAZ,CAAiB,IAAjB;IACT,IAAG,eAAA,IAAW,KAAK,CAAC,MAAN,GAAe,CAA1B,IAAgC,eAAhC,IAA2C,KAAK,CAAC,MAAN,GAAe,CAA7D;MACE,IAAA,GAAO,KAAM,CAAA,CAAA;MACb,IAAG,KAAA,IAAU,KAAK,CAAC,MAAN,GAAe,CAA5B;QAAmC,IAAA,GAAO,KAAM,CAAA,CAAA,EAAhD;OAAA,MAAA;QAAwD,IAAA,GAAO,GAA/D;;MACA,IAAG,MAAA,IAAW,MAAM,CAAC,MAAP,GAAgB,CAA9B;QAAqC,KAAA,GAAQ,MAAO,CAAA,CAAA,EAApD;OAAA,MAAA;QAA4D,KAAA,GAAQ,GAApE;;AACA,aAAO;QAAE,MAAA,IAAF;QAAQ,MAAA,IAAR;QAAc,OAAA,KAAd;QAJT;KAAA,MAAA;AAME,aAAO,KANT;;EARkB;EAgBpB,QAAA,GAAW,SAAC,IAAD,EAAO,KAAP,EAAc,QAAd;AACT,WAAO,QAAA,CAAS,KAAT;EADE;AAGX,OAAA,yCAAA;;IACE,IAAG,QAAQ,CAAC,YAAT,IAA0B,IAAI,CAAC,KAAL,CAAW,QAAQ,CAAC,YAApB,CAA7B;MACE,KAAA,GAAQ,iBAAA,CAAkB,IAAlB,EAAwB,QAAQ,CAAC,YAAjC;MACR,IAAwC,aAAxC;QAAA,QAAA,IAAY,iBAAA,CAAkB,KAAlB,EAAZ;;MACA,OAAA,GAAU,KAHZ;KAAA,MAKK,IAAG,QAAQ,CAAC,WAAT,IAAyB,IAAI,CAAC,KAAL,CAAW,QAAQ,CAAC,WAApB,CAA5B;MACH,KAAA,GAAQ,iBAAA,CAAkB,IAAlB,EAAwB,QAAQ,CAAC,WAAjC;MACR,IAAuC,aAAvC;QAAA,QAAA,IAAY,gBAAA,CAAiB,KAAjB,EAAZ;;MACA,OAAA,GAAU,KAHP;KAAA,MAKA,IAAG,IAAI,CAAC,KAAL,CAAW,gBAAX,CAAH;MACH,QAAA,IAAY,IAAA,GAAO;MACnB,OAAA,GAAU,KAFP;KAAA,MAIA,IAAG,gBAAA,IACR,CAAC,QAAQ,CAAC,WAAT,IAAyB,IAAI,CAAC,KAAL,CAAW,QAAQ,CAAC,WAApB,CAA1B,CADK;MAEH,gBAAA,GAAmB;MACnB,QAAA,IAAY,CAAC,IAAA,GAAO,IAAI,CAAC,OAAL,CAAa,QAAQ,CAAC,WAAtB,EAAmC,EAAnC,CAAR,CAAA,GAAkD;MAC9D,OAAA,GAAU,KAJP;KAAA,MAMA,IAAG,gBAAA,IACR,CAAC,QAAQ,CAAC,YAAT,IAA0B,IAAI,CAAC,KAAL,CAAW,QAAQ,CAAC,YAApB,CAA3B,CADK;MAEH,gBAAA,GAAmB;MACnB,IAAU,OAAV;QAAA,IAAA,CAAA,EAAA;;MACA,QAAA,IAAY,CAAC,IAAA,GAAO,IAAI,CAAC,OAAL,CAAa,QAAQ,CAAC,YAAtB,EAAoC,EAApC,CAAR,CAAA,GAAmD,KAJ5D;KAAA,MAMA,IAAG,UAAA,IACR,CAAC,QAAQ,CAAC,WAAT,IAAyB,IAAI,CAAC,KAAL,CAAW,QAAQ,CAAC,WAApB,CAA1B,CADK;MAEH,UAAA,GAAa;MACb,IAAA,GAAO,CAAC,IAAA,GAAO,IAAI,CAAC,OAAL,CAAa,QAAQ,CAAC,WAAtB,EAAmC,EAAnC,CAAR,CAAA,GAAkD;MACzD,IAAoB,QAAQ,CAAC,IAA7B;QAAA,IAAA,IAAQ,SAAR;;MACA,IAAU,OAAV;QAAA,IAAA,CAAA,EAAA;;MACA,QAAA,IAAY,KANT;KAAA,MAOA,IAAG,UAAA,IACR,CAAC,QAAQ,CAAC,WAAT,IAAyB,IAAI,CAAC,KAAL,CAAW,QAAQ,CAAC,WAApB,CAA1B,CADK;MAEH,UAAA,GAAa;MACb,OAAA,GAAU;MACV,IAAG,QAAQ,CAAC,IAAZ;QAAsB,IAAA,GAAO,QAA7B;OAAA,MAAA;QAA0C,IAAA,GAAO,GAAjD;;MACA,IAAA,IAAQ,CAAC,IAAA,GAAO,IAAI,CAAC,OAAL,CAAa,QAAQ,CAAC,WAAtB,EAAmC,EAAnC,CAAR,CAAA,GAAkD;MAC1D,QAAA,IAAY,KANT;KAAA,MAOA,IAAG,QAAQ,CAAC,cAAT,IAA4B,IAAI,CAAC,KAAL,CAAW,QAAQ,CAAC,cAApB,CAA/B;MACH,IAAU,OAAV;QAAA,IAAA,CAAA,EAAA;;MACA,QAAA,IAAY,CAAC,IAAA,GAAO,IAAI,CAAC,OAAL,CAAa,QAAQ,CAAC,cAAtB,EAAsC,EAAtC,CAAR,CAAA,GAAqD;MACjE,IAAA,CAAA,EAHG;KAAA,MAIA,IAAG,IAAI,CAAC,KAAL,CAAW,QAAQ,CAAC,cAApB,CAAA,IAAwC,CAAI,IAAI,CAAC,KAAL,CAAW,QAAQ,CAAC,aAApB,CAA/C;MACH,IAAU,OAAV;QAAA,IAAA,CAAA,EAAA;;MACA,QAAA,IAAY,CAAC,IAAA,GAAO,IAAI,CAAC,OAAL,CAAa,QAAQ,CAAC,cAAtB,EAAsC,EAAtC,CAAR,CAAA,GAAqD;MACjE,IAAU,eAAe,CAAC,IAAhB,CAAqB,IAArB,CAAV;QAAA,IAAA,CAAA,EAAA;OAHG;KAAA,MAAA;MAKH,OAAA,GAAU;MACV,QAAA,IAAY,IAAA,GAAO,KANhB;;AA7CP;EAoDA,IAAA,CAAA;SAEA;AApGuB","sourcesContent":["    _           = require 'underscore'\n    fs          = require 'fs-extra'\n    path        = require 'path'\n    marked      = require 'marked'\n    commander   = require 'commander'\n    Handlebars  = require 'handlebars'\n    highlightjs = require 'highlight.js'\n    path        = require 'path'\n    glob        = require 'glob'\n    htmlImageMatcher = /^<img .*\\/>/\n\n    imageLinkTemplate = Handlebars.compile('<div><img src=\"{{link}}\" style=\"{{style}}\"></img><p>{{text}}</p></div>\\n')\n    hrefLinkTemplate = Handlebars.compile('<div><a href=\"{{link}}\" style=\"{{style}}\">{{text}}</a></div>\\n')\n\nGiven a string of source code, **parse** out each block of prose and the code that\nfollows it — by detecting which is which, line by line — and then create an\nindividual **section** for it. Each section is an object with `docsText` and\n`codeText` properties, and eventually `docsHtml` and `codeHtml` as well.\n\n    module.exports = parse = (source, language, code, config = {}) ->\n      lines    = code.split '\\n'\n      sections = []\n\n      hasCode  = docsText = codeText = ''\n\n      save = ->\n        sections.push {docsText, codeText}\n        hasCode = docsText = codeText = ''\n        return\n\nOur quick-and-dirty implementation of the literate programming style. Simply\ninvert the prose and code relationship on a per-line basis, and then continue as\nnormal below.\n\n      if language.literate\n        isText = maybeCode = yes\n        for line, i in lines\n          lines[i] = if maybeCode and match = /^([ ]{4}|[ ]{0,3}\\t)/.exec line\n            isText = no\n            line[match[0].length..]\n          else if maybeCode = /^\\s*$/.test line\n            if isText then language.symbol else ''\n          else\n            isText = yes\n            language.symbol + ' ' + line\n\n      getLinkComponents = (line, matcher) ->\n        # todo: use the matcher with groups!\n        LINK_REGEX = /\\((.+?)\\)/\n        TEXT_REGEX = /\\[(.+?)\\]/\n        STYLE_REGEX = /\\{(.+?)\\}/\n        links = LINK_REGEX.exec(line)\n        texts = TEXT_REGEX.exec(line)\n        styles = STYLE_REGEX.exec(line)\n        if links? and links.length > 0 and texts? and texts.length > 1\n          link = links[1] # grab the first group.\n          if texts and texts.length > 0 then text = texts[1] else text = ''\n          if styles and styles.length > 0 then style = styles[1] else style = ''\n          return { link, text, style }\n        else\n          return null\n\n      makeLink = (line, parts, template) ->\n        return template(parts)\n\n      for line in lines\n        if language.imageMatcher and line.match language.imageMatcher\n          parts = getLinkComponents line, language.imageMatcher\n          codeText += imageLinkTemplate(parts) if parts?\n          hasCode = yes\n\n        else if language.linkMatcher and line.match language.linkMatcher\n          parts = getLinkComponents line, language.linkMatcher\n          codeText += hrefLinkTemplate(parts) if parts?\n          hasCode = yes\n\n        else if line.match(htmlImageMatcher)  # only one per line!\n          codeText += line + '\\n'\n          hasCode = yes\n\n        else if multilineComment and # stop\n        (language.stopMatcher and line.match(language.stopMatcher))\n          multilineComment = false\n          docsText += (line = line.replace(language.stopMatcher, '')) + '\\n'\n          hasCode = yes\n\n        else if multilineComment or # start\n        (language.startMatcher and line.match(language.startMatcher))\n          multilineComment = true\n          save() if hasCode\n          docsText += (line = line.replace(language.startMatcher, '')) + '\\n'\n\n        else if textToCode and # start\n        (language.codeMatcher and line.match(language.codeMatcher))\n          textToCode = false\n          text = (line = line.replace(language.codeMatcher, '')) + '\\n'\n          text += \"</pre>\" if language.html\n          save() if hasCode\n          codeText += text\n        else if textToCode or # stop\n        (language.codeMatcher and line.match(language.codeMatcher))\n          textToCode = true\n          hasCode = yes\n          if language.html then text = \"<pre>\" else text = \"\"\n          text += (line = line.replace(language.codeMatcher, '')) + '\\n'\n          codeText += text\n        else if language.sectionMatcher and line.match(language.sectionMatcher)\n          save() if hasCode\n          docsText += (line = line.replace(language.commentMatcher, '')) + '\\n'\n          save()\n        else if line.match(language.commentMatcher) and not line.match(language.commentFilter)\n          save() if hasCode\n          docsText += (line = line.replace(language.commentMatcher, '')) + '\\n'\n          save() if /^(---+|===+)$/.test line\n        else\n          hasCode = yes\n          codeText += line + '\\n'\n      save()\n\n      sections\n\n"]}
\ No newline at end of file
diff --git a/src/parse.litcoffee b/src/parse.litcoffee
new file mode 100755
index 00000000..aad40487
--- /dev/null
+++ b/src/parse.litcoffee
@@ -0,0 +1,121 @@
+    _           = require 'underscore'
+    fs          = require 'fs-extra'
+    path        = require 'path'
+    marked      = require 'marked'
+    commander   = require 'commander'
+    Handlebars  = require 'handlebars'
+    highlightjs = require 'highlight.js'
+    path        = require 'path'
+    glob        = require 'glob'
+    htmlImageMatcher = /^<img .*\/>/
+
+    imageLinkTemplate = Handlebars.compile('<div><img src="{{link}}" style="{{style}}"></img><p>{{text}}</p></div>\n')
+    hrefLinkTemplate = Handlebars.compile('<div><a href="{{link}}" style="{{style}}">{{text}}</a></div>\n')
+
+Given a string of source code, **parse** out each block of prose and the code that
+follows it — by detecting which is which, line by line — and then create an
+individual **section** for it. Each section is an object with `docsText` and
+`codeText` properties, and eventually `docsHtml` and `codeHtml` as well.
+
+    module.exports = parse = (source, language, code, config = {}) ->
+      lines    = code.split '\n'
+      sections = []
+
+      hasCode  = docsText = codeText = ''
+
+      save = ->
+        sections.push {docsText, codeText}
+        hasCode = docsText = codeText = ''
+        return
+
+Our quick-and-dirty implementation of the literate programming style. Simply
+invert the prose and code relationship on a per-line basis, and then continue as
+normal below.
+
+      if language.literate
+        isText = maybeCode = yes
+        for line, i in lines
+          lines[i] = if maybeCode and match = /^([ ]{4}|[ ]{0,3}\t)/.exec line
+            isText = no
+            line[match[0].length..]
+          else if maybeCode = /^\s*$/.test line
+            if isText then language.symbol else ''
+          else
+            isText = yes
+            language.symbol + ' ' + line
+
+      getLinkComponents = (line, matcher) ->
+        # todo: use the matcher with groups!
+        LINK_REGEX = /\((.+?)\)/
+        TEXT_REGEX = /\[(.+?)\]/
+        STYLE_REGEX = /\{(.+?)\}/
+        links = LINK_REGEX.exec(line)
+        texts = TEXT_REGEX.exec(line)
+        styles = STYLE_REGEX.exec(line)
+        if links? and links.length > 0 and texts? and texts.length > 1
+          link = links[1] # grab the first group.
+          if texts and texts.length > 0 then text = texts[1] else text = ''
+          if styles and styles.length > 0 then style = styles[1] else style = ''
+          return { link, text, style }
+        else
+          return null
+
+      makeLink = (line, parts, template) ->
+        return template(parts)
+
+      for line in lines
+        if language.imageMatcher and line.match language.imageMatcher
+          parts = getLinkComponents line, language.imageMatcher
+          codeText += imageLinkTemplate(parts) if parts?
+          hasCode = yes
+
+        else if language.linkMatcher and line.match language.linkMatcher
+          parts = getLinkComponents line, language.linkMatcher
+          codeText += hrefLinkTemplate(parts) if parts?
+          hasCode = yes
+
+        else if line.match(htmlImageMatcher)  # only one per line!
+          codeText += line + '\n'
+          hasCode = yes
+
+        else if multilineComment and # stop
+        (language.stopMatcher and line.match(language.stopMatcher))
+          multilineComment = false
+          docsText += (line = line.replace(language.stopMatcher, '')) + '\n'
+          hasCode = yes
+
+        else if multilineComment or # start
+        (language.startMatcher and line.match(language.startMatcher))
+          multilineComment = true
+          save() if hasCode
+          docsText += (line = line.replace(language.startMatcher, '')) + '\n'
+
+        else if textToCode and # start
+        (language.codeMatcher and line.match(language.codeMatcher))
+          textToCode = false
+          text = (line = line.replace(language.codeMatcher, '')) + '\n'
+          text += "</pre>" if language.html
+          save() if hasCode
+          codeText += text
+        else if textToCode or # stop
+        (language.codeMatcher and line.match(language.codeMatcher))
+          textToCode = true
+          hasCode = yes
+          if language.html then text = "<pre>" else text = ""
+          text += (line = line.replace(language.codeMatcher, '')) + '\n'
+          codeText += text
+        else if language.sectionMatcher and line.match(language.sectionMatcher)
+          save() if hasCode
+          docsText += (line = line.replace(language.commentMatcher, '')) + '\n'
+          save()
+        else if line.match(language.commentMatcher) and not line.match(language.commentFilter)
+          save() if hasCode
+          docsText += (line = line.replace(language.commentMatcher, '')) + '\n'
+          save() if /^(---+|===+)$/.test line
+        else
+          hasCode = yes
+          codeText += line + '\n'
+      save()
+
+      sections
+
diff --git a/src/write.js b/src/write.js
new file mode 100755
index 00000000..5800b641
--- /dev/null
+++ b/src/write.js
@@ -0,0 +1,61 @@
+var _, commander, fs, glob, highlightjs, marked, path, write;
+
+_ = require('underscore');
+
+fs = require('fs-extra');
+
+path = require('path');
+
+marked = require('marked');
+
+commander = require('commander');
+
+highlightjs = require('highlight.js');
+
+path = require('path');
+
+glob = require('glob');
+
+module.exports = write = function(source, sections, config) {
+  var destination, fileInfo, files, first, firstSection, hasTitle, html, links, objectValues, others, title;
+  destination = function(file) {
+    return file;
+  };
+  objectValues = function(obj) {
+    return Object.keys(obj).map(function(key) {
+      return obj[key];
+    });
+  };
+  firstSection = _.find(sections, function(section) {
+    return section.docsText.length > 0;
+  });
+  if (firstSection) {
+    first = marked.lexer(firstSection.docsText)[0];
+  }
+  hasTitle = first && first.type === 'heading' && first.depth === 1;
+  title = hasTitle ? first.text : path.basename(source);
+  fileInfo = config.informationOnFiles[source];
+  others = objectValues(fileInfo.others);
+  links = others.map(function(o) {
+    return o.link;
+  });
+  files = others.map(function(o) {
+    return o.file;
+  });
+  html = config.template({
+    sources: links,
+    files: files,
+    links: others,
+    css: fileInfo.destination.css,
+    title: title,
+    hasTitle: hasTitle,
+    sections: sections,
+    path: path,
+    destination: destination,
+    flatten: config.flatten
+  });
+  console.log("docco: " + source + " -> " + (destination(fileInfo.destination.path)));
+  fs.writeFileSync(destination(fileInfo.destination.path), html);
+};
+
+//# sourceMappingURL=write.js.map
diff --git a/src/write.js.map b/src/write.js.map
new file mode 100644
index 00000000..417c5ee5
--- /dev/null
+++ b/src/write.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"write.js","sources":["write.litcoffee"],"names":[],"mappings":"AAAI,IAAA;;AAAA,CAAA,GAAc,OAAA,CAAQ,YAAR;;AACd,EAAA,GAAc,OAAA,CAAQ,UAAR;;AACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;AACd,MAAA,GAAc,OAAA,CAAQ,QAAR;;AACd,SAAA,GAAc,OAAA,CAAQ,WAAR;;AACd,WAAA,GAAc,OAAA,CAAQ,cAAR;;AACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;AACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;AAOd,MAAM,CAAC,OAAP,GAAiB,KAAA,GAAQ,SAAC,MAAD,EAAS,QAAT,EAAmB,MAAnB;AAIvB,MAAA;EAAA,WAAA,GAAc,SAAC,IAAD;WACZ;EADY;EAGd,YAAA,GAAe,SAAC,GAAD;WACb,MAAM,CAAC,IAAP,CAAY,GAAZ,CAAgB,CAAC,GAAjB,CAAqB,SAAC,GAAD;aACnB,GAAI,CAAA,GAAA;IADe,CAArB;EADa;EAKf,YAAA,GAAe,CAAC,CAAC,IAAF,CAAO,QAAP,EAAiB,SAAC,OAAD;WAC9B,OAAO,CAAC,QAAQ,CAAC,MAAjB,GAA0B;EADI,CAAjB;EAEf,IAAkD,YAAlD;IAAA,KAAA,GAAQ,MAAM,CAAC,KAAP,CAAa,YAAY,CAAC,QAA1B,CAAoC,CAAA,CAAA,EAA5C;;EACA,QAAA,GAAW,KAAA,IAAU,KAAK,CAAC,IAAN,KAAc,SAAxB,IAAsC,KAAK,CAAC,KAAN,KAAe;EAChE,KAAA,GAAW,QAAH,GAAiB,KAAK,CAAC,IAAvB,GAAiC,IAAI,CAAC,QAAL,CAAc,MAAd;EAEzC,QAAA,GAAW,MAAM,CAAC,kBAAmB,CAAA,MAAA;EACrC,MAAA,GAAS,YAAA,CAAa,QAAQ,CAAC,MAAtB;EACT,KAAA,GAAQ,MAAM,CAAC,GAAP,CAAW,SAAC,CAAD;AAAM,WAAO,CAAC,CAAC;EAAf,CAAX;EACR,KAAA,GAAQ,MAAM,CAAC,GAAP,CAAW,SAAC,CAAD;AAAM,WAAO,CAAC,CAAC;EAAf,CAAX;EACR,IAAA,GAAO,MAAM,CAAC,QAAP,CAAgB;IACrB,OAAA,EAAS,KADY;IAErB,KAAA,EAAO,KAFc;IAGrB,KAAA,EAAO,MAHc;IAIrB,GAAA,EAAK,QAAQ,CAAC,WAAW,CAAC,GAJL;IAKrB,OAAA,KALqB;IAMrB,UAAA,QANqB;IAOrB,UAAA,QAPqB;IAQrB,MAAA,IARqB;IASrB,aAAA,WATqB;IAUrB,OAAA,EAAS,MAAM,CAAC,OAVK;GAAhB;EAaP,OAAO,CAAC,GAAR,CAAY,SAAA,GAAU,MAAV,GAAiB,MAAjB,GAAsB,CAAC,WAAA,CAAY,QAAQ,CAAC,WAAW,CAAC,IAAjC,CAAD,CAAlC;EACA,EAAE,CAAC,aAAH,CAAiB,WAAA,CAAY,QAAQ,CAAC,WAAW,CAAC,IAAjC,CAAjB,EAAyD,IAAzD;AApCuB","sourcesContent":["    _           = require 'underscore'\n    fs          = require 'fs-extra'\n    path        = require 'path'\n    marked      = require 'marked'\n    commander   = require 'commander'\n    highlightjs = require 'highlight.js'\n    path        = require 'path'\n    glob        = require 'glob'\n\n\nOnce all of the code has finished highlighting, we can **write** the resulting\ndocumentation file by passing the completed HTML sections into the template,\nand rendering it to the specified output path.\n\n    module.exports = write = (source, sections, config) ->\n\n      # todo: figure out how to remove the breaking change here. normally this should return file+'.html'\n\n      destination = (file) ->\n        file\n\n      objectValues = (obj) ->\n        Object.keys(obj).map((key) ->\n          obj[key]\n        )\n\n      firstSection = _.find sections, (section) ->\n        section.docsText.length > 0\n      first = marked.lexer(firstSection.docsText)[0] if firstSection\n      hasTitle = first and first.type is 'heading' and first.depth is 1\n      title = if hasTitle then first.text else path.basename source\n\n      fileInfo = config.informationOnFiles[source]\n      others = objectValues(fileInfo.others)\n      links = others.map((o)-> return o.link)\n      files = others.map((o)-> return o.file)\n      html = config.template {\n        sources: links,\n        files: files,\n        links: others,\n        css: fileInfo.destination.css,\n        title,\n        hasTitle,\n        sections,\n        path,\n        destination,\n        flatten: config.flatten\n      }\n\n      console.log \"docco: #{source} -> #{destination fileInfo.destination.path}\"\n      fs.writeFileSync destination(fileInfo.destination.path), html\n      return\n"]}
\ No newline at end of file
diff --git a/src/write.litcoffee b/src/write.litcoffee
new file mode 100755
index 00000000..0e6e25ab
--- /dev/null
+++ b/src/write.litcoffee
@@ -0,0 +1,52 @@
+    _           = require 'underscore'
+    fs          = require 'fs-extra'
+    path        = require 'path'
+    marked      = require 'marked'
+    commander   = require 'commander'
+    highlightjs = require 'highlight.js'
+    path        = require 'path'
+    glob        = require 'glob'
+
+
+Once all of the code has finished highlighting, we can **write** the resulting
+documentation file by passing the completed HTML sections into the template,
+and rendering it to the specified output path.
+
+    module.exports = write = (source, sections, config) ->
+
+      # todo: figure out how to remove the breaking change here. normally this should return file+'.html'
+
+      destination = (file) ->
+        file
+
+      objectValues = (obj) ->
+        Object.keys(obj).map((key) ->
+          obj[key]
+        )
+
+      firstSection = _.find sections, (section) ->
+        section.docsText.length > 0
+      first = marked.lexer(firstSection.docsText)[0] if firstSection
+      hasTitle = first and first.type is 'heading' and first.depth is 1
+      title = if hasTitle then first.text else path.basename source
+
+      fileInfo = config.informationOnFiles[source]
+      others = objectValues(fileInfo.others)
+      links = others.map((o)-> return o.link)
+      files = others.map((o)-> return o.file)
+      html = config.template {
+        sources: links,
+        files: files,
+        links: others,
+        css: fileInfo.destination.css,
+        title,
+        hasTitle,
+        sections,
+        path,
+        destination,
+        flatten: config.flatten
+      }
+
+      console.log "docco: #{source} -> #{destination fileInfo.destination.path}"
+      fs.writeFileSync destination(fileInfo.destination.path), html
+      return
diff --git a/test/sim/.docco.json b/test/sim/.docco.json
new file mode 100755
index 00000000..2fc3bd98
--- /dev/null
+++ b/test/sim/.docco.json
@@ -0,0 +1,11 @@
+{
+  "sources": [
+    "README.md",
+    "src/**/*.js",
+    "src/**/*.coffee",
+    "src/**/*.litcoffee",
+    "src/**/*.java",
+    "images/**/*.jpg"
+  ],
+  "layout": "linear"
+}
diff --git a/test/sim/.groc.json b/test/sim/.groc.json
new file mode 100755
index 00000000..cc7d19f6
--- /dev/null
+++ b/test/sim/.groc.json
@@ -0,0 +1,11 @@
+{
+  "glob": [
+    "src/**/*.js",
+    "src/**/*.coffee",
+    "src/**/*.litcoffee",
+    "README.md",
+    "images/*.jpg"
+  ],
+  "github": false,
+  "repository-url": "https://github.com/nevir/groc"
+}
diff --git a/test/sim/README.md b/test/sim/README.md
new file mode 100755
index 00000000..bc7db6d5
--- /dev/null
+++ b/test/sim/README.md
@@ -0,0 +1,73 @@
+# Test Readme
+
+With Fluffy Bunnies!
+
+## The Happy Bunny - Poem by Robb Lovell
+
+<pre>
+I am a happy bunny.
+I hop high and low, 
+I laugh, and I squeak and I
+Squeak, Squeak, Go! 
+My little bunny nose
+Squinches to and fro.
+</pre>
+
+![Readme.md](images/fluffybunny1.jpg)
+
+### Stanza 2
+
+<pre>
+I am the happy bunny.
+I hop high and low,  
+I am very happy, and full of glee, 
+When I go hopping on my little tree! 
+I Hop, Hop, Hop, and you see me go! 
+My little bunny legs
+Leap to and fro.
+<//pre>
+<img src="images/fluffybunny2.jpg" alt="Drawing" style="width:50%;"/>
+
+``` 
+ # here is some code.
+ {
+   "context": {
+     "name": "promotion10"
+   },
+   "fact": {
+     "product": {},
+     "cart": {"total": 500}
+   }
+ }
+```
+
+
+### Stanza 3
+
+
+<pre>
+I am a happy bunny.
+I hop high and low, 
+I see my friends, as they look at my home
+They smiles and they laugh when I wiggle my ears! 
+Wiggle, Wiggle, Wiggle, I hear the show! 
+My little bunny ears
+Wriggle to and fro.
+</pre>
+
+![Readme.md](images/fluffybunny3.jpg)
+
+
+### Stanza 4
+
+<pre>
+I love them, they love me, 
+that makes me the most happy 
+bunny I can be.
+</pre>
+
+## Author
+
+Robb Lovell
+
+(modified from Christopher Howie)
\ No newline at end of file
diff --git a/test/sim/images/fluffybunny1.jpg b/test/sim/images/fluffybunny1.jpg
new file mode 100755
index 00000000..ddacde89
Binary files /dev/null and b/test/sim/images/fluffybunny1.jpg differ
diff --git a/test/sim/images/fluffybunny2.jpg b/test/sim/images/fluffybunny2.jpg
new file mode 100755
index 00000000..56e6329d
Binary files /dev/null and b/test/sim/images/fluffybunny2.jpg differ
diff --git a/test/sim/images/fluffybunny3.jpg b/test/sim/images/fluffybunny3.jpg
new file mode 100755
index 00000000..4d8367ea
Binary files /dev/null and b/test/sim/images/fluffybunny3.jpg differ
diff --git a/test/sim/src/fake_coffee.coffee b/test/sim/src/fake_coffee.coffee
new file mode 100755
index 00000000..8c8eb5ca
--- /dev/null
+++ b/test/sim/src/fake_coffee.coffee
@@ -0,0 +1,32 @@
+###
+  CoffeeScript.
+###
+
+# Assignment:
+number   = 42
+opposite = true
+
+# Conditions:
+number = -42 if opposite
+
+# Functions:
+square = (x) -> x * x
+
+# Arrays:
+list = [1, 2, 3, 4, 5]
+
+# Objects:
+math =
+  root:   Math.sqrt
+  square: square
+  cube:   (x) -> x * square x
+
+# Splats:
+race = (winner, runners...) ->
+  print winner, runners
+
+# Existence:
+alert "I knew it!" if elvis?
+
+# Array comprehensions:
+cubes = (math.cube num for num in list)
\ No newline at end of file
diff --git a/test/sim/src/fake_coffee2.coffee b/test/sim/src/fake_coffee2.coffee
new file mode 100755
index 00000000..94503db5
--- /dev/null
+++ b/test/sim/src/fake_coffee2.coffee
@@ -0,0 +1,39 @@
+#! /usr/bin/env coffee
+###
+ fizzbuzz.litcoffee
+
+ This is the fizzbuzz test in literate CoffeeScript.
+
+# What should FizzBuzz do?
+
+  The FizzBuzz test should print:
+
+ - 'fizz' for every number divisible by 3,
+ - 'buzz' for every number divisible by 5,
+ - 'fizzbuzz' if the number is divisible by 3 and 5
+ - else: just print the number.
+
+# Fun Facts
+
+  FizzBuzz is commonly used to interview programmers and test their coding skills.
+ Once the author [@rmetzler](http://github.com/rmetzler) was asked on a job interview
+ to write a "coding test". He answered by asking if the meant test was FizzBuzz. The interviewer
+ said yes and made a statement to not test the interviewee. The author later learned he didn't
+ get the job, was sad and decided on writing FizzBuzz as a learning tool.
+
+
+# FizzBuzz in CoffeeScript
+
+ FizzBuzz in CoffeeScript could look like this:
+
+###
+fizzbuzz = (number) ->
+  return 'fizzbuzz' if 0 == number % 15
+  return 'buzz'     if 0 == number % 5
+  return 'fizz'     if 0 == number % 3
+  number.toString()
+
+  for x in [1..100]
+
+# pretty print
+    console.log "#{x}\t->\t#{fizzbuzz x}"
diff --git a/test/sim/src/fake_java.java b/test/sim/src/fake_java.java
new file mode 100755
index 00000000..3136546b
--- /dev/null
+++ b/test/sim/src/fake_java.java
@@ -0,0 +1,42 @@
+/**
+ A class to measure time elapsed.
+*/
+
+public class Stopwatch
+{
+    private long startTime;
+    private long stopTime;
+
+    public static final double NANOS_PER_SEC = 1000000000.0;
+
+	//
+	// start the stop watch.
+	//
+	public void start(){
+		startTime = System.nanoTime();
+	}
+
+	/**
+	 stop the stop watch.
+	*/
+	public void stop()
+	{	stopTime = System.nanoTime();	}
+
+	/**
+	elapsed time in seconds.
+	@return the time recorded on the stopwatch in seconds
+	*/
+	public double time()
+	{	return (stopTime - startTime) / NANOS_PER_SEC;	}
+
+	public String toString(){
+	    return "elapsed time: " + time() + " seconds.";
+	}
+
+	/**
+	elapsed time in nanoseconds.
+	@return the time recorded on the stopwatch in nanoseconds
+	*/
+	public long timeInNanoseconds()
+	{	return (stopTime - startTime);	}
+}
diff --git a/test/sim/src/fake_javascript.js b/test/sim/src/fake_javascript.js
new file mode 100755
index 00000000..ecc5c475
--- /dev/null
+++ b/test/sim/src/fake_javascript.js
@@ -0,0 +1,27 @@
+/*
+   Fizzbuzz interview question.
+ */
+
+var fizzbuzz;
+
+fizzbuzz = function(number) {
+  var i, results, x;
+  // print out numbers divisible by 15, 5, and 3
+  if (0 === number % 15) {
+    return 'fizzbuzz';
+  }
+  if (0 === number % 5) {
+    return 'buzz';
+  }
+  if (0 === number % 3) {
+    return 'fizz';
+  }
+  number.toString();
+  results = [];
+  for (x = i = 1; i <= 100; x = ++i) {
+    results.push(console.log(x + "\t->\t" + (fizzbuzz(x))));
+  }
+  return results;
+};
+
+//# sourceMappingURL=fake_litcoffee.js.map
diff --git a/test/sim/src/fake_litcoffee.litcoffee b/test/sim/src/fake_litcoffee.litcoffee
new file mode 100755
index 00000000..fc02ee9c
--- /dev/null
+++ b/test/sim/src/fake_litcoffee.litcoffee
@@ -0,0 +1,36 @@
+#! /usr/bin/env coffee
+# fizzbuzz.litcoffee
+
+This is the fizzbuzz test in literate CoffeeScript.
+
+## What should FizzBuzz do?
+
+The FizzBuzz test should print:
+
+- 'fizz' for every number divisible by 3,
+- 'buzz' for every number divisible by 5,
+- 'fizzbuzz' if the number is divisible by 3 and 5
+- else: just print the number.
+
+## Fun Facts
+
+FizzBuzz is commonly used to interview programmers and test their coding skills.
+Once the author [@rmetzler](http://github.com/rmetzler) was asked on a job interview
+to write a "coding test". He answered by asking if the meant test was FizzBuzz. The interviewer
+said yes and made a statement to not test the interviewee. The author later learned he didn't
+get the job, was sad and decided on writing FizzBuzz as a learning tool.
+
+## FizzBuzz in CoffeeScript
+---
+# FizzBuzz in CoffeeScript could look like this:
+
+    fizzbuzz = (number) ->
+      return 'fizzbuzz' if 0 == number % 15
+      return 'buzz'     if 0 == number % 5
+      return 'fizz'     if 0 == number % 3
+      number.toString()
+
+      for x in [1..100]
+
+        # pretty print
+        console.log "#{x}\t->\t#{fizzbuzz x}"
diff --git a/test/unit-tests/fakes/fake-config.js b/test/unit-tests/fakes/fake-config.js
new file mode 100755
index 00000000..c1b0e719
--- /dev/null
+++ b/test/unit-tests/fakes/fake-config.js
@@ -0,0 +1,77 @@
+module.exports = {
+  "css": "docco.css",
+  "extension": ".md",
+  "flatten": false,
+  "help": false,
+  "informationOnFiles": {
+    "README.md": {
+      "destination": {
+        "base": "README.html",
+        "css": "docco.css",
+        "dir": "docs",
+        "ext": ".html",
+        "file": "docs/README.html",
+        "name": "README",
+        "path": "force matched",
+        "pathdir": "force matched",
+        "relativefile": "README.html",
+        "root": "force matched"
+      },
+      "language": {
+        "html": true,
+        "link": "!",
+        "name": "markdown",
+        "section": "#",
+        "symbol": ""
+      },
+      "others": {
+        "README.html": {
+          "file": "README.md",
+          "image": false,
+          "link": "README.html"
+        }
+      },
+      "source": {
+        "base": "README.md",
+        "dir": "",
+        "ext": ".md",
+        "file": "README.md",
+        "name": "README",
+        "path": "force matched",
+        "relativefile": "README.md",
+        "root": "force matched"
+      }
+    }
+  },
+  "languages": {
+    ".markdown": {
+      "html": true,
+      "link": "!",
+      "name": "markdown",
+      "section": "#",
+      "symbol": ""
+    },
+    ".md": {
+      "html": true,
+      "link": "!",
+      "name": "markdown",
+      "section": "#",
+      "symbol": ""
+    },
+    "coffeescript": {
+      "name": "coffeescript",
+      "symbol": "#"
+    }
+  },
+  "layout": "sidebyside",
+  "marked": {},
+  "output": "docs",
+  "root": "force matched",
+  "setup": ".docco.json",
+  "sources": {
+    "0": "README.md"
+  },
+  "template": {}
+};
+
+//# sourceMappingURL=fake-config.js.map
diff --git a/test/unit-tests/fakes/fake-config.js.map b/test/unit-tests/fakes/fake-config.js.map
new file mode 100644
index 00000000..f7fe6e1c
--- /dev/null
+++ b/test/unit-tests/fakes/fake-config.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"fake-config.js","sources":["fakes/fake-config.litcoffee"],"names":[],"mappings":"AAEI,MAAM,CAAC,OAAP,GAAiB;EACf,KAAA,EAAO,WADQ;EAEf,WAAA,EAAa,KAFE;EAGf,SAAA,EAAW,KAHI;EAIf,MAAA,EAAQ,KAJO;EAKf,oBAAA,EAAsB;IACpB,WAAA,EAAa;MACX,aAAA,EAAe;QACb,MAAA,EAAQ,aADK;QAEb,KAAA,EAAO,WAFM;QAGb,KAAA,EAAO,MAHM;QAIb,KAAA,EAAO,OAJM;QAKb,MAAA,EAAQ,kBALK;QAMb,MAAA,EAAQ,QANK;QAOb,MAAA,EAAQ,eAPK;QAQb,SAAA,EAAW,eARE;QASb,cAAA,EAAgB,aATH;QAUb,MAAA,EAAQ,eAVK;OADJ;MAaX,UAAA,EAAY;QACV,MAAA,EAAQ,IADE;QAEV,MAAA,EAAQ,GAFE;QAGV,MAAA,EAAQ,UAHE;QAIV,SAAA,EAAW,GAJD;QAKV,QAAA,EAAU,EALA;OAbD;MAoBX,QAAA,EAAU;QACR,aAAA,EAAe;UACb,MAAA,EAAQ,WADK;UAEb,OAAA,EAAS,KAFI;UAGb,MAAA,EAAQ,aAHK;SADP;OApBC;MA2BX,QAAA,EAAU;QACR,MAAA,EAAQ,WADA;QAER,KAAA,EAAO,EAFC;QAGR,KAAA,EAAO,KAHC;QAIR,MAAA,EAAQ,WAJA;QAKR,MAAA,EAAQ,QALA;QAMR,MAAA,EAAQ,eANA;QAOR,cAAA,EAAgB,WAPR;QAQR,MAAA,EAAQ,eARA;OA3BC;KADO;GALP;EA6Cf,WAAA,EAAa;IACX,WAAA,EAAa;MACX,MAAA,EAAQ,IADG;MAEX,MAAA,EAAQ,GAFG;MAGX,MAAA,EAAQ,UAHG;MAIX,SAAA,EAAW,GAJA;MAKX,QAAA,EAAU,EALC;KADF;IAQX,KAAA,EAAO;MACL,MAAA,EAAQ,IADH;MAEL,MAAA,EAAQ,GAFH;MAGL,MAAA,EAAQ,UAHH;MAIL,SAAA,EAAW,GAJN;MAKL,QAAA,EAAU,EALL;KARI;IAeX,cAAA,EAAgB;MACd,MAAA,EAAQ,cADM;MAEd,QAAA,EAAU,GAFI;KAfL;GA7CE;EAiEf,QAAA,EAAU,YAjEK;EAkEf,QAAA,EAAU,EAlEK;EAmEf,QAAA,EAAU,MAnEK;EAoEf,MAAA,EAAQ,eApEO;EAqEf,OAAA,EAAS,aArEM;EAsEf,SAAA,EAAW;IACT,GAAA,EAAK,WADI;GAtEI;EAyEf,UAAA,EAAY,EAzEG","sourcesContent":["#\n\n    module.exports = {\n      \"css\": \"docco.css\"\n      \"extension\": \".md\"\n      \"flatten\": false\n      \"help\": false\n      \"informationOnFiles\": {\n        \"README.md\": {\n          \"destination\": {\n            \"base\": \"README.html\"\n            \"css\": \"docco.css\"\n            \"dir\": \"docs\"\n            \"ext\": \".html\"\n            \"file\": \"docs/README.html\"\n            \"name\": \"README\"\n            \"path\": \"force matched\"\n            \"pathdir\": \"force matched\"\n            \"relativefile\": \"README.html\"\n            \"root\": \"force matched\"\n          }\n          \"language\": {\n            \"html\": true\n            \"link\": \"!\"\n            \"name\": \"markdown\"\n            \"section\": \"#\"\n            \"symbol\": \"\"\n          }\n          \"others\": {\n            \"README.html\": {\n              \"file\": \"README.md\"\n              \"image\": false\n              \"link\": \"README.html\"\n            }\n          }\n          \"source\": {\n            \"base\": \"README.md\"\n            \"dir\": \"\"\n            \"ext\": \".md\"\n            \"file\": \"README.md\"\n            \"name\": \"README\"\n            \"path\": \"force matched\"\n            \"relativefile\": \"README.md\"\n            \"root\": \"force matched\"\n          }\n        }\n      }\n      \"languages\": {\n        \".markdown\": {\n          \"html\": true\n          \"link\": \"!\"\n          \"name\": \"markdown\"\n          \"section\": \"#\"\n          \"symbol\": \"\"\n        }\n        \".md\": {\n          \"html\": true\n          \"link\": \"!\"\n          \"name\": \"markdown\"\n          \"section\": \"#\"\n          \"symbol\": \"\"\n        }\n        \"coffeescript\": {\n          \"name\": \"coffeescript\"\n          \"symbol\": \"#\"\n        }\n      }\n      \"layout\": \"sidebyside\"\n      \"marked\": {}\n      \"output\": \"docs\"\n      \"root\": \"force matched\"\n      \"setup\": \".docco.json\"\n      \"sources\": {\n        \"0\": \"README.md\"\n      }\n      \"template\": {}\n    }"]}
\ No newline at end of file
diff --git a/test/unit-tests/fakes/fake-config.litcoffee b/test/unit-tests/fakes/fake-config.litcoffee
new file mode 100755
index 00000000..82999944
--- /dev/null
+++ b/test/unit-tests/fakes/fake-config.litcoffee
@@ -0,0 +1,77 @@
+#
+
+    module.exports = {
+      "css": "docco.css"
+      "extension": ".md"
+      "flatten": false
+      "help": false
+      "informationOnFiles": {
+        "README.md": {
+          "destination": {
+            "base": "README.html"
+            "css": "docco.css"
+            "dir": "docs"
+            "ext": ".html"
+            "file": "docs/README.html"
+            "name": "README"
+            "path": "force matched"
+            "pathdir": "force matched"
+            "relativefile": "README.html"
+            "root": "force matched"
+          }
+          "language": {
+            "html": true
+            "link": "!"
+            "name": "markdown"
+            "section": "#"
+            "symbol": ""
+          }
+          "others": {
+            "README.html": {
+              "file": "README.md"
+              "image": false
+              "link": "README.html"
+            }
+          }
+          "source": {
+            "base": "README.md"
+            "dir": ""
+            "ext": ".md"
+            "file": "README.md"
+            "name": "README"
+            "path": "force matched"
+            "relativefile": "README.md"
+            "root": "force matched"
+          }
+        }
+      }
+      "languages": {
+        ".markdown": {
+          "html": true
+          "link": "!"
+          "name": "markdown"
+          "section": "#"
+          "symbol": ""
+        }
+        ".md": {
+          "html": true
+          "link": "!"
+          "name": "markdown"
+          "section": "#"
+          "symbol": ""
+        }
+        "coffeescript": {
+          "name": "coffeescript"
+          "symbol": "#"
+        }
+      }
+      "layout": "sidebyside"
+      "marked": {}
+      "output": "docs"
+      "root": "force matched"
+      "setup": ".docco.json"
+      "sources": {
+        "0": "README.md"
+      }
+      "template": {}
+    }
\ No newline at end of file
diff --git a/test/unit-tests/fakes/fake-jst-result.js b/test/unit-tests/fakes/fake-jst-result.js
new file mode 100755
index 00000000..b75fec9f
--- /dev/null
+++ b/test/unit-tests/fakes/fake-jst-result.js
@@ -0,0 +1,3 @@
+module.exports = '<!DOCTYPE html> <html> <head> <title>fake_coffee.coffee</title> ' + '<meta http-equiv="content-type" content="text/html; charset=UTF-8"> ' + '<meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"> ' + '<link rel="stylesheet" media="all" href="../docco.css" /> ' + '</head> ' + '<body> ' + '<div id="container"> ' + '<div id="background"></div>  ' + '<ul id="jump_to"> ' + '<li> ' + '<a class="large" href="javascript:void(0);">Jump To &hellip;</a> ' + '<a class="small" href="javascript:void(0);">+</a> ' + '<div id="jump_wrapper"> ' + '<div id="jump_page">   ' + '<a class="source" href="./../../../../../../../../Project/docs/src/fake_coffee.html"> fake_coffee.html </a>   ' + '<a class="source" href="./../../../../../../../../Project/docs/README.html"> README.html </a>  ' + '</div> ' + '</li> ' + '</ul>  ' + '<ul class="sections">  ' + '<li id="title"> ' + '<div class="annotation"> ' + '<h1>fake_coffee.coffee</h1> ' + '</div> ' + '</li>    ' + '<li id="section-1"> ' + '<div class="annotation">  ' + '<div class="pilwrap "> ' + '<a class="pilcrow" href="#section-1">&#182;</a> ' + '</div>  ' + '</div>  ' + '<div class="content">' + '<div class=\'highlight\'>' + '<pre>code=here;</pre>' + '</div>' + '</div>  ' + '</li>  ' + '</ul> ' + '</div> ' + '</body> ' + '</html>';
+
+//# sourceMappingURL=fake-jst-result.js.map
diff --git a/test/unit-tests/fakes/fake-jst-result.js.map b/test/unit-tests/fakes/fake-jst-result.js.map
new file mode 100644
index 00000000..c736eeeb
--- /dev/null
+++ b/test/unit-tests/fakes/fake-jst-result.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"fake-jst-result.js","sources":["fakes/fake-jst-result.litcoffee"],"names":[],"mappings":"AAAI,MAAM,CAAC,OAAP,GAAiB,kEAAA,GACb,sEADa,GAEb,uIAFa,GAGb,4DAHa,GAIb,UAJa,GAKb,SALa,GAMb,uBANa,GAOb,+BAPa,GAQb,oBARa,GASb,OATa,GAUb,mEAVa,GAWb,oDAXa,GAYb,0BAZa,GAab,yBAba,GAcb,gHAda,GAeb,iGAfa,GAgBb,SAhBa,GAiBb,QAjBa,GAkBb,SAlBa,GAmBb,yBAnBa,GAoBb,kBApBa,GAqBb,2BArBa,GAsBb,8BAtBa,GAuBb,SAvBa,GAwBb,WAxBa,GAyBb,sBAzBa,GA0Bb,4BA1Ba,GA2Bb,yBA3Ba,GA4Bb,kDA5Ba,GA6Bb,UA7Ba,GA8Bb,UA9Ba,GA+Bb,uBA/Ba,GAgCb,2BAhCa,GAiCb,uBAjCa,GAkCb,QAlCa,GAmCb,UAnCa,GAoCb,SApCa,GAqCb,QArCa,GAsCb,SAtCa,GAuCb,UAvCa,GAwCb","sourcesContent":["    module.exports = '<!DOCTYPE html> <html> <head> <title>fake_coffee.coffee</title> ' +\n        '<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\"> ' +\n        '<meta name=\"viewport\" content=\"width=device-width, target-densitydpi=160dpi, initial-scale=1.0, maximum-scale=1.0, user-scalable=0\"> ' +\n        '<link rel=\"stylesheet\" media=\"all\" href=\"../docco.css\" /> ' +\n        '</head> ' +\n        '<body> ' +\n        '<div id=\"container\"> ' +\n        '<div id=\"background\"></div>  ' +\n        '<ul id=\"jump_to\"> ' +\n        '<li> ' +\n        '<a class=\"large\" href=\"javascript:void(0);\">Jump To &hellip;</a> ' +\n        '<a class=\"small\" href=\"javascript:void(0);\">+</a> ' +\n        '<div id=\"jump_wrapper\"> ' +\n        '<div id=\"jump_page\">   ' +\n        '<a class=\"source\" href=\"./../../../../../../../../Project/docs/src/fake_coffee.html\"> fake_coffee.html </a>   ' +\n        '<a class=\"source\" href=\"./../../../../../../../../Project/docs/README.html\"> README.html </a>  ' +\n        '</div> ' +\n        '</li> ' +\n        '</ul>  ' +\n        '<ul class=\"sections\">  ' +\n        '<li id=\"title\"> ' +\n        '<div class=\"annotation\"> ' +\n        '<h1>fake_coffee.coffee</h1> ' +\n        '</div> ' +\n        '</li>    ' +\n        '<li id=\"section-1\"> ' +\n        '<div class=\"annotation\">  ' +\n        '<div class=\"pilwrap \"> ' +\n        '<a class=\"pilcrow\" href=\"#section-1\">&#182;</a> ' +\n        '</div>  ' +\n        '</div>  ' +\n        '<div class=\"content\">' +\n        '<div class=\\'highlight\\'>' +\n        '<pre>code=here;</pre>' +\n        '</div>' +\n        '</div>  ' +\n        '</li>  ' +\n        '</ul> ' +\n        '</div> ' +\n        '</body> ' +\n        '</html>'"]}
\ No newline at end of file
diff --git a/test/unit-tests/fakes/fake-jst-result.litcoffee b/test/unit-tests/fakes/fake-jst-result.litcoffee
new file mode 100755
index 00000000..cf3e667f
--- /dev/null
+++ b/test/unit-tests/fakes/fake-jst-result.litcoffee
@@ -0,0 +1,41 @@
+    module.exports = '<!DOCTYPE html> <html> <head> <title>fake_coffee.coffee</title> ' +
+        '<meta http-equiv="content-type" content="text/html; charset=UTF-8"> ' +
+        '<meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"> ' +
+        '<link rel="stylesheet" media="all" href="../docco.css" /> ' +
+        '</head> ' +
+        '<body> ' +
+        '<div id="container"> ' +
+        '<div id="background"></div>  ' +
+        '<ul id="jump_to"> ' +
+        '<li> ' +
+        '<a class="large" href="javascript:void(0);">Jump To &hellip;</a> ' +
+        '<a class="small" href="javascript:void(0);">+</a> ' +
+        '<div id="jump_wrapper"> ' +
+        '<div id="jump_page">   ' +
+        '<a class="source" href="./../../../../../../../../Project/docs/src/fake_coffee.html"> fake_coffee.html </a>   ' +
+        '<a class="source" href="./../../../../../../../../Project/docs/README.html"> README.html </a>  ' +
+        '</div> ' +
+        '</li> ' +
+        '</ul>  ' +
+        '<ul class="sections">  ' +
+        '<li id="title"> ' +
+        '<div class="annotation"> ' +
+        '<h1>fake_coffee.coffee</h1> ' +
+        '</div> ' +
+        '</li>    ' +
+        '<li id="section-1"> ' +
+        '<div class="annotation">  ' +
+        '<div class="pilwrap "> ' +
+        '<a class="pilcrow" href="#section-1">&#182;</a> ' +
+        '</div>  ' +
+        '</div>  ' +
+        '<div class="content">' +
+        '<div class=\'highlight\'>' +
+        '<pre>code=here;</pre>' +
+        '</div>' +
+        '</div>  ' +
+        '</li>  ' +
+        '</ul> ' +
+        '</div> ' +
+        '</body> ' +
+        '</html>'
\ No newline at end of file
diff --git a/test/unit-tests/fakes/fake-jst.js b/test/unit-tests/fakes/fake-jst.js
new file mode 100755
index 00000000..00cee6aa
--- /dev/null
+++ b/test/unit-tests/fakes/fake-jst.js
@@ -0,0 +1,3 @@
+module.exports = '<!DOCTYPE html> <html> <head> <title><%= title %></title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"> <link rel="stylesheet" media="all" href="<%= css %>" /> </head> <body> <div id="container"> <div id="background"></div> <% if (sources.length > 1) { %> <ul id="jump_to"> <li> <a class="large" href="javascript:void(0);">Jump To &hellip;</a> <a class="small" href="javascript:void(0);">+</a> <div id="jump_wrapper"> <div id="jump_page"> <% for (var i=0, l=sources.length; i<l; i++) { %> <% var source = sources[i]; %> <a class="source" href="<%= destination(source) %>"> <%= path.basename(source) %> </a> <% } %> </div> </li> </ul> <% } %> <ul class="sections"> <% if (!hasTitle) { %> <li id="title"> <div class="annotation"> <h1><%= title %></h1> </div> </li> <% } %> <% for (var i=0, l=sections.length; i<l; i++) { %> <% var section = sections[i]; %> <li id="section-<%= i + 1 %>"> <div class="annotation"> <% heading = section.docsHtml.match(/^\s*<(h\d)>/) %> <div class="pilwrap <%= heading ? \'for-\' + heading[1] : \'\' %>"> <a class="pilcrow" href="#section-<%= i + 1 %>">&#182;</a> </div> <%= section.docsHtml %> </div> <% if (section.codeText.replace(/\s/gm, \'\') != \'\') { %> <div class="content"><%= section.codeHtml %></div> <% } %> </li> <% } %> </ul> </div> </body> </html>';
+
+//# sourceMappingURL=fake-jst.js.map
diff --git a/test/unit-tests/fakes/fake-jst.js.map b/test/unit-tests/fakes/fake-jst.js.map
new file mode 100644
index 00000000..7d06f8b2
--- /dev/null
+++ b/test/unit-tests/fakes/fake-jst.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"fake-jst.js","sources":["fakes/fake-jst.litcoffee"],"names":[],"mappings":"AAAI,MAAM,CAAC,OAAP,GAAiB","sourcesContent":["    module.exports = '<!DOCTYPE html>\n    <html>\n    <head>\n      <title><%= title %></title>\n      <meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n      <meta name=\"viewport\" content=\"width=device-width, target-densitydpi=160dpi, initial-scale=1.0, maximum-scale=1.0, user-scalable=0\">\n      <link rel=\"stylesheet\" media=\"all\" href=\"<%= css %>\" />\n    </head>\n    <body>\n      <div id=\"container\">\n        <div id=\"background\"></div>\n        <% if (sources.length > 1) { %>\n          <ul id=\"jump_to\">\n            <li>\n              <a class=\"large\" href=\"javascript:void(0);\">Jump To &hellip;</a>\n              <a class=\"small\" href=\"javascript:void(0);\">+</a>\n              <div id=\"jump_wrapper\">\n              <div id=\"jump_page\">\n                <% for (var i=0, l=sources.length; i<l; i++) { %>\n                  <% var source = sources[i]; %>\n                  <a class=\"source\" href=\"<%= destination(source) %>\">\n                    <%= path.basename(source) %>\n                  </a>\n                <% } %>\n              </div>\n            </li>\n          </ul>\n        <% } %>\n        <ul class=\"sections\">\n            <% if (!hasTitle) { %>\n              <li id=\"title\">\n                  <div class=\"annotation\">\n                      <h1><%= title %></h1>\n                  </div>\n              </li>\n            <% } %>\n            <% for (var i=0, l=sections.length; i<l; i++) { %>\n            <% var section = sections[i]; %>\n            <li id=\"section-<%= i + 1 %>\">\n                <div class=\"annotation\">\n                  <% heading = section.docsHtml.match(/^\\s*<(h\\d)>/) %>\n                  <div class=\"pilwrap <%= heading ? \\'for-\\' + heading[1] : \\'\\' %>\">\n                    <a class=\"pilcrow\" href=\"#section-<%= i + 1 %>\">&#182;</a>\n                  </div>\n                  <%= section.docsHtml %>\n                </div>\n                <% if (section.codeText.replace(/\\s/gm, \\'\\') != \\'\\') { %>\n                <div class=\"content\"><%= section.codeHtml %></div>\n                <% } %>\n            </li>\n            <% } %>\n        </ul>\n      </div>\n    </body>\n    </html>'"]}
\ No newline at end of file
diff --git a/test/unit-tests/fakes/fake-jst.litcoffee b/test/unit-tests/fakes/fake-jst.litcoffee
new file mode 100755
index 00000000..da360870
--- /dev/null
+++ b/test/unit-tests/fakes/fake-jst.litcoffee
@@ -0,0 +1,55 @@
+    module.exports = '<!DOCTYPE html>
+    <html>
+    <head>
+      <title><%= title %></title>
+      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
+      <meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
+      <link rel="stylesheet" media="all" href="<%= css %>" />
+    </head>
+    <body>
+      <div id="container">
+        <div id="background"></div>
+        <% if (sources.length > 1) { %>
+          <ul id="jump_to">
+            <li>
+              <a class="large" href="javascript:void(0);">Jump To &hellip;</a>
+              <a class="small" href="javascript:void(0);">+</a>
+              <div id="jump_wrapper">
+              <div id="jump_page">
+                <% for (var i=0, l=sources.length; i<l; i++) { %>
+                  <% var source = sources[i]; %>
+                  <a class="source" href="<%= destination(source) %>">
+                    <%= path.basename(source) %>
+                  </a>
+                <% } %>
+              </div>
+            </li>
+          </ul>
+        <% } %>
+        <ul class="sections">
+            <% if (!hasTitle) { %>
+              <li id="title">
+                  <div class="annotation">
+                      <h1><%= title %></h1>
+                  </div>
+              </li>
+            <% } %>
+            <% for (var i=0, l=sections.length; i<l; i++) { %>
+            <% var section = sections[i]; %>
+            <li id="section-<%= i + 1 %>">
+                <div class="annotation">
+                  <% heading = section.docsHtml.match(/^\s*<(h\d)>/) %>
+                  <div class="pilwrap <%= heading ? \'for-\' + heading[1] : \'\' %>">
+                    <a class="pilcrow" href="#section-<%= i + 1 %>">&#182;</a>
+                  </div>
+                  <%= section.docsHtml %>
+                </div>
+                <% if (section.codeText.replace(/\s/gm, \'\') != \'\') { %>
+                <div class="content"><%= section.codeHtml %></div>
+                <% } %>
+            </li>
+            <% } %>
+        </ul>
+      </div>
+    </body>
+    </html>'
\ No newline at end of file
diff --git a/test/unit-tests/fakes/fake-linear-jst-flattened-result.js b/test/unit-tests/fakes/fake-linear-jst-flattened-result.js
new file mode 100755
index 00000000..b2c9cb86
--- /dev/null
+++ b/test/unit-tests/fakes/fake-linear-jst-flattened-result.js
@@ -0,0 +1,3 @@
+module.exports = '<!DOCTYPE html> <html> <head> <title>fake_coffee.coffee</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" media="all" href="public/stylesheets/normalize.css" /> <link rel="stylesheet" media="all" href="docco.css" /> </head> <body> <div class="container"> <div class="page"> <div class="header">  <h1>fake_coffee.coffee</h1>   <div class="toc"> <h3>Table of Contents</h3> <ol>   <li> <a class="source" href="README.html"> README.html </a> </li>   <li> <a class="source" href="fake_coffee.html"> fake_coffee.html </a> </li>   <li> <a class="source" href="fake_litcoffee.html"> fake_litcoffee.html </a> </li>   <li> <a class="source" href="images/fluffybunny1.jpg"> fluffybunny1.jpg </a> </li>  </ol> </div>  </div>     <div class=\'highlight\'><pre>code=here;</pre></div>   <div class="fleur">h</div> </div> </div> </body> </html>';
+
+//# sourceMappingURL=fake-linear-jst-flattened-result.js.map
diff --git a/test/unit-tests/fakes/fake-linear-jst-flattened-result.js.map b/test/unit-tests/fakes/fake-linear-jst-flattened-result.js.map
new file mode 100644
index 00000000..0a97d744
--- /dev/null
+++ b/test/unit-tests/fakes/fake-linear-jst-flattened-result.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"fake-linear-jst-flattened-result.js","sources":["fakes/fake-linear-jst-flattened-result.litcoffee"],"names":[],"mappings":"AAAI,MAAM,CAAC,OAAP,GAAiB","sourcesContent":["    module.exports = '<!DOCTYPE html> <html> <head> <title>fake_coffee.coffee</title> <meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\"> <link rel=\"stylesheet\" media=\"all\" href=\"public/stylesheets/normalize.css\" /> <link rel=\"stylesheet\" media=\"all\" href=\"docco.css\" /> </head> <body> <div class=\"container\"> <div class=\"page\"> <div class=\"header\">  <h1>fake_coffee.coffee</h1>   <div class=\"toc\"> <h3>Table of Contents</h3> <ol>   <li> <a class=\"source\" href=\"README.html\"> README.html </a> </li>   <li> <a class=\"source\" href=\"fake_coffee.html\"> fake_coffee.html </a> </li>   <li> <a class=\"source\" href=\"fake_litcoffee.html\"> fake_litcoffee.html </a> </li>   <li> <a class=\"source\" href=\"images/fluffybunny1.jpg\"> fluffybunny1.jpg </a> </li>  </ol> </div>  </div>     <div class=\\'highlight\\'><pre>code=here;</pre></div>   <div class=\"fleur\">h</div> </div> </div> </body> </html>'"]}
\ No newline at end of file
diff --git a/test/unit-tests/fakes/fake-linear-jst-flattened-result.litcoffee b/test/unit-tests/fakes/fake-linear-jst-flattened-result.litcoffee
new file mode 100755
index 00000000..c2d5bbea
--- /dev/null
+++ b/test/unit-tests/fakes/fake-linear-jst-flattened-result.litcoffee
@@ -0,0 +1 @@
+    module.exports = '<!DOCTYPE html> <html> <head> <title>fake_coffee.coffee</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" media="all" href="public/stylesheets/normalize.css" /> <link rel="stylesheet" media="all" href="docco.css" /> </head> <body> <div class="container"> <div class="page"> <div class="header">  <h1>fake_coffee.coffee</h1>   <div class="toc"> <h3>Table of Contents</h3> <ol>   <li> <a class="source" href="README.html"> README.html </a> </li>   <li> <a class="source" href="fake_coffee.html"> fake_coffee.html </a> </li>   <li> <a class="source" href="fake_litcoffee.html"> fake_litcoffee.html </a> </li>   <li> <a class="source" href="images/fluffybunny1.jpg"> fluffybunny1.jpg </a> </li>  </ol> </div>  </div>     <div class=\'highlight\'><pre>code=here;</pre></div>   <div class="fleur">h</div> </div> </div> </body> </html>'
\ No newline at end of file
diff --git a/test/unit-tests/fakes/fake-linear-jst-unflattened-result.js b/test/unit-tests/fakes/fake-linear-jst-unflattened-result.js
new file mode 100755
index 00000000..8ca014a7
--- /dev/null
+++ b/test/unit-tests/fakes/fake-linear-jst-unflattened-result.js
@@ -0,0 +1,3 @@
+module.exports = '<!DOCTYPE html> <html> <head> ' + '<title>fake_coffee.coffee</title> ' + '<meta http-equiv="content-type" content="text/html; charset=UTF-8"> ' + '<link rel="stylesheet" media="all" href="public/stylesheets/normalize.css" /> ' + '<link rel="stylesheet" media="all" href="../docco.css" /> ' + '</head> <body> <div class="container"> <div class="page"> ' + '<div class="header">  <h1>fake_coffee.coffee</h1>   ' + '<div class="toc"> <h3>Table of Contents</h3> <ol>   ' + '<li> <a class="source" href="../README.html"> README.html </a> </li>   ' + '<li> <a class="source" href="fake_coffee.html"> fake_coffee.html </a> </li>   ' + '<li> <a class="source" href="lib/fake_litcoffee.html"> fake_litcoffee.html </a> </li>   ' + '<li> <a class="source" href="../images/fluffybunny1.jpg"> fluffybunny1.jpg </a> </li>  ' + '</ol> </div>  </div>     ' + '<div class=\'highlight\'><pre>code=here;</pre></div>   ' + '<div class="fleur">h</div> </div> </div> </body> </html>';
+
+//# sourceMappingURL=fake-linear-jst-unflattened-result.js.map
diff --git a/test/unit-tests/fakes/fake-linear-jst-unflattened-result.js.map b/test/unit-tests/fakes/fake-linear-jst-unflattened-result.js.map
new file mode 100644
index 00000000..ec30ee4f
--- /dev/null
+++ b/test/unit-tests/fakes/fake-linear-jst-unflattened-result.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"fake-linear-jst-unflattened-result.js","sources":["fakes/fake-linear-jst-unflattened-result.litcoffee"],"names":[],"mappings":"AAAI,MAAM,CAAC,OAAP,GAAiB,gCAAA,GACb,oCADa,GAEb,sEAFa,GAGb,gFAHa,GAIb,4DAJa,GAKb,4DALa,GAMb,sDANa,GAOb,sDAPa,GAQb,yEARa,GASb,gFATa,GAUb,0FAVa,GAWb,yFAXa,GAYb,2BAZa,GAab,yDAba,GAcb","sourcesContent":["    module.exports = '<!DOCTYPE html> <html> <head> ' +\n        '<title>fake_coffee.coffee</title> ' +\n        '<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\"> ' +\n        '<link rel=\"stylesheet\" media=\"all\" href=\"public/stylesheets/normalize.css\" /> ' +\n        '<link rel=\"stylesheet\" media=\"all\" href=\"../docco.css\" /> ' +\n        '</head> <body> <div class=\"container\"> <div class=\"page\"> ' +\n        '<div class=\"header\">  <h1>fake_coffee.coffee</h1>   ' +\n        '<div class=\"toc\"> <h3>Table of Contents</h3> <ol>   ' +\n        '<li> <a class=\"source\" href=\"../README.html\"> README.html </a> </li>   ' +\n        '<li> <a class=\"source\" href=\"fake_coffee.html\"> fake_coffee.html </a> </li>   ' +\n        '<li> <a class=\"source\" href=\"lib/fake_litcoffee.html\"> fake_litcoffee.html </a> </li>   ' +\n        '<li> <a class=\"source\" href=\"../images/fluffybunny1.jpg\"> fluffybunny1.jpg </a> </li>  ' +\n        '</ol> </div>  </div>     ' +\n        '<div class=\\'highlight\\'><pre>code=here;</pre></div>   ' +\n        '<div class=\"fleur\">h</div> </div> </div> </body> </html>'"]}
\ No newline at end of file
diff --git a/test/unit-tests/fakes/fake-linear-jst-unflattened-result.litcoffee b/test/unit-tests/fakes/fake-linear-jst-unflattened-result.litcoffee
new file mode 100755
index 00000000..55899bf5
--- /dev/null
+++ b/test/unit-tests/fakes/fake-linear-jst-unflattened-result.litcoffee
@@ -0,0 +1,15 @@
+    module.exports = '<!DOCTYPE html> <html> <head> ' +
+        '<title>fake_coffee.coffee</title> ' +
+        '<meta http-equiv="content-type" content="text/html; charset=UTF-8"> ' +
+        '<link rel="stylesheet" media="all" href="public/stylesheets/normalize.css" /> ' +
+        '<link rel="stylesheet" media="all" href="../docco.css" /> ' +
+        '</head> <body> <div class="container"> <div class="page"> ' +
+        '<div class="header">  <h1>fake_coffee.coffee</h1>   ' +
+        '<div class="toc"> <h3>Table of Contents</h3> <ol>   ' +
+        '<li> <a class="source" href="../README.html"> README.html </a> </li>   ' +
+        '<li> <a class="source" href="fake_coffee.html"> fake_coffee.html </a> </li>   ' +
+        '<li> <a class="source" href="lib/fake_litcoffee.html"> fake_litcoffee.html </a> </li>   ' +
+        '<li> <a class="source" href="../images/fluffybunny1.jpg"> fluffybunny1.jpg </a> </li>  ' +
+        '</ol> </div>  </div>     ' +
+        '<div class=\'highlight\'><pre>code=here;</pre></div>   ' +
+        '<div class="fleur">h</div> </div> </div> </body> </html>'
\ No newline at end of file
diff --git a/test/unit-tests/fakes/fake-linear-jst.js b/test/unit-tests/fakes/fake-linear-jst.js
new file mode 100755
index 00000000..8c4e2de9
--- /dev/null
+++ b/test/unit-tests/fakes/fake-linear-jst.js
@@ -0,0 +1,3 @@
+module.exports = '<!DOCTYPE html> <html> <head> <title><%= title %></title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" media="all" href="public/stylesheets/normalize.css" /> <link rel="stylesheet" media="all" href="<%= css %>" /> </head> <body> <div class="container"> <div class="page"> <div class="header"> <% if (hasTitle) { %> <% var section = sections.shift(); %> <%= section.docsHtml %> <% if (!(/^\s*$/).test(section.codeText)) { %> <%= section.codeHtml %> <% } %> <% } else { %> <h1><%= title %></h1> <% } %> <% if (sources.length > 1) { %> <div class="toc"> <h3>Table of Contents</h3> <ol> <% for (var i=0, l = sources.length; i < l; i++) { %> <% var source = sources[i]; %> <li> <a class="source" href="<%= destination(source) %>"> <%= path.basename(source) %> </a> </li> <% } %> </ol> </div> <% } %> </div> <% for (var i = 0, l = sections.length; i<l; i++) { %> <% var section = sections[i]; %> <%= section.docsHtml %> <% if (!(/^\s*$/).test(section.codeText)) { %> <%= section.codeHtml %> <% } %> <% } %> <div class="fleur">h</div> </div> </div> </body> </html>';
+
+//# sourceMappingURL=fake-linear-jst.js.map
diff --git a/test/unit-tests/fakes/fake-linear-jst.js.map b/test/unit-tests/fakes/fake-linear-jst.js.map
new file mode 100644
index 00000000..5cc5d223
--- /dev/null
+++ b/test/unit-tests/fakes/fake-linear-jst.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"fake-linear-jst.js","sources":["fakes/fake-linear-jst.litcoffee"],"names":[],"mappings":"AAAI,MAAM,CAAC,OAAP,GAAiB","sourcesContent":["    module.exports = '<!DOCTYPE html>\n    <html>\n    <head>\n      <title><%= title %></title>\n      <meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n      <link rel=\"stylesheet\" media=\"all\" href=\"public/stylesheets/normalize.css\" />\n      <link rel=\"stylesheet\" media=\"all\" href=\"<%= css %>\" />\n    </head>\n    <body>\n      <div class=\"container\">\n        <div class=\"page\">\n\n          <div class=\"header\">\n            <% if (hasTitle) { %>\n              <% var section = sections.shift(); %>\n              <%= section.docsHtml %>\n              <% if (!(/^\\s*$/).test(section.codeText)) { %>\n                <%= section.codeHtml %>\n              <% } %>\n            <% } else { %>\n              <h1><%= title %></h1>\n            <% } %>\n\n            <% if (sources.length > 1) { %>\n              <div class=\"toc\">\n                <h3>Table of Contents</h3>\n                <ol>\n                  <% for (var i=0, l = sources.length; i < l; i++) { %>\n                    <% var source = sources[i]; %>\n                    <li>\n                      <a class=\"source\" href=\"<%= destination(source) %>\">\n                        <%= path.basename(source) %>\n                      </a>\n                    </li>\n                  <% } %>\n                </ol>\n              </div>\n            <% } %>\n          </div>\n\n          <% for (var i = 0, l = sections.length; i<l; i++) { %>\n            <% var section = sections[i]; %>\n            <%= section.docsHtml %>\n            <% if (!(/^\\s*$/).test(section.codeText)) { %>\n              <%= section.codeHtml %>\n            <% } %>\n          <% } %>\n          <div class=\"fleur\">h</div>\n        </div>\n      </div>\n    </body>\n    </html>'"]}
\ No newline at end of file
diff --git a/test/unit-tests/fakes/fake-linear-jst.litcoffee b/test/unit-tests/fakes/fake-linear-jst.litcoffee
new file mode 100755
index 00000000..4699c72b
--- /dev/null
+++ b/test/unit-tests/fakes/fake-linear-jst.litcoffee
@@ -0,0 +1,52 @@
+    module.exports = '<!DOCTYPE html>
+    <html>
+    <head>
+      <title><%= title %></title>
+      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
+      <link rel="stylesheet" media="all" href="public/stylesheets/normalize.css" />
+      <link rel="stylesheet" media="all" href="<%= css %>" />
+    </head>
+    <body>
+      <div class="container">
+        <div class="page">
+
+          <div class="header">
+            <% if (hasTitle) { %>
+              <% var section = sections.shift(); %>
+              <%= section.docsHtml %>
+              <% if (!(/^\s*$/).test(section.codeText)) { %>
+                <%= section.codeHtml %>
+              <% } %>
+            <% } else { %>
+              <h1><%= title %></h1>
+            <% } %>
+
+            <% if (sources.length > 1) { %>
+              <div class="toc">
+                <h3>Table of Contents</h3>
+                <ol>
+                  <% for (var i=0, l = sources.length; i < l; i++) { %>
+                    <% var source = sources[i]; %>
+                    <li>
+                      <a class="source" href="<%= destination(source) %>">
+                        <%= path.basename(source) %>
+                      </a>
+                    </li>
+                  <% } %>
+                </ol>
+              </div>
+            <% } %>
+          </div>
+
+          <% for (var i = 0, l = sections.length; i<l; i++) { %>
+            <% var section = sections[i]; %>
+            <%= section.docsHtml %>
+            <% if (!(/^\s*$/).test(section.codeText)) { %>
+              <%= section.codeHtml %>
+            <% } %>
+          <% } %>
+          <div class="fleur">h</div>
+        </div>
+      </div>
+    </body>
+    </html>'
\ No newline at end of file
diff --git a/test/unit-tests/fakes/fake_coffee.coffee b/test/unit-tests/fakes/fake_coffee.coffee
new file mode 100755
index 00000000..8c304b6c
--- /dev/null
+++ b/test/unit-tests/fakes/fake_coffee.coffee
@@ -0,0 +1,9 @@
+# Assignment:
+number   = 42
+opposite = true
+
+# Conditions:
+number = -42 if opposite
+
+# Functions:
+square = (x) -> x * x
diff --git a/test/unit-tests/fakes/informationOnFilesFlattened.js b/test/unit-tests/fakes/informationOnFilesFlattened.js
new file mode 100755
index 00000000..bb83c7f6
--- /dev/null
+++ b/test/unit-tests/fakes/informationOnFilesFlattened.js
@@ -0,0 +1,227 @@
+module.exports = {
+  "README.md": {
+    "destination": {
+      "base": "README.html",
+      "css": "docco.css",
+      "dir": "docs",
+      "ext": ".html",
+      "file": "docs/README.html",
+      "name": "README",
+      "path": "/Project/docs/README.html",
+      "pathdir": "/Project/docs",
+      "relativefile": "README.html",
+      "root": "/Project"
+    },
+    "language": {
+      "code": "\\`\\`\\`",
+      "codeMatcher": /^\s*\`\`\`/,
+      "commentFilter": /(^#![\/]|^\s*#\{)/,
+      "commentMatcher": /^\s*\s?/,
+      "html": true,
+      "imageMatcher": /^!\[(.+)\]\((.+)\)/,
+      "link": "!",
+      "linkMatcher": /^\[(.+)\]\((.+)\)/,
+      "name": "markdown",
+      "section": "#",
+      "sectionMatcher": /^#\s?/,
+      "symbol": ""
+    },
+    "others": {
+      "README.html": {
+        "file": "README.md",
+        "image": false,
+        "link": "README.html"
+      },
+      "fake_coffee.html": {
+        "file": "src/fake_coffee.coffee",
+        "image": false,
+        "link": "fake_coffee.html"
+      },
+      "fake_litcoffee.html": {
+        "file": "src/lib/fake_litcoffee.litcoffee",
+        "image": false,
+        "link": "fake_litcoffee.html"
+      },
+      "fluffybunny1.jpg": {
+        "file": "images/fluffybunny1.jpg",
+        "image": true,
+        "link": "images/fluffybunny1.jpg"
+      }
+    },
+    "source": {
+      "base": "README.md",
+      "dir": "",
+      "ext": ".md",
+      "file": "README.md",
+      "name": "README",
+      "path": "/Project/README.md",
+      "relativefile": "README.md",
+      "root": "/Project"
+    }
+  },
+  "images/fluffybunny1.jpg": {
+    "destination": {
+      "base": "fluffybunny1.jpg",
+      "css": "../docco.css",
+      "dir": "docs/images",
+      "ext": ".jpg",
+      "file": "docs/images/fluffybunny1.jpg",
+      "name": "fluffybunny1",
+      "path": "/Project/docs/images/fluffybunny1.jpg",
+      "pathdir": "/Project/docs/images",
+      "relativefile": "images/fluffybunny1.jpg",
+      "root": "/Project"
+    },
+    "language": {
+      "commentFilter": /(^#![\/]|^\s*#\{)/,
+      "commentMatcher": /^\s*undefined\s?/,
+      "copy": true,
+      "name": "image"
+    },
+    "others": {
+      "README.html": {
+        "file": "README.md",
+        "image": false,
+        "link": "README.html"
+      },
+      "fake_coffee.html": {
+        "file": "src/fake_coffee.coffee",
+        "image": false,
+        "link": "fake_coffee.html"
+      },
+      "fake_litcoffee.html": {
+        "file": "src/lib/fake_litcoffee.litcoffee",
+        "image": false,
+        "link": "fake_litcoffee.html"
+      },
+      "fluffybunny1.jpg": {
+        "file": "images/fluffybunny1.jpg",
+        "image": true,
+        "link": "images/fluffybunny1.jpg"
+      }
+    },
+    "source": {
+      "base": "fluffybunny1.jpg",
+      "dir": "images",
+      "ext": ".jpg",
+      "file": "images/fluffybunny1.jpg",
+      "name": "fluffybunny1",
+      "path": "/Project/images/fluffybunny1.jpg",
+      "relativefile": "fluffybunny1.jpg",
+      "root": "/Project"
+    }
+  },
+  "src/fake_coffee.coffee": {
+    "destination": {
+      "base": "fake_coffee.html",
+      "css": "docco.css",
+      "dir": "docs",
+      "ext": ".html",
+      "file": "docs/fake_coffee.html",
+      "name": "fake_coffee",
+      "path": "/Project/docs/fake_coffee.html",
+      "pathdir": "/Project/docs",
+      "relativefile": "fake_coffee.html",
+      "root": "/Project"
+    },
+    "language": {
+      "commentFilter": /(^#![\/]|^\s*#\{)/,
+      "commentMatcher": /^\s*#\s?/,
+      "multiline": {
+        "start": "###",
+        "stop": "###"
+      },
+      "name": "coffeescript",
+      "startMatcher": /^\s*\#\#\#/,
+      "stopMatcher": /^\s*\#\#\#/,
+      "symbol": "#"
+    },
+    "others": {
+      "README.html": {
+        "file": "README.md",
+        "image": false,
+        "link": "README.html"
+      },
+      "fake_coffee.html": {
+        "file": "src/fake_coffee.coffee",
+        "image": false,
+        "link": "fake_coffee.html"
+      },
+      "fake_litcoffee.html": {
+        "file": "src/lib/fake_litcoffee.litcoffee",
+        "image": false,
+        "link": "fake_litcoffee.html"
+      },
+      "fluffybunny1.jpg": {
+        "file": "images/fluffybunny1.jpg",
+        "image": true,
+        "link": "images/fluffybunny1.jpg"
+      }
+    },
+    "source": {
+      "base": "fake_coffee.coffee",
+      "dir": "src",
+      "ext": ".coffee",
+      "file": "src/fake_coffee.coffee",
+      "name": "fake_coffee",
+      "path": "/Project/src/fake_coffee.coffee",
+      "relativefile": "fake_coffee.coffee",
+      "root": "/Project"
+    }
+  },
+  "src/lib/fake_litcoffee.litcoffee": {
+    "destination": {
+      "base": "fake_litcoffee.html",
+      "css": "docco.css",
+      "dir": "docs",
+      "ext": ".html",
+      "file": "docs/fake_litcoffee.html",
+      "name": "fake_litcoffee",
+      "path": "/Project/docs/fake_litcoffee.html",
+      "pathdir": "/Project/docs",
+      "relativefile": "fake_litcoffee.html",
+      "root": "/Project"
+    },
+    "language": {
+      "commentFilter": /(^#![\/]|^\s*#\{)/,
+      "commentMatcher": /^\s*#\s?/,
+      "literate": true,
+      "name": "coffeescript",
+      "symbol": "#"
+    },
+    "others": {
+      "README.html": {
+        "file": "README.md",
+        "image": false,
+        "link": "README.html"
+      },
+      "fake_coffee.html": {
+        "file": "src/fake_coffee.coffee",
+        "image": false,
+        "link": "fake_coffee.html"
+      },
+      "fake_litcoffee.html": {
+        "file": "src/lib/fake_litcoffee.litcoffee",
+        "image": false,
+        "link": "fake_litcoffee.html"
+      },
+      "fluffybunny1.jpg": {
+        "file": "images/fluffybunny1.jpg",
+        "image": true,
+        "link": "images/fluffybunny1.jpg"
+      }
+    },
+    "source": {
+      "base": "fake_litcoffee.litcoffee",
+      "dir": "src/lib",
+      "ext": ".litcoffee",
+      "file": "src/lib/fake_litcoffee.litcoffee",
+      "name": "fake_litcoffee",
+      "path": "/Project/src/lib/fake_litcoffee.litcoffee",
+      "relativefile": "fake_litcoffee.litcoffee",
+      "root": "/Project"
+    }
+  }
+};
+
+//# sourceMappingURL=informationOnFilesFlattened.js.map
diff --git a/test/unit-tests/fakes/informationOnFilesFlattened.js.map b/test/unit-tests/fakes/informationOnFilesFlattened.js.map
new file mode 100644
index 00000000..dd5852c6
--- /dev/null
+++ b/test/unit-tests/fakes/informationOnFilesFlattened.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"informationOnFilesFlattened.js","sources":["fakes/informationOnFilesFlattened.litcoffee"],"names":[],"mappings":"AAEI,MAAM,CAAC,OAAP,GAAiB;EACf,WAAA,EAAa;IACX,aAAA,EAAe;MACb,MAAA,EAAQ,aADK;MAEb,KAAA,EAAO,WAFM;MAGb,KAAA,EAAO,MAHM;MAIb,KAAA,EAAO,OAJM;MAKb,MAAA,EAAQ,kBALK;MAMb,MAAA,EAAQ,QANK;MAOb,MAAA,EAAQ,2BAPK;MAQb,SAAA,EAAW,eARE;MASb,cAAA,EAAgB,aATH;MAUb,MAAA,EAAQ,UAVK;KADJ;IAaX,UAAA,EAAY;MACV,MAAA,EAAQ,WADE;MAEV,aAAA,EAAe,YAFL;MAGV,eAAA,EAAiB,mBAHP;MAIV,gBAAA,EAAkB,SAJR;MAKV,MAAA,EAAQ,IALE;MAMV,cAAA,EAAgB,oBANN;MAOV,MAAA,EAAQ,GAPE;MAQV,aAAA,EAAe,mBARL;MASV,MAAA,EAAQ,UATE;MAUV,SAAA,EAAW,GAVD;MAWV,gBAAA,EAAkB,OAXR;MAYV,QAAA,EAAU,EAZA;KAbD;IA2BX,QAAA,EAAU;MACR,aAAA,EAAe;QACb,MAAA,EAAQ,WADK;QAEb,OAAA,EAAS,KAFI;QAGb,MAAA,EAAQ,aAHK;OADP;MAMR,kBAAA,EAAoB;QAClB,MAAA,EAAQ,wBADU;QAElB,OAAA,EAAS,KAFS;QAGlB,MAAA,EAAQ,kBAHU;OANZ;MAWR,qBAAA,EAAuB;QACrB,MAAA,EAAQ,kCADa;QAErB,OAAA,EAAS,KAFY;QAGrB,MAAA,EAAQ,qBAHa;OAXf;MAgBR,kBAAA,EAAoB;QAClB,MAAA,EAAQ,yBADU;QAElB,OAAA,EAAS,IAFS;QAGlB,MAAA,EAAQ,yBAHU;OAhBZ;KA3BC;IAiDX,QAAA,EAAU;MACR,MAAA,EAAQ,WADA;MAER,KAAA,EAAO,EAFC;MAGR,KAAA,EAAO,KAHC;MAIR,MAAA,EAAQ,WAJA;MAKR,MAAA,EAAQ,QALA;MAMR,MAAA,EAAQ,oBANA;MAOR,cAAA,EAAgB,WAPR;MAQR,MAAA,EAAQ,UARA;KAjDC;GADE;EA6Df,yBAAA,EAA2B;IACzB,aAAA,EAAe;MACb,MAAA,EAAQ,kBADK;MAEb,KAAA,EAAO,cAFM;MAGb,KAAA,EAAO,aAHM;MAIb,KAAA,EAAO,MAJM;MAKb,MAAA,EAAQ,8BALK;MAMb,MAAA,EAAQ,cANK;MAOb,MAAA,EAAQ,uCAPK;MAQb,SAAA,EAAW,sBARE;MASb,cAAA,EAAgB,yBATH;MAUb,MAAA,EAAQ,UAVK;KADU;IAazB,UAAA,EAAY;MACV,eAAA,EAAiB,mBADP;MAEV,gBAAA,EAAkB,kBAFR;MAGV,MAAA,EAAQ,IAHE;MAIV,MAAA,EAAQ,OAJE;KAba;IAmBzB,QAAA,EAAU;MACR,aAAA,EAAe;QACb,MAAA,EAAQ,WADK;QAEb,OAAA,EAAS,KAFI;QAGb,MAAA,EAAQ,aAHK;OADP;MAMR,kBAAA,EAAoB;QAClB,MAAA,EAAQ,wBADU;QAElB,OAAA,EAAS,KAFS;QAGlB,MAAA,EAAQ,kBAHU;OANZ;MAWR,qBAAA,EAAuB;QACrB,MAAA,EAAQ,kCADa;QAErB,OAAA,EAAS,KAFY;QAGrB,MAAA,EAAQ,qBAHa;OAXf;MAgBR,kBAAA,EAAoB;QAClB,MAAA,EAAQ,yBADU;QAElB,OAAA,EAAS,IAFS;QAGlB,MAAA,EAAQ,yBAHU;OAhBZ;KAnBe;IAyCzB,QAAA,EAAU;MACR,MAAA,EAAQ,kBADA;MAER,KAAA,EAAO,QAFC;MAGR,KAAA,EAAO,MAHC;MAIR,MAAA,EAAQ,yBAJA;MAKR,MAAA,EAAQ,cALA;MAMR,MAAA,EAAQ,kCANA;MAOR,cAAA,EAAgB,kBAPR;MAQR,MAAA,EAAQ,UARA;KAzCe;GA7DZ;EAiHf,wBAAA,EAA0B;IACxB,aAAA,EAAe;MACb,MAAA,EAAQ,kBADK;MAEb,KAAA,EAAO,WAFM;MAGb,KAAA,EAAO,MAHM;MAIb,KAAA,EAAO,OAJM;MAKb,MAAA,EAAQ,uBALK;MAMb,MAAA,EAAQ,aANK;MAOb,MAAA,EAAQ,gCAPK;MAQb,SAAA,EAAW,eARE;MASb,cAAA,EAAgB,kBATH;MAUb,MAAA,EAAQ,UAVK;KADS;IAaxB,UAAA,EAAY;MACV,eAAA,EAAiB,mBADP;MAEV,gBAAA,EAAkB,UAFR;MAGV,WAAA,EAAa;QACX,OAAA,EAAS,KADE;QAEX,MAAA,EAAQ,KAFG;OAHH;MAOV,MAAA,EAAQ,cAPE;MAQV,cAAA,EAAgB,YARN;MASV,aAAA,EAAe,YATL;MAUV,QAAA,EAAU,GAVA;KAbY;IAyBxB,QAAA,EAAU;MACR,aAAA,EAAe;QACb,MAAA,EAAQ,WADK;QAEb,OAAA,EAAS,KAFI;QAGb,MAAA,EAAQ,aAHK;OADP;MAMR,kBAAA,EAAoB;QAClB,MAAA,EAAQ,wBADU;QAElB,OAAA,EAAS,KAFS;QAGlB,MAAA,EAAQ,kBAHU;OANZ;MAWR,qBAAA,EAAuB;QACrB,MAAA,EAAQ,kCADa;QAErB,OAAA,EAAS,KAFY;QAGrB,MAAA,EAAQ,qBAHa;OAXf;MAgBR,kBAAA,EAAoB;QAClB,MAAA,EAAQ,yBADU;QAElB,OAAA,EAAS,IAFS;QAGlB,MAAA,EAAQ,yBAHU;OAhBZ;KAzBc;IA+CxB,QAAA,EAAU;MACR,MAAA,EAAQ,oBADA;MAER,KAAA,EAAO,KAFC;MAGR,KAAA,EAAO,SAHC;MAIR,MAAA,EAAQ,wBAJA;MAKR,MAAA,EAAQ,aALA;MAMR,MAAA,EAAQ,iCANA;MAOR,cAAA,EAAgB,oBAPR;MAQR,MAAA,EAAQ,UARA;KA/Cc;GAjHX;EA2Kf,kCAAA,EAAoC;IAClC,aAAA,EAAe;MACb,MAAA,EAAQ,qBADK;MAEb,KAAA,EAAO,WAFM;MAGb,KAAA,EAAO,MAHM;MAIb,KAAA,EAAO,OAJM;MAKb,MAAA,EAAQ,0BALK;MAMb,MAAA,EAAQ,gBANK;MAOb,MAAA,EAAQ,mCAPK;MAQb,SAAA,EAAW,eARE;MASb,cAAA,EAAgB,qBATH;MAUb,MAAA,EAAQ,UAVK;KADmB;IAalC,UAAA,EAAY;MACV,eAAA,EAAiB,mBADP;MAEV,gBAAA,EAAkB,UAFR;MAGV,UAAA,EAAY,IAHF;MAIV,MAAA,EAAQ,cAJE;MAKV,QAAA,EAAU,GALA;KAbsB;IAoBlC,QAAA,EAAU;MACR,aAAA,EAAe;QACb,MAAA,EAAQ,WADK;QAEb,OAAA,EAAS,KAFI;QAGb,MAAA,EAAQ,aAHK;OADP;MAMR,kBAAA,EAAoB;QAClB,MAAA,EAAQ,wBADU;QAElB,OAAA,EAAS,KAFS;QAGlB,MAAA,EAAQ,kBAHU;OANZ;MAWR,qBAAA,EAAuB;QACrB,MAAA,EAAQ,kCADa;QAErB,OAAA,EAAS,KAFY;QAGrB,MAAA,EAAQ,qBAHa;OAXf;MAgBR,kBAAA,EAAoB;QAClB,MAAA,EAAQ,yBADU;QAElB,OAAA,EAAS,IAFS;QAGlB,MAAA,EAAQ,yBAHU;OAhBZ;KApBwB;IA0ClC,QAAA,EAAU;MACR,MAAA,EAAQ,0BADA;MAER,KAAA,EAAO,SAFC;MAGR,KAAA,EAAO,YAHC;MAIR,MAAA,EAAQ,kCAJA;MAKR,MAAA,EAAQ,gBALA;MAMR,MAAA,EAAQ,2CANA;MAOR,cAAA,EAAgB,0BAPR;MAQR,MAAA,EAAQ,UARA;KA1CwB;GA3KrB","sourcesContent":["A fake for the flattended getInformationOnFiles test.\n\n    module.exports = {\n      \"README.md\": {\n        \"destination\": {\n          \"base\": \"README.html\"\n          \"css\": \"docco.css\"\n          \"dir\": \"docs\"\n          \"ext\": \".html\"\n          \"file\": \"docs/README.html\"\n          \"name\": \"README\"\n          \"path\": \"/Project/docs/README.html\"\n          \"pathdir\": \"/Project/docs\"\n          \"relativefile\": \"README.html\"\n          \"root\": \"/Project\"\n        }\n        \"language\": {\n          \"code\": \"\\\\`\\\\`\\\\`\"\n          \"codeMatcher\": /^\\s*\\`\\`\\`/\n          \"commentFilter\": /(^#![\\/]|^\\s*#\\{)/\n          \"commentMatcher\": /^\\s*\\s?/\n          \"html\": true\n          \"imageMatcher\": /^!\\[(.+)\\]\\((.+)\\)/,\n          \"link\": \"!\",\n          \"linkMatcher\": /^\\[(.+)\\]\\((.+)\\)/,\n          \"name\": \"markdown\"\n          \"section\": \"#\"\n          \"sectionMatcher\": /^#\\s?/\n          \"symbol\": \"\"\n        }\n        \"others\": {\n          \"README.html\": {\n            \"file\": \"README.md\"\n            \"image\": false\n            \"link\": \"README.html\"\n          }\n          \"fake_coffee.html\": {\n            \"file\": \"src/fake_coffee.coffee\"\n            \"image\": false\n            \"link\": \"fake_coffee.html\"\n          }\n          \"fake_litcoffee.html\": {\n            \"file\": \"src/lib/fake_litcoffee.litcoffee\"\n            \"image\": false\n            \"link\": \"fake_litcoffee.html\"\n          }\n          \"fluffybunny1.jpg\": {\n            \"file\": \"images/fluffybunny1.jpg\"\n            \"image\": true\n            \"link\": \"images/fluffybunny1.jpg\"\n          }\n        }\n        \"source\": {\n          \"base\": \"README.md\"\n          \"dir\": \"\"\n          \"ext\": \".md\"\n          \"file\": \"README.md\"\n          \"name\": \"README\"\n          \"path\": \"/Project/README.md\"\n          \"relativefile\": \"README.md\"\n          \"root\": \"/Project\"\n        }\n      }\n      \"images/fluffybunny1.jpg\": {\n        \"destination\": {\n          \"base\": \"fluffybunny1.jpg\"\n          \"css\": \"../docco.css\"\n          \"dir\": \"docs/images\"\n          \"ext\": \".jpg\"\n          \"file\": \"docs/images/fluffybunny1.jpg\"\n          \"name\": \"fluffybunny1\"\n          \"path\": \"/Project/docs/images/fluffybunny1.jpg\"\n          \"pathdir\": \"/Project/docs/images\"\n          \"relativefile\": \"images/fluffybunny1.jpg\"\n          \"root\": \"/Project\"\n        }\n        \"language\": {\n          \"commentFilter\": /(^#![\\/]|^\\s*#\\{)/\n          \"commentMatcher\": /^\\s*undefined\\s?/\n          \"copy\": true\n          \"name\": \"image\"\n        }\n        \"others\": {\n          \"README.html\": {\n            \"file\": \"README.md\"\n            \"image\": false\n            \"link\": \"README.html\"\n          }\n          \"fake_coffee.html\": {\n            \"file\": \"src/fake_coffee.coffee\"\n            \"image\": false\n            \"link\": \"fake_coffee.html\"\n          }\n          \"fake_litcoffee.html\": {\n            \"file\": \"src/lib/fake_litcoffee.litcoffee\"\n            \"image\": false\n            \"link\": \"fake_litcoffee.html\"\n          }\n          \"fluffybunny1.jpg\": {\n            \"file\": \"images/fluffybunny1.jpg\"\n            \"image\": true\n            \"link\": \"images/fluffybunny1.jpg\"\n          }\n        }\n        \"source\": {\n          \"base\": \"fluffybunny1.jpg\"\n          \"dir\": \"images\"\n          \"ext\": \".jpg\"\n          \"file\": \"images/fluffybunny1.jpg\"\n          \"name\": \"fluffybunny1\"\n          \"path\": \"/Project/images/fluffybunny1.jpg\"\n          \"relativefile\": \"fluffybunny1.jpg\"\n          \"root\": \"/Project\"\n        }\n      }\n      \"src/fake_coffee.coffee\": {\n        \"destination\": {\n          \"base\": \"fake_coffee.html\"\n          \"css\": \"docco.css\"\n          \"dir\": \"docs\"\n          \"ext\": \".html\"\n          \"file\": \"docs/fake_coffee.html\"\n          \"name\": \"fake_coffee\"\n          \"path\": \"/Project/docs/fake_coffee.html\"\n          \"pathdir\": \"/Project/docs\"\n          \"relativefile\": \"fake_coffee.html\"\n          \"root\": \"/Project\"\n        }\n        \"language\": {\n          \"commentFilter\": /(^#![\\/]|^\\s*#\\{)/\n          \"commentMatcher\": /^\\s*#\\s?/\n          \"multiline\": {\n            \"start\": \"###\"\n            \"stop\": \"###\"\n          }\n          \"name\": \"coffeescript\"\n          \"startMatcher\": /^\\s*\\#\\#\\#/\n          \"stopMatcher\": /^\\s*\\#\\#\\#/\n          \"symbol\": \"#\"\n        }\n        \"others\": {\n          \"README.html\": {\n            \"file\": \"README.md\"\n            \"image\": false\n            \"link\": \"README.html\"\n          }\n          \"fake_coffee.html\": {\n            \"file\": \"src/fake_coffee.coffee\"\n            \"image\": false\n            \"link\": \"fake_coffee.html\"\n          }\n          \"fake_litcoffee.html\": {\n            \"file\": \"src/lib/fake_litcoffee.litcoffee\"\n            \"image\": false\n            \"link\": \"fake_litcoffee.html\"\n          }\n          \"fluffybunny1.jpg\": {\n            \"file\": \"images/fluffybunny1.jpg\"\n            \"image\": true\n            \"link\": \"images/fluffybunny1.jpg\"\n          }\n        }\n        \"source\": {\n          \"base\": \"fake_coffee.coffee\"\n          \"dir\": \"src\"\n          \"ext\": \".coffee\"\n          \"file\": \"src/fake_coffee.coffee\"\n          \"name\": \"fake_coffee\"\n          \"path\": \"/Project/src/fake_coffee.coffee\"\n          \"relativefile\": \"fake_coffee.coffee\"\n          \"root\": \"/Project\"\n        }\n      }\n      \"src/lib/fake_litcoffee.litcoffee\": {\n        \"destination\": {\n          \"base\": \"fake_litcoffee.html\"\n          \"css\": \"docco.css\"\n          \"dir\": \"docs\"\n          \"ext\": \".html\"\n          \"file\": \"docs/fake_litcoffee.html\"\n          \"name\": \"fake_litcoffee\"\n          \"path\": \"/Project/docs/fake_litcoffee.html\"\n          \"pathdir\": \"/Project/docs\"\n          \"relativefile\": \"fake_litcoffee.html\"\n          \"root\": \"/Project\"\n        }\n        \"language\": {\n          \"commentFilter\": /(^#![\\/]|^\\s*#\\{)/\n          \"commentMatcher\": /^\\s*#\\s?/\n          \"literate\": true\n          \"name\": \"coffeescript\"\n          \"symbol\": \"#\"\n        }\n        \"others\": {\n          \"README.html\": {\n            \"file\": \"README.md\"\n            \"image\": false\n            \"link\": \"README.html\"\n          }\n          \"fake_coffee.html\": {\n            \"file\": \"src/fake_coffee.coffee\"\n            \"image\": false\n            \"link\": \"fake_coffee.html\"\n          }\n          \"fake_litcoffee.html\": {\n            \"file\": \"src/lib/fake_litcoffee.litcoffee\"\n            \"image\": false\n            \"link\": \"fake_litcoffee.html\"\n          }\n          \"fluffybunny1.jpg\": {\n            \"file\": \"images/fluffybunny1.jpg\"\n            \"image\": true\n            \"link\": \"images/fluffybunny1.jpg\"\n          }\n        }\n        \"source\": {\n          \"base\": \"fake_litcoffee.litcoffee\"\n          \"dir\": \"src/lib\"\n          \"ext\": \".litcoffee\"\n          \"file\": \"src/lib/fake_litcoffee.litcoffee\"\n          \"name\": \"fake_litcoffee\"\n          \"path\": \"/Project/src/lib/fake_litcoffee.litcoffee\"\n          \"relativefile\": \"fake_litcoffee.litcoffee\"\n          \"root\": \"/Project\"\n        }\n      }\n    }"]}
\ No newline at end of file
diff --git a/test/unit-tests/fakes/informationOnFilesFlattened.litcoffee b/test/unit-tests/fakes/informationOnFilesFlattened.litcoffee
new file mode 100755
index 00000000..8b5f1623
--- /dev/null
+++ b/test/unit-tests/fakes/informationOnFilesFlattened.litcoffee
@@ -0,0 +1,227 @@
+A fake for the flattended getInformationOnFiles test.
+
+    module.exports = {
+      "README.md": {
+        "destination": {
+          "base": "README.html"
+          "css": "docco.css"
+          "dir": "docs"
+          "ext": ".html"
+          "file": "docs/README.html"
+          "name": "README"
+          "path": "/Project/docs/README.html"
+          "pathdir": "/Project/docs"
+          "relativefile": "README.html"
+          "root": "/Project"
+        }
+        "language": {
+          "code": "\\`\\`\\`"
+          "codeMatcher": /^\s*\`\`\`/
+          "commentFilter": /(^#![\/]|^\s*#\{)/
+          "commentMatcher": /^\s*\s?/
+          "html": true
+          "imageMatcher": /^!\[(.+)\]\((.+)\)/,
+          "link": "!",
+          "linkMatcher": /^\[(.+)\]\((.+)\)/,
+          "name": "markdown"
+          "section": "#"
+          "sectionMatcher": /^#\s?/
+          "symbol": ""
+        }
+        "others": {
+          "README.html": {
+            "file": "README.md"
+            "image": false
+            "link": "README.html"
+          }
+          "fake_coffee.html": {
+            "file": "src/fake_coffee.coffee"
+            "image": false
+            "link": "fake_coffee.html"
+          }
+          "fake_litcoffee.html": {
+            "file": "src/lib/fake_litcoffee.litcoffee"
+            "image": false
+            "link": "fake_litcoffee.html"
+          }
+          "fluffybunny1.jpg": {
+            "file": "images/fluffybunny1.jpg"
+            "image": true
+            "link": "images/fluffybunny1.jpg"
+          }
+        }
+        "source": {
+          "base": "README.md"
+          "dir": ""
+          "ext": ".md"
+          "file": "README.md"
+          "name": "README"
+          "path": "/Project/README.md"
+          "relativefile": "README.md"
+          "root": "/Project"
+        }
+      }
+      "images/fluffybunny1.jpg": {
+        "destination": {
+          "base": "fluffybunny1.jpg"
+          "css": "../docco.css"
+          "dir": "docs/images"
+          "ext": ".jpg"
+          "file": "docs/images/fluffybunny1.jpg"
+          "name": "fluffybunny1"
+          "path": "/Project/docs/images/fluffybunny1.jpg"
+          "pathdir": "/Project/docs/images"
+          "relativefile": "images/fluffybunny1.jpg"
+          "root": "/Project"
+        }
+        "language": {
+          "commentFilter": /(^#![\/]|^\s*#\{)/
+          "commentMatcher": /^\s*undefined\s?/
+          "copy": true
+          "name": "image"
+        }
+        "others": {
+          "README.html": {
+            "file": "README.md"
+            "image": false
+            "link": "README.html"
+          }
+          "fake_coffee.html": {
+            "file": "src/fake_coffee.coffee"
+            "image": false
+            "link": "fake_coffee.html"
+          }
+          "fake_litcoffee.html": {
+            "file": "src/lib/fake_litcoffee.litcoffee"
+            "image": false
+            "link": "fake_litcoffee.html"
+          }
+          "fluffybunny1.jpg": {
+            "file": "images/fluffybunny1.jpg"
+            "image": true
+            "link": "images/fluffybunny1.jpg"
+          }
+        }
+        "source": {
+          "base": "fluffybunny1.jpg"
+          "dir": "images"
+          "ext": ".jpg"
+          "file": "images/fluffybunny1.jpg"
+          "name": "fluffybunny1"
+          "path": "/Project/images/fluffybunny1.jpg"
+          "relativefile": "fluffybunny1.jpg"
+          "root": "/Project"
+        }
+      }
+      "src/fake_coffee.coffee": {
+        "destination": {
+          "base": "fake_coffee.html"
+          "css": "docco.css"
+          "dir": "docs"
+          "ext": ".html"
+          "file": "docs/fake_coffee.html"
+          "name": "fake_coffee"
+          "path": "/Project/docs/fake_coffee.html"
+          "pathdir": "/Project/docs"
+          "relativefile": "fake_coffee.html"
+          "root": "/Project"
+        }
+        "language": {
+          "commentFilter": /(^#![\/]|^\s*#\{)/
+          "commentMatcher": /^\s*#\s?/
+          "multiline": {
+            "start": "###"
+            "stop": "###"
+          }
+          "name": "coffeescript"
+          "startMatcher": /^\s*\#\#\#/
+          "stopMatcher": /^\s*\#\#\#/
+          "symbol": "#"
+        }
+        "others": {
+          "README.html": {
+            "file": "README.md"
+            "image": false
+            "link": "README.html"
+          }
+          "fake_coffee.html": {
+            "file": "src/fake_coffee.coffee"
+            "image": false
+            "link": "fake_coffee.html"
+          }
+          "fake_litcoffee.html": {
+            "file": "src/lib/fake_litcoffee.litcoffee"
+            "image": false
+            "link": "fake_litcoffee.html"
+          }
+          "fluffybunny1.jpg": {
+            "file": "images/fluffybunny1.jpg"
+            "image": true
+            "link": "images/fluffybunny1.jpg"
+          }
+        }
+        "source": {
+          "base": "fake_coffee.coffee"
+          "dir": "src"
+          "ext": ".coffee"
+          "file": "src/fake_coffee.coffee"
+          "name": "fake_coffee"
+          "path": "/Project/src/fake_coffee.coffee"
+          "relativefile": "fake_coffee.coffee"
+          "root": "/Project"
+        }
+      }
+      "src/lib/fake_litcoffee.litcoffee": {
+        "destination": {
+          "base": "fake_litcoffee.html"
+          "css": "docco.css"
+          "dir": "docs"
+          "ext": ".html"
+          "file": "docs/fake_litcoffee.html"
+          "name": "fake_litcoffee"
+          "path": "/Project/docs/fake_litcoffee.html"
+          "pathdir": "/Project/docs"
+          "relativefile": "fake_litcoffee.html"
+          "root": "/Project"
+        }
+        "language": {
+          "commentFilter": /(^#![\/]|^\s*#\{)/
+          "commentMatcher": /^\s*#\s?/
+          "literate": true
+          "name": "coffeescript"
+          "symbol": "#"
+        }
+        "others": {
+          "README.html": {
+            "file": "README.md"
+            "image": false
+            "link": "README.html"
+          }
+          "fake_coffee.html": {
+            "file": "src/fake_coffee.coffee"
+            "image": false
+            "link": "fake_coffee.html"
+          }
+          "fake_litcoffee.html": {
+            "file": "src/lib/fake_litcoffee.litcoffee"
+            "image": false
+            "link": "fake_litcoffee.html"
+          }
+          "fluffybunny1.jpg": {
+            "file": "images/fluffybunny1.jpg"
+            "image": true
+            "link": "images/fluffybunny1.jpg"
+          }
+        }
+        "source": {
+          "base": "fake_litcoffee.litcoffee"
+          "dir": "src/lib"
+          "ext": ".litcoffee"
+          "file": "src/lib/fake_litcoffee.litcoffee"
+          "name": "fake_litcoffee"
+          "path": "/Project/src/lib/fake_litcoffee.litcoffee"
+          "relativefile": "fake_litcoffee.litcoffee"
+          "root": "/Project"
+        }
+      }
+    }
\ No newline at end of file
diff --git a/test/unit-tests/fakes/informationOnFilesUnFlattened.js b/test/unit-tests/fakes/informationOnFilesUnFlattened.js
new file mode 100755
index 00000000..2c3e35e0
--- /dev/null
+++ b/test/unit-tests/fakes/informationOnFilesUnFlattened.js
@@ -0,0 +1,227 @@
+module.exports = {
+  "README.md": {
+    "destination": {
+      "base": "README.html",
+      "css": "docco.css",
+      "dir": "docs",
+      "ext": ".html",
+      "file": "docs/README.html",
+      "name": "README",
+      "path": "/Project/docs/README.html",
+      "pathdir": "/Project/docs",
+      "relativefile": "README.html",
+      "root": "/Project"
+    },
+    "language": {
+      "code": "\\`\\`\\`",
+      "codeMatcher": /^\s*\`\`\`/,
+      "commentFilter": /(^#![\/]|^\s*#\{)/,
+      "commentMatcher": /^\s*\s?/,
+      "html": true,
+      "imageMatcher": /^!\[(.+)\]\((.+)\)/,
+      "link": "!",
+      "linkMatcher": /^\[(.+)\]\((.+)\)/,
+      "name": "markdown",
+      "section": "#",
+      "sectionMatcher": /^#\s?/,
+      "symbol": ""
+    },
+    "others": {
+      "README.html": {
+        "file": "README.md",
+        "image": false,
+        "link": "README.html"
+      },
+      "fake_coffee.html": {
+        "file": "src/fake_coffee.coffee",
+        "image": false,
+        "link": "src/fake_coffee.html"
+      },
+      "fake_litcoffee.html": {
+        "file": "src/lib/fake_litcoffee.litcoffee",
+        "image": false,
+        "link": "src/lib/fake_litcoffee.html"
+      },
+      "fluffybunny1.jpg": {
+        "file": "images/fluffybunny1.jpg",
+        "image": true,
+        "link": "images/fluffybunny1.jpg"
+      }
+    },
+    "source": {
+      "base": "README.md",
+      "dir": "",
+      "ext": ".md",
+      "file": "README.md",
+      "name": "README",
+      "path": "/Project/README.md",
+      "relativefile": "README.md",
+      "root": "/Project"
+    }
+  },
+  "images/fluffybunny1.jpg": {
+    "destination": {
+      "base": "fluffybunny1.jpg",
+      "css": "../docco.css",
+      "dir": "docs/images",
+      "ext": ".jpg",
+      "file": "docs/images/fluffybunny1.jpg",
+      "name": "fluffybunny1",
+      "path": "/Project/docs/images/fluffybunny1.jpg",
+      "pathdir": "/Project/docs/images",
+      "relativefile": "images/fluffybunny1.jpg",
+      "root": "/Project"
+    },
+    "language": {
+      "commentFilter": /(^#![\/]|^\s*#\{)/,
+      "commentMatcher": /^\s*undefined\s?/,
+      "copy": true,
+      "name": "image"
+    },
+    "others": {
+      "README.html": {
+        "file": "README.md",
+        "image": false,
+        "link": "../README.html"
+      },
+      "fake_coffee.html": {
+        "file": "src/fake_coffee.coffee",
+        "image": false,
+        "link": "../src/fake_coffee.html"
+      },
+      "fake_litcoffee.html": {
+        "file": "src/lib/fake_litcoffee.litcoffee",
+        "image": false,
+        "link": "../src/lib/fake_litcoffee.html"
+      },
+      "fluffybunny1.jpg": {
+        "file": "images/fluffybunny1.jpg",
+        "image": true,
+        "link": "fluffybunny1.jpg"
+      }
+    },
+    "source": {
+      "base": "fluffybunny1.jpg",
+      "dir": "images",
+      "ext": ".jpg",
+      "file": "images/fluffybunny1.jpg",
+      "name": "fluffybunny1",
+      "path": "/Project/images/fluffybunny1.jpg",
+      "relativefile": "images/fluffybunny1.jpg",
+      "root": "/Project"
+    }
+  },
+  "src/fake_coffee.coffee": {
+    "destination": {
+      "base": "fake_coffee.html",
+      "css": "../docco.css",
+      "dir": "docs/src",
+      "ext": ".html",
+      "file": "docs/src/fake_coffee.html",
+      "name": "fake_coffee",
+      "path": "/Project/docs/src/fake_coffee.html",
+      "pathdir": "/Project/docs/src",
+      "relativefile": "src/fake_coffee.html",
+      "root": "/Project"
+    },
+    "language": {
+      "commentFilter": /(^#![\/]|^\s*#\{)/,
+      "commentMatcher": /^\s*#\s?/,
+      "multiline": {
+        "start": "###",
+        "stop": "###"
+      },
+      "name": "coffeescript",
+      "startMatcher": /^\s*\#\#\#/,
+      "stopMatcher": /^\s*\#\#\#/,
+      "symbol": "#"
+    },
+    "others": {
+      "README.html": {
+        "file": "README.md",
+        "image": false,
+        "link": "../README.html"
+      },
+      "fake_coffee.html": {
+        "file": "src/fake_coffee.coffee",
+        "image": false,
+        "link": "fake_coffee.html"
+      },
+      "fake_litcoffee.html": {
+        "file": "src/lib/fake_litcoffee.litcoffee",
+        "image": false,
+        "link": "lib/fake_litcoffee.html"
+      },
+      "fluffybunny1.jpg": {
+        "file": "images/fluffybunny1.jpg",
+        "image": true,
+        "link": "../images/fluffybunny1.jpg"
+      }
+    },
+    "source": {
+      "base": "fake_coffee.coffee",
+      "dir": "src",
+      "ext": ".coffee",
+      "file": "src/fake_coffee.coffee",
+      "name": "fake_coffee",
+      "path": "/Project/src/fake_coffee.coffee",
+      "relativefile": "src/fake_coffee.coffee",
+      "root": "/Project"
+    }
+  },
+  "src/lib/fake_litcoffee.litcoffee": {
+    "destination": {
+      "base": "fake_litcoffee.html",
+      "css": "../../docco.css",
+      "dir": "docs/src/lib",
+      "ext": ".html",
+      "file": "docs/src/lib/fake_litcoffee.html",
+      "name": "fake_litcoffee",
+      "path": "/Project/docs/src/lib/fake_litcoffee.html",
+      "pathdir": "/Project/docs/src/lib",
+      "relativefile": "src/lib/fake_litcoffee.html",
+      "root": "/Project"
+    },
+    "language": {
+      "commentFilter": /(^#![\/]|^\s*#\{)/,
+      "commentMatcher": /^\s*#\s?/,
+      "literate": true,
+      "name": "coffeescript",
+      "symbol": "#"
+    },
+    "others": {
+      "README.html": {
+        "file": "README.md",
+        "image": false,
+        "link": "../../README.html"
+      },
+      "fake_coffee.html": {
+        "file": "src/fake_coffee.coffee",
+        "image": false,
+        "link": "../fake_coffee.html"
+      },
+      "fake_litcoffee.html": {
+        "file": "src/lib/fake_litcoffee.litcoffee",
+        "image": false,
+        "link": "fake_litcoffee.html"
+      },
+      "fluffybunny1.jpg": {
+        "file": "images/fluffybunny1.jpg",
+        "image": true,
+        "link": "../../images/fluffybunny1.jpg"
+      }
+    },
+    "source": {
+      "base": "fake_litcoffee.litcoffee",
+      "dir": "src/lib",
+      "ext": ".litcoffee",
+      "file": "src/lib/fake_litcoffee.litcoffee",
+      "name": "fake_litcoffee",
+      "path": "/Project/src/lib/fake_litcoffee.litcoffee",
+      "relativefile": "src/lib/fake_litcoffee.litcoffee",
+      "root": "/Project"
+    }
+  }
+};
+
+//# sourceMappingURL=informationOnFilesUnFlattened.js.map
diff --git a/test/unit-tests/fakes/informationOnFilesUnFlattened.js.map b/test/unit-tests/fakes/informationOnFilesUnFlattened.js.map
new file mode 100644
index 00000000..15c88f66
--- /dev/null
+++ b/test/unit-tests/fakes/informationOnFilesUnFlattened.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"informationOnFilesUnFlattened.js","sources":["fakes/informationOnFilesUnFlattened.litcoffee"],"names":[],"mappings":"AAEI,MAAM,CAAC,OAAP,GAAiB;EACf,WAAA,EAAa;IACX,aAAA,EAAe;MACb,MAAA,EAAQ,aADK;MAEb,KAAA,EAAO,WAFM;MAGb,KAAA,EAAO,MAHM;MAIb,KAAA,EAAO,OAJM;MAKb,MAAA,EAAQ,kBALK;MAMb,MAAA,EAAQ,QANK;MAOb,MAAA,EAAQ,2BAPK;MAQb,SAAA,EAAW,eARE;MASb,cAAA,EAAgB,aATH;MAUb,MAAA,EAAQ,UAVK;KADJ;IAaX,UAAA,EAAY;MACV,MAAA,EAAQ,WADE;MAEV,aAAA,EAAe,YAFL;MAGV,eAAA,EAAiB,mBAHP;MAIV,gBAAA,EAAkB,SAJR;MAKV,MAAA,EAAQ,IALE;MAMV,cAAA,EAAgB,oBANN;MAOV,MAAA,EAAQ,GAPE;MAQV,aAAA,EAAe,mBARL;MASV,MAAA,EAAQ,UATE;MAUV,SAAA,EAAW,GAVD;MAWV,gBAAA,EAAkB,OAXR;MAYV,QAAA,EAAU,EAZA;KAbD;IA2BX,QAAA,EAAU;MACR,aAAA,EAAe;QACb,MAAA,EAAQ,WADK;QAEb,OAAA,EAAS,KAFI;QAGb,MAAA,EAAQ,aAHK;OADP;MAMR,kBAAA,EAAoB;QAClB,MAAA,EAAQ,wBADU;QAElB,OAAA,EAAS,KAFS;QAGlB,MAAA,EAAQ,sBAHU;OANZ;MAWR,qBAAA,EAAuB;QACrB,MAAA,EAAQ,kCADa;QAErB,OAAA,EAAS,KAFY;QAGrB,MAAA,EAAQ,6BAHa;OAXf;MAgBR,kBAAA,EAAoB;QAClB,MAAA,EAAQ,yBADU;QAElB,OAAA,EAAS,IAFS;QAGlB,MAAA,EAAQ,yBAHU;OAhBZ;KA3BC;IAiDX,QAAA,EAAU;MACR,MAAA,EAAQ,WADA;MAER,KAAA,EAAO,EAFC;MAGR,KAAA,EAAO,KAHC;MAIR,MAAA,EAAQ,WAJA;MAKR,MAAA,EAAQ,QALA;MAMR,MAAA,EAAQ,oBANA;MAOR,cAAA,EAAgB,WAPR;MAQR,MAAA,EAAQ,UARA;KAjDC;GADE;EA6Df,yBAAA,EAA2B;IACzB,aAAA,EAAe;MACb,MAAA,EAAQ,kBADK;MAEb,KAAA,EAAO,cAFM;MAGb,KAAA,EAAO,aAHM;MAIb,KAAA,EAAO,MAJM;MAKb,MAAA,EAAQ,8BALK;MAMb,MAAA,EAAQ,cANK;MAOb,MAAA,EAAQ,uCAPK;MAQb,SAAA,EAAW,sBARE;MASb,cAAA,EAAgB,yBATH;MAUb,MAAA,EAAQ,UAVK;KADU;IAazB,UAAA,EAAY;MACV,eAAA,EAAiB,mBADP;MAEV,gBAAA,EAAkB,kBAFR;MAGV,MAAA,EAAQ,IAHE;MAIV,MAAA,EAAQ,OAJE;KAba;IAmBzB,QAAA,EAAU;MACR,aAAA,EAAe;QACb,MAAA,EAAQ,WADK;QAEb,OAAA,EAAS,KAFI;QAGb,MAAA,EAAQ,gBAHK;OADP;MAMR,kBAAA,EAAoB;QAClB,MAAA,EAAQ,wBADU;QAElB,OAAA,EAAS,KAFS;QAGlB,MAAA,EAAQ,yBAHU;OANZ;MAWR,qBAAA,EAAuB;QACrB,MAAA,EAAQ,kCADa;QAErB,OAAA,EAAS,KAFY;QAGrB,MAAA,EAAQ,gCAHa;OAXf;MAgBR,kBAAA,EAAoB;QAClB,MAAA,EAAQ,yBADU;QAElB,OAAA,EAAS,IAFS;QAGlB,MAAA,EAAQ,kBAHU;OAhBZ;KAnBe;IAyCzB,QAAA,EAAU;MACR,MAAA,EAAQ,kBADA;MAER,KAAA,EAAO,QAFC;MAGR,KAAA,EAAO,MAHC;MAIR,MAAA,EAAQ,yBAJA;MAKR,MAAA,EAAQ,cALA;MAMR,MAAA,EAAQ,kCANA;MAOR,cAAA,EAAgB,yBAPR;MAQR,MAAA,EAAQ,UARA;KAzCe;GA7DZ;EAiHf,wBAAA,EAA0B;IACxB,aAAA,EAAe;MACb,MAAA,EAAQ,kBADK;MAEb,KAAA,EAAO,cAFM;MAGb,KAAA,EAAO,UAHM;MAIb,KAAA,EAAO,OAJM;MAKb,MAAA,EAAQ,2BALK;MAMb,MAAA,EAAQ,aANK;MAOb,MAAA,EAAQ,oCAPK;MAQb,SAAA,EAAW,mBARE;MASb,cAAA,EAAgB,sBATH;MAUb,MAAA,EAAQ,UAVK;KADS;IAaxB,UAAA,EAAY;MACV,eAAA,EAAiB,mBADP;MAEV,gBAAA,EAAkB,UAFR;MAGV,WAAA,EAAa;QACX,OAAA,EAAS,KADE;QAEX,MAAA,EAAQ,KAFG;OAHH;MAOV,MAAA,EAAQ,cAPE;MAQV,cAAA,EAAgB,YARN;MASV,aAAA,EAAe,YATL;MAUV,QAAA,EAAU,GAVA;KAbY;IAyBxB,QAAA,EAAU;MACR,aAAA,EAAe;QACb,MAAA,EAAQ,WADK;QAEb,OAAA,EAAS,KAFI;QAGb,MAAA,EAAQ,gBAHK;OADP;MAMR,kBAAA,EAAoB;QAClB,MAAA,EAAQ,wBADU;QAElB,OAAA,EAAS,KAFS;QAGlB,MAAA,EAAQ,kBAHU;OANZ;MAWR,qBAAA,EAAuB;QACrB,MAAA,EAAQ,kCADa;QAErB,OAAA,EAAS,KAFY;QAGrB,MAAA,EAAQ,yBAHa;OAXf;MAgBR,kBAAA,EAAoB;QAClB,MAAA,EAAQ,yBADU;QAElB,OAAA,EAAS,IAFS;QAGlB,MAAA,EAAQ,4BAHU;OAhBZ;KAzBc;IA+CxB,QAAA,EAAU;MACR,MAAA,EAAQ,oBADA;MAER,KAAA,EAAO,KAFC;MAGR,KAAA,EAAO,SAHC;MAIR,MAAA,EAAQ,wBAJA;MAKR,MAAA,EAAQ,aALA;MAMR,MAAA,EAAQ,iCANA;MAOR,cAAA,EAAgB,wBAPR;MAQR,MAAA,EAAQ,UARA;KA/Cc;GAjHX;EA2Kf,kCAAA,EAAoC;IAClC,aAAA,EAAe;MACb,MAAA,EAAQ,qBADK;MAEb,KAAA,EAAO,iBAFM;MAGb,KAAA,EAAO,cAHM;MAIb,KAAA,EAAO,OAJM;MAKb,MAAA,EAAQ,kCALK;MAMb,MAAA,EAAQ,gBANK;MAOb,MAAA,EAAQ,2CAPK;MAQb,SAAA,EAAW,uBARE;MASb,cAAA,EAAgB,6BATH;MAUb,MAAA,EAAQ,UAVK;KADmB;IAalC,UAAA,EAAY;MACV,eAAA,EAAiB,mBADP;MAEV,gBAAA,EAAkB,UAFR;MAGV,UAAA,EAAY,IAHF;MAIV,MAAA,EAAQ,cAJE;MAKV,QAAA,EAAU,GALA;KAbsB;IAoBlC,QAAA,EAAU;MACR,aAAA,EAAe;QACb,MAAA,EAAQ,WADK;QAEb,OAAA,EAAS,KAFI;QAGb,MAAA,EAAQ,mBAHK;OADP;MAMR,kBAAA,EAAoB;QAClB,MAAA,EAAQ,wBADU;QAElB,OAAA,EAAS,KAFS;QAGlB,MAAA,EAAQ,qBAHU;OANZ;MAWR,qBAAA,EAAuB;QACrB,MAAA,EAAQ,kCADa;QAErB,OAAA,EAAS,KAFY;QAGrB,MAAA,EAAQ,qBAHa;OAXf;MAgBR,kBAAA,EAAoB;QAClB,MAAA,EAAQ,yBADU;QAElB,OAAA,EAAS,IAFS;QAGlB,MAAA,EAAQ,+BAHU;OAhBZ;KApBwB;IA0ClC,QAAA,EAAU;MACR,MAAA,EAAQ,0BADA;MAER,KAAA,EAAO,SAFC;MAGR,KAAA,EAAO,YAHC;MAIR,MAAA,EAAQ,kCAJA;MAKR,MAAA,EAAQ,gBALA;MAMR,MAAA,EAAQ,2CANA;MAOR,cAAA,EAAgB,kCAPR;MAQR,MAAA,EAAQ,UARA;KA1CwB;GA3KrB","sourcesContent":["A fake for the unflattended getInformationOnFiles test.\n\n    module.exports = {\n      \"README.md\": {\n        \"destination\": {\n          \"base\": \"README.html\"\n          \"css\": \"docco.css\"\n          \"dir\": \"docs\"\n          \"ext\": \".html\"\n          \"file\": \"docs/README.html\"\n          \"name\": \"README\"\n          \"path\": \"/Project/docs/README.html\"\n          \"pathdir\": \"/Project/docs\"\n          \"relativefile\": \"README.html\"\n          \"root\": \"/Project\"\n        }\n        \"language\": {\n          \"code\": \"\\\\`\\\\`\\\\`\"\n          \"codeMatcher\": /^\\s*\\`\\`\\`/\n          \"commentFilter\": /(^#![\\/]|^\\s*#\\{)/\n          \"commentMatcher\": /^\\s*\\s?/\n          \"html\": true\n          \"imageMatcher\": /^!\\[(.+)\\]\\((.+)\\)/\n          \"link\": \"!\"\n          \"linkMatcher\": /^\\[(.+)\\]\\((.+)\\)/\n          \"name\": \"markdown\"\n          \"section\": \"#\"\n          \"sectionMatcher\": /^#\\s?/\n          \"symbol\": \"\"\n        }\n        \"others\": {\n          \"README.html\": {\n            \"file\": \"README.md\"\n            \"image\": false\n            \"link\": \"README.html\"\n          }\n          \"fake_coffee.html\": {\n            \"file\": \"src/fake_coffee.coffee\"\n            \"image\": false\n            \"link\": \"src/fake_coffee.html\"\n          }\n          \"fake_litcoffee.html\": {\n            \"file\": \"src/lib/fake_litcoffee.litcoffee\"\n            \"image\": false\n            \"link\": \"src/lib/fake_litcoffee.html\"\n          }\n          \"fluffybunny1.jpg\": {\n            \"file\": \"images/fluffybunny1.jpg\"\n            \"image\": true\n            \"link\": \"images/fluffybunny1.jpg\"\n          }\n        }\n        \"source\": {\n          \"base\": \"README.md\"\n          \"dir\": \"\"\n          \"ext\": \".md\"\n          \"file\": \"README.md\"\n          \"name\": \"README\"\n          \"path\": \"/Project/README.md\"\n          \"relativefile\": \"README.md\"\n          \"root\": \"/Project\"\n        }\n      }\n      \"images/fluffybunny1.jpg\": {\n        \"destination\": {\n          \"base\": \"fluffybunny1.jpg\"\n          \"css\": \"../docco.css\"\n          \"dir\": \"docs/images\"\n          \"ext\": \".jpg\"\n          \"file\": \"docs/images/fluffybunny1.jpg\"\n          \"name\": \"fluffybunny1\"\n          \"path\": \"/Project/docs/images/fluffybunny1.jpg\"\n          \"pathdir\": \"/Project/docs/images\"\n          \"relativefile\": \"images/fluffybunny1.jpg\"\n          \"root\": \"/Project\"\n        }\n        \"language\": {\n          \"commentFilter\": /(^#![\\/]|^\\s*#\\{)/\n          \"commentMatcher\": /^\\s*undefined\\s?/\n          \"copy\": true\n          \"name\": \"image\"\n        }\n        \"others\": {\n          \"README.html\": {\n            \"file\": \"README.md\"\n            \"image\": false\n            \"link\": \"../README.html\"\n          }\n          \"fake_coffee.html\": {\n            \"file\": \"src/fake_coffee.coffee\"\n            \"image\": false\n            \"link\": \"../src/fake_coffee.html\"\n          }\n          \"fake_litcoffee.html\": {\n            \"file\": \"src/lib/fake_litcoffee.litcoffee\"\n            \"image\": false\n            \"link\": \"../src/lib/fake_litcoffee.html\"\n          }\n          \"fluffybunny1.jpg\": {\n            \"file\": \"images/fluffybunny1.jpg\"\n            \"image\": true\n            \"link\": \"fluffybunny1.jpg\"\n          }\n        }\n        \"source\": {\n          \"base\": \"fluffybunny1.jpg\"\n          \"dir\": \"images\"\n          \"ext\": \".jpg\"\n          \"file\": \"images/fluffybunny1.jpg\"\n          \"name\": \"fluffybunny1\"\n          \"path\": \"/Project/images/fluffybunny1.jpg\"\n          \"relativefile\": \"images/fluffybunny1.jpg\"\n          \"root\": \"/Project\"\n        }\n      }\n      \"src/fake_coffee.coffee\": {\n        \"destination\": {\n          \"base\": \"fake_coffee.html\"\n          \"css\": \"../docco.css\"\n          \"dir\": \"docs/src\"\n          \"ext\": \".html\"\n          \"file\": \"docs/src/fake_coffee.html\"\n          \"name\": \"fake_coffee\"\n          \"path\": \"/Project/docs/src/fake_coffee.html\"\n          \"pathdir\": \"/Project/docs/src\"\n          \"relativefile\": \"src/fake_coffee.html\"\n          \"root\": \"/Project\"\n        }\n        \"language\": {\n          \"commentFilter\": /(^#![\\/]|^\\s*#\\{)/\n          \"commentMatcher\": /^\\s*#\\s?/\n          \"multiline\": {\n            \"start\": \"###\"\n            \"stop\": \"###\"\n          }\n          \"name\": \"coffeescript\"\n          \"startMatcher\": /^\\s*\\#\\#\\#/\n          \"stopMatcher\": /^\\s*\\#\\#\\#/\n          \"symbol\": \"#\"\n        }\n        \"others\": {\n          \"README.html\": {\n            \"file\": \"README.md\"\n            \"image\": false\n            \"link\": \"../README.html\"\n          }\n          \"fake_coffee.html\": {\n            \"file\": \"src/fake_coffee.coffee\"\n            \"image\": false\n            \"link\": \"fake_coffee.html\"\n          }\n          \"fake_litcoffee.html\": {\n            \"file\": \"src/lib/fake_litcoffee.litcoffee\"\n            \"image\": false\n            \"link\": \"lib/fake_litcoffee.html\"\n          }\n          \"fluffybunny1.jpg\": {\n            \"file\": \"images/fluffybunny1.jpg\"\n            \"image\": true\n            \"link\": \"../images/fluffybunny1.jpg\"\n          }\n        }\n        \"source\": {\n          \"base\": \"fake_coffee.coffee\"\n          \"dir\": \"src\"\n          \"ext\": \".coffee\"\n          \"file\": \"src/fake_coffee.coffee\"\n          \"name\": \"fake_coffee\"\n          \"path\": \"/Project/src/fake_coffee.coffee\"\n          \"relativefile\": \"src/fake_coffee.coffee\"\n          \"root\": \"/Project\"\n        }\n      }\n      \"src/lib/fake_litcoffee.litcoffee\": {\n        \"destination\": {\n          \"base\": \"fake_litcoffee.html\"\n          \"css\": \"../../docco.css\"\n          \"dir\": \"docs/src/lib\"\n          \"ext\": \".html\"\n          \"file\": \"docs/src/lib/fake_litcoffee.html\"\n          \"name\": \"fake_litcoffee\"\n          \"path\": \"/Project/docs/src/lib/fake_litcoffee.html\"\n          \"pathdir\": \"/Project/docs/src/lib\"\n          \"relativefile\": \"src/lib/fake_litcoffee.html\"\n          \"root\": \"/Project\"\n        }\n        \"language\": {\n          \"commentFilter\": /(^#![\\/]|^\\s*#\\{)/\n          \"commentMatcher\": /^\\s*#\\s?/\n          \"literate\": true\n          \"name\": \"coffeescript\"\n          \"symbol\": \"#\"\n        }\n        \"others\": {\n          \"README.html\": {\n            \"file\": \"README.md\"\n            \"image\": false\n            \"link\": \"../../README.html\"\n          }\n          \"fake_coffee.html\": {\n            \"file\": \"src/fake_coffee.coffee\"\n            \"image\": false\n            \"link\": \"../fake_coffee.html\"\n          }\n          \"fake_litcoffee.html\": {\n            \"file\": \"src/lib/fake_litcoffee.litcoffee\"\n            \"image\": false\n            \"link\": \"fake_litcoffee.html\"\n          }\n          \"fluffybunny1.jpg\": {\n            \"file\": \"images/fluffybunny1.jpg\"\n            \"image\": true\n            \"link\": \"../../images/fluffybunny1.jpg\"\n          }\n        }\n        \"source\": {\n          \"base\": \"fake_litcoffee.litcoffee\"\n          \"dir\": \"src/lib\"\n          \"ext\": \".litcoffee\"\n          \"file\": \"src/lib/fake_litcoffee.litcoffee\"\n          \"name\": \"fake_litcoffee\"\n          \"path\": \"/Project/src/lib/fake_litcoffee.litcoffee\"\n          \"relativefile\": \"src/lib/fake_litcoffee.litcoffee\"\n          \"root\": \"/Project\"\n        }\n      }\n    }"]}
\ No newline at end of file
diff --git a/test/unit-tests/fakes/informationOnFilesUnFlattened.litcoffee b/test/unit-tests/fakes/informationOnFilesUnFlattened.litcoffee
new file mode 100755
index 00000000..32e13efb
--- /dev/null
+++ b/test/unit-tests/fakes/informationOnFilesUnFlattened.litcoffee
@@ -0,0 +1,227 @@
+A fake for the unflattended getInformationOnFiles test.
+
+    module.exports = {
+      "README.md": {
+        "destination": {
+          "base": "README.html"
+          "css": "docco.css"
+          "dir": "docs"
+          "ext": ".html"
+          "file": "docs/README.html"
+          "name": "README"
+          "path": "/Project/docs/README.html"
+          "pathdir": "/Project/docs"
+          "relativefile": "README.html"
+          "root": "/Project"
+        }
+        "language": {
+          "code": "\\`\\`\\`"
+          "codeMatcher": /^\s*\`\`\`/
+          "commentFilter": /(^#![\/]|^\s*#\{)/
+          "commentMatcher": /^\s*\s?/
+          "html": true
+          "imageMatcher": /^!\[(.+)\]\((.+)\)/
+          "link": "!"
+          "linkMatcher": /^\[(.+)\]\((.+)\)/
+          "name": "markdown"
+          "section": "#"
+          "sectionMatcher": /^#\s?/
+          "symbol": ""
+        }
+        "others": {
+          "README.html": {
+            "file": "README.md"
+            "image": false
+            "link": "README.html"
+          }
+          "fake_coffee.html": {
+            "file": "src/fake_coffee.coffee"
+            "image": false
+            "link": "src/fake_coffee.html"
+          }
+          "fake_litcoffee.html": {
+            "file": "src/lib/fake_litcoffee.litcoffee"
+            "image": false
+            "link": "src/lib/fake_litcoffee.html"
+          }
+          "fluffybunny1.jpg": {
+            "file": "images/fluffybunny1.jpg"
+            "image": true
+            "link": "images/fluffybunny1.jpg"
+          }
+        }
+        "source": {
+          "base": "README.md"
+          "dir": ""
+          "ext": ".md"
+          "file": "README.md"
+          "name": "README"
+          "path": "/Project/README.md"
+          "relativefile": "README.md"
+          "root": "/Project"
+        }
+      }
+      "images/fluffybunny1.jpg": {
+        "destination": {
+          "base": "fluffybunny1.jpg"
+          "css": "../docco.css"
+          "dir": "docs/images"
+          "ext": ".jpg"
+          "file": "docs/images/fluffybunny1.jpg"
+          "name": "fluffybunny1"
+          "path": "/Project/docs/images/fluffybunny1.jpg"
+          "pathdir": "/Project/docs/images"
+          "relativefile": "images/fluffybunny1.jpg"
+          "root": "/Project"
+        }
+        "language": {
+          "commentFilter": /(^#![\/]|^\s*#\{)/
+          "commentMatcher": /^\s*undefined\s?/
+          "copy": true
+          "name": "image"
+        }
+        "others": {
+          "README.html": {
+            "file": "README.md"
+            "image": false
+            "link": "../README.html"
+          }
+          "fake_coffee.html": {
+            "file": "src/fake_coffee.coffee"
+            "image": false
+            "link": "../src/fake_coffee.html"
+          }
+          "fake_litcoffee.html": {
+            "file": "src/lib/fake_litcoffee.litcoffee"
+            "image": false
+            "link": "../src/lib/fake_litcoffee.html"
+          }
+          "fluffybunny1.jpg": {
+            "file": "images/fluffybunny1.jpg"
+            "image": true
+            "link": "fluffybunny1.jpg"
+          }
+        }
+        "source": {
+          "base": "fluffybunny1.jpg"
+          "dir": "images"
+          "ext": ".jpg"
+          "file": "images/fluffybunny1.jpg"
+          "name": "fluffybunny1"
+          "path": "/Project/images/fluffybunny1.jpg"
+          "relativefile": "images/fluffybunny1.jpg"
+          "root": "/Project"
+        }
+      }
+      "src/fake_coffee.coffee": {
+        "destination": {
+          "base": "fake_coffee.html"
+          "css": "../docco.css"
+          "dir": "docs/src"
+          "ext": ".html"
+          "file": "docs/src/fake_coffee.html"
+          "name": "fake_coffee"
+          "path": "/Project/docs/src/fake_coffee.html"
+          "pathdir": "/Project/docs/src"
+          "relativefile": "src/fake_coffee.html"
+          "root": "/Project"
+        }
+        "language": {
+          "commentFilter": /(^#![\/]|^\s*#\{)/
+          "commentMatcher": /^\s*#\s?/
+          "multiline": {
+            "start": "###"
+            "stop": "###"
+          }
+          "name": "coffeescript"
+          "startMatcher": /^\s*\#\#\#/
+          "stopMatcher": /^\s*\#\#\#/
+          "symbol": "#"
+        }
+        "others": {
+          "README.html": {
+            "file": "README.md"
+            "image": false
+            "link": "../README.html"
+          }
+          "fake_coffee.html": {
+            "file": "src/fake_coffee.coffee"
+            "image": false
+            "link": "fake_coffee.html"
+          }
+          "fake_litcoffee.html": {
+            "file": "src/lib/fake_litcoffee.litcoffee"
+            "image": false
+            "link": "lib/fake_litcoffee.html"
+          }
+          "fluffybunny1.jpg": {
+            "file": "images/fluffybunny1.jpg"
+            "image": true
+            "link": "../images/fluffybunny1.jpg"
+          }
+        }
+        "source": {
+          "base": "fake_coffee.coffee"
+          "dir": "src"
+          "ext": ".coffee"
+          "file": "src/fake_coffee.coffee"
+          "name": "fake_coffee"
+          "path": "/Project/src/fake_coffee.coffee"
+          "relativefile": "src/fake_coffee.coffee"
+          "root": "/Project"
+        }
+      }
+      "src/lib/fake_litcoffee.litcoffee": {
+        "destination": {
+          "base": "fake_litcoffee.html"
+          "css": "../../docco.css"
+          "dir": "docs/src/lib"
+          "ext": ".html"
+          "file": "docs/src/lib/fake_litcoffee.html"
+          "name": "fake_litcoffee"
+          "path": "/Project/docs/src/lib/fake_litcoffee.html"
+          "pathdir": "/Project/docs/src/lib"
+          "relativefile": "src/lib/fake_litcoffee.html"
+          "root": "/Project"
+        }
+        "language": {
+          "commentFilter": /(^#![\/]|^\s*#\{)/
+          "commentMatcher": /^\s*#\s?/
+          "literate": true
+          "name": "coffeescript"
+          "symbol": "#"
+        }
+        "others": {
+          "README.html": {
+            "file": "README.md"
+            "image": false
+            "link": "../../README.html"
+          }
+          "fake_coffee.html": {
+            "file": "src/fake_coffee.coffee"
+            "image": false
+            "link": "../fake_coffee.html"
+          }
+          "fake_litcoffee.html": {
+            "file": "src/lib/fake_litcoffee.litcoffee"
+            "image": false
+            "link": "fake_litcoffee.html"
+          }
+          "fluffybunny1.jpg": {
+            "file": "images/fluffybunny1.jpg"
+            "image": true
+            "link": "../../images/fluffybunny1.jpg"
+          }
+        }
+        "source": {
+          "base": "fake_litcoffee.litcoffee"
+          "dir": "src/lib"
+          "ext": ".litcoffee"
+          "file": "src/lib/fake_litcoffee.litcoffee"
+          "name": "fake_litcoffee"
+          "path": "/Project/src/lib/fake_litcoffee.litcoffee"
+          "relativefile": "src/lib/fake_litcoffee.litcoffee"
+          "root": "/Project"
+        }
+      }
+    }
\ No newline at end of file
diff --git a/test/unit-tests/unit-test-buildMatchers.js b/test/unit-tests/unit-test-buildMatchers.js
new file mode 100755
index 00000000..f09421b0
--- /dev/null
+++ b/test/unit-tests/unit-test-buildMatchers.js
@@ -0,0 +1,35 @@
+var assert, buildMatchers, languages, ref, should;
+
+ref = require('chai'), assert = ref.assert, should = ref.should;
+
+should();
+
+buildMatchers = require('../../src/buildMatchers');
+
+languages = require('../../docco').languages;
+
+describe('docco buildMatchers', function() {
+  it('buildMatchers some source code', function() {
+    var ext, l, results;
+    languages = buildMatchers(languages);
+    results = [];
+    for (ext in languages) {
+      l = languages[ext];
+      assert.deepEqual(l.commentMatcher, RegExp("^\\s*" + l.symbol + "\\s?"));
+      assert.deepEqual(l.commentFilter, /(^#![\/]|^\s*#\{)/);
+      if (l.link) {
+        assert.deepEqual(l.linkMatcher, /^\[(.+)\]\((.+)\)/);
+      }
+      if (l.section) {
+        results.push(assert.deepEqual(l.sectionMatcher, RegExp("^" + l.section + "\\s?")));
+      } else {
+        results.push(void 0);
+      }
+    }
+    return results;
+  });
+});
+
+return;
+
+//# sourceMappingURL=unit-test-buildMatchers.js.map
diff --git a/test/unit-tests/unit-test-buildMatchers.js.map b/test/unit-tests/unit-test-buildMatchers.js.map
new file mode 100644
index 00000000..8e60acd9
--- /dev/null
+++ b/test/unit-tests/unit-test-buildMatchers.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"unit-test-buildMatchers.js","sources":["unit-test-buildMatchers.litcoffee"],"names":[],"mappings":"AAEI,IAAA;;AAAA,MAAqB,OAAA,CAAQ,MAAR,CAArB,EAAE,mBAAF,EAAU;;AAA4B,MAAA,CAAA;;AACtC,aAAA,GAAgB,OAAA,CAAQ,yBAAR;;AACf,YAAa,OAAA,CAAQ,aAAR;;AAEd,QAAA,CAAS,qBAAT,EAAgC,SAAA;EAE9B,EAAA,CAAG,gCAAH,EAAqC,SAAA;AAEnC,QAAA;IAAA,SAAA,GAAY,aAAA,CAAc,SAAd;AACZ;SAAA,gBAAA;;MACE,MAAM,CAAC,SAAP,CAAiB,CAAC,CAAC,cAAnB,EAAkC,MAAA,CAAA,OAAA,GAAS,CAAC,CAAC,MAAX,GAAkB,MAAlB,CAAlC;MACA,MAAM,CAAC,SAAP,CAAiB,CAAC,CAAC,aAAnB,EAAiC,mBAAjC;MACA,IAAG,CAAC,CAAC,IAAL;QACE,MAAM,CAAC,SAAP,CAAiB,CAAC,CAAC,WAAnB,EAA+B,mBAA/B,EADF;;MAEA,IAAG,CAAC,CAAC,OAAL;qBACE,MAAM,CAAC,SAAP,CAAiB,CAAC,CAAC,cAAnB,EAAkC,MAAA,CAAA,GAAA,GAAM,CAAC,CAAC,OAAR,GAAgB,MAAhB,CAAlC,GADF;OAAA,MAAA;6BAAA;;AALF;;EAHmC,CAArC;AAF8B,CAAhC;;AAaA","sourcesContent":["# This tests if buildMatchers is working correctly.\n\n    { assert, should } = require('chai'); should()\n    buildMatchers = require '../../src/buildMatchers'\n    {languages} = require('../../docco')\n\n    describe 'docco buildMatchers', () ->\n\n      it 'buildMatchers some source code', () ->\n\n        languages = buildMatchers(languages)\n        for ext, l of languages\n          assert.deepEqual(l.commentMatcher,///^\\s*#{l.symbol}\\s?///)\n          assert.deepEqual(l.commentFilter,/(^#![/]|^\\s*#\\{)/)\n          if l.link\n            assert.deepEqual(l.linkMatcher,///^\\[(.+)\\]\\((.+)\\)///)\n          if l.section\n            assert.deepEqual(l.sectionMatcher,///^#{l.section}\\s?///)\n      return\n    return"]}
\ No newline at end of file
diff --git a/test/unit-tests/unit-test-buildMatchers.litcoffee b/test/unit-tests/unit-test-buildMatchers.litcoffee
new file mode 100755
index 00000000..2a91d1fb
--- /dev/null
+++ b/test/unit-tests/unit-test-buildMatchers.litcoffee
@@ -0,0 +1,20 @@
+# This tests if buildMatchers is working correctly.
+
+    { assert, should } = require('chai'); should()
+    buildMatchers = require '../../src/buildMatchers'
+    {languages} = require('../../docco')
+
+    describe 'docco buildMatchers', () ->
+
+      it 'buildMatchers some source code', () ->
+
+        languages = buildMatchers(languages)
+        for ext, l of languages
+          assert.deepEqual(l.commentMatcher,///^\s*#{l.symbol}\s?///)
+          assert.deepEqual(l.commentFilter,/(^#![/]|^\s*#\{)/)
+          if l.link
+            assert.deepEqual(l.linkMatcher,///^\[(.+)\]\((.+)\)///)
+          if l.section
+            assert.deepEqual(l.sectionMatcher,///^#{l.section}\s?///)
+      return
+    return
\ No newline at end of file
diff --git a/test/unit-tests/unit-test-configure.js b/test/unit-tests/unit-test-configure.js
new file mode 100755
index 00000000..01313034
--- /dev/null
+++ b/test/unit-tests/unit-test-configure.js
@@ -0,0 +1,60 @@
+var _, assert, commander, configure, fs, ref, should, version;
+
+_ = require('underscore');
+
+ref = require('chai'), assert = ref.assert, should = ref.should;
+
+should();
+
+commander = require('commander');
+
+configure = require('../../src/configure');
+
+version = "0.0.0";
+
+fs = {
+  readFileSync: function() {}
+};
+
+describe('docco configure', function() {
+  it('configure docco', function() {
+    var args, config, defaults;
+    config = {
+      layout: 'parallel',
+      output: 'docs',
+      template: null,
+      css: null,
+      extension: null,
+      languages: {},
+      marked: null,
+      setup: '.docco.json',
+      help: false,
+      flatten: false
+    };
+    args = ["bin/node", "bin/docco", "--setup=.adocco.json"];
+    defaults = {
+      layout: 'parallel',
+      output: 'docs',
+      template: null,
+      css: null,
+      extension: null,
+      languages: {},
+      marked: null,
+      setup: '.docco.json',
+      help: false,
+      flatten: false
+    };
+    commander.version(version).usage('[options] [file]').option('-c, --css [file]', 'use a custom css file', config.css).option('-e, --extension [ext]', 'assume a file extension for all inputs', config.extension).option('-f, --flatten', 'flatten the directory hierarchy', config.flatten).option('-L, --languages [file]', 'use a custom languages.json', _.compose(JSON.parse, fs.readFileSync)).option('-l, --layout [name]', 'choose a layout (parallel, linear or classic)', config.layout).option('-m, --marked [file]', 'use custom marked options', config.marked).option('-o, --output [path]', 'output to a given folder', config.output).option('-s, --setup [file]', 'use configuration file, normally docco.json', '.docco.json').option('-t, --template [file]', 'use a custom .jst template', config.template).parse(args).name = "docco";
+    config = configure(commander, defaults);
+    config.css.should.contain("resources/parallel/docco.css");
+    config.flatten.should.be.equal(false);
+    config.layout.should.contain("resources/parallel");
+    config.output.should.be.equal("docs");
+    config["public"].should.contain("resources/parallel/public");
+    config.setup.should.be.equal(".adocco.json");
+    config.sources.length.should.be.equal(0);
+    config.template.should.be.ok;
+  });
+});
+
+//# sourceMappingURL=unit-test-configure.js.map
diff --git a/test/unit-tests/unit-test-configure.js.map b/test/unit-tests/unit-test-configure.js.map
new file mode 100644
index 00000000..6c281dff
--- /dev/null
+++ b/test/unit-tests/unit-test-configure.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"unit-test-configure.js","sources":["unit-test-configure.litcoffee"],"names":[],"mappings":"AAEI,IAAA;;AAAA,CAAA,GAAI,OAAA,CAAQ,YAAR;;AACJ,MAAqB,OAAA,CAAQ,MAAR,CAArB,EAAE,mBAAF,EAAU;;AAA4B,MAAA,CAAA;;AACtC,SAAA,GAAc,OAAA,CAAQ,WAAR;;AACd,SAAA,GAAY,OAAA,CAAQ,qBAAR;;AACZ,OAAA,GAAU;;AACV,EAAA,GAAK;EACH,YAAA,EAAc,SAAA,GAAA,CADX;;;AAKL,QAAA,CAAS,iBAAT,EAA4B,SAAA;EAE1B,EAAA,CAAG,iBAAH,EAAsB,SAAA;AAEpB,QAAA;IAAA,MAAA,GACE;MAAA,MAAA,EAAY,UAAZ;MACA,MAAA,EAAY,MADZ;MAEA,QAAA,EAAY,IAFZ;MAGA,GAAA,EAAY,IAHZ;MAIA,SAAA,EAAY,IAJZ;MAKA,SAAA,EAAY,EALZ;MAMA,MAAA,EAAY,IANZ;MAOA,KAAA,EAAY,aAPZ;MAQA,IAAA,EAAW,KARX;MASA,OAAA,EAAS,KATT;;IAUF,IAAA,GAAO,CACL,UADK,EAEL,WAFK,EAGL,sBAHK;IAKP,QAAA,GACE;MAAA,MAAA,EAAY,UAAZ;MACA,MAAA,EAAY,MADZ;MAEA,QAAA,EAAY,IAFZ;MAGA,GAAA,EAAY,IAHZ;MAIA,SAAA,EAAY,IAJZ;MAKA,SAAA,EAAY,EALZ;MAMA,MAAA,EAAY,IANZ;MAOA,KAAA,EAAY,aAPZ;MAQA,IAAA,EAAW,KARX;MASA,OAAA,EAAS,KATT;;IAWF,SAAS,CAAC,OAAV,CAAkB,OAAlB,CACE,CAAC,KADH,CACS,kBADT,CAEE,CAAC,MAFH,CAEU,kBAFV,EAEoC,uBAFpC,EAE6D,MAAM,CAAC,GAFpE,CAGE,CAAC,MAHH,CAGU,uBAHV,EAGoC,wCAHpC,EAG8E,MAAM,CAAC,SAHrF,CAIE,CAAC,MAJH,CAIU,eAJV,EAIoC,iCAJpC,EAIuE,MAAM,CAAC,OAJ9E,CAKE,CAAC,MALH,CAKU,wBALV,EAKoC,6BALpC,EAKmE,CAAC,CAAC,OAAF,CAAU,IAAI,CAAC,KAAf,EAAsB,EAAE,CAAC,YAAzB,CALnE,CAME,CAAC,MANH,CAMU,qBANV,EAMoC,+CANpC,EAMqF,MAAM,CAAC,MAN5F,CAOE,CAAC,MAPH,CAOU,qBAPV,EAOoC,2BAPpC,EAOiE,MAAM,CAAC,MAPxE,CAQE,CAAC,MARH,CAQU,qBARV,EAQoC,0BARpC,EAQgE,MAAM,CAAC,MARvE,CASE,CAAC,MATH,CASU,oBATV,EASoC,6CATpC,EASmF,aATnF,CAUE,CAAC,MAVH,CAUU,uBAVV,EAUoC,4BAVpC,EAUkE,MAAM,CAAC,QAVzE,CAWE,CAAC,KAXH,CAWS,IAXT,CAYE,CAAC,IAZH,GAYU;IAEV,MAAA,GAAS,SAAA,CAAU,SAAV,EAAqB,QAArB;IAET,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,OAAlB,CAA0B,8BAA1B;IACA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,KAAzB,CAA+B,KAA/B;IACA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAArB,CAA6B,oBAA7B;IACA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAxB,CAA8B,MAA9B;IACA,MAAM,EAAC,MAAD,EAAO,CAAC,MAAM,CAAC,OAArB,CAA6B,2BAA7B;IACA,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,KAAvB,CAA6B,cAA7B;IACA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAhC,CAAsC,CAAtC;IACA,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;EArDN,CAAtB;AAF0B,CAA5B","sourcesContent":["# This tests if parse is working correctly.\n\n    _ = require 'underscore'\n    { assert, should } = require('chai'); should()\n    commander   = require 'commander'\n    configure = require '../../src/configure'\n    version = \"0.0.0\"\n    fs = {\n      readFileSync: () ->\n        return\n    }\n\n    describe 'docco configure', () ->\n\n      it 'configure docco', () ->\n\n        config =\n          layout:     'parallel'\n          output:     'docs'\n          template:   null\n          css:        null\n          extension:  null\n          languages:  {}\n          marked:     null\n          setup:      '.docco.json'\n          help:      false\n          flatten: false\n        args = [\n          \"bin/node\",\n          \"bin/docco\",\n          \"--setup=.adocco.json\"\n        ]\n        defaults =\n          layout:     'parallel'\n          output:     'docs'\n          template:   null\n          css:        null\n          extension:  null\n          languages:  {}\n          marked:     null\n          setup:      '.docco.json'\n          help:      false\n          flatten: false\n\n        commander.version(version)\n          .usage('[options] [file]')\n          .option('-c, --css [file]',       'use a custom css file', config.css)\n          .option('-e, --extension [ext]',  'assume a file extension for all inputs', config.extension)\n          .option('-f, --flatten',          'flatten the directory hierarchy', config.flatten)\n          .option('-L, --languages [file]', 'use a custom languages.json', _.compose JSON.parse, fs.readFileSync)\n          .option('-l, --layout [name]',    'choose a layout (parallel, linear or classic)', config.layout)\n          .option('-m, --marked [file]',    'use custom marked options', config.marked)\n          .option('-o, --output [path]',    'output to a given folder', config.output)\n          .option('-s, --setup [file]',     'use configuration file, normally docco.json', '.docco.json')\n          .option('-t, --template [file]',  'use a custom .jst template', config.template)\n          .parse(args)\n          .name = \"docco\"\n\n        config = configure commander, defaults\n\n        config.css.should.contain(\"resources/parallel/docco.css\")\n        config.flatten.should.be.equal(false)\n        config.layout.should.contain(\"resources/parallel\")\n        config.output.should.be.equal(\"docs\")\n        config.public.should.contain(\"resources/parallel/public\")\n        config.setup.should.be.equal(\".adocco.json\")\n        config.sources.length.should.be.equal(0)\n        config.template.should.be.ok\n\n        return\n      return\n"]}
\ No newline at end of file
diff --git a/test/unit-tests/unit-test-configure.litcoffee b/test/unit-tests/unit-test-configure.litcoffee
new file mode 100755
index 00000000..08df2769
--- /dev/null
+++ b/test/unit-tests/unit-test-configure.litcoffee
@@ -0,0 +1,71 @@
+# This tests if parse is working correctly.
+
+    _ = require 'underscore'
+    { assert, should } = require('chai'); should()
+    commander   = require 'commander'
+    configure = require '../../src/configure'
+    version = "0.0.0"
+    fs = {
+      readFileSync: () ->
+        return
+    }
+
+    describe 'docco configure', () ->
+
+      it 'configure docco', () ->
+
+        config =
+          layout:     'parallel'
+          output:     'docs'
+          template:   null
+          css:        null
+          extension:  null
+          languages:  {}
+          marked:     null
+          setup:      '.docco.json'
+          help:      false
+          flatten: false
+        args = [
+          "bin/node",
+          "bin/docco",
+          "--setup=.adocco.json"
+        ]
+        defaults =
+          layout:     'parallel'
+          output:     'docs'
+          template:   null
+          css:        null
+          extension:  null
+          languages:  {}
+          marked:     null
+          setup:      '.docco.json'
+          help:      false
+          flatten: false
+
+        commander.version(version)
+          .usage('[options] [file]')
+          .option('-c, --css [file]',       'use a custom css file', config.css)
+          .option('-e, --extension [ext]',  'assume a file extension for all inputs', config.extension)
+          .option('-f, --flatten',          'flatten the directory hierarchy', config.flatten)
+          .option('-L, --languages [file]', 'use a custom languages.json', _.compose JSON.parse, fs.readFileSync)
+          .option('-l, --layout [name]',    'choose a layout (parallel, linear or classic)', config.layout)
+          .option('-m, --marked [file]',    'use custom marked options', config.marked)
+          .option('-o, --output [path]',    'output to a given folder', config.output)
+          .option('-s, --setup [file]',     'use configuration file, normally docco.json', '.docco.json')
+          .option('-t, --template [file]',  'use a custom .jst template', config.template)
+          .parse(args)
+          .name = "docco"
+
+        config = configure commander, defaults
+
+        config.css.should.contain("resources/parallel/docco.css")
+        config.flatten.should.be.equal(false)
+        config.layout.should.contain("resources/parallel")
+        config.output.should.be.equal("docs")
+        config.public.should.contain("resources/parallel/public")
+        config.setup.should.be.equal(".adocco.json")
+        config.sources.length.should.be.equal(0)
+        config.template.should.be.ok
+
+        return
+      return
diff --git a/test/unit-tests/unit-test-document.js b/test/unit-tests/unit-test-document.js
new file mode 100755
index 00000000..f30989d0
--- /dev/null
+++ b/test/unit-tests/unit-test-document.js
@@ -0,0 +1,104 @@
+var assert, document, informationOnFiles, mockery, ref, should, times;
+
+ref = require('chai'), assert = ref.assert, should = ref.should;
+
+should();
+
+mockery = require('mockery');
+
+mockery.enable({
+  useCleanCache: true,
+  warnOnReplace: false,
+  warnOnUnregistered: false
+});
+
+times = 0;
+
+mockery.registerMock('fs-extra', {
+  mkdirs: function(dir, callback) {
+    dir.should.be.equal('docs');
+    callback();
+  },
+  mkdirsSync: function(dir) {
+    if (times === 0) {
+      dir.should.be.equal(__dirname + '/docs/.');
+    } else {
+      dir.should.be.equal(__dirname + '/docs/images');
+    }
+    times++;
+  },
+  copy: function(fromFile, toFile) {
+    fromFile.should.be.equal("images/fluffybunny1.jpg");
+    toFile.should.be.equal(__dirname + "/docs/images/fluffybunny1.jpg");
+  },
+  existsSync: function(dir) {
+    if (times === 0) {
+      dir.should.be.equal(__dirname + '/docs/.');
+    } else {
+      dir.should.be.equal(__dirname + '/docs/images');
+    }
+  },
+  readFile: function(file, callback) {
+    file.should.be.equal('README.md');
+    callback(null, "x=3");
+  },
+  readFileSync: function() {
+    return '{ ".coffee":      {"name": "coffeescript", "symbol": "#"}, ".litcoffee":   {"name": "coffeescript", "symbol": "#", "literate": true}, ".md":          {"name": "markdown", "symbol": "", "section": "#", "link": "!", "html": true} }';
+  },
+  writeFileSync: function(destination, html) {
+    if (flattened) {
+      destination.should.be.equal("/Project/docs/fake_coffee.html");
+      assert.equal(html, resultOfTemplateFlattened);
+    } else {
+      destination.should.be.equal("/Project/docs/src/fake_coffee.html");
+      assert.equal(html, resultOfTemplateUnFlattened);
+    }
+  }
+});
+
+mockery.registerMock('parse', function(source, language, code, config) {
+  if (config == null) {
+    config = {};
+  }
+});
+
+mockery.registerMock('format', function(source, language, sections, config) {});
+
+mockery.registerMock('./write', function(source, sections, config) {
+  source.should.be.equal("README.md");
+  return assert.deepEqual(sections, [
+    {
+      "docsText": "x=3\n",
+      "codeText": "",
+      "codeHtml": "",
+      "docsHtml": "<p>x=3</p>\n"
+    }
+  ]);
+});
+
+informationOnFiles = require('./fakes/informationOnFilesUnFlattened');
+
+document = require('../../src/document');
+
+describe('docco document', function() {
+  it('document docco', function() {
+    var config;
+    config = {
+      output: 'docs',
+      sources: ["README.md", "images/fluffybunny1.jpg"],
+      root: __dirname,
+      informationOnFiles: informationOnFiles
+    };
+    document(config);
+  });
+});
+
+mockery.deregisterMock('./parse');
+
+mockery.deregisterMock('./format');
+
+mockery.deregisterMock('./write');
+
+mockery.deregisterMock('fs-extra');
+
+//# sourceMappingURL=unit-test-document.js.map
diff --git a/test/unit-tests/unit-test-document.js.map b/test/unit-tests/unit-test-document.js.map
new file mode 100644
index 00000000..a25848ff
--- /dev/null
+++ b/test/unit-tests/unit-test-document.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"unit-test-document.js","sources":["unit-test-document.litcoffee"],"names":[],"mappings":"AAEI,IAAA;;AAAA,MAAqB,OAAA,CAAQ,MAAR,CAArB,EAAE,mBAAF,EAAU;;AAA4B,MAAA,CAAA;;AACtC,OAAA,GAAU,OAAA,CAAQ,SAAR;;AACV,OAAO,CAAC,MAAR,CAAe;EACb,aAAA,EAAe,IADF;EAEb,aAAA,EAAe,KAFF;EAGb,kBAAA,EAAoB,KAHP;CAAf;;AAKA,KAAA,GAAQ;;AACR,OAAO,CAAC,YAAR,CAAqB,UAArB,EAAiC;EAC/B,MAAA,EAAQ,SAAC,GAAD,EAAM,QAAN;IACN,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,KAAd,CAAoB,MAApB;IACA,QAAA,CAAA;EAFM,CADuB;EAK/B,UAAA,EAAY,SAAC,GAAD;IACV,IAAG,KAAA,KAAS,CAAZ;MACE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,KAAd,CAAoB,SAAA,GAAU,SAA9B,EADF;KAAA,MAAA;MAGE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,KAAd,CAAoB,SAAA,GAAU,cAA9B,EAHF;;IAKA,KAAA;EANU,CALmB;EAa/B,IAAA,EAAM,SAAC,QAAD,EAAW,MAAX;IACJ,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAAnB,CAAyB,yBAAzB;IACA,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAjB,CAAuB,SAAA,GAAU,+BAAjC;EAFI,CAbyB;EAiB/B,UAAA,EAAY,SAAC,GAAD;IACV,IAAG,KAAA,KAAS,CAAZ;MACE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,KAAd,CAAoB,SAAA,GAAU,SAA9B,EADF;KAAA,MAAA;MAGE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,KAAd,CAAoB,SAAA,GAAU,cAA9B,EAHF;;EADU,CAjBmB;EAuB/B,QAAA,EAAU,SAAC,IAAD,EAAO,QAAP;IACR,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAf,CAAqB,WAArB;IACA,QAAA,CAAS,IAAT,EAAe,KAAf;EAFQ,CAvBqB;EA2B/B,YAAA,EAAc,SAAA;AACZ,WAAO;EADK,CA3BiB;EAiC/B,aAAA,EAAe,SAAC,WAAD,EAAc,IAAd;IACb,IAAG,SAAH;MACE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,KAAtB,CAA4B,gCAA5B;MACA,MAAM,CAAC,KAAP,CAAa,IAAb,EAAkB,yBAAlB,EAFF;KAAA,MAAA;MAIE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,KAAtB,CAA4B,oCAA5B;MACA,MAAM,CAAC,KAAP,CAAa,IAAb,EAAkB,2BAAlB,EALF;;EADa,CAjCgB;CAAjC;;AA2CA,OAAO,CAAC,YAAR,CAAqB,OAArB,EAA8B,SAAC,MAAD,EAAS,QAAT,EAAmB,IAAnB,EAAyB,MAAzB;;IAAyB,SAAS;;AAAlC,CAA9B;;AAEA,OAAO,CAAC,YAAR,CAAqB,QAArB,EAA+B,SAAC,MAAD,EAAS,QAAT,EAAmB,QAAnB,EAA6B,MAA7B,GAAA,CAA/B;;AAEA,OAAO,CAAC,YAAR,CAAqB,SAArB,EAAgC,SAAC,MAAD,EAAS,QAAT,EAAmB,MAAnB;EAC9B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAjB,CAAuB,WAAvB;SACA,MAAM,CAAC,SAAP,CAAiB,QAAjB,EAA2B;IACvB;MACE,UAAA,EAAY,OADd;MAEE,UAAA,EAAY,EAFd;MAGE,UAAA,EAAY,EAHd;MAIE,UAAA,EAAY,cAJd;KADuB;GAA3B;AAF8B,CAAhC;;AAWA,kBAAA,GAAqB,OAAA,CAAQ,uCAAR;;AAErB,QAAA,GAAW,OAAA,CAAQ,oBAAR;;AAEX,QAAA,CAAS,gBAAT,EAA2B,SAAA;EAEzB,EAAA,CAAG,gBAAH,EAAqB,SAAA;AACnB,QAAA;IAAA,MAAA,GACE;MAAA,MAAA,EAAY,MAAZ;MACA,OAAA,EAAS,CACP,WADO,EAEP,yBAFO,CADT;MAKA,IAAA,EAAM,SALN;MAMA,kBAAA,EAAoB,kBANpB;;IAQF,QAAA,CAAS,MAAT;EAVmB,CAArB;AAFyB,CAA3B;;AAgBA,OAAO,CAAC,cAAR,CAAuB,SAAvB;;AACA,OAAO,CAAC,cAAR,CAAuB,UAAvB;;AACA,OAAO,CAAC,cAAR,CAAuB,SAAvB;;AACA,OAAO,CAAC,cAAR,CAAuB,UAAvB","sourcesContent":["# This tests if document is working correctly.\n\n    { assert, should } = require('chai'); should()\n    mockery = require('mockery')\n    mockery.enable({\n      useCleanCache: true,\n      warnOnReplace: false,\n      warnOnUnregistered: false\n    })\n    times = 0\n    mockery.registerMock('fs-extra', {\n      mkdirs: (dir, callback) ->\n        dir.should.be.equal('docs')\n        callback()\n        return\n      mkdirsSync: (dir) ->\n        if times is 0\n          dir.should.be.equal(__dirname+'/docs/.')\n        else\n          dir.should.be.equal(__dirname+'/docs/images')\n\n        times++\n        return\n      copy: (fromFile, toFile) ->\n        fromFile.should.be.equal(\"images/fluffybunny1.jpg\")\n        toFile.should.be.equal(__dirname+\"/docs/images/fluffybunny1.jpg\")\n        return\n      existsSync: (dir) ->\n        if times is 0\n          dir.should.be.equal(__dirname+'/docs/.')\n        else\n          dir.should.be.equal(__dirname+'/docs/images')\n        return\n      readFile: (file, callback) ->\n        file.should.be.equal('README.md')\n        callback(null, \"x=3\")\n        return\n      readFileSync: () ->\n        return '{\n            \".coffee\":      {\"name\": \"coffeescript\", \"symbol\": \"#\"},\n            \".litcoffee\":   {\"name\": \"coffeescript\", \"symbol\": \"#\", \"literate\": true},\n            \".md\":          {\"name\": \"markdown\", \"symbol\": \"\", \"section\": \"#\", \"link\": \"!\", \"html\": true}\n          }'\n      writeFileSync: (destination, html) ->\n        if flattened\n          destination.should.be.equal(\"/Project/docs/fake_coffee.html\")\n          assert.equal(html,resultOfTemplateFlattened)\n        else\n          destination.should.be.equal(\"/Project/docs/src/fake_coffee.html\")\n          assert.equal(html,resultOfTemplateUnFlattened)\n        return\n    })\n\n    mockery.registerMock('parse', (source, language, code, config = {}) ->\n    )\n    mockery.registerMock('format', (source, language, sections, config) ->\n    )\n    mockery.registerMock('./write', (source, sections, config) ->\n      source.should.be.equal(\"README.md\")\n      assert.deepEqual(sections, [\n          {\n            \"docsText\": \"x=3\\n\",\n            \"codeText\": \"\",\n            \"codeHtml\": \"\",\n            \"docsHtml\": \"<p>x=3</p>\\n\"\n          }\n      ])\n    )\n    informationOnFiles = require('./fakes/informationOnFilesUnFlattened')\n\n    document = require '../../src/document'\n\n    describe 'docco document', () ->\n\n      it 'document docco', () ->\n        config =\n          output:     'docs'\n          sources: [\n            \"README.md\",\n            \"images/fluffybunny1.jpg\"\n          ]\n          root: __dirname\n          informationOnFiles: informationOnFiles\n\n        document(config)\n        return\n      return\n\n    mockery.deregisterMock('./parse')\n    mockery.deregisterMock('./format')\n    mockery.deregisterMock('./write')\n    mockery.deregisterMock('fs-extra')"]}
\ No newline at end of file
diff --git a/test/unit-tests/unit-test-document.litcoffee b/test/unit-tests/unit-test-document.litcoffee
new file mode 100755
index 00000000..99163cd6
--- /dev/null
+++ b/test/unit-tests/unit-test-document.litcoffee
@@ -0,0 +1,92 @@
+# This tests if document is working correctly.
+
+    { assert, should } = require('chai'); should()
+    mockery = require('mockery')
+    mockery.enable({
+      useCleanCache: true,
+      warnOnReplace: false,
+      warnOnUnregistered: false
+    })
+    times = 0
+    mockery.registerMock('fs-extra', {
+      mkdirs: (dir, callback) ->
+        dir.should.be.equal('docs')
+        callback()
+        return
+      mkdirsSync: (dir) ->
+        if times is 0
+          dir.should.be.equal(__dirname+'/docs/.')
+        else
+          dir.should.be.equal(__dirname+'/docs/images')
+
+        times++
+        return
+      copy: (fromFile, toFile) ->
+        fromFile.should.be.equal("images/fluffybunny1.jpg")
+        toFile.should.be.equal(__dirname+"/docs/images/fluffybunny1.jpg")
+        return
+      existsSync: (dir) ->
+        if times is 0
+          dir.should.be.equal(__dirname+'/docs/.')
+        else
+          dir.should.be.equal(__dirname+'/docs/images')
+        return
+      readFile: (file, callback) ->
+        file.should.be.equal('README.md')
+        callback(null, "x=3")
+        return
+      readFileSync: () ->
+        return '{
+            ".coffee":      {"name": "coffeescript", "symbol": "#"},
+            ".litcoffee":   {"name": "coffeescript", "symbol": "#", "literate": true},
+            ".md":          {"name": "markdown", "symbol": "", "section": "#", "link": "!", "html": true}
+          }'
+      writeFileSync: (destination, html) ->
+        if flattened
+          destination.should.be.equal("/Project/docs/fake_coffee.html")
+          assert.equal(html,resultOfTemplateFlattened)
+        else
+          destination.should.be.equal("/Project/docs/src/fake_coffee.html")
+          assert.equal(html,resultOfTemplateUnFlattened)
+        return
+    })
+
+    mockery.registerMock('parse', (source, language, code, config = {}) ->
+    )
+    mockery.registerMock('format', (source, language, sections, config) ->
+    )
+    mockery.registerMock('./write', (source, sections, config) ->
+      source.should.be.equal("README.md")
+      assert.deepEqual(sections, [
+          {
+            "docsText": "x=3\n",
+            "codeText": "",
+            "codeHtml": "",
+            "docsHtml": "<p>x=3</p>\n"
+          }
+      ])
+    )
+    informationOnFiles = require('./fakes/informationOnFilesUnFlattened')
+
+    document = require '../../src/document'
+
+    describe 'docco document', () ->
+
+      it 'document docco', () ->
+        config =
+          output:     'docs'
+          sources: [
+            "README.md",
+            "images/fluffybunny1.jpg"
+          ]
+          root: __dirname
+          informationOnFiles: informationOnFiles
+
+        document(config)
+        return
+      return
+
+    mockery.deregisterMock('./parse')
+    mockery.deregisterMock('./format')
+    mockery.deregisterMock('./write')
+    mockery.deregisterMock('fs-extra')
\ No newline at end of file
diff --git a/test/unit-tests/unit-test-fixForMatch.js b/test/unit-tests/unit-test-fixForMatch.js
new file mode 100755
index 00000000..4b99c1e5
--- /dev/null
+++ b/test/unit-tests/unit-test-fixForMatch.js
@@ -0,0 +1,47 @@
+var assert, chai, expect, fixForMatch, should;
+
+chai = require('chai');
+
+expect = chai.expect;
+
+should = chai.should();
+
+assert = chai.assert;
+
+fixForMatch = require('./utils/fixForMatch');
+
+describe('fix for match', function() {
+  var replacement;
+  replacement = "force matched";
+  return it('zeros out particular fields..', function() {
+    var object, result;
+    object = {
+      thingId: "1234",
+      thing1: {
+        thingId: "1234"
+      },
+      thing2: [
+        {
+          tin: {
+            id: 1
+          }
+        }, {
+          tin: {
+            id: 2
+          }
+        }
+      ],
+      leadTime: 3,
+      transitTime: 3
+    };
+    result = fixForMatch(object, ['thingId', 'leadTime', 'transitTime', 'id']);
+    result.thingId.should.be.equal(replacement);
+    result.leadTime.should.be.equal(replacement);
+    result.transitTime.should.be.equal(replacement);
+    result.thing1.thingId.should.be.equal(replacement);
+    result.thing2[0].tin.id.should.be.equal(replacement);
+    result.thing2[1].tin.id.should.be.equal(replacement);
+  });
+});
+
+//# sourceMappingURL=unit-test-fixForMatch.js.map
diff --git a/test/unit-tests/unit-test-fixForMatch.js.map b/test/unit-tests/unit-test-fixForMatch.js.map
new file mode 100644
index 00000000..d858825a
--- /dev/null
+++ b/test/unit-tests/unit-test-fixForMatch.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"unit-test-fixForMatch.js","sources":["unit-test-fixForMatch.litcoffee"],"names":[],"mappings":"AAEI,IAAA;;AAAA,IAAA,GAAO,OAAA,CAAQ,MAAR;;AACP,MAAA,GAAS,IAAI,CAAC;;AACd,MAAA,GAAS,IAAI,CAAC,MAAL,CAAA;;AACT,MAAA,GAAS,IAAI,CAAC;;AAEd,WAAA,GAAc,OAAA,CAAQ,qBAAR;;AAEd,QAAA,CAAS,eAAT,EAA0B,SAAA;AAExB,MAAA;EAAA,WAAA,GAAc;SACd,EAAA,CAAG,+BAAH,EAAoC,SAAA;AAClC,QAAA;IAAA,MAAA,GAAS;MACP,OAAA,EAAS,MADF;MAEP,MAAA,EAAQ;QACN,OAAA,EAAS,MADH;OAFD;MAMP,MAAA,EAAQ;QAAC;UAAE,GAAA,EAAK;YAAC,EAAA,EAAI,CAAL;WAAP;SAAD,EAAiB;UAAE,GAAA,EAAK;YAAC,EAAA,EAAI,CAAL;WAAP;SAAjB;OAND;MAOP,QAAA,EAAU,CAPH;MAQP,WAAA,EAAa,CARN;;IAUT,MAAA,GAAS,WAAA,CAAY,MAAZ,EAAmB,CAAC,SAAD,EAAY,UAAZ,EAAwB,aAAxB,EAAuC,IAAvC,CAAnB;IACT,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,KAAzB,CAA+B,WAA/B;IACA,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAA1B,CAAgC,WAAhC;IACA,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,KAA7B,CAAmC,WAAnC;IACA,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,KAAhC,CAAsC,WAAtC;IACA,MAAM,CAAC,MAAO,CAAA,CAAA,CAAE,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAlC,CAAwC,WAAxC;IACA,MAAM,CAAC,MAAO,CAAA,CAAA,CAAE,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAlC,CAAwC,WAAxC;EAjBkC,CAApC;AAHwB,CAA1B","sourcesContent":["#\n\n    chai = require('chai')\n    expect = chai.expect\n    should = chai.should()\n    assert = chai.assert\n\n    fixForMatch = require('./utils/fixForMatch')\n\n    describe 'fix for match', () ->\n\n      replacement = \"force matched\"\n      it 'zeros out particular fields..', () ->\n        object = {\n          thingId: \"1234\"\n          thing1: {\n            thingId: \"1234\"\n\n          }\n          thing2: [{ tin: {id: 1}},{ tin: {id: 2}}]\n          leadTime: 3\n          transitTime: 3\n        }\n        result = fixForMatch(object,['thingId', 'leadTime', 'transitTime', 'id'])\n        result.thingId.should.be.equal(replacement)\n        result.leadTime.should.be.equal(replacement)\n        result.transitTime.should.be.equal(replacement)\n        result.thing1.thingId.should.be.equal(replacement)\n        result.thing2[0].tin.id.should.be.equal(replacement)\n        result.thing2[1].tin.id.should.be.equal(replacement)\n\n        return\n"]}
\ No newline at end of file
diff --git a/test/unit-tests/unit-test-fixForMatch.litcoffee b/test/unit-tests/unit-test-fixForMatch.litcoffee
new file mode 100755
index 00000000..f52b39d0
--- /dev/null
+++ b/test/unit-tests/unit-test-fixForMatch.litcoffee
@@ -0,0 +1,32 @@
+#
+
+    chai = require('chai')
+    expect = chai.expect
+    should = chai.should()
+    assert = chai.assert
+
+    fixForMatch = require('./utils/fixForMatch')
+
+    describe 'fix for match', () ->
+
+      replacement = "force matched"
+      it 'zeros out particular fields..', () ->
+        object = {
+          thingId: "1234"
+          thing1: {
+            thingId: "1234"
+
+          }
+          thing2: [{ tin: {id: 1}},{ tin: {id: 2}}]
+          leadTime: 3
+          transitTime: 3
+        }
+        result = fixForMatch(object,['thingId', 'leadTime', 'transitTime', 'id'])
+        result.thingId.should.be.equal(replacement)
+        result.leadTime.should.be.equal(replacement)
+        result.transitTime.should.be.equal(replacement)
+        result.thing1.thingId.should.be.equal(replacement)
+        result.thing2[0].tin.id.should.be.equal(replacement)
+        result.thing2[1].tin.id.should.be.equal(replacement)
+
+        return
diff --git a/test/unit-tests/unit-test-format.js b/test/unit-tests/unit-test-format.js
new file mode 100755
index 00000000..c59ae541
--- /dev/null
+++ b/test/unit-tests/unit-test-format.js
@@ -0,0 +1,64 @@
+var assert, buildMatchers, format, ref, should;
+
+ref = require('chai'), assert = ref.assert, should = ref.should;
+
+should();
+
+format = require('../../src/format');
+
+buildMatchers = require('../../src/buildMatchers');
+
+describe('docco format', function() {
+  it('format docco', function() {
+    var config, languages, sections, source;
+    source = 'fakes/fake_coffee.coffee';
+    config = {
+      layout: 'parallel',
+      output: 'docs',
+      template: null,
+      css: null,
+      extension: null,
+      languages: {},
+      marked: null,
+      setup: '.docco.json',
+      help: false,
+      flatten: false
+    };
+    languages = [
+      {
+        "name": "coffeescript",
+        "symbol": "#",
+        "commentMatcher": {},
+        "commentFilter": {}
+      }
+    ];
+    languages = buildMatchers(languages);
+    sections = [
+      {
+        "docsText": "Assignment:\n",
+        "codeText": "number   = 42\nopposite = true\n\n"
+      }, {
+        "docsText": "Conditions:\n",
+        "codeText": "number = -42 if opposite\n\n"
+      }, {
+        "docsText": "Functions:\n",
+        "codeText": "square = (x) -> x * x\n\n"
+      }
+    ];
+    format(source, languages[0], sections, config);
+    sections[0].docsText.should.be.equal("Assignment:\n");
+    sections[0].codeText.should.be.equal("number   = 42\nopposite = true\n\n");
+    sections[0].codeHtml.should.be.equal("<div class='highlight'><pre>number   = <span class=\"hljs-number\">42</span>\nopposite = <span class=\"hljs-literal\">true</span></pre></div>");
+    sections[0].docsHtml.should.be.equal("<p>Assignment:</p>\n");
+    sections[1].docsText.should.be.equal("Conditions:\n");
+    sections[1].codeText.should.be.equal("number = -42 if opposite\n\n");
+    sections[1].codeHtml.should.be.equal("<div class='highlight'><pre>number = <span class=\"hljs-number\">-42</span> <span class=\"hljs-keyword\">if</span> opposite</pre></div>");
+    sections[1].docsHtml.should.be.equal("<p>Conditions:</p>\n");
+    sections[2].docsText.should.be.equal("Functions:\n");
+    sections[2].codeText.should.be.equal("square = (x) -> x * x\n\n");
+    sections[2].codeHtml.should.be.equal("<div class='highlight'><pre><span class=\"hljs-function\"><span class=\"hljs-title\">square</span> = <span class=\"hljs-params\">(x)</span> -&gt;</span> x * x</pre></div>");
+    sections[2].docsHtml.should.be.equal("<p>Functions:</p>\n");
+  });
+});
+
+//# sourceMappingURL=unit-test-format.js.map
diff --git a/test/unit-tests/unit-test-format.js.map b/test/unit-tests/unit-test-format.js.map
new file mode 100644
index 00000000..74d65fb0
--- /dev/null
+++ b/test/unit-tests/unit-test-format.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"unit-test-format.js","sources":["unit-test-format.litcoffee"],"names":[],"mappings":"AAEI,IAAA;;AAAA,MAAqB,OAAA,CAAQ,MAAR,CAArB,EAAE,mBAAF,EAAU;;AAA4B,MAAA,CAAA;;AACtC,MAAA,GAAS,OAAA,CAAQ,kBAAR;;AACT,aAAA,GAAgB,OAAA,CAAQ,yBAAR;;AAEhB,QAAA,CAAS,cAAT,EAAyB,SAAA;EAEvB,EAAA,CAAG,cAAH,EAAmB,SAAA;AAEjB,QAAA;IAAA,MAAA,GAAS;IACT,MAAA,GACE;MAAA,MAAA,EAAY,UAAZ;MACA,MAAA,EAAY,MADZ;MAEA,QAAA,EAAY,IAFZ;MAGA,GAAA,EAAY,IAHZ;MAIA,SAAA,EAAY,IAJZ;MAKA,SAAA,EAAY,EALZ;MAMA,MAAA,EAAY,IANZ;MAOA,KAAA,EAAY,aAPZ;MAQA,IAAA,EAAW,KARX;MASA,OAAA,EAAS,KATT;;IAUF,SAAA,GAAY;MAAC;QAAC,MAAA,EAAO,cAAR;QAAuB,QAAA,EAAS,GAAhC;QAAoC,gBAAA,EAAiB,EAArD;QAAwD,eAAA,EAAgB,EAAxE;OAAD;;IACZ,SAAA,GAAY,aAAA,CAAc,SAAd;IAEZ,QAAA,GAAW;MACT;QACE,UAAA,EAAY,eADd;QAEE,UAAA,EAAY,oCAFd;OADS,EAKT;QACE,UAAA,EAAY,eADd;QAEE,UAAA,EAAY,8BAFd;OALS,EAST;QACE,UAAA,EAAY,cADd;QAEE,UAAA,EAAY,2BAFd;OATS;;IAcX,MAAA,CAAO,MAAP,EAAe,SAAU,CAAA,CAAA,CAAzB,EAA6B,QAA7B,EAAuC,MAAvC;IACA,QAAS,CAAA,CAAA,CAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAA/B,CAAqC,eAArC;IACA,QAAS,CAAA,CAAA,CAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAA/B,CAAqC,oCAArC;IACA,QAAS,CAAA,CAAA,CAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAA/B,CAAqC,+IAArC;IACA,QAAS,CAAA,CAAA,CAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAA/B,CAAqC,sBAArC;IAEA,QAAS,CAAA,CAAA,CAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAA/B,CAAqC,eAArC;IACA,QAAS,CAAA,CAAA,CAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAA/B,CAAqC,8BAArC;IACA,QAAS,CAAA,CAAA,CAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAA/B,CAAqC,yIAArC;IACA,QAAS,CAAA,CAAA,CAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAA/B,CAAqC,sBAArC;IAEA,QAAS,CAAA,CAAA,CAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAA/B,CAAqC,cAArC;IACA,QAAS,CAAA,CAAA,CAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAA/B,CAAqC,2BAArC;IACA,QAAS,CAAA,CAAA,CAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAA/B,CAAqC,4KAArC;IACA,QAAS,CAAA,CAAA,CAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAA/B,CAAqC,qBAArC;EA7CiB,CAAnB;AAFuB,CAAzB","sourcesContent":["# This tests if parse is working correctly.\n\n    { assert, should } = require('chai'); should()\n    format = require '../../src/format'\n    buildMatchers = require '../../src/buildMatchers'\n\n    describe 'docco format', () ->\n\n      it 'format docco', () ->\n\n        source = 'fakes/fake_coffee.coffee'\n        config =\n          layout:     'parallel'\n          output:     'docs'\n          template:   null\n          css:        null\n          extension:  null\n          languages:  {}\n          marked:     null\n          setup:      '.docco.json'\n          help:      false\n          flatten: false\n        languages = [{\"name\":\"coffeescript\",\"symbol\":\"#\",\"commentMatcher\":{},\"commentFilter\":{}}]\n        languages = buildMatchers languages\n\n        sections = [\n          {\n            \"docsText\": \"Assignment:\\n\",\n            \"codeText\": \"number   = 42\\nopposite = true\\n\\n\"\n          },\n          {\n            \"docsText\": \"Conditions:\\n\",\n            \"codeText\": \"number = -42 if opposite\\n\\n\"\n          },\n          {\n            \"docsText\": \"Functions:\\n\",\n            \"codeText\": \"square = (x) -> x * x\\n\\n\"\n          }\n        ]\n        format(source, languages[0], sections, config)\n        sections[0].docsText.should.be.equal(\"Assignment:\\n\")\n        sections[0].codeText.should.be.equal(\"number   = 42\\nopposite = true\\n\\n\")\n        sections[0].codeHtml.should.be.equal(\"<div class='highlight'><pre>number   = <span class=\\\"hljs-number\\\">42</span>\\nopposite = <span class=\\\"hljs-literal\\\">true</span></pre></div>\")\n        sections[0].docsHtml.should.be.equal(\"<p>Assignment:</p>\\n\")\n\n        sections[1].docsText.should.be.equal(\"Conditions:\\n\")\n        sections[1].codeText.should.be.equal(\"number = -42 if opposite\\n\\n\")\n        sections[1].codeHtml.should.be.equal(\"<div class='highlight'><pre>number = <span class=\\\"hljs-number\\\">-42</span> <span class=\\\"hljs-keyword\\\">if</span> opposite</pre></div>\")\n        sections[1].docsHtml.should.be.equal(\"<p>Conditions:</p>\\n\")\n\n        sections[2].docsText.should.be.equal(\"Functions:\\n\")\n        sections[2].codeText.should.be.equal(\"square = (x) -> x * x\\n\\n\")\n        sections[2].codeHtml.should.be.equal(\"<div class='highlight'><pre><span class=\\\"hljs-function\\\"><span class=\\\"hljs-title\\\">square</span> = <span class=\\\"hljs-params\\\">(x)</span> -&gt;</span> x * x</pre></div>\")\n        sections[2].docsHtml.should.be.equal(\"<p>Functions:</p>\\n\")\n\n        return\n      return\n\n"]}
\ No newline at end of file
diff --git a/test/unit-tests/unit-test-format.litcoffee b/test/unit-tests/unit-test-format.litcoffee
new file mode 100755
index 00000000..72af3b33
--- /dev/null
+++ b/test/unit-tests/unit-test-format.litcoffee
@@ -0,0 +1,58 @@
+# This tests if parse is working correctly.
+
+    { assert, should } = require('chai'); should()
+    format = require '../../src/format'
+    buildMatchers = require '../../src/buildMatchers'
+
+    describe 'docco format', () ->
+
+      it 'format docco', () ->
+
+        source = 'fakes/fake_coffee.coffee'
+        config =
+          layout:     'parallel'
+          output:     'docs'
+          template:   null
+          css:        null
+          extension:  null
+          languages:  {}
+          marked:     null
+          setup:      '.docco.json'
+          help:      false
+          flatten: false
+        languages = [{"name":"coffeescript","symbol":"#","commentMatcher":{},"commentFilter":{}}]
+        languages = buildMatchers languages
+
+        sections = [
+          {
+            "docsText": "Assignment:\n",
+            "codeText": "number   = 42\nopposite = true\n\n"
+          },
+          {
+            "docsText": "Conditions:\n",
+            "codeText": "number = -42 if opposite\n\n"
+          },
+          {
+            "docsText": "Functions:\n",
+            "codeText": "square = (x) -> x * x\n\n"
+          }
+        ]
+        format(source, languages[0], sections, config)
+        sections[0].docsText.should.be.equal("Assignment:\n")
+        sections[0].codeText.should.be.equal("number   = 42\nopposite = true\n\n")
+        sections[0].codeHtml.should.be.equal("<div class='highlight'><pre>number   = <span class=\"hljs-number\">42</span>\nopposite = <span class=\"hljs-literal\">true</span></pre></div>")
+        sections[0].docsHtml.should.be.equal("<p>Assignment:</p>\n")
+
+        sections[1].docsText.should.be.equal("Conditions:\n")
+        sections[1].codeText.should.be.equal("number = -42 if opposite\n\n")
+        sections[1].codeHtml.should.be.equal("<div class='highlight'><pre>number = <span class=\"hljs-number\">-42</span> <span class=\"hljs-keyword\">if</span> opposite</pre></div>")
+        sections[1].docsHtml.should.be.equal("<p>Conditions:</p>\n")
+
+        sections[2].docsText.should.be.equal("Functions:\n")
+        sections[2].codeText.should.be.equal("square = (x) -> x * x\n\n")
+        sections[2].codeHtml.should.be.equal("<div class='highlight'><pre><span class=\"hljs-function\"><span class=\"hljs-title\">square</span> = <span class=\"hljs-params\">(x)</span> -&gt;</span> x * x</pre></div>")
+        sections[2].docsHtml.should.be.equal("<p>Functions:</p>\n")
+
+        return
+      return
+
diff --git a/test/unit-tests/unit-test-getCSSPath.js b/test/unit-tests/unit-test-getCSSPath.js
new file mode 100755
index 00000000..af0d4863
--- /dev/null
+++ b/test/unit-tests/unit-test-getCSSPath.js
@@ -0,0 +1,32 @@
+var getCSSPath, should;
+
+should = require('chai').should;
+
+should();
+
+getCSSPath = require('../../src/getCSSPath');
+
+describe('docco getCSSPath', function() {
+  it('gets the path to the css in the same directory.', function() {
+    var cssPath;
+    cssPath = getCSSPath('file.css', 'docs', 'docs/file.html');
+    cssPath.should.be.equal('file.css');
+  });
+  it('gets the path to the css in directory above.', function() {
+    var cssPath;
+    cssPath = getCSSPath('file.css', 'docs', 'docs/src/file.html');
+    cssPath.should.be.equal('../file.css');
+  });
+  it('gets the path to the css in two directories above.', function() {
+    var cssPath;
+    cssPath = getCSSPath('file.css', 'docs', 'docs/src/lib/file.html');
+    cssPath.should.be.equal('../../file.css');
+  });
+  it('gets the path to the css in in parallel directory.', function() {
+    var cssPath;
+    cssPath = getCSSPath('docs/file.css', 'docs', 'src/file.html');
+    cssPath.should.be.equal('../docs/file.css');
+  });
+});
+
+//# sourceMappingURL=unit-test-getCSSPath.js.map
diff --git a/test/unit-tests/unit-test-getCSSPath.js.map b/test/unit-tests/unit-test-getCSSPath.js.map
new file mode 100644
index 00000000..59d495e8
--- /dev/null
+++ b/test/unit-tests/unit-test-getCSSPath.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"unit-test-getCSSPath.js","sources":["unit-test-getCSSPath.litcoffee"],"names":[],"mappings":"AAEI,IAAA;;AAAE,SAAW,OAAA,CAAQ,MAAR;;AAAiB,MAAA,CAAA;;AAC9B,UAAA,GAAa,OAAA,CAAQ,sBAAR;;AAEb,QAAA,CAAS,kBAAT,EAA6B,SAAA;EAG3B,EAAA,CAAG,iDAAH,EAAsD,SAAA;AACpD,QAAA;IAAA,OAAA,GAAU,UAAA,CAAW,UAAX,EAAuB,MAAvB,EAA+B,gBAA/B;IACV,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,KAAlB,CAAwB,UAAxB;EAFoD,CAAtD;EAKA,EAAA,CAAG,8CAAH,EAAmD,SAAA;AACjD,QAAA;IAAA,OAAA,GAAU,UAAA,CAAW,UAAX,EAAuB,MAAvB,EAA+B,oBAA/B;IACV,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,KAAlB,CAAwB,aAAxB;EAFiD,CAAnD;EAKA,EAAA,CAAG,oDAAH,EAAyD,SAAA;AACvD,QAAA;IAAA,OAAA,GAAU,UAAA,CAAW,UAAX,EAAuB,MAAvB,EAA+B,wBAA/B;IACV,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,KAAlB,CAAwB,gBAAxB;EAFuD,CAAzD;EAKA,EAAA,CAAG,oDAAH,EAAyD,SAAA;AACvD,QAAA;IAAA,OAAA,GAAU,UAAA,CAAW,eAAX,EAA4B,MAA5B,EAAoC,eAApC;IACV,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,KAAlB,CAAwB,kBAAxB;EAFuD,CAAzD;AAlB2B,CAA7B","sourcesContent":["# This tests if getCSSPath is working correctly\n\n    { should } = require('chai'); should()\n    getCSSPath = require('../../src/getCSSPath')\n\n    describe 'docco getCSSPath', () ->\n\n\n      it 'gets the path to the css in the same directory.', () ->\n        cssPath = getCSSPath('file.css', 'docs', 'docs/file.html' )\n        cssPath.should.be.equal('file.css')\n        return\n\n      it 'gets the path to the css in directory above.', () ->\n        cssPath = getCSSPath('file.css', 'docs', 'docs/src/file.html' )\n        cssPath.should.be.equal('../file.css')\n        return\n\n      it 'gets the path to the css in two directories above.', () ->\n        cssPath = getCSSPath('file.css', 'docs', 'docs/src/lib/file.html' )\n        cssPath.should.be.equal('../../file.css')\n        return\n\n      it 'gets the path to the css in in parallel directory.', () ->\n        cssPath = getCSSPath('docs/file.css', 'docs', 'src/file.html' )\n        cssPath.should.be.equal('../docs/file.css')\n        return\n      return\n"]}
\ No newline at end of file
diff --git a/test/unit-tests/unit-test-getCSSPath.litcoffee b/test/unit-tests/unit-test-getCSSPath.litcoffee
new file mode 100755
index 00000000..405a6abb
--- /dev/null
+++ b/test/unit-tests/unit-test-getCSSPath.litcoffee
@@ -0,0 +1,28 @@
+# This tests if getCSSPath is working correctly
+
+    { should } = require('chai'); should()
+    getCSSPath = require('../../src/getCSSPath')
+
+    describe 'docco getCSSPath', () ->
+
+
+      it 'gets the path to the css in the same directory.', () ->
+        cssPath = getCSSPath('file.css', 'docs', 'docs/file.html' )
+        cssPath.should.be.equal('file.css')
+        return
+
+      it 'gets the path to the css in directory above.', () ->
+        cssPath = getCSSPath('file.css', 'docs', 'docs/src/file.html' )
+        cssPath.should.be.equal('../file.css')
+        return
+
+      it 'gets the path to the css in two directories above.', () ->
+        cssPath = getCSSPath('file.css', 'docs', 'docs/src/lib/file.html' )
+        cssPath.should.be.equal('../../file.css')
+        return
+
+      it 'gets the path to the css in in parallel directory.', () ->
+        cssPath = getCSSPath('docs/file.css', 'docs', 'src/file.html' )
+        cssPath.should.be.equal('../docs/file.css')
+        return
+      return
diff --git a/test/unit-tests/unit-test-getDestinationInformation.js b/test/unit-tests/unit-test-getDestinationInformation.js
new file mode 100755
index 00000000..d4d14c9c
--- /dev/null
+++ b/test/unit-tests/unit-test-getDestinationInformation.js
@@ -0,0 +1,150 @@
+var assert, getDestinationInformation, getLanguage, languages, ref, should;
+
+ref = require('chai'), assert = ref.assert, should = ref.should;
+
+should();
+
+languages = require('../../docco').languages;
+
+getDestinationInformation = require('../../src/getDestinationInformation');
+
+getLanguage = require('../../src/getLanguage');
+
+describe('docco getDestinationInformation', function() {
+  it('unflattened: gets destinationInformation for one source', function() {
+    var config, destination, file, flatten, language, result, rootDirectory, source, targetDirectory;
+    file = "src/fake_coffee.coffee";
+    config = {
+      languages: languages
+    };
+    language = getLanguage(file, languages);
+    source = {
+      "root": "/Project",
+      "dir": "src",
+      "base": "fake_coffee.coffee",
+      "ext": ".coffee",
+      "name": "fake_coffee",
+      "file": "src/fake_coffee.coffee",
+      "path": "/Project/src/fake_coffee.coffee"
+    };
+    rootDirectory = '/Project';
+    targetDirectory = 'docs';
+    flatten = false;
+    destination = getDestinationInformation(language, source, rootDirectory, targetDirectory, flatten);
+    result = {
+      "root": "/Project",
+      "dir": "docs/src",
+      "ext": ".html",
+      "base": "fake_coffee.html",
+      "name": "fake_coffee",
+      "file": "docs/src/fake_coffee.html",
+      "path": "/Project/docs/src/fake_coffee.html",
+      "pathdir": "/Project/docs/src",
+      "relativefile": "src/fake_coffee.html"
+    };
+    assert.deepEqual(destination, result);
+  });
+  it('flattened: gets destinationInformation for one source', function() {
+    var config, destination, file, flatten, language, result, rootDirectory, source, targetDirectory;
+    file = "src/fake_coffee.coffee";
+    config = {
+      languages: languages
+    };
+    language = getLanguage(file, languages);
+    source = {
+      "root": "/Project",
+      "dir": "src",
+      "base": "fake_coffee.coffee",
+      "ext": ".coffee",
+      "name": "fake_coffee",
+      "file": "src/fake_coffee.coffee",
+      "path": "/Project/src/fake_coffee.coffee"
+    };
+    rootDirectory = '/Project';
+    targetDirectory = 'docs';
+    flatten = true;
+    destination = getDestinationInformation(language, source, rootDirectory, targetDirectory, flatten);
+    result = {
+      "base": "fake_coffee.html",
+      "dir": "docs",
+      "ext": ".html",
+      "file": "docs/fake_coffee.html",
+      "name": "fake_coffee",
+      "path": "/Project/docs/fake_coffee.html",
+      "pathdir": "/Project/docs",
+      "root": "/Project",
+      "relativefile": "fake_coffee.html"
+    };
+    assert.deepEqual(destination, result);
+  });
+  it('unflattened: gets destinationInformation for one copy source', function() {
+    var config, destination, file, flatten, language, result, rootDirectory, source, targetDirectory;
+    file = "images/fluffybunny1.jpg";
+    config = {
+      languages: languages
+    };
+    language = getLanguage(file, languages);
+    language.copy.should.be["true"];
+    source = {
+      "root": "/Project",
+      "dir": "images",
+      "base": "fluffybunny1.jpg",
+      "ext": ".jpg",
+      "name": "fluffybunny1",
+      "file": "images/fluffybunny1.jpg",
+      "path": "/Project/images/fluffybunny1.jpg"
+    };
+    rootDirectory = '/Project';
+    targetDirectory = 'docs';
+    flatten = false;
+    destination = getDestinationInformation(language, source, rootDirectory, targetDirectory, flatten);
+    result = {
+      "root": "/Project",
+      "dir": "docs/images",
+      "base": "fluffybunny1.jpg",
+      "ext": ".jpg",
+      "name": "fluffybunny1",
+      "file": "docs/images/fluffybunny1.jpg",
+      "path": "/Project/docs/images/fluffybunny1.jpg",
+      "pathdir": "/Project/docs/images",
+      "relativefile": "images/fluffybunny1.jpg"
+    };
+    assert.deepEqual(destination, result);
+  });
+  it('flattened: gets destinationInformation for one copy source', function() {
+    var config, destination, file, flatten, language, result, rootDirectory, source, targetDirectory;
+    file = "images/fluffybunny1.jpg";
+    config = {
+      languages: languages
+    };
+    language = getLanguage(file, languages);
+    language.copy.should.be["true"];
+    source = {
+      "root": "/Project",
+      "dir": "images",
+      "base": "fluffybunny1.jpg",
+      "ext": ".jpg",
+      "name": "fluffybunny1",
+      "file": "images/fluffybunny1.jpg",
+      "path": "/Project/images/fluffybunny1.jpg"
+    };
+    rootDirectory = '/Project';
+    targetDirectory = 'docs';
+    flatten = true;
+    destination = getDestinationInformation(language, source, rootDirectory, targetDirectory, flatten);
+    result = {
+      "root": "/Project",
+      "dir": "docs/images",
+      "base": "fluffybunny1.jpg",
+      "ext": ".jpg",
+      "name": "fluffybunny1",
+      "file": "docs/images/fluffybunny1.jpg",
+      "path": "/Project/docs/images/fluffybunny1.jpg",
+      "pathdir": "/Project/docs/images",
+      "relativefile": "images/fluffybunny1.jpg"
+    };
+    assert.deepEqual(destination, result);
+  });
+});
+
+//# sourceMappingURL=unit-test-getDestinationInformation.js.map
diff --git a/test/unit-tests/unit-test-getDestinationInformation.js.map b/test/unit-tests/unit-test-getDestinationInformation.js.map
new file mode 100644
index 00000000..aac1a59c
--- /dev/null
+++ b/test/unit-tests/unit-test-getDestinationInformation.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"unit-test-getDestinationInformation.js","sources":["unit-test-getDestinationInformation.litcoffee"],"names":[],"mappings":"AAEI,IAAA;;AAAA,MAAqB,OAAA,CAAQ,MAAR,CAArB,EAAE,mBAAF,EAAU;;AAA4B,MAAA,CAAA;;AACpC,YAAc,OAAA,CAAQ,aAAR;;AAChB,yBAAA,GAA4B,OAAA,CAAQ,qCAAR;;AAC5B,WAAA,GAAc,OAAA,CAAQ,uBAAR;;AAEd,QAAA,CAAS,iCAAT,EAA4C,SAAA;EAE1C,EAAA,CAAG,yDAAH,EAA8D,SAAA;AAC5D,QAAA;IAAA,IAAA,GAAO;IACP,MAAA,GAAS;MAAE,SAAA,EAAU,SAAZ;;IACT,QAAA,GAAW,WAAA,CAAY,IAAZ,EAAkB,SAAlB;IACX,MAAA,GAAS;MACP,MAAA,EAAO,UADA;MAEP,KAAA,EAAM,KAFC;MAGP,MAAA,EAAO,oBAHA;MAIP,KAAA,EAAM,SAJC;MAKP,MAAA,EAAO,aALA;MAMP,MAAA,EAAO,wBANA;MAOP,MAAA,EAAO,iCAPA;;IAST,aAAA,GAAgB;IAChB,eAAA,GAAkB;IAClB,OAAA,GAAU;IACV,WAAA,GAAc,yBAAA,CAA0B,QAA1B,EAAoC,MAApC,EAA4C,aAA5C,EAA2D,eAA3D,EAA4E,OAA5E;IACd,MAAA,GAAS;MACP,MAAA,EAAQ,UADD;MAEP,KAAA,EAAO,UAFA;MAGP,KAAA,EAAO,OAHA;MAIP,MAAA,EAAQ,kBAJD;MAKP,MAAA,EAAQ,aALD;MAMP,MAAA,EAAQ,2BAND;MAOP,MAAA,EAAQ,oCAPD;MAQP,SAAA,EAAW,mBARJ;MASP,cAAA,EAAgB,sBATT;;IAWT,MAAM,CAAC,SAAP,CAAiB,WAAjB,EAA8B,MAA9B;EA5B4D,CAA9D;EA+BA,EAAA,CAAG,uDAAH,EAA4D,SAAA;AAC1D,QAAA;IAAA,IAAA,GAAO;IACP,MAAA,GAAS;MAAE,SAAA,EAAU,SAAZ;;IACT,QAAA,GAAW,WAAA,CAAY,IAAZ,EAAkB,SAAlB;IACX,MAAA,GAAS;MACP,MAAA,EAAO,UADA;MAEP,KAAA,EAAM,KAFC;MAGP,MAAA,EAAO,oBAHA;MAIP,KAAA,EAAM,SAJC;MAKP,MAAA,EAAO,aALA;MAMP,MAAA,EAAO,wBANA;MAOP,MAAA,EAAO,iCAPA;;IAST,aAAA,GAAgB;IAChB,eAAA,GAAkB;IAClB,OAAA,GAAU;IACV,WAAA,GAAc,yBAAA,CAA0B,QAA1B,EAAoC,MAApC,EAA4C,aAA5C,EAA2D,eAA3D,EAA4E,OAA5E;IACd,MAAA,GAAS;MACP,MAAA,EAAQ,kBADD;MAEP,KAAA,EAAO,MAFA;MAGP,KAAA,EAAO,OAHA;MAIP,MAAA,EAAQ,uBAJD;MAKP,MAAA,EAAQ,aALD;MAMP,MAAA,EAAQ,gCAND;MAOP,SAAA,EAAW,eAPJ;MAQP,MAAA,EAAQ,UARD;MASP,cAAA,EAAgB,kBATT;;IAWT,MAAM,CAAC,SAAP,CAAiB,WAAjB,EAA8B,MAA9B;EA5B0D,CAA5D;EA+BA,EAAA,CAAG,8DAAH,EAAmE,SAAA;AACjE,QAAA;IAAA,IAAA,GAAO;IACP,MAAA,GAAS;MAAE,SAAA,EAAU,SAAZ;;IACT,QAAA,GAAW,WAAA,CAAY,IAAZ,EAAkB,SAAlB;IACX,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAC,IAAD;IAEvB,MAAA,GAAS;MACP,MAAA,EAAO,UADA;MAEP,KAAA,EAAM,QAFC;MAGP,MAAA,EAAO,kBAHA;MAIP,KAAA,EAAM,MAJC;MAKP,MAAA,EAAO,cALA;MAMP,MAAA,EAAO,yBANA;MAOP,MAAA,EAAO,kCAPA;;IAST,aAAA,GAAgB;IAChB,eAAA,GAAkB;IAClB,OAAA,GAAU;IACV,WAAA,GAAc,yBAAA,CAA0B,QAA1B,EAAoC,MAApC,EAA4C,aAA5C,EAA2D,eAA3D,EAA4E,OAA5E;IACd,MAAA,GAAS;MACP,MAAA,EAAQ,UADD;MAEP,KAAA,EAAO,aAFA;MAGP,MAAA,EAAQ,kBAHD;MAIP,KAAA,EAAO,MAJA;MAKP,MAAA,EAAQ,cALD;MAMP,MAAA,EAAQ,8BAND;MAOP,MAAA,EAAQ,uCAPD;MAQP,SAAA,EAAW,sBARJ;MASP,cAAA,EAAgB,yBATT;;IAWT,MAAM,CAAC,SAAP,CAAiB,WAAjB,EAA8B,MAA9B;EA9BiE,CAAnE;EAiCA,EAAA,CAAG,4DAAH,EAAiE,SAAA;AAC/D,QAAA;IAAA,IAAA,GAAO;IACP,MAAA,GAAS;MAAE,SAAA,EAAU,SAAZ;;IACT,QAAA,GAAW,WAAA,CAAY,IAAZ,EAAkB,SAAlB;IACX,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAC,IAAD;IACvB,MAAA,GAAS;MACP,MAAA,EAAO,UADA;MAEP,KAAA,EAAM,QAFC;MAGP,MAAA,EAAO,kBAHA;MAIP,KAAA,EAAM,MAJC;MAKP,MAAA,EAAO,cALA;MAMP,MAAA,EAAO,yBANA;MAOP,MAAA,EAAO,kCAPA;;IAST,aAAA,GAAgB;IAChB,eAAA,GAAkB;IAClB,OAAA,GAAU;IACV,WAAA,GAAc,yBAAA,CAA0B,QAA1B,EAAoC,MAApC,EAA4C,aAA5C,EAA2D,eAA3D,EAA4E,OAA5E;IACd,MAAA,GAAS;MACP,MAAA,EAAQ,UADD;MAEP,KAAA,EAAO,aAFA;MAGP,MAAA,EAAQ,kBAHD;MAIP,KAAA,EAAO,MAJA;MAKP,MAAA,EAAQ,cALD;MAMP,MAAA,EAAQ,8BAND;MAOP,MAAA,EAAQ,uCAPD;MAQP,SAAA,EAAW,sBARJ;MASP,cAAA,EAAgB,yBATT;;IAWT,MAAM,CAAC,SAAP,CAAiB,WAAjB,EAA8B,MAA9B;EA7B+D,CAAjE;AAjG0C,CAA5C","sourcesContent":["# This tests if getLanguage is working correctly.\n\n    { assert, should } = require('chai'); should()\n    { languages } = require('../../docco')\n    getDestinationInformation = require '../../src/getDestinationInformation'\n    getLanguage = require '../../src/getLanguage'\n\n    describe 'docco getDestinationInformation', () ->\n\n      it 'unflattened: gets destinationInformation for one source', () ->\n        file = \"src/fake_coffee.coffee\"\n        config = { languages:languages }\n        language = getLanguage file, languages\n        source = {\n          \"root\":\"/Project\",\n          \"dir\":\"src\",\n          \"base\":\"fake_coffee.coffee\",\n          \"ext\":\".coffee\",\n          \"name\":\"fake_coffee\",\n          \"file\":\"src/fake_coffee.coffee\",\n          \"path\":\"/Project/src/fake_coffee.coffee\"\n        }\n        rootDirectory = '/Project'\n        targetDirectory = 'docs'\n        flatten = false\n        destination = getDestinationInformation(language, source, rootDirectory, targetDirectory, flatten)\n        result = {\n          \"root\": \"/Project\",\n          \"dir\": \"docs/src\",\n          \"ext\": \".html\",\n          \"base\": \"fake_coffee.html\",\n          \"name\": \"fake_coffee\",\n          \"file\": \"docs/src/fake_coffee.html\",\n          \"path\": \"/Project/docs/src/fake_coffee.html\",\n          \"pathdir\": \"/Project/docs/src\",\n          \"relativefile\": \"src/fake_coffee.html\"\n        }\n        assert.deepEqual(destination, result)\n        return\n\n      it 'flattened: gets destinationInformation for one source', () ->\n        file = \"src/fake_coffee.coffee\"\n        config = { languages:languages }\n        language = getLanguage file, languages\n        source = {\n          \"root\":\"/Project\",\n          \"dir\":\"src\",\n          \"base\":\"fake_coffee.coffee\",\n          \"ext\":\".coffee\",\n          \"name\":\"fake_coffee\",\n          \"file\":\"src/fake_coffee.coffee\",\n          \"path\":\"/Project/src/fake_coffee.coffee\"\n        }\n        rootDirectory = '/Project'\n        targetDirectory = 'docs'\n        flatten = true\n        destination = getDestinationInformation(language, source, rootDirectory, targetDirectory, flatten)\n        result = {\n          \"base\": \"fake_coffee.html\"\n          \"dir\": \"docs\"\n          \"ext\": \".html\"\n          \"file\": \"docs/fake_coffee.html\"\n          \"name\": \"fake_coffee\"\n          \"path\": \"/Project/docs/fake_coffee.html\"\n          \"pathdir\": \"/Project/docs\"\n          \"root\": \"/Project\"\n          \"relativefile\": \"fake_coffee.html\"\n        }\n        assert.deepEqual(destination, result)\n        return\n\n      it 'unflattened: gets destinationInformation for one copy source', () ->\n        file = \"images/fluffybunny1.jpg\"\n        config = { languages:languages }\n        language = getLanguage file, languages\n        language.copy.should.be.true\n\n        source = {\n          \"root\":\"/Project\",\n          \"dir\":\"images\",\n          \"base\":\"fluffybunny1.jpg\",\n          \"ext\":\".jpg\",\n          \"name\":\"fluffybunny1\",\n          \"file\":\"images/fluffybunny1.jpg\",\n          \"path\":\"/Project/images/fluffybunny1.jpg\"\n        }\n        rootDirectory = '/Project'\n        targetDirectory = 'docs'\n        flatten = false\n        destination = getDestinationInformation(language, source, rootDirectory, targetDirectory, flatten)\n        result = {\n          \"root\": \"/Project\",\n          \"dir\": \"docs/images\",\n          \"base\": \"fluffybunny1.jpg\",\n          \"ext\": \".jpg\",\n          \"name\": \"fluffybunny1\",\n          \"file\": \"docs/images/fluffybunny1.jpg\",\n          \"path\": \"/Project/docs/images/fluffybunny1.jpg\",\n          \"pathdir\": \"/Project/docs/images\",\n          \"relativefile\": \"images/fluffybunny1.jpg\"\n        }\n        assert.deepEqual(destination, result)\n        return\n\n      it 'flattened: gets destinationInformation for one copy source', () ->\n        file = \"images/fluffybunny1.jpg\"\n        config = { languages:languages }\n        language = getLanguage file, languages\n        language.copy.should.be.true\n        source = {\n          \"root\":\"/Project\",\n          \"dir\":\"images\",\n          \"base\":\"fluffybunny1.jpg\",\n          \"ext\":\".jpg\",\n          \"name\":\"fluffybunny1\",\n          \"file\":\"images/fluffybunny1.jpg\",\n          \"path\":\"/Project/images/fluffybunny1.jpg\"\n        }\n        rootDirectory = '/Project'\n        targetDirectory = 'docs'\n        flatten = true\n        destination = getDestinationInformation(language, source, rootDirectory, targetDirectory, flatten)\n        result = {\n          \"root\": \"/Project\"\n          \"dir\": \"docs/images\"\n          \"base\": \"fluffybunny1.jpg\"\n          \"ext\": \".jpg\"\n          \"name\": \"fluffybunny1\"\n          \"file\": \"docs/images/fluffybunny1.jpg\"\n          \"path\": \"/Project/docs/images/fluffybunny1.jpg\"\n          \"pathdir\": \"/Project/docs/images\"\n          \"relativefile\": \"images/fluffybunny1.jpg\"\n        }\n        assert.deepEqual(destination, result)\n        return\n      return"]}
\ No newline at end of file
diff --git a/test/unit-tests/unit-test-getDestinationInformation.litcoffee b/test/unit-tests/unit-test-getDestinationInformation.litcoffee
new file mode 100755
index 00000000..136b9732
--- /dev/null
+++ b/test/unit-tests/unit-test-getDestinationInformation.litcoffee
@@ -0,0 +1,136 @@
+# This tests if getLanguage is working correctly.
+
+    { assert, should } = require('chai'); should()
+    { languages } = require('../../docco')
+    getDestinationInformation = require '../../src/getDestinationInformation'
+    getLanguage = require '../../src/getLanguage'
+
+    describe 'docco getDestinationInformation', () ->
+
+      it 'unflattened: gets destinationInformation for one source', () ->
+        file = "src/fake_coffee.coffee"
+        config = { languages:languages }
+        language = getLanguage file, languages
+        source = {
+          "root":"/Project",
+          "dir":"src",
+          "base":"fake_coffee.coffee",
+          "ext":".coffee",
+          "name":"fake_coffee",
+          "file":"src/fake_coffee.coffee",
+          "path":"/Project/src/fake_coffee.coffee"
+        }
+        rootDirectory = '/Project'
+        targetDirectory = 'docs'
+        flatten = false
+        destination = getDestinationInformation(language, source, rootDirectory, targetDirectory, flatten)
+        result = {
+          "root": "/Project",
+          "dir": "docs/src",
+          "ext": ".html",
+          "base": "fake_coffee.html",
+          "name": "fake_coffee",
+          "file": "docs/src/fake_coffee.html",
+          "path": "/Project/docs/src/fake_coffee.html",
+          "pathdir": "/Project/docs/src",
+          "relativefile": "src/fake_coffee.html"
+        }
+        assert.deepEqual(destination, result)
+        return
+
+      it 'flattened: gets destinationInformation for one source', () ->
+        file = "src/fake_coffee.coffee"
+        config = { languages:languages }
+        language = getLanguage file, languages
+        source = {
+          "root":"/Project",
+          "dir":"src",
+          "base":"fake_coffee.coffee",
+          "ext":".coffee",
+          "name":"fake_coffee",
+          "file":"src/fake_coffee.coffee",
+          "path":"/Project/src/fake_coffee.coffee"
+        }
+        rootDirectory = '/Project'
+        targetDirectory = 'docs'
+        flatten = true
+        destination = getDestinationInformation(language, source, rootDirectory, targetDirectory, flatten)
+        result = {
+          "base": "fake_coffee.html"
+          "dir": "docs"
+          "ext": ".html"
+          "file": "docs/fake_coffee.html"
+          "name": "fake_coffee"
+          "path": "/Project/docs/fake_coffee.html"
+          "pathdir": "/Project/docs"
+          "root": "/Project"
+          "relativefile": "fake_coffee.html"
+        }
+        assert.deepEqual(destination, result)
+        return
+
+      it 'unflattened: gets destinationInformation for one copy source', () ->
+        file = "images/fluffybunny1.jpg"
+        config = { languages:languages }
+        language = getLanguage file, languages
+        language.copy.should.be.true
+
+        source = {
+          "root":"/Project",
+          "dir":"images",
+          "base":"fluffybunny1.jpg",
+          "ext":".jpg",
+          "name":"fluffybunny1",
+          "file":"images/fluffybunny1.jpg",
+          "path":"/Project/images/fluffybunny1.jpg"
+        }
+        rootDirectory = '/Project'
+        targetDirectory = 'docs'
+        flatten = false
+        destination = getDestinationInformation(language, source, rootDirectory, targetDirectory, flatten)
+        result = {
+          "root": "/Project",
+          "dir": "docs/images",
+          "base": "fluffybunny1.jpg",
+          "ext": ".jpg",
+          "name": "fluffybunny1",
+          "file": "docs/images/fluffybunny1.jpg",
+          "path": "/Project/docs/images/fluffybunny1.jpg",
+          "pathdir": "/Project/docs/images",
+          "relativefile": "images/fluffybunny1.jpg"
+        }
+        assert.deepEqual(destination, result)
+        return
+
+      it 'flattened: gets destinationInformation for one copy source', () ->
+        file = "images/fluffybunny1.jpg"
+        config = { languages:languages }
+        language = getLanguage file, languages
+        language.copy.should.be.true
+        source = {
+          "root":"/Project",
+          "dir":"images",
+          "base":"fluffybunny1.jpg",
+          "ext":".jpg",
+          "name":"fluffybunny1",
+          "file":"images/fluffybunny1.jpg",
+          "path":"/Project/images/fluffybunny1.jpg"
+        }
+        rootDirectory = '/Project'
+        targetDirectory = 'docs'
+        flatten = true
+        destination = getDestinationInformation(language, source, rootDirectory, targetDirectory, flatten)
+        result = {
+          "root": "/Project"
+          "dir": "docs/images"
+          "base": "fluffybunny1.jpg"
+          "ext": ".jpg"
+          "name": "fluffybunny1"
+          "file": "docs/images/fluffybunny1.jpg"
+          "path": "/Project/docs/images/fluffybunny1.jpg"
+          "pathdir": "/Project/docs/images"
+          "relativefile": "images/fluffybunny1.jpg"
+        }
+        assert.deepEqual(destination, result)
+        return
+      return
\ No newline at end of file
diff --git a/test/unit-tests/unit-test-getInformationOnFiles.js b/test/unit-tests/unit-test-getInformationOnFiles.js
new file mode 100755
index 00000000..905b1c68
--- /dev/null
+++ b/test/unit-tests/unit-test-getInformationOnFiles.js
@@ -0,0 +1,45 @@
+var assert, buildMatchers, ref, should;
+
+ref = require('chai'), assert = ref.assert, should = ref.should;
+
+should();
+
+buildMatchers = require('../../src/buildMatchers');
+
+describe('docco getInformationOnFiles', function() {
+  var getInformationOnFiles, languages;
+  languages = require('../../docco').languages;
+  getInformationOnFiles = require('../../src/getInformationOnFiles');
+  it('calculates file information with unflattened request', function() {
+    var config, informationOnFiles, informationOnFilesFake, source;
+    informationOnFilesFake = require('./fakes/informationOnFilesUnFlattened');
+    source = "src/fake_coffee.coffee";
+    config = {
+      output: 'docs',
+      root: '/Project',
+      css: 'docco.css',
+      sources: ["src/fake_coffee.coffee", "README.md", "images/fluffybunny1.jpg", "src/lib/fake_litcoffee.litcoffee"]
+    };
+    config.languages = buildMatchers(languages);
+    informationOnFiles = getInformationOnFiles(config);
+    assert.deepEqual(informationOnFiles, informationOnFilesFake);
+  });
+  it('calculates file information with flattened request', function() {
+    var config, informationOnFiles, informationOnFilesFake, source;
+    informationOnFilesFake = require('./fakes/informationOnFilesFlattened');
+    source = "src/fake_coffee.coffee";
+    config = {
+      flatten: true,
+      languages: languages,
+      output: 'docs',
+      root: '/Project',
+      css: 'docco.css',
+      sources: ["src/fake_coffee.coffee", "README.md", "images/fluffybunny1.jpg", "src/lib/fake_litcoffee.litcoffee"],
+      flatten: true
+    };
+    informationOnFiles = getInformationOnFiles(config);
+    assert.deepEqual(informationOnFiles, informationOnFilesFake);
+  });
+});
+
+//# sourceMappingURL=unit-test-getInformationOnFiles.js.map
diff --git a/test/unit-tests/unit-test-getInformationOnFiles.js.map b/test/unit-tests/unit-test-getInformationOnFiles.js.map
new file mode 100644
index 00000000..3baf0813
--- /dev/null
+++ b/test/unit-tests/unit-test-getInformationOnFiles.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"unit-test-getInformationOnFiles.js","sources":["unit-test-getInformationOnFiles.litcoffee"],"names":[],"mappings":"AAEI,IAAA;;AAAA,MAAqB,OAAA,CAAQ,MAAR,CAArB,EAAE,mBAAF,EAAU;;AAA4B,MAAA,CAAA;;AACtC,aAAA,GAAgB,OAAA,CAAQ,yBAAR;;AAEhB,QAAA,CAAS,6BAAT,EAAwC,SAAA;AACtC,MAAA;EAAE,YAAc,OAAA,CAAQ,aAAR;EAChB,qBAAA,GAAwB,OAAA,CAAQ,iCAAR;EAExB,EAAA,CAAG,sDAAH,EAA2D,SAAA;AACzD,QAAA;IAAA,sBAAA,GAAyB,OAAA,CAAQ,uCAAR;IACzB,MAAA,GAAS;IACT,MAAA,GACE;MAAA,MAAA,EAAQ,MAAR;MACA,IAAA,EAAM,UADN;MAEA,GAAA,EAAK,WAFL;MAGA,OAAA,EAAS,CACP,wBADO,EAEP,WAFO,EAGP,yBAHO,EAIP,kCAJO,CAHT;;IASF,MAAM,CAAC,SAAP,GAAmB,aAAA,CAAc,SAAd;IAEnB,kBAAA,GAAqB,qBAAA,CAAsB,MAAtB;IACrB,MAAM,CAAC,SAAP,CAAiB,kBAAjB,EAAqC,sBAArC;EAhByD,CAA3D;EAmBA,EAAA,CAAG,oDAAH,EAAyD,SAAA;AACvD,QAAA;IAAA,sBAAA,GAAyB,OAAA,CAAQ,qCAAR;IACzB,MAAA,GAAS;IACT,MAAA,GACE;MAAA,OAAA,EAAS,IAAT;MACA,SAAA,EAAU,SADV;MAEA,MAAA,EAAQ,MAFR;MAGA,IAAA,EAAM,UAHN;MAIA,GAAA,EAAK,WAJL;MAKA,OAAA,EAAS,CACP,wBADO,EAEP,WAFO,EAGP,yBAHO,EAIP,kCAJO,CALT;MAWA,OAAA,EAAS,IAXT;;IAYF,kBAAA,GAAqB,qBAAA,CAAsB,MAAtB;IACrB,MAAM,CAAC,SAAP,CAAiB,kBAAjB,EAAqC,sBAArC;EAjBuD,CAAzD;AAvBsC,CAAxC","sourcesContent":["# This tests if getDestinations is working correctly.\n\n    { assert, should } = require('chai'); should()\n    buildMatchers = require '../../src/buildMatchers'\n\n    describe 'docco getInformationOnFiles', () ->\n      { languages } = require('../../docco')\n      getInformationOnFiles = require('../../src/getInformationOnFiles')\n\n      it 'calculates file information with unflattened request', () ->\n        informationOnFilesFake = require './fakes/informationOnFilesUnFlattened'\n        source = \"src/fake_coffee.coffee\"\n        config =\n          output: 'docs'\n          root: '/Project'\n          css: 'docco.css'\n          sources: [\n            \"src/fake_coffee.coffee\"\n            \"README.md\"\n            \"images/fluffybunny1.jpg\"\n            \"src/lib/fake_litcoffee.litcoffee\"\n          ]\n        config.languages = buildMatchers languages\n\n        informationOnFiles = getInformationOnFiles(config)\n        assert.deepEqual(informationOnFiles, informationOnFilesFake)\n        return\n\n      it 'calculates file information with flattened request', () ->\n        informationOnFilesFake = require './fakes/informationOnFilesFlattened'\n        source = \"src/fake_coffee.coffee\"\n        config =\n          flatten: true\n          languages:languages\n          output: 'docs'\n          root: '/Project'\n          css: 'docco.css'\n          sources: [\n            \"src/fake_coffee.coffee\"\n            \"README.md\"\n            \"images/fluffybunny1.jpg\"\n            \"src/lib/fake_litcoffee.litcoffee\"\n          ]\n          flatten: true\n        informationOnFiles = getInformationOnFiles(config)\n        assert.deepEqual(informationOnFiles, informationOnFilesFake)\n        return\n      return"]}
\ No newline at end of file
diff --git a/test/unit-tests/unit-test-getInformationOnFiles.litcoffee b/test/unit-tests/unit-test-getInformationOnFiles.litcoffee
new file mode 100755
index 00000000..8310b14f
--- /dev/null
+++ b/test/unit-tests/unit-test-getInformationOnFiles.litcoffee
@@ -0,0 +1,48 @@
+# This tests if getDestinations is working correctly.
+
+    { assert, should } = require('chai'); should()
+    buildMatchers = require '../../src/buildMatchers'
+
+    describe 'docco getInformationOnFiles', () ->
+      { languages } = require('../../docco')
+      getInformationOnFiles = require('../../src/getInformationOnFiles')
+
+      it 'calculates file information with unflattened request', () ->
+        informationOnFilesFake = require './fakes/informationOnFilesUnFlattened'
+        source = "src/fake_coffee.coffee"
+        config =
+          output: 'docs'
+          root: '/Project'
+          css: 'docco.css'
+          sources: [
+            "src/fake_coffee.coffee"
+            "README.md"
+            "images/fluffybunny1.jpg"
+            "src/lib/fake_litcoffee.litcoffee"
+          ]
+        config.languages = buildMatchers languages
+
+        informationOnFiles = getInformationOnFiles(config)
+        assert.deepEqual(informationOnFiles, informationOnFilesFake)
+        return
+
+      it 'calculates file information with flattened request', () ->
+        informationOnFilesFake = require './fakes/informationOnFilesFlattened'
+        source = "src/fake_coffee.coffee"
+        config =
+          flatten: true
+          languages:languages
+          output: 'docs'
+          root: '/Project'
+          css: 'docco.css'
+          sources: [
+            "src/fake_coffee.coffee"
+            "README.md"
+            "images/fluffybunny1.jpg"
+            "src/lib/fake_litcoffee.litcoffee"
+          ]
+          flatten: true
+        informationOnFiles = getInformationOnFiles(config)
+        assert.deepEqual(informationOnFiles, informationOnFilesFake)
+        return
+      return
\ No newline at end of file
diff --git a/test/unit-tests/unit-test-getLanguage.js b/test/unit-tests/unit-test-getLanguage.js
new file mode 100755
index 00000000..10587fb9
--- /dev/null
+++ b/test/unit-tests/unit-test-getLanguage.js
@@ -0,0 +1,47 @@
+var getLanguage, languages, should;
+
+should = require('chai').should;
+
+should();
+
+getLanguage = require('../../src/getLanguage');
+
+languages = require('../../docco').languages;
+
+describe('docco getLanguage', function() {
+  it('gets the right language for the given a coffescript file.', function() {
+    var config, language, source;
+    source = "src/fake_coffee.coffee";
+    config = {
+      languages: languages
+    };
+    language = getLanguage(source, languages);
+    language.name.should.be.equal("coffeescript");
+    language.symbol.should.be.equal("#");
+  });
+  it('gets the right language for the given a markdown file.', function() {
+    var config, language, source;
+    source = "README.md";
+    config = {
+      languages: languages
+    };
+    language = getLanguage(source, languages);
+    language.name.should.be.equal("markdown");
+    language.symbol.should.be.equal("");
+    language.section.should.be.equal("#");
+    language.link.should.be.equal("!");
+    language.html.should.be["true"];
+  });
+  it('gets the right language for the given an image file.', function() {
+    var config, language, source;
+    source = "images/fluffybunny.jpg";
+    config = {
+      languages: languages
+    };
+    language = getLanguage(source, languages);
+    language.name.should.be.equal("image");
+    language.copy.should.be["true"];
+  });
+});
+
+//# sourceMappingURL=unit-test-getLanguage.js.map
diff --git a/test/unit-tests/unit-test-getLanguage.js.map b/test/unit-tests/unit-test-getLanguage.js.map
new file mode 100644
index 00000000..7f158742
--- /dev/null
+++ b/test/unit-tests/unit-test-getLanguage.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"unit-test-getLanguage.js","sources":["unit-test-getLanguage.litcoffee"],"names":[],"mappings":"AAEI,IAAA;;AAAE,SAAW,OAAA,CAAQ,MAAR;;AAAiB,MAAA,CAAA;;AAC9B,WAAA,GAAc,OAAA,CAAQ,uBAAR;;AACb,YAAa,OAAA,CAAQ,aAAR;;AAEd,QAAA,CAAS,mBAAT,EAA8B,SAAA;EAE5B,EAAA,CAAG,2DAAH,EAAgE,SAAA;AAC9D,QAAA;IAAA,MAAA,GAAS;IACT,MAAA,GAAS;MAAE,SAAA,EAAU,SAAZ;;IACT,QAAA,GAAW,WAAA,CAAY,MAAZ,EAAoB,SAApB;IACX,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAxB,CAA8B,cAA9B;IACA,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAA1B,CAAgC,GAAhC;EAL8D,CAAhE;EAQA,EAAA,CAAG,wDAAH,EAA6D,SAAA;AAC3D,QAAA;IAAA,MAAA,GAAS;IACT,MAAA,GAAS;MAAE,SAAA,EAAU,SAAZ;;IACT,QAAA,GAAW,WAAA,CAAY,MAAZ,EAAoB,SAApB;IACX,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAxB,CAA8B,UAA9B;IACA,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAA1B,CAAgC,EAAhC;IACA,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,KAA3B,CAAiC,GAAjC;IACA,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAxB,CAA8B,GAA9B;IACA,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAC,IAAD;EARoC,CAA7D;EAWA,EAAA,CAAG,sDAAH,EAA2D,SAAA;AACzD,QAAA;IAAA,MAAA,GAAS;IACT,MAAA,GAAS;MAAE,SAAA,EAAU,SAAZ;;IACT,QAAA,GAAW,WAAA,CAAY,MAAZ,EAAoB,SAApB;IACX,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAxB,CAA8B,OAA9B;IACA,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAC,IAAD;EALkC,CAA3D;AArB4B,CAA9B","sourcesContent":["# This tests if getLanguage is working correctly.\n\n    { should } = require('chai'); should()\n    getLanguage = require('../../src/getLanguage')\n    {languages} = require('../../docco')\n\n    describe 'docco getLanguage', () ->\n\n      it 'gets the right language for the given a coffescript file.', () ->\n        source = \"src/fake_coffee.coffee\"\n        config = { languages:languages }\n        language = getLanguage source, languages\n        language.name.should.be.equal(\"coffeescript\")\n        language.symbol.should.be.equal(\"#\")\n        return\n\n      it 'gets the right language for the given a markdown file.', () ->\n        source = \"README.md\"\n        config = { languages:languages }\n        language = getLanguage source, languages\n        language.name.should.be.equal(\"markdown\")\n        language.symbol.should.be.equal(\"\")\n        language.section.should.be.equal(\"#\")\n        language.link.should.be.equal(\"!\")\n        language.html.should.be.true\n        return\n\n      it 'gets the right language for the given an image file.', () ->\n        source = \"images/fluffybunny.jpg\"\n        config = { languages:languages }\n        language = getLanguage source, languages\n        language.name.should.be.equal(\"image\")\n        language.copy.should.be.true\n        return\n      return"]}
\ No newline at end of file
diff --git a/test/unit-tests/unit-test-getLanguage.litcoffee b/test/unit-tests/unit-test-getLanguage.litcoffee
new file mode 100755
index 00000000..6af4d4cc
--- /dev/null
+++ b/test/unit-tests/unit-test-getLanguage.litcoffee
@@ -0,0 +1,35 @@
+# This tests if getLanguage is working correctly.
+
+    { should } = require('chai'); should()
+    getLanguage = require('../../src/getLanguage')
+    {languages} = require('../../docco')
+
+    describe 'docco getLanguage', () ->
+
+      it 'gets the right language for the given a coffescript file.', () ->
+        source = "src/fake_coffee.coffee"
+        config = { languages:languages }
+        language = getLanguage source, languages
+        language.name.should.be.equal("coffeescript")
+        language.symbol.should.be.equal("#")
+        return
+
+      it 'gets the right language for the given a markdown file.', () ->
+        source = "README.md"
+        config = { languages:languages }
+        language = getLanguage source, languages
+        language.name.should.be.equal("markdown")
+        language.symbol.should.be.equal("")
+        language.section.should.be.equal("#")
+        language.link.should.be.equal("!")
+        language.html.should.be.true
+        return
+
+      it 'gets the right language for the given an image file.', () ->
+        source = "images/fluffybunny.jpg"
+        config = { languages:languages }
+        language = getLanguage source, languages
+        language.name.should.be.equal("image")
+        language.copy.should.be.true
+        return
+      return
\ No newline at end of file
diff --git a/test/unit-tests/unit-test-getOthers.js b/test/unit-tests/unit-test-getOthers.js
new file mode 100755
index 00000000..9f724357
--- /dev/null
+++ b/test/unit-tests/unit-test-getOthers.js
@@ -0,0 +1,96 @@
+var assert, getOthers, ref, should;
+
+ref = require('chai'), assert = ref.assert, should = ref.should;
+
+should();
+
+getOthers = require('../../src/getOthers');
+
+describe('docco getOthers', function() {
+  it('gets paths to other destination files: top level, unflattened.', function() {
+    var config, informationOnFiles, others;
+    informationOnFiles = require('./fakes/informationOnFilesUnFlattened');
+    config = {
+      sources: ['README.md', 'src/fake_coffee.coffee'],
+      flatten: false
+    };
+    others = getOthers('README.md', informationOnFiles, config);
+    assert.deepEqual(others, {
+      "README.html": {
+        "file": "README.md",
+        "image": false,
+        "link": "README.html"
+      },
+      "fake_coffee.html": {
+        "file": "src/fake_coffee.coffee",
+        "image": false,
+        "link": "src/fake_coffee.html"
+      }
+    });
+  });
+  it('gets paths to other destination files: 1 level down, unflattened.', function() {
+    var config, informationOnFiles, others;
+    informationOnFiles = require('./fakes/informationOnFilesUnFlattened');
+    config = {
+      sources: ['README.md', 'src/fake_coffee.coffee'],
+      flatten: false
+    };
+    others = getOthers('src/fake_coffee.coffee', informationOnFiles, config);
+    assert.deepEqual(others, {
+      "README.html": {
+        "file": "README.md",
+        "image": false,
+        "link": "../README.html"
+      },
+      "fake_coffee.html": {
+        "file": "src/fake_coffee.coffee",
+        "image": false,
+        "link": "fake_coffee.html"
+      }
+    });
+  });
+  it('gets paths to other destination files: top level, flattened.', function() {
+    var config, informationOnFiles, others;
+    informationOnFiles = require('./fakes/informationOnFilesFlattened');
+    config = {
+      sources: ['README.md', 'src/fake_coffee.coffee'],
+      flatten: true
+    };
+    others = getOthers('README.md', informationOnFiles, config);
+    assert.deepEqual(others, {
+      "README.html": {
+        "file": "README.md",
+        "image": false,
+        "link": "README.html"
+      },
+      "fake_coffee.html": {
+        "file": "src/fake_coffee.coffee",
+        "image": false,
+        "link": "fake_coffee.html"
+      }
+    });
+  });
+  it('gets paths to other destination files: 1 level down, flattened.', function() {
+    var config, informationOnFiles, others;
+    informationOnFiles = require('./fakes/informationOnFilesFlattened');
+    config = {
+      sources: ['README.md', 'images/fluffybunny1.jpg'],
+      flatten: true
+    };
+    others = getOthers('images/fluffybunny1.jpg', informationOnFiles, config);
+    assert.deepEqual(others, {
+      "README.html": {
+        "file": "README.md",
+        "image": false,
+        "link": "README.html"
+      },
+      "fluffybunny1.jpg": {
+        "file": "images/fluffybunny1.jpg",
+        "image": true,
+        "link": "images/fluffybunny1.jpg"
+      }
+    });
+  });
+});
+
+//# sourceMappingURL=unit-test-getOthers.js.map
diff --git a/test/unit-tests/unit-test-getOthers.js.map b/test/unit-tests/unit-test-getOthers.js.map
new file mode 100644
index 00000000..885d5ec0
--- /dev/null
+++ b/test/unit-tests/unit-test-getOthers.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"unit-test-getOthers.js","sources":["unit-test-getOthers.litcoffee"],"names":[],"mappings":"AAEI,IAAA;;AAAA,MAAqB,OAAA,CAAQ,MAAR,CAArB,EAAE,mBAAF,EAAU;;AAA4B,MAAA,CAAA;;AAEtC,SAAA,GAAY,OAAA,CAAQ,qBAAR;;AAEZ,QAAA,CAAS,iBAAT,EAA4B,SAAA;EAE1B,EAAA,CAAG,gEAAH,EAAqE,SAAA;AACnE,QAAA;IAAA,kBAAA,GAAqB,OAAA,CAAQ,uCAAR;IACrB,MAAA,GAAS;MACP,OAAA,EAAS,CACP,WADO,EAEP,wBAFO,CADF;MAKP,OAAA,EAAS,KALF;;IAOT,MAAA,GAAS,SAAA,CAAU,WAAV,EAAuB,kBAAvB,EAA2C,MAA3C;IACT,MAAM,CAAC,SAAP,CAAiB,MAAjB,EAAyB;MACvB,aAAA,EAAe;QACb,MAAA,EAAQ,WADK;QAEb,OAAA,EAAS,KAFI;QAGb,MAAA,EAAQ,aAHK;OADQ;MAMvB,kBAAA,EAAoB;QAClB,MAAA,EAAQ,wBADU;QAElB,OAAA,EAAS,KAFS;QAGlB,MAAA,EAAQ,sBAHU;OANG;KAAzB;EAVmE,CAArE;EAwBA,EAAA,CAAG,mEAAH,EAAwE,SAAA;AACtE,QAAA;IAAA,kBAAA,GAAqB,OAAA,CAAQ,uCAAR;IACrB,MAAA,GAAS;MACP,OAAA,EAAS,CACP,WADO,EAEP,wBAFO,CADF;MAKP,OAAA,EAAS,KALF;;IAOT,MAAA,GAAS,SAAA,CAAU,wBAAV,EAAoC,kBAApC,EAAwD,MAAxD;IACT,MAAM,CAAC,SAAP,CAAiB,MAAjB,EAAyB;MACvB,aAAA,EAAe;QACb,MAAA,EAAQ,WADK;QAEb,OAAA,EAAS,KAFI;QAGb,MAAA,EAAQ,gBAHK;OADQ;MAMvB,kBAAA,EAAoB;QAClB,MAAA,EAAQ,wBADU;QAElB,OAAA,EAAS,KAFS;QAGlB,MAAA,EAAQ,kBAHU;OANG;KAAzB;EAVsE,CAAxE;EAwBA,EAAA,CAAG,8DAAH,EAAmE,SAAA;AACjE,QAAA;IAAA,kBAAA,GAAqB,OAAA,CAAQ,qCAAR;IACrB,MAAA,GAAS;MACP,OAAA,EAAS,CACP,WADO,EAEP,wBAFO,CADF;MAKP,OAAA,EAAS,IALF;;IAOT,MAAA,GAAS,SAAA,CAAU,WAAV,EAAuB,kBAAvB,EAA2C,MAA3C;IACT,MAAM,CAAC,SAAP,CAAiB,MAAjB,EAAyB;MACvB,aAAA,EAAe;QACb,MAAA,EAAQ,WADK;QAEb,OAAA,EAAS,KAFI;QAGb,MAAA,EAAQ,aAHK;OADQ;MAMvB,kBAAA,EAAoB;QAClB,MAAA,EAAQ,wBADU;QAElB,OAAA,EAAS,KAFS;QAGlB,MAAA,EAAQ,kBAHU;OANG;KAAzB;EAViE,CAAnE;EAwBA,EAAA,CAAG,iEAAH,EAAsE,SAAA;AACpE,QAAA;IAAA,kBAAA,GAAqB,OAAA,CAAQ,qCAAR;IACrB,MAAA,GAAS;MACP,OAAA,EAAS,CACP,WADO,EAEP,yBAFO,CADF;MAKP,OAAA,EAAS,IALF;;IAOT,MAAA,GAAS,SAAA,CAAU,yBAAV,EAAqC,kBAArC,EAAyD,MAAzD;IACT,MAAM,CAAC,SAAP,CAAiB,MAAjB,EAAyB;MACvB,aAAA,EAAe;QACb,MAAA,EAAQ,WADK;QAEb,OAAA,EAAS,KAFI;QAGb,MAAA,EAAQ,aAHK;OADQ;MAMvB,kBAAA,EAAoB;QAClB,MAAA,EAAQ,yBADU;QAElB,OAAA,EAAS,IAFS;QAGlB,MAAA,EAAQ,yBAHU;OANG;KAAzB;EAVoE,CAAtE;AA1E0B,CAA5B","sourcesContent":["# This tests if getLanguage is working correctly.\n\n    { assert, should } = require('chai'); should()\n\n    getOthers = require '../../src/getOthers'\n\n    describe 'docco getOthers', () ->\n\n      it 'gets paths to other destination files: top level, unflattened.', () ->\n        informationOnFiles = require './fakes/informationOnFilesUnFlattened'\n        config = {\n          sources: [\n            'README.md'\n            'src/fake_coffee.coffee'\n          ]\n          flatten: false\n        }\n        others = getOthers('README.md', informationOnFiles, config)\n        assert.deepEqual(others, {\n          \"README.html\": {\n            \"file\": \"README.md\"\n            \"image\": false\n            \"link\": \"README.html\"\n          }\n          \"fake_coffee.html\": {\n            \"file\": \"src/fake_coffee.coffee\"\n            \"image\": false\n            \"link\": \"src/fake_coffee.html\"\n          }\n        })\n        return\n\n      it 'gets paths to other destination files: 1 level down, unflattened.', () ->\n        informationOnFiles = require './fakes/informationOnFilesUnFlattened'\n        config = {\n          sources: [\n            'README.md'\n            'src/fake_coffee.coffee'\n          ]\n          flatten: false\n        }\n        others = getOthers('src/fake_coffee.coffee', informationOnFiles, config)\n        assert.deepEqual(others, {\n          \"README.html\": {\n            \"file\": \"README.md\"\n            \"image\": false\n            \"link\": \"../README.html\"\n          }\n          \"fake_coffee.html\": {\n            \"file\": \"src/fake_coffee.coffee\"\n            \"image\": false\n            \"link\": \"fake_coffee.html\"\n          }\n        })\n        return\n\n      it 'gets paths to other destination files: top level, flattened.', () ->\n        informationOnFiles = require './fakes/informationOnFilesFlattened'\n        config = {\n          sources: [\n            'README.md'\n            'src/fake_coffee.coffee'\n          ]\n          flatten: true\n        }\n        others = getOthers('README.md', informationOnFiles, config)\n        assert.deepEqual(others, {\n          \"README.html\": {\n            \"file\": \"README.md\"\n            \"image\": false\n            \"link\": \"README.html\"\n          }\n          \"fake_coffee.html\": {\n            \"file\": \"src/fake_coffee.coffee\"\n            \"image\": false\n            \"link\": \"fake_coffee.html\"\n          }\n        })\n        return\n\n      it 'gets paths to other destination files: 1 level down, flattened.', () ->\n        informationOnFiles = require './fakes/informationOnFilesFlattened'\n        config = {\n          sources: [\n            'README.md'\n            'images/fluffybunny1.jpg'\n          ]\n          flatten: true\n        }\n        others = getOthers('images/fluffybunny1.jpg', informationOnFiles, config)\n        assert.deepEqual(others, {\n          \"README.html\": {\n            \"file\": \"README.md\"\n            \"image\": false\n            \"link\": \"README.html\"\n          }\n          \"fluffybunny1.jpg\": {\n            \"file\": \"images/fluffybunny1.jpg\"\n            \"image\": true\n            \"link\": \"images/fluffybunny1.jpg\"\n          }\n        })\n        return\n      return"]}
\ No newline at end of file
diff --git a/test/unit-tests/unit-test-getOthers.litcoffee b/test/unit-tests/unit-test-getOthers.litcoffee
new file mode 100755
index 00000000..ad598358
--- /dev/null
+++ b/test/unit-tests/unit-test-getOthers.litcoffee
@@ -0,0 +1,104 @@
+# This tests if getLanguage is working correctly.
+
+    { assert, should } = require('chai'); should()
+
+    getOthers = require '../../src/getOthers'
+
+    describe 'docco getOthers', () ->
+
+      it 'gets paths to other destination files: top level, unflattened.', () ->
+        informationOnFiles = require './fakes/informationOnFilesUnFlattened'
+        config = {
+          sources: [
+            'README.md'
+            'src/fake_coffee.coffee'
+          ]
+          flatten: false
+        }
+        others = getOthers('README.md', informationOnFiles, config)
+        assert.deepEqual(others, {
+          "README.html": {
+            "file": "README.md"
+            "image": false
+            "link": "README.html"
+          }
+          "fake_coffee.html": {
+            "file": "src/fake_coffee.coffee"
+            "image": false
+            "link": "src/fake_coffee.html"
+          }
+        })
+        return
+
+      it 'gets paths to other destination files: 1 level down, unflattened.', () ->
+        informationOnFiles = require './fakes/informationOnFilesUnFlattened'
+        config = {
+          sources: [
+            'README.md'
+            'src/fake_coffee.coffee'
+          ]
+          flatten: false
+        }
+        others = getOthers('src/fake_coffee.coffee', informationOnFiles, config)
+        assert.deepEqual(others, {
+          "README.html": {
+            "file": "README.md"
+            "image": false
+            "link": "../README.html"
+          }
+          "fake_coffee.html": {
+            "file": "src/fake_coffee.coffee"
+            "image": false
+            "link": "fake_coffee.html"
+          }
+        })
+        return
+
+      it 'gets paths to other destination files: top level, flattened.', () ->
+        informationOnFiles = require './fakes/informationOnFilesFlattened'
+        config = {
+          sources: [
+            'README.md'
+            'src/fake_coffee.coffee'
+          ]
+          flatten: true
+        }
+        others = getOthers('README.md', informationOnFiles, config)
+        assert.deepEqual(others, {
+          "README.html": {
+            "file": "README.md"
+            "image": false
+            "link": "README.html"
+          }
+          "fake_coffee.html": {
+            "file": "src/fake_coffee.coffee"
+            "image": false
+            "link": "fake_coffee.html"
+          }
+        })
+        return
+
+      it 'gets paths to other destination files: 1 level down, flattened.', () ->
+        informationOnFiles = require './fakes/informationOnFilesFlattened'
+        config = {
+          sources: [
+            'README.md'
+            'images/fluffybunny1.jpg'
+          ]
+          flatten: true
+        }
+        others = getOthers('images/fluffybunny1.jpg', informationOnFiles, config)
+        assert.deepEqual(others, {
+          "README.html": {
+            "file": "README.md"
+            "image": false
+            "link": "README.html"
+          }
+          "fluffybunny1.jpg": {
+            "file": "images/fluffybunny1.jpg"
+            "image": true
+            "link": "images/fluffybunny1.jpg"
+          }
+        })
+        return
+      return
\ No newline at end of file
diff --git a/test/unit-tests/unit-test-getRelativePath.js b/test/unit-tests/unit-test-getRelativePath.js
new file mode 100755
index 00000000..9f79940b
--- /dev/null
+++ b/test/unit-tests/unit-test-getRelativePath.js
@@ -0,0 +1,37 @@
+var getRelativePath, should;
+
+should = require('chai').should;
+
+should();
+
+getRelativePath = require('../../src/getRelativePath');
+
+describe('docco getRelativePath', function() {
+  it('gets the path to a file in the same directory.', function() {
+    var cssPath;
+    cssPath = getRelativePath('./file.css', './file.html', 'file.html');
+    cssPath.should.be.equal('file.html');
+  });
+  it('gets the path to a file in directory above.', function() {
+    var cssPath;
+    cssPath = getRelativePath('file.css', 'docs/file.html', 'file.html');
+    cssPath.should.be.equal('docs/file.html');
+  });
+  it('gets the path to a file in two directories above.', function() {
+    var cssPath;
+    cssPath = getRelativePath('file.css', 'docs/src/lib/file.html', 'file.html');
+    cssPath.should.be.equal('docs/src/lib/file.html');
+  });
+  it('gets the path to a file in parallel directory.', function() {
+    var cssPath;
+    cssPath = getRelativePath('docs/file.css', 'src/file.html', 'file.html');
+    cssPath.should.be.equal('../src/file.html');
+  });
+  it('gets the path to the same file.', function() {
+    var cssPath;
+    cssPath = getRelativePath('docs/file.html', 'docs/file.html', 'file.html');
+    cssPath.should.be.equal('file.html');
+  });
+});
+
+//# sourceMappingURL=unit-test-getRelativePath.js.map
diff --git a/test/unit-tests/unit-test-getRelativePath.js.map b/test/unit-tests/unit-test-getRelativePath.js.map
new file mode 100644
index 00000000..38892bfd
--- /dev/null
+++ b/test/unit-tests/unit-test-getRelativePath.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"unit-test-getRelativePath.js","sources":["unit-test-getRelativePath.litcoffee"],"names":[],"mappings":"AAEI,IAAA;;AAAE,SAAW,OAAA,CAAQ,MAAR;;AAAiB,MAAA,CAAA;;AAC9B,eAAA,GAAkB,OAAA,CAAQ,2BAAR;;AAElB,QAAA,CAAS,uBAAT,EAAkC,SAAA;EAEhC,EAAA,CAAG,gDAAH,EAAqD,SAAA;AACnD,QAAA;IAAA,OAAA,GAAU,eAAA,CAAgB,YAAhB,EAA8B,aAA9B,EAA6C,WAA7C;IACV,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,KAAlB,CAAwB,WAAxB;EAFmD,CAArD;EAKA,EAAA,CAAG,6CAAH,EAAkD,SAAA;AAChD,QAAA;IAAA,OAAA,GAAU,eAAA,CAAgB,UAAhB,EAA4B,gBAA5B,EAA8C,WAA9C;IACV,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,KAAlB,CAAwB,gBAAxB;EAFgD,CAAlD;EAKA,EAAA,CAAG,mDAAH,EAAwD,SAAA;AACtD,QAAA;IAAA,OAAA,GAAU,eAAA,CAAgB,UAAhB,EAA4B,wBAA5B,EAAsD,WAAtD;IACV,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,KAAlB,CAAwB,wBAAxB;EAFsD,CAAxD;EAKA,EAAA,CAAG,gDAAH,EAAqD,SAAA;AACnD,QAAA;IAAA,OAAA,GAAU,eAAA,CAAgB,eAAhB,EAAiC,eAAjC,EAAkD,WAAlD;IACV,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,KAAlB,CAAwB,kBAAxB;EAFmD,CAArD;EAKA,EAAA,CAAG,iCAAH,EAAsC,SAAA;AACpC,QAAA;IAAA,OAAA,GAAU,eAAA,CAAgB,gBAAhB,EAAkC,gBAAlC,EAAoD,WAApD;IACV,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,KAAlB,CAAwB,WAAxB;EAFoC,CAAtC;AAtBgC,CAAlC","sourcesContent":["# This tests if getLanguage is working correctly.\n\n    { should } = require('chai'); should()\n    getRelativePath = require('../../src/getRelativePath')\n\n    describe 'docco getRelativePath', () ->\n\n      it 'gets the path to a file in the same directory.', () ->\n        cssPath = getRelativePath('./file.css', './file.html', 'file.html' )\n        cssPath.should.be.equal('file.html')\n        return\n\n      it 'gets the path to a file in directory above.', () ->\n        cssPath = getRelativePath('file.css', 'docs/file.html', 'file.html' )\n        cssPath.should.be.equal('docs/file.html')\n        return\n\n      it 'gets the path to a file in two directories above.', () ->\n        cssPath = getRelativePath('file.css', 'docs/src/lib/file.html', 'file.html')\n        cssPath.should.be.equal('docs/src/lib/file.html')\n        return\n\n      it 'gets the path to a file in parallel directory.', () ->\n        cssPath = getRelativePath('docs/file.css', 'src/file.html' ,'file.html')\n        cssPath.should.be.equal('../src/file.html')\n        return\n\n      it 'gets the path to the same file.', () ->\n        cssPath = getRelativePath('docs/file.html', 'docs/file.html', 'file.html')\n        cssPath.should.be.equal('file.html')\n        return\n      return\n"]}
\ No newline at end of file
diff --git a/test/unit-tests/unit-test-getRelativePath.litcoffee b/test/unit-tests/unit-test-getRelativePath.litcoffee
new file mode 100755
index 00000000..d2fd31da
--- /dev/null
+++ b/test/unit-tests/unit-test-getRelativePath.litcoffee
@@ -0,0 +1,32 @@
+# This tests if getLanguage is working correctly.
+
+    { should } = require('chai'); should()
+    getRelativePath = require('../../src/getRelativePath')
+
+    describe 'docco getRelativePath', () ->
+
+      it 'gets the path to a file in the same directory.', () ->
+        cssPath = getRelativePath('./file.css', './file.html', 'file.html' )
+        cssPath.should.be.equal('file.html')
+        return
+
+      it 'gets the path to a file in directory above.', () ->
+        cssPath = getRelativePath('file.css', 'docs/file.html', 'file.html' )
+        cssPath.should.be.equal('docs/file.html')
+        return
+
+      it 'gets the path to a file in two directories above.', () ->
+        cssPath = getRelativePath('file.css', 'docs/src/lib/file.html', 'file.html')
+        cssPath.should.be.equal('docs/src/lib/file.html')
+        return
+
+      it 'gets the path to a file in parallel directory.', () ->
+        cssPath = getRelativePath('docs/file.css', 'src/file.html' ,'file.html')
+        cssPath.should.be.equal('../src/file.html')
+        return
+
+      it 'gets the path to the same file.', () ->
+        cssPath = getRelativePath('docs/file.html', 'docs/file.html', 'file.html')
+        cssPath.should.be.equal('file.html')
+        return
+      return
diff --git a/test/unit-tests/unit-test-parse.js b/test/unit-tests/unit-test-parse.js
new file mode 100755
index 00000000..8324c4dd
--- /dev/null
+++ b/test/unit-tests/unit-test-parse.js
@@ -0,0 +1,49 @@
+var assert, buildMatchers, fs, parse, ref, should;
+
+ref = require('chai'), assert = ref.assert, should = ref.should;
+
+should();
+
+fs = require('fs-extra');
+
+parse = require('../../src/parse');
+
+buildMatchers = require('../../src/buildMatchers');
+
+describe('docco parse', function() {
+  it('parse a file into sections of code and text', function() {
+    var code, config, languages, sections, source;
+    code = fs.readFileSync(__dirname + '/fakes/fake_coffee.coffee').toString();
+    source = 'fakes/fake_coffee.coffee';
+    config = {
+      layout: 'parallel',
+      output: 'docs',
+      template: null,
+      css: null,
+      extension: null,
+      languages: {},
+      marked: null,
+      setup: '.docco.json',
+      help: false,
+      flatten: false
+    };
+    languages = [
+      {
+        "name": "coffeescript",
+        "symbol": "#",
+        "commentMatcher": {},
+        "commentFilter": {}
+      }
+    ];
+    languages = buildMatchers(languages);
+    sections = parse(source, languages[0], code, config);
+    sections[0].docsText.should.be.equal("Assignment:\n");
+    sections[0].codeText.should.be.equal("number   = 42\nopposite = true\n\n");
+    sections[1].docsText.should.be.equal("Conditions:\n");
+    sections[1].codeText.should.be.equal("number = -42 if opposite\n\n");
+    sections[2].docsText.should.be.equal("Functions:\n");
+    sections[2].codeText.should.be.equal("square = (x) -> x * x\n\n");
+  });
+});
+
+//# sourceMappingURL=unit-test-parse.js.map
diff --git a/test/unit-tests/unit-test-parse.js.map b/test/unit-tests/unit-test-parse.js.map
new file mode 100644
index 00000000..5b691976
--- /dev/null
+++ b/test/unit-tests/unit-test-parse.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"unit-test-parse.js","sources":["unit-test-parse.litcoffee"],"names":[],"mappings":"AAEI,IAAA;;AAAA,MAAqB,OAAA,CAAQ,MAAR,CAArB,EAAE,mBAAF,EAAU;;AAA4B,MAAA,CAAA;;AACtC,EAAA,GAAK,OAAA,CAAQ,UAAR;;AACL,KAAA,GAAQ,OAAA,CAAQ,iBAAR;;AACR,aAAA,GAAgB,OAAA,CAAQ,yBAAR;;AAEhB,QAAA,CAAS,aAAT,EAAwB,SAAA;EAEtB,EAAA,CAAG,6CAAH,EAAkD,SAAA;AAEhD,QAAA;IAAA,IAAA,GAAO,EAAE,CAAC,YAAH,CAAgB,SAAA,GAAU,2BAA1B,CAAsD,CAAC,QAAvD,CAAA;IACP,MAAA,GAAS;IACT,MAAA,GACE;MAAA,MAAA,EAAY,UAAZ;MACA,MAAA,EAAY,MADZ;MAEA,QAAA,EAAY,IAFZ;MAGA,GAAA,EAAY,IAHZ;MAIA,SAAA,EAAY,IAJZ;MAKA,SAAA,EAAY,EALZ;MAMA,MAAA,EAAY,IANZ;MAOA,KAAA,EAAY,aAPZ;MAQA,IAAA,EAAW,KARX;MASA,OAAA,EAAS,KATT;;IAUF,SAAA,GAAY;MAAC;QAAC,MAAA,EAAO,cAAR;QAAuB,QAAA,EAAS,GAAhC;QAAoC,gBAAA,EAAiB,EAArD;QAAwD,eAAA,EAAgB,EAAxE;OAAD;;IACZ,SAAA,GAAY,aAAA,CAAc,SAAd;IAEZ,QAAA,GAAW,KAAA,CAAM,MAAN,EAAc,SAAU,CAAA,CAAA,CAAxB,EAA4B,IAA5B,EAAkC,MAAlC;IAEX,QAAS,CAAA,CAAA,CAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAA/B,CAAqC,eAArC;IACA,QAAS,CAAA,CAAA,CAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAA/B,CAAqC,oCAArC;IAEA,QAAS,CAAA,CAAA,CAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAA/B,CAAqC,eAArC;IACA,QAAS,CAAA,CAAA,CAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAA/B,CAAqC,8BAArC;IAEA,QAAS,CAAA,CAAA,CAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAA/B,CAAqC,cAArC;IACA,QAAS,CAAA,CAAA,CAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAA/B,CAAqC,2BAArC;EA3BgD,CAAlD;AAFsB,CAAxB","sourcesContent":["# This tests if parse is working correctly.\n\n    { assert, should } = require('chai'); should()\n    fs = require 'fs-extra'\n    parse = require '../../src/parse'\n    buildMatchers = require '../../src/buildMatchers'\n\n    describe 'docco parse', () ->\n\n      it 'parse a file into sections of code and text', () ->\n\n        code = fs.readFileSync(__dirname+'/fakes/fake_coffee.coffee').toString()\n        source = 'fakes/fake_coffee.coffee'\n        config =\n          layout:     'parallel'\n          output:     'docs'\n          template:   null\n          css:        null\n          extension:  null\n          languages:  {}\n          marked:     null\n          setup:      '.docco.json'\n          help:      false\n          flatten: false\n        languages = [{\"name\":\"coffeescript\",\"symbol\":\"#\",\"commentMatcher\":{},\"commentFilter\":{}}]\n        languages = buildMatchers languages\n\n        sections = parse(source, languages[0], code, config)\n\n        sections[0].docsText.should.be.equal(\"Assignment:\\n\")\n        sections[0].codeText.should.be.equal(\"number   = 42\\nopposite = true\\n\\n\")\n\n        sections[1].docsText.should.be.equal(\"Conditions:\\n\")\n        sections[1].codeText.should.be.equal(\"number = -42 if opposite\\n\\n\")\n\n        sections[2].docsText.should.be.equal(\"Functions:\\n\")\n        sections[2].codeText.should.be.equal(\"square = (x) -> x * x\\n\\n\")\n        return\n      return"]}
\ No newline at end of file
diff --git a/test/unit-tests/unit-test-parse.litcoffee b/test/unit-tests/unit-test-parse.litcoffee
new file mode 100755
index 00000000..4c61b1d3
--- /dev/null
+++ b/test/unit-tests/unit-test-parse.litcoffee
@@ -0,0 +1,39 @@
+# This tests if parse is working correctly.
+
+    { assert, should } = require('chai'); should()
+    fs = require 'fs-extra'
+    parse = require '../../src/parse'
+    buildMatchers = require '../../src/buildMatchers'
+
+    describe 'docco parse', () ->
+
+      it 'parse a file into sections of code and text', () ->
+
+        code = fs.readFileSync(__dirname+'/fakes/fake_coffee.coffee').toString()
+        source = 'fakes/fake_coffee.coffee'
+        config =
+          layout:     'parallel'
+          output:     'docs'
+          template:   null
+          css:        null
+          extension:  null
+          languages:  {}
+          marked:     null
+          setup:      '.docco.json'
+          help:      false
+          flatten: false
+        languages = [{"name":"coffeescript","symbol":"#","commentMatcher":{},"commentFilter":{}}]
+        languages = buildMatchers languages
+
+        sections = parse(source, languages[0], code, config)
+
+        sections[0].docsText.should.be.equal("Assignment:\n")
+        sections[0].codeText.should.be.equal("number   = 42\nopposite = true\n\n")
+
+        sections[1].docsText.should.be.equal("Conditions:\n")
+        sections[1].codeText.should.be.equal("number = -42 if opposite\n\n")
+
+        sections[2].docsText.should.be.equal("Functions:\n")
+        sections[2].codeText.should.be.equal("square = (x) -> x * x\n\n")
+        return
+      return
\ No newline at end of file
diff --git a/test/unit-tests/unit-test-run.js b/test/unit-tests/unit-test-run.js
new file mode 100755
index 00000000..1fc25337
--- /dev/null
+++ b/test/unit-tests/unit-test-run.js
@@ -0,0 +1,142 @@
+var assert, fixForMatch, mockery, optionTimes, ref, run, should, times;
+
+ref = require('chai'), assert = ref.assert, should = ref.should;
+
+should();
+
+fixForMatch = require('./utils/fixForMatch');
+
+mockery = require('mockery');
+
+mockery.enable({
+  useCleanCache: true,
+  warnOnReplace: false,
+  warnOnUnregistered: false
+});
+
+times = 0;
+
+mockery.registerMock('fs-extra', {
+  existsSync: function(file) {},
+  readFileSync: function(file) {
+    if (times === 0) {
+      times++;
+      return '{ "coffeescript": {"name":"coffeescript","symbol":"#"},' + ' ".markdown": {"name": "markdown", "symbol": "", "section": "#", "link": "!", "html": true},' + ' ".md": {"name": "markdown", "symbol": "", "section": "#", "link": "!", "html": true}}';
+    } else {
+      return '{  "version": "1.0.0" }';
+    }
+  }
+});
+
+mockery.registerMock('./src/document', function(config) {
+  var fakeConfig;
+  fakeConfig = require('./fakes/fake-config');
+  fakeConfig = fixForMatch(fakeConfig, ['path', 'pathdir', 'root']);
+  config = fixForMatch(config, ['path', 'pathdir', 'root']);
+  return assert.deepEqual(config, fakeConfig);
+});
+
+mockery.registerMock('./src/configure', function(commander, defaults, languages) {
+  commander.name.should.be.equal('docco');
+  assert.deepEqual(languages, {
+    ".markdown": {
+      "html": true,
+      "link": "!",
+      "name": "markdown",
+      "section": "#",
+      "symbol": ""
+    },
+    ".md": {
+      "html": true,
+      "link": "!",
+      "name": "markdown",
+      "section": "#",
+      "symbol": ""
+    },
+    "coffeescript": {
+      "name": "coffeescript",
+      "symbol": "#"
+    }
+  });
+  assert.deepEqual(defaults, {
+    "layout": "sidebyside",
+    "output": "docs",
+    "template": null,
+    "css": null,
+    "extension": null,
+    "languages": {},
+    "marked": null,
+    "setup": ".docco.json",
+    "help": false,
+    "flatten": false
+  });
+  defaults.sources = ["README.md", "images/fluffybunny1.jpg"];
+  defaults.languages = languages;
+  defaults.css = 'docco.css';
+  defaults.extension = '.md';
+  return defaults;
+});
+
+optionTimes = 0;
+
+mockery.registerMock('commander', {
+  version: function(version) {
+    version.should.be.equal('1.0.0');
+    return this;
+  },
+  usage: function(usage) {
+    usage.should.be.equal('[options] [file]');
+    return this;
+  },
+  option: function(option, description, value) {
+    optionTimes++;
+    switch (optionTimes) {
+      case 1:
+        option.should.be.equal('-c, --css [file]');
+        break;
+      case 2:
+        option.should.be.equal('-e, --extension [ext]');
+        break;
+      case 3:
+        option.should.be.equal('-f, --flatten');
+        break;
+      case 4:
+        option.should.be.equal('-g, --languages [file]');
+        break;
+      case 5:
+        option.should.be.equal('-l, --layout [name]');
+        break;
+      case 6:
+        option.should.be.equal('-m, --marked [file]');
+        break;
+      case 7:
+        option.should.be.equal('-o, --output [path]');
+        break;
+      case 8:
+        option.should.be.equal('-s, --setup [file]');
+        break;
+      case 9:
+        option.should.be.equal('-t, --template [file]');
+    }
+    return this;
+  },
+  parse: function(args) {
+    assert.deepEqual(args, ["--flatten"]);
+    return this;
+  },
+  name: function(name) {
+    name.should.be.equal('name');
+    return this;
+  }
+});
+
+run = require('../../docco').run;
+
+describe('docco', function() {
+  it('handles parameters correctly', function() {
+    return run(["--flatten"]);
+  });
+  return mockery.deregisterMock('./src/document');
+});
+
+//# sourceMappingURL=unit-test-run.js.map
diff --git a/test/unit-tests/unit-test-run.js.map b/test/unit-tests/unit-test-run.js.map
new file mode 100644
index 00000000..3eed380e
--- /dev/null
+++ b/test/unit-tests/unit-test-run.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"unit-test-run.js","sources":["unit-test-run.litcoffee"],"names":[],"mappings":"AAEI,IAAA;;AAAA,MAAqB,OAAA,CAAQ,MAAR,CAArB,EAAE,mBAAF,EAAU;;AAA4B,MAAA,CAAA;;AACtC,WAAA,GAAc,OAAA,CAAQ,qBAAR;;AACd,OAAA,GAAU,OAAA,CAAQ,SAAR;;AACV,OAAO,CAAC,MAAR,CAAe;EACb,aAAA,EAAe,IADF;EAEb,aAAA,EAAe,KAFF;EAGb,kBAAA,EAAoB,KAHP;CAAf;;AAKA,KAAA,GAAQ;;AACR,OAAO,CAAC,YAAR,CAAqB,UAArB,EAAiC;EAC/B,UAAA,EAAY,SAAC,IAAD,GAAA,CADmB;EAG/B,YAAA,EAAc,SAAC,IAAD;IACZ,IAAG,KAAA,KAAS,CAAZ;MACE,KAAA;AACA,aAAO,yDAAA,GACH,8FADG,GAEH,yFAJN;KAAA,MAAA;AAME,aAAO,0BANT;;EADY,CAHiB;CAAjC;;AAaA,OAAO,CAAC,YAAR,CAAqB,gBAArB,EAAuC,SAAC,MAAD;AACrC,MAAA;EAAA,UAAA,GAAa,OAAA,CAAQ,qBAAR;EACb,UAAA,GAAa,WAAA,CAAY,UAAZ,EAAwB,CAAC,MAAD,EAAS,SAAT,EAAmB,MAAnB,CAAxB;EACb,MAAA,GAAS,WAAA,CAAY,MAAZ,EAAoB,CAAC,MAAD,EAAS,SAAT,EAAmB,MAAnB,CAApB;SAET,MAAM,CAAC,SAAP,CAAiB,MAAjB,EAAyB,UAAzB;AALqC,CAAvC;;AAOA,OAAO,CAAC,YAAR,CAAqB,iBAArB,EAAwC,SAAC,SAAD,EAAY,QAAZ,EAAsB,SAAtB;EACtC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAzB,CAA+B,OAA/B;EACA,MAAM,CAAC,SAAP,CAAiB,SAAjB,EAA4B;IACxB,WAAA,EAAa;MACX,MAAA,EAAQ,IADG;MAEX,MAAA,EAAQ,GAFG;MAGX,MAAA,EAAQ,UAHG;MAIX,SAAA,EAAW,GAJA;MAKX,QAAA,EAAU,EALC;KADW;IAQxB,KAAA,EAAO;MACL,MAAA,EAAQ,IADH;MAEL,MAAA,EAAQ,GAFH;MAGL,MAAA,EAAQ,UAHH;MAIL,SAAA,EAAW,GAJN;MAKL,QAAA,EAAU,EALL;KARiB;IAexB,cAAA,EAAgB;MACd,MAAA,EAAQ,cADM;MAEd,QAAA,EAAU,GAFI;KAfQ;GAA5B;EAoBA,MAAM,CAAC,SAAP,CAAiB,QAAjB,EAA2B;IACzB,QAAA,EAAU,YADe;IAEzB,QAAA,EAAU,MAFe;IAGzB,UAAA,EAAY,IAHa;IAIzB,KAAA,EAAO,IAJkB;IAKzB,WAAA,EAAa,IALY;IAMzB,WAAA,EAAa,EANY;IAOzB,QAAA,EAAU,IAPe;IAQzB,OAAA,EAAS,aARgB;IASzB,MAAA,EAAQ,KATiB;IAUzB,SAAA,EAAW,KAVc;GAA3B;EAYA,QAAQ,CAAC,OAAT,GAAmB,CACjB,WADiB,EAEjB,yBAFiB;EAInB,QAAQ,CAAC,SAAT,GAAqB;EACrB,QAAQ,CAAC,GAAT,GAAe;EACf,QAAQ,CAAC,SAAT,GAAqB;AACrB,SAAO;AAzC+B,CAAxC;;AA2CA,WAAA,GAAc;;AACd,OAAO,CAAC,YAAR,CAAqB,WAArB,EAAkC;EAChC,OAAA,EAAS,SAAC,OAAD;IACP,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,KAAlB,CAAwB,OAAxB;AACA,WAAO;EAFA,CADuB;EAIhC,KAAA,EAAO,SAAC,KAAD;IACL,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,KAAhB,CAAsB,kBAAtB;AACA,WAAO;EAFF,CAJyB;EAOhC,MAAA,EAAQ,SAAC,MAAD,EAAS,WAAT,EAAsB,KAAtB;IACN,WAAA;AACA,YAAO,WAAP;AAAA,WACO,CADP;QACc,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAjB,CAAuB,kBAAvB;AAAP;AADP,WAEO,CAFP;QAEc,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAjB,CAAuB,uBAAvB;AAAP;AAFP,WAGO,CAHP;QAGc,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAjB,CAAuB,eAAvB;AAAP;AAHP,WAIO,CAJP;QAIc,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAjB,CAAuB,wBAAvB;AAAP;AAJP,WAKO,CALP;QAKc,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAjB,CAAuB,qBAAvB;AAAP;AALP,WAMO,CANP;QAMc,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAjB,CAAuB,qBAAvB;AAAP;AANP,WAOO,CAPP;QAOc,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAjB,CAAuB,qBAAvB;AAAP;AAPP,WAQO,CARP;QAQc,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAjB,CAAuB,oBAAvB;AAAP;AARP,WASO,CATP;QASc,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAjB,CAAuB,uBAAvB;AATd;AAUA,WAAO;EAZD,CAPwB;EAoBhC,KAAA,EAAO,SAAC,IAAD;IACL,MAAM,CAAC,SAAP,CAAiB,IAAjB,EAAuB,CAAC,WAAD,CAAvB;AACA,WAAO;EAFF,CApByB;EAuBhC,IAAA,EAAM,SAAC,IAAD;IACJ,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAf,CAAqB,MAArB;AACA,WAAO;EAFH,CAvB0B;CAAlC;;AA2BE,MAAQ,OAAA,CAAQ,aAAR;;AAEV,QAAA,CAAS,OAAT,EAAkB,SAAA;EAChB,EAAA,CAAG,8BAAH,EAAmC,SAAA;WACjC,GAAA,CAAI,CAAC,WAAD,CAAJ;EADiC,CAAnC;SAGA,OAAO,CAAC,cAAR,CAAuB,gBAAvB;AAJgB,CAAlB","sourcesContent":["# This tests if run is working correctly.\n\n    { assert, should } = require('chai'); should()\n    fixForMatch = require './utils/fixForMatch'\n    mockery = require('mockery')\n    mockery.enable({\n      useCleanCache: true,\n      warnOnReplace: false,\n      warnOnUnregistered: false\n    })\n    times = 0\n    mockery.registerMock('fs-extra', {\n      existsSync: (file) ->\n\n      readFileSync: (file) ->\n        if times is 0\n          times++\n          return '{ \"coffeescript\": {\"name\":\"coffeescript\",\"symbol\":\"#\"},' +\n              ' \".markdown\": {\"name\": \"markdown\", \"symbol\": \"\", \"section\": \"#\", \"link\": \"!\", \"html\": true},' +\n              ' \".md\": {\"name\": \"markdown\", \"symbol\": \"\", \"section\": \"#\", \"link\": \"!\", \"html\": true}}'\n        else\n          return '{  \"version\": \"1.0.0\" }'\n\n    })\n    mockery.registerMock('./src/document', (config) ->\n      fakeConfig = require './fakes/fake-config'\n      fakeConfig = fixForMatch(fakeConfig, ['path', 'pathdir','root'])\n      config = fixForMatch(config, ['path', 'pathdir','root'])\n\n      assert.deepEqual(config, fakeConfig)\n    )\n    mockery.registerMock('./src/configure', (commander, defaults, languages) ->\n      commander.name.should.be.equal('docco')\n      assert.deepEqual(languages, {\n          \".markdown\": {\n            \"html\": true\n            \"link\": \"!\"\n            \"name\": \"markdown\"\n            \"section\": \"#\"\n            \"symbol\": \"\"\n          }\n          \".md\": {\n            \"html\": true\n            \"link\": \"!\"\n            \"name\": \"markdown\"\n            \"section\": \"#\"\n            \"symbol\": \"\"\n          }\n          \"coffeescript\": {\n            \"name\": \"coffeescript\"\n            \"symbol\": \"#\"\n          }\n      })\n      assert.deepEqual(defaults, {\n        \"layout\": \"sidebyside\",\n        \"output\": \"docs\",\n        \"template\": null,\n        \"css\": null,\n        \"extension\": null,\n        \"languages\": {},\n        \"marked\": null,\n        \"setup\": \".docco.json\",\n        \"help\": false,\n        \"flatten\": false\n      })\n      defaults.sources = [\n        \"README.md\",\n        \"images/fluffybunny1.jpg\"\n      ]\n      defaults.languages = languages\n      defaults.css = 'docco.css'\n      defaults.extension = '.md'\n      return defaults\n    )\n    optionTimes = 0\n    mockery.registerMock('commander', {\n      version: (version) ->\n        version.should.be.equal('1.0.0')\n        return @\n      usage: (usage) ->\n        usage.should.be.equal('[options] [file]')\n        return @\n      option: (option, description, value) ->\n        optionTimes++\n        switch optionTimes\n          when 1 then option.should.be.equal('-c, --css [file]')\n          when 2 then option.should.be.equal('-e, --extension [ext]')\n          when 3 then option.should.be.equal('-f, --flatten')\n          when 4 then option.should.be.equal('-g, --languages [file]')\n          when 5 then option.should.be.equal('-l, --layout [name]')\n          when 6 then option.should.be.equal('-m, --marked [file]')\n          when 7 then option.should.be.equal('-o, --output [path]')\n          when 8 then option.should.be.equal('-s, --setup [file]')\n          when 9 then option.should.be.equal('-t, --template [file]')\n        return @\n      parse: (args) ->\n        assert.deepEqual(args, [\"--flatten\"])\n        return @\n      name: (name) ->\n        name.should.be.equal('name')\n        return @\n    })\n    { run } = require '../../docco'\n\n    describe 'docco', () ->\n      it 'handles parameters correctly', () ->\n        run([\"--flatten\"])\n\n      mockery.deregisterMock('./src/document')\n"]}
\ No newline at end of file
diff --git a/test/unit-tests/unit-test-run.litcoffee b/test/unit-tests/unit-test-run.litcoffee
new file mode 100755
index 00000000..3584d273
--- /dev/null
+++ b/test/unit-tests/unit-test-run.litcoffee
@@ -0,0 +1,109 @@
+# This tests if run is working correctly.
+
+    { assert, should } = require('chai'); should()
+    fixForMatch = require './utils/fixForMatch'
+    mockery = require('mockery')
+    mockery.enable({
+      useCleanCache: true,
+      warnOnReplace: false,
+      warnOnUnregistered: false
+    })
+    times = 0
+    mockery.registerMock('fs-extra', {
+      existsSync: (file) ->
+
+      readFileSync: (file) ->
+        if times is 0
+          times++
+          return '{ "coffeescript": {"name":"coffeescript","symbol":"#"},' +
+              ' ".markdown": {"name": "markdown", "symbol": "", "section": "#", "link": "!", "html": true},' +
+              ' ".md": {"name": "markdown", "symbol": "", "section": "#", "link": "!", "html": true}}'
+        else
+          return '{  "version": "1.0.0" }'
+
+    })
+    mockery.registerMock('./src/document', (config) ->
+      fakeConfig = require './fakes/fake-config'
+      fakeConfig = fixForMatch(fakeConfig, ['path', 'pathdir','root'])
+      config = fixForMatch(config, ['path', 'pathdir','root'])
+
+      assert.deepEqual(config, fakeConfig)
+    )
+    mockery.registerMock('./src/configure', (commander, defaults, languages) ->
+      commander.name.should.be.equal('docco')
+      assert.deepEqual(languages, {
+          ".markdown": {
+            "html": true
+            "link": "!"
+            "name": "markdown"
+            "section": "#"
+            "symbol": ""
+          }
+          ".md": {
+            "html": true
+            "link": "!"
+            "name": "markdown"
+            "section": "#"
+            "symbol": ""
+          }
+          "coffeescript": {
+            "name": "coffeescript"
+            "symbol": "#"
+          }
+      })
+      assert.deepEqual(defaults, {
+        "layout": "sidebyside",
+        "output": "docs",
+        "template": null,
+        "css": null,
+        "extension": null,
+        "languages": {},
+        "marked": null,
+        "setup": ".docco.json",
+        "help": false,
+        "flatten": false
+      })
+      defaults.sources = [
+        "README.md",
+        "images/fluffybunny1.jpg"
+      ]
+      defaults.languages = languages
+      defaults.css = 'docco.css'
+      defaults.extension = '.md'
+      return defaults
+    )
+    optionTimes = 0
+    mockery.registerMock('commander', {
+      version: (version) ->
+        version.should.be.equal('1.0.0')
+        return @
+      usage: (usage) ->
+        usage.should.be.equal('[options] [file]')
+        return @
+      option: (option, description, value) ->
+        optionTimes++
+        switch optionTimes
+          when 1 then option.should.be.equal('-c, --css [file]')
+          when 2 then option.should.be.equal('-e, --extension [ext]')
+          when 3 then option.should.be.equal('-f, --flatten')
+          when 4 then option.should.be.equal('-g, --languages [file]')
+          when 5 then option.should.be.equal('-l, --layout [name]')
+          when 6 then option.should.be.equal('-m, --marked [file]')
+          when 7 then option.should.be.equal('-o, --output [path]')
+          when 8 then option.should.be.equal('-s, --setup [file]')
+          when 9 then option.should.be.equal('-t, --template [file]')
+        return @
+      parse: (args) ->
+        assert.deepEqual(args, ["--flatten"])
+        return @
+      name: (name) ->
+        name.should.be.equal('name')
+        return @
+    })
+    { run } = require '../../docco'
+
+    describe 'docco', () ->
+      it 'handles parameters correctly', () ->
+        run(["--flatten"])
+
+      mockery.deregisterMock('./src/document')
diff --git a/test/unit-tests/unit-test-typeIsArray.js b/test/unit-tests/unit-test-typeIsArray.js
new file mode 100755
index 00000000..ab32ba05
--- /dev/null
+++ b/test/unit-tests/unit-test-typeIsArray.js
@@ -0,0 +1,54 @@
+var assert, chai, expect, should, typeIsArray;
+
+chai = require('chai');
+
+expect = chai.expect;
+
+should = chai.should();
+
+assert = chai.assert;
+
+typeIsArray = require('./utils/typeIsArray');
+
+describe('test typeIsArray', function() {
+  it('given array, says it is an array', function() {
+    var x;
+    x = [1, 2, '3'];
+    return typeIsArray(x).should.be.equal(true);
+  });
+  it('given object, says it is NOT an array', function() {
+    var x;
+    x = {
+      a: 1,
+      b: 2,
+      c: 3
+    };
+    return typeIsArray(x).should.be.equal(false);
+  });
+  it('given object with array field, says it is NOT an array', function() {
+    var x;
+    x = {
+      a: [1],
+      b: [2],
+      c: [3]
+    };
+    return typeIsArray(x).should.be.equal(false);
+  });
+  it('given string, says it is NOT an array', function() {
+    var x;
+    x = "hi";
+    return typeIsArray(x).should.be.equal(false);
+  });
+  it('given number, says it is NOT an array', function() {
+    var x;
+    x = 1;
+    return typeIsArray(x).should.be.equal(false);
+  });
+  return it('given boolean, says it is NOT an array', function() {
+    var x;
+    x = true;
+    return typeIsArray(x).should.be.equal(false);
+  });
+});
+
+//# sourceMappingURL=unit-test-typeIsArray.js.map
diff --git a/test/unit-tests/unit-test-typeIsArray.js.map b/test/unit-tests/unit-test-typeIsArray.js.map
new file mode 100644
index 00000000..afc8a1cb
--- /dev/null
+++ b/test/unit-tests/unit-test-typeIsArray.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"unit-test-typeIsArray.js","sources":["unit-test-typeIsArray.litcoffee"],"names":[],"mappings":"AAEI,IAAA;;AAAA,IAAA,GAAO,OAAA,CAAQ,MAAR;;AACP,MAAA,GAAS,IAAI,CAAC;;AACd,MAAA,GAAS,IAAI,CAAC,MAAL,CAAA;;AACT,MAAA,GAAS,IAAI,CAAC;;AAEd,WAAA,GAAc,OAAA,CAAQ,qBAAR;;AAEd,QAAA,CAAS,kBAAT,EAA6B,SAAA;EAE3B,EAAA,CAAG,kCAAH,EAAuC,SAAA;AACrC,QAAA;IAAA,CAAA,GAAE,CAAC,CAAD,EAAG,CAAH,EAAK,GAAL;WACF,WAAA,CAAY,CAAZ,CAAc,CAAC,MAAM,CAAC,EAAE,CAAC,KAAzB,CAA+B,IAA/B;EAFqC,CAAvC;EAIA,EAAA,CAAG,uCAAH,EAA4C,SAAA;AAC1C,QAAA;IAAA,CAAA,GAAE;MAAC,CAAA,EAAE,CAAH;MAAK,CAAA,EAAE,CAAP;MAAS,CAAA,EAAE,CAAX;;WACF,WAAA,CAAY,CAAZ,CAAc,CAAC,MAAM,CAAC,EAAE,CAAC,KAAzB,CAA+B,KAA/B;EAF0C,CAA5C;EAIA,EAAA,CAAG,wDAAH,EAA6D,SAAA;AAC3D,QAAA;IAAA,CAAA,GAAE;MAAC,CAAA,EAAE,CAAC,CAAD,CAAH;MAAO,CAAA,EAAE,CAAC,CAAD,CAAT;MAAa,CAAA,EAAE,CAAC,CAAD,CAAf;;WACF,WAAA,CAAY,CAAZ,CAAc,CAAC,MAAM,CAAC,EAAE,CAAC,KAAzB,CAA+B,KAA/B;EAF2D,CAA7D;EAIA,EAAA,CAAG,uCAAH,EAA4C,SAAA;AAC1C,QAAA;IAAA,CAAA,GAAE;WACF,WAAA,CAAY,CAAZ,CAAc,CAAC,MAAM,CAAC,EAAE,CAAC,KAAzB,CAA+B,KAA/B;EAF0C,CAA5C;EAIA,EAAA,CAAG,uCAAH,EAA4C,SAAA;AAC1C,QAAA;IAAA,CAAA,GAAE;WACF,WAAA,CAAY,CAAZ,CAAc,CAAC,MAAM,CAAC,EAAE,CAAC,KAAzB,CAA+B,KAA/B;EAF0C,CAA5C;SAIA,EAAA,CAAG,wCAAH,EAA6C,SAAA;AAC3C,QAAA;IAAA,CAAA,GAAE;WACF,WAAA,CAAY,CAAZ,CAAc,CAAC,MAAM,CAAC,EAAE,CAAC,KAAzB,CAA+B,KAA/B;EAF2C,CAA7C;AAtB2B,CAA7B","sourcesContent":["#\n\n    chai = require('chai')\n    expect = chai.expect\n    should = chai.should()\n    assert = chai.assert\n\n    typeIsArray = require('./utils/typeIsArray')\n\n    describe 'test typeIsArray', () ->\n\n      it 'given array, says it is an array', () ->\n        x=[1,2,'3']\n        typeIsArray(x).should.be.equal(true)\n\n      it 'given object, says it is NOT an array', () ->\n        x={a:1,b:2,c:3}\n        typeIsArray(x).should.be.equal(false)\n\n      it 'given object with array field, says it is NOT an array', () ->\n        x={a:[1],b:[2],c:[3]}\n        typeIsArray(x).should.be.equal(false)\n\n      it 'given string, says it is NOT an array', () ->\n        x=\"hi\"\n        typeIsArray(x).should.be.equal(false)\n\n      it 'given number, says it is NOT an array', () ->\n        x=1\n        typeIsArray(x).should.be.equal(false)\n\n      it 'given boolean, says it is NOT an array', () ->\n        x=true\n        typeIsArray(x).should.be.equal(false)\n\n"]}
\ No newline at end of file
diff --git a/test/unit-tests/unit-test-typeIsArray.litcoffee b/test/unit-tests/unit-test-typeIsArray.litcoffee
new file mode 100755
index 00000000..258861a6
--- /dev/null
+++ b/test/unit-tests/unit-test-typeIsArray.litcoffee
@@ -0,0 +1,35 @@
+#
+
+    chai = require('chai')
+    expect = chai.expect
+    should = chai.should()
+    assert = chai.assert
+
+    typeIsArray = require('./utils/typeIsArray')
+
+    describe 'test typeIsArray', () ->
+
+      it 'given array, says it is an array', () ->
+        x=[1,2,'3']
+        typeIsArray(x).should.be.equal(true)
+
+      it 'given object, says it is NOT an array', () ->
+        x={a:1,b:2,c:3}
+        typeIsArray(x).should.be.equal(false)
+
+      it 'given object with array field, says it is NOT an array', () ->
+        x={a:[1],b:[2],c:[3]}
+        typeIsArray(x).should.be.equal(false)
+
+      it 'given string, says it is NOT an array', () ->
+        x="hi"
+        typeIsArray(x).should.be.equal(false)
+
+      it 'given number, says it is NOT an array', () ->
+        x=1
+        typeIsArray(x).should.be.equal(false)
+
+      it 'given boolean, says it is NOT an array', () ->
+        x=true
+        typeIsArray(x).should.be.equal(false)
+
diff --git a/test/unit-tests/unit-test-write.js b/test/unit-tests/unit-test-write.js
new file mode 100755
index 00000000..3d0d3ded
--- /dev/null
+++ b/test/unit-tests/unit-test-write.js
@@ -0,0 +1,104 @@
+var _, assert, flattened, informationOnFilesFlattened, informationOnFilesUnFlattened, languages, mockery, path, ref, resultOfTemplateFlattened, resultOfTemplateUnFlattened, should, template, write;
+
+ref = require('chai'), assert = ref.assert, should = ref.should;
+
+should();
+
+mockery = require('mockery');
+
+mockery.enable({
+  useCleanCache: true,
+  warnOnReplace: false,
+  warnOnUnregistered: false
+});
+
+path = require('path');
+
+_ = require('underscore');
+
+resultOfTemplateFlattened = require('./fakes/fake-linear-jst-flattened-result');
+
+resultOfTemplateUnFlattened = require('./fakes/fake-linear-jst-unflattened-result');
+
+flattened = true;
+
+mockery.registerMock('fs-extra', {
+  readFileSync: function() {
+    return '{ ".coffee":      {"name": "coffeescript", "symbol": "#"}, ".litcoffee":   {"name": "coffeescript", "symbol": "#", "literate": true}, ".md":          {"name": "markdown", "symbol": "", "section": "#", "link": "!", "html": true} }';
+  },
+  writeFileSync: function(destination, html) {
+    if (flattened) {
+      destination.should.be.equal("/Project/docs/fake_coffee.html");
+      return assert.equal(html, resultOfTemplateFlattened);
+    } else {
+      destination.should.be.equal("/Project/docs/src/fake_coffee.html");
+      return assert.equal(html, resultOfTemplateUnFlattened);
+    }
+  }
+});
+
+write = require('../../src/write');
+
+languages = require('../../docco').languages;
+
+template = require('./fakes/fake-linear-jst');
+
+informationOnFilesFlattened = require('./fakes/informationOnFilesFlattened');
+
+informationOnFilesUnFlattened = require('./fakes/informationOnFilesUnFlattened');
+
+describe('docco write', function() {
+  it('writes to the correct flattened destination', function() {
+    var config, result, sections, source;
+    flattened = true;
+    source = "src/fake_coffee.coffee";
+    config = {
+      css: "/Project/resources/linear/docco.css",
+      languages: languages,
+      output: 'docs',
+      root: '/Project',
+      css: 'docco.css',
+      sources: ["src/fake_coffee.coffee", "README.md"],
+      root: __dirname,
+      informationOnFiles: informationOnFilesFlattened
+    };
+    config.template = _.template(template);
+    sections = [
+      {
+        "docsText": "Some Doc Text",
+        "codeText": "Some code Text",
+        "codeHtml": "<div class='highlight'><pre>code=here;</pre></div>",
+        "docsHtml": ""
+      }
+    ];
+    result = write(source, sections, config);
+  });
+  it('writes to the correct unflattened destination', function() {
+    var config, result, sections, source;
+    flattened = false;
+    source = "src/fake_coffee.coffee";
+    config = {
+      css: "/Project/resources/linear/docco.css",
+      languages: languages,
+      output: 'docs',
+      root: '/Project',
+      css: 'docco.css',
+      sources: ["src/fake_coffee.coffee", "README.md"],
+      root: __dirname,
+      informationOnFiles: informationOnFilesUnFlattened
+    };
+    config.template = _.template(template);
+    sections = [
+      {
+        "docsText": "Some Doc Text",
+        "codeText": "Some code Text",
+        "codeHtml": "<div class='highlight'><pre>code=here;</pre></div>",
+        "docsHtml": ""
+      }
+    ];
+    result = write(source, sections, config);
+    mockery.deregisterMock('fs-extra');
+  });
+});
+
+//# sourceMappingURL=unit-test-write.js.map
diff --git a/test/unit-tests/unit-test-write.js.map b/test/unit-tests/unit-test-write.js.map
new file mode 100644
index 00000000..309ca3ad
--- /dev/null
+++ b/test/unit-tests/unit-test-write.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"unit-test-write.js","sources":["unit-test-write.litcoffee"],"names":[],"mappings":"AAEI,IAAA;;AAAA,MAAqB,OAAA,CAAQ,MAAR,CAArB,EAAE,mBAAF,EAAU;;AAA4B,MAAA,CAAA;;AAEtC,OAAA,GAAU,OAAA,CAAQ,SAAR;;AACV,OAAO,CAAC,MAAR,CAAe;EACb,aAAA,EAAe,IADF;EAEb,aAAA,EAAe,KAFF;EAGb,kBAAA,EAAoB,KAHP;CAAf;;AAMA,IAAA,GAAO,OAAA,CAAQ,MAAR;;AACP,CAAA,GAAI,OAAA,CAAQ,YAAR;;AAGJ,yBAAA,GAA4B,OAAA,CAAQ,0CAAR;;AAC5B,2BAAA,GAA8B,OAAA,CAAQ,4CAAR;;AAC9B,SAAA,GAAY;;AACZ,OAAO,CAAC,YAAR,CAAqB,UAArB,EAAiC;EAC/B,YAAA,EAAc,SAAA;AACZ,WAAO;EADK,CADiB;EAO/B,aAAA,EAAe,SAAC,WAAD,EAAc,IAAd;IACb,IAAG,SAAH;MACE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,KAAtB,CAA4B,gCAA5B;aACA,MAAM,CAAC,KAAP,CAAa,IAAb,EAAkB,yBAAlB,EAFF;KAAA,MAAA;MAIE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,KAAtB,CAA4B,oCAA5B;aACA,MAAM,CAAC,KAAP,CAAa,IAAb,EAAkB,2BAAlB,EALF;;EADa,CAPgB;CAAjC;;AAgBA,KAAA,GAAQ,OAAA,CAAQ,iBAAR;;AACN,YAAc,OAAA,CAAQ,aAAR;;AAEhB,QAAA,GAAW,OAAA,CAAQ,yBAAR;;AACX,2BAAA,GAA8B,OAAA,CAAQ,qCAAR;;AAC9B,6BAAA,GAAgC,OAAA,CAAQ,uCAAR;;AAEhC,QAAA,CAAS,aAAT,EAAwB,SAAA;EAEtB,EAAA,CAAG,6CAAH,EAAkD,SAAA;AAChD,QAAA;IAAA,SAAA,GAAY;IAEZ,MAAA,GAAS;IACT,MAAA,GACE;MAAA,GAAA,EAAK,qCAAL;MACA,SAAA,EAAU,SADV;MAEA,MAAA,EAAQ,MAFR;MAGA,IAAA,EAAM,UAHN;MAIA,GAAA,EAAK,WAJL;MAKA,OAAA,EAAS,CACP,wBADO,EAEP,WAFO,CALT;MASA,IAAA,EAAM,SATN;MAUA,kBAAA,EAAoB,2BAVpB;;IAYF,MAAM,CAAC,QAAP,GAAkB,CAAC,CAAC,QAAF,CAAW,QAAX;IAElB,QAAA,GAAW;MAAC;QACV,UAAA,EAAW,eADD;QAEV,UAAA,EAAW,gBAFD;QAGV,UAAA,EAAW,oDAHD;QAIV,UAAA,EAAW,EAJD;OAAD;;IAKX,MAAA,GAAS,KAAA,CAAM,MAAN,EAAc,QAAd,EAAwB,MAAxB;EAxBuC,CAAlD;EA2BA,EAAA,CAAG,+CAAH,EAAoD,SAAA;AAClD,QAAA;IAAA,SAAA,GAAY;IAEZ,MAAA,GAAS;IACT,MAAA,GACE;MAAA,GAAA,EAAK,qCAAL;MACA,SAAA,EAAU,SADV;MAEA,MAAA,EAAQ,MAFR;MAGA,IAAA,EAAM,UAHN;MAIA,GAAA,EAAK,WAJL;MAKA,OAAA,EAAS,CACP,wBADO,EAEP,WAFO,CALT;MASA,IAAA,EAAM,SATN;MAUA,kBAAA,EAAoB,6BAVpB;;IAYF,MAAM,CAAC,QAAP,GAAkB,CAAC,CAAC,QAAF,CAAW,QAAX;IAElB,QAAA,GAAW;MAAC;QACV,UAAA,EAAW,eADD;QAEV,UAAA,EAAW,gBAFD;QAGV,UAAA,EAAW,oDAHD;QAIV,UAAA,EAAW,EAJD;OAAD;;IAKX,MAAA,GAAS,KAAA,CAAM,MAAN,EAAc,QAAd,EAAwB,MAAxB;IACT,OAAO,CAAC,cAAR,CAAuB,UAAvB;EAzBkD,CAApD;AA7BsB,CAAxB","sourcesContent":["# This tests if write is working correctly.\n\n    { assert, should } = require('chai'); should()\n\n    mockery = require('mockery')\n    mockery.enable({\n      useCleanCache: true,\n      warnOnReplace: false,\n      warnOnUnregistered: false\n    })\n\n    path = require('path')\n    _ = require 'underscore'\n\n\n    resultOfTemplateFlattened = require './fakes/fake-linear-jst-flattened-result'\n    resultOfTemplateUnFlattened = require './fakes/fake-linear-jst-unflattened-result'\n    flattened = true\n    mockery.registerMock('fs-extra', {\n      readFileSync: () ->\n        return '{\n          \".coffee\":      {\"name\": \"coffeescript\", \"symbol\": \"#\"},\n          \".litcoffee\":   {\"name\": \"coffeescript\", \"symbol\": \"#\", \"literate\": true},\n          \".md\":          {\"name\": \"markdown\", \"symbol\": \"\", \"section\": \"#\", \"link\": \"!\", \"html\": true}\n        }'\n      writeFileSync: (destination, html) ->\n        if flattened\n          destination.should.be.equal(\"/Project/docs/fake_coffee.html\")\n          assert.equal(html,resultOfTemplateFlattened)\n        else\n          destination.should.be.equal(\"/Project/docs/src/fake_coffee.html\")\n          assert.equal(html,resultOfTemplateUnFlattened)\n    })\n\n    write = require '../../src/write'\n    { languages } = require('../../docco')\n\n    template = require './fakes/fake-linear-jst'\n    informationOnFilesFlattened = require './fakes/informationOnFilesFlattened'\n    informationOnFilesUnFlattened = require './fakes/informationOnFilesUnFlattened'\n\n    describe 'docco write', () ->\n\n      it 'writes to the correct flattened destination', () ->\n        flattened = true\n\n        source = \"src/fake_coffee.coffee\"\n        config =\n          css: \"/Project/resources/linear/docco.css\"\n          languages:languages\n          output: 'docs'\n          root: '/Project'\n          css: 'docco.css'\n          sources: [\n            \"src/fake_coffee.coffee\"\n            \"README.md\"\n          ]\n          root: __dirname\n          informationOnFiles: informationOnFilesFlattened\n\n        config.template = _.template template\n\n        sections = [{\n          \"docsText\":\"Some Doc Text\",\n          \"codeText\":\"Some code Text\",\n          \"codeHtml\":\"<div class='highlight'><pre>code=here;</pre></div>\",\n          \"docsHtml\":\"\"}]\n        result = write(source, sections, config)\n        return\n\n      it 'writes to the correct unflattened destination', () ->\n        flattened = false\n\n        source = \"src/fake_coffee.coffee\"\n        config =\n          css: \"/Project/resources/linear/docco.css\"\n          languages:languages\n          output: 'docs'\n          root: '/Project'\n          css: 'docco.css'\n          sources: [\n            \"src/fake_coffee.coffee\"\n            \"README.md\"\n          ]\n          root: __dirname\n          informationOnFiles: informationOnFilesUnFlattened\n\n        config.template = _.template template\n\n        sections = [{\n          \"docsText\":\"Some Doc Text\",\n          \"codeText\":\"Some code Text\",\n          \"codeHtml\":\"<div class='highlight'><pre>code=here;</pre></div>\",\n          \"docsHtml\":\"\"}]\n        result = write(source, sections, config)\n        mockery.deregisterMock('fs-extra')\n        return\n      return"]}
\ No newline at end of file
diff --git a/test/unit-tests/unit-test-write.litcoffee b/test/unit-tests/unit-test-write.litcoffee
new file mode 100755
index 00000000..2005a4a7
--- /dev/null
+++ b/test/unit-tests/unit-test-write.litcoffee
@@ -0,0 +1,98 @@
+# This tests if write is working correctly.
+
+    { assert, should } = require('chai'); should()
+
+    mockery = require('mockery')
+    mockery.enable({
+      useCleanCache: true,
+      warnOnReplace: false,
+      warnOnUnregistered: false
+    })
+
+    path = require('path')
+    _ = require 'underscore'
+
+
+    resultOfTemplateFlattened = require './fakes/fake-linear-jst-flattened-result'
+    resultOfTemplateUnFlattened = require './fakes/fake-linear-jst-unflattened-result'
+    flattened = true
+    mockery.registerMock('fs-extra', {
+      readFileSync: () ->
+        return '{
+          ".coffee":      {"name": "coffeescript", "symbol": "#"},
+          ".litcoffee":   {"name": "coffeescript", "symbol": "#", "literate": true},
+          ".md":          {"name": "markdown", "symbol": "", "section": "#", "link": "!", "html": true}
+        }'
+      writeFileSync: (destination, html) ->
+        if flattened
+          destination.should.be.equal("/Project/docs/fake_coffee.html")
+          assert.equal(html,resultOfTemplateFlattened)
+        else
+          destination.should.be.equal("/Project/docs/src/fake_coffee.html")
+          assert.equal(html,resultOfTemplateUnFlattened)
+    })
+
+    write = require '../../src/write'
+    { languages } = require('../../docco')
+
+    template = require './fakes/fake-linear-jst'
+    informationOnFilesFlattened = require './fakes/informationOnFilesFlattened'
+    informationOnFilesUnFlattened = require './fakes/informationOnFilesUnFlattened'
+
+    describe 'docco write', () ->
+
+      it 'writes to the correct flattened destination', () ->
+        flattened = true
+
+        source = "src/fake_coffee.coffee"
+        config =
+          css: "/Project/resources/linear/docco.css"
+          languages:languages
+          output: 'docs'
+          root: '/Project'
+          css: 'docco.css'
+          sources: [
+            "src/fake_coffee.coffee"
+            "README.md"
+          ]
+          root: __dirname
+          informationOnFiles: informationOnFilesFlattened
+
+        config.template = _.template template
+
+        sections = [{
+          "docsText":"Some Doc Text",
+          "codeText":"Some code Text",
+          "codeHtml":"<div class='highlight'><pre>code=here;</pre></div>",
+          "docsHtml":""}]
+        result = write(source, sections, config)
+        return
+
+      it 'writes to the correct unflattened destination', () ->
+        flattened = false
+
+        source = "src/fake_coffee.coffee"
+        config =
+          css: "/Project/resources/linear/docco.css"
+          languages:languages
+          output: 'docs'
+          root: '/Project'
+          css: 'docco.css'
+          sources: [
+            "src/fake_coffee.coffee"
+            "README.md"
+          ]
+          root: __dirname
+          informationOnFiles: informationOnFilesUnFlattened
+
+        config.template = _.template template
+
+        sections = [{
+          "docsText":"Some Doc Text",
+          "codeText":"Some code Text",
+          "codeHtml":"<div class='highlight'><pre>code=here;</pre></div>",
+          "docsHtml":""}]
+        result = write(source, sections, config)
+        mockery.deregisterMock('fs-extra')
+        return
+      return
\ No newline at end of file
diff --git a/test/unit-tests/utils/fixForMatch.js b/test/unit-tests/utils/fixForMatch.js
new file mode 100755
index 00000000..9fabcc82
--- /dev/null
+++ b/test/unit-tests/utils/fixForMatch.js
@@ -0,0 +1,32 @@
+var fixForDeepEqual, typeIsArray, typeIsObject,
+  indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
+
+typeIsArray = require('./typeIsArray');
+
+typeIsObject = require('./typeIsObject');
+
+fixForDeepEqual = function(response, valuesToFake) {
+  var i, j, k, l, len, result, v;
+  result = {};
+  for (k in response) {
+    v = response[k];
+    if (indexOf.call(valuesToFake, k) >= 0) {
+      result[k] = "force matched";
+    } else if (typeIsObject(v)) {
+      result[k] = fixForDeepEqual(v, valuesToFake);
+    } else if (typeIsArray(v)) {
+      for (l = j = 0, len = v.length; j < len; l = ++j) {
+        i = v[l];
+        v[i] = fixForDeepEqual(l, valuesToFake);
+      }
+      result[k] = v;
+    } else {
+      result[k] = v;
+    }
+  }
+  return result;
+};
+
+module.exports = fixForDeepEqual;
+
+//# sourceMappingURL=fixForMatch.js.map
diff --git a/test/unit-tests/utils/fixForMatch.js.map b/test/unit-tests/utils/fixForMatch.js.map
new file mode 100644
index 00000000..f0ab6c94
--- /dev/null
+++ b/test/unit-tests/utils/fixForMatch.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"fixForMatch.js","sources":["utils/fixForMatch.litcoffee"],"names":[],"mappings":"AAII,IAAA,0CAAA;EAAA;;AAAA,WAAA,GAAc,OAAA,CAAQ,eAAR;;AACd,YAAA,GAAe,OAAA,CAAQ,gBAAR;;AACf,eAAA,GAAkB,SAAC,QAAD,EAAW,YAAX;AAChB,MAAA;EAAA,MAAA,GAAS;AACT,OAAA,aAAA;;IACE,IAAG,aAAK,YAAL,EAAA,CAAA,MAAH;MACE,MAAO,CAAA,CAAA,CAAP,GAAY,gBADd;KAAA,MAEK,IAAG,YAAA,CAAa,CAAb,CAAH;MACH,MAAO,CAAA,CAAA,CAAP,GAAY,eAAA,CAAgB,CAAhB,EAAmB,YAAnB,EADT;KAAA,MAEA,IAAG,WAAA,CAAY,CAAZ,CAAH;AACH,WAAA,2CAAA;;QACE,CAAE,CAAA,CAAA,CAAF,GAAO,eAAA,CAAgB,CAAhB,EAAmB,YAAnB;AADT;MAEA,MAAO,CAAA,CAAA,CAAP,GAAY,EAHT;KAAA,MAAA;MAKH,MAAO,CAAA,CAAA,CAAP,GAAY,EALT;;AALP;AAWA,SAAO;AAbS;;AAelB,MAAM,CAAC,OAAP,GAAiB","sourcesContent":["# For fakes, certain fields change depending on the root directory the\n# test is run within. For those fields it is useful to \"zero\" them out\n# to the same value so that the other fields can be tested for equality.\n\n    typeIsArray = require('./typeIsArray')\n    typeIsObject = require('./typeIsObject')\n    fixForDeepEqual = (response, valuesToFake) ->\n      result = {}\n      for k,v of response\n        if k in valuesToFake\n          result[k] = \"force matched\"\n        else if typeIsObject(v)\n          result[k] = fixForDeepEqual(v, valuesToFake)\n        else if typeIsArray(v)\n          for i,l in v\n            v[i] = fixForDeepEqual(l, valuesToFake)\n          result[k] = v\n        else\n          result[k] = v\n      return result\n\n    module.exports = fixForDeepEqual"]}
\ No newline at end of file
diff --git a/test/unit-tests/utils/fixForMatch.litcoffee b/test/unit-tests/utils/fixForMatch.litcoffee
new file mode 100755
index 00000000..4fc993f9
--- /dev/null
+++ b/test/unit-tests/utils/fixForMatch.litcoffee
@@ -0,0 +1,22 @@
+# For fakes, certain fields change depending on the root directory the
+# test is run within. For those fields it is useful to "zero" them out
+# to the same value so that the other fields can be tested for equality.
+
+    typeIsArray = require('./typeIsArray')
+    typeIsObject = require('./typeIsObject')
+    fixForDeepEqual = (response, valuesToFake) ->
+      result = {}
+      for k,v of response
+        if k in valuesToFake
+          result[k] = "force matched"
+        else if typeIsObject(v)
+          result[k] = fixForDeepEqual(v, valuesToFake)
+        else if typeIsArray(v)
+          for i,l in v
+            v[i] = fixForDeepEqual(l, valuesToFake)
+          result[k] = v
+        else
+          result[k] = v
+      return result
+
+    module.exports = fixForDeepEqual
\ No newline at end of file
diff --git a/test/unit-tests/utils/typeIsArray.js b/test/unit-tests/utils/typeIsArray.js
new file mode 100755
index 00000000..488a23c2
--- /dev/null
+++ b/test/unit-tests/utils/typeIsArray.js
@@ -0,0 +1,9 @@
+var typeIsArray;
+
+typeIsArray = Array.isArray || function(value) {
+  return {}.toString.call(value) === '[object Array]';
+};
+
+module.exports = typeIsArray;
+
+//# sourceMappingURL=typeIsArray.js.map
diff --git a/test/unit-tests/utils/typeIsArray.js.map b/test/unit-tests/utils/typeIsArray.js.map
new file mode 100644
index 00000000..b9239dfb
--- /dev/null
+++ b/test/unit-tests/utils/typeIsArray.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"typeIsArray.js","sources":["utils/typeIsArray.litcoffee"],"names":[],"mappings":"AAAI,IAAA;;AAAA,WAAA,GAAc,KAAK,CAAC,OAAN,IAAiB,SAAE,KAAF;AAAa,SAAO,EAAE,CAAC,QAAQ,CAAC,IAAZ,CAAkB,KAAlB,CAAA,KAA6B;AAAjD;;AAC/B,MAAM,CAAC,OAAP,GAAiB","sourcesContent":["    typeIsArray = Array.isArray || ( value ) -> return {}.toString.call( value ) is '[object Array]'\n    module.exports = typeIsArray"]}
\ No newline at end of file
diff --git a/test/unit-tests/utils/typeIsArray.litcoffee b/test/unit-tests/utils/typeIsArray.litcoffee
new file mode 100755
index 00000000..146916b1
--- /dev/null
+++ b/test/unit-tests/utils/typeIsArray.litcoffee
@@ -0,0 +1,2 @@
+    typeIsArray = Array.isArray || ( value ) -> return {}.toString.call( value ) is '[object Array]'
+    module.exports = typeIsArray
\ No newline at end of file
diff --git a/test/unit-tests/utils/typeIsObject.js b/test/unit-tests/utils/typeIsObject.js
new file mode 100755
index 00000000..1c23c57f
--- /dev/null
+++ b/test/unit-tests/utils/typeIsObject.js
@@ -0,0 +1,5 @@
+module.exports = function(value) {
+  return typeof value === "object";
+};
+
+//# sourceMappingURL=typeIsObject.js.map
diff --git a/test/unit-tests/utils/typeIsObject.js.map b/test/unit-tests/utils/typeIsObject.js.map
new file mode 100644
index 00000000..128f087f
--- /dev/null
+++ b/test/unit-tests/utils/typeIsObject.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"typeIsObject.js","sources":["utils/typeIsObject.litcoffee"],"names":[],"mappings":"AAAI,MAAM,CAAC,OAAP,GAAiB,SAAC,KAAD;AAAW,SAAO,OAAO,KAAP,KAAgB;AAAlC","sourcesContent":["    module.exports = (value) -> return typeof value is \"object\""]}
\ No newline at end of file
diff --git a/test/unit-tests/utils/typeIsObject.litcoffee b/test/unit-tests/utils/typeIsObject.litcoffee
new file mode 100755
index 00000000..999a1744
--- /dev/null
+++ b/test/unit-tests/utils/typeIsObject.litcoffee
@@ -0,0 +1 @@
+    module.exports = (value) -> return typeof value is "object"
\ No newline at end of file