From dd6989795ceeaa06e0a66616142c6e8ff748ad1a Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 3 Jul 2017 13:50:49 -0700 Subject: [PATCH 01/95] add language types for jpg, jpeg, and png. --- docco.litcoffee | 1 - resources/languages.json | 3 +++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/docco.litcoffee b/docco.litcoffee index cb0a291e..c58657df 100644 --- a/docco.litcoffee +++ b/docco.litcoffee @@ -315,7 +315,6 @@ Keep it DRY. Extract the docco **version** from `package.json` version = JSON.parse(fs.readFileSync(path.join(__dirname, 'package.json'))).version - Command Line Interface ---------------------- diff --git a/resources/languages.json b/resources/languages.json index c1b6799d..59d49c99 100644 --- a/resources/languages.json +++ b/resources/languages.json @@ -29,6 +29,8 @@ ".hs": {"name": "haskell", "symbol": "--"}, ".ini": {"name": "ini", "symbol": ";"}, ".jade": {"name": "jade", "symbol": "//-"}, + ".jpg": {"name": "image", "symbol": "", "copy": true}, + ".jpeg": {"name": "image", "symbol": "", "copy": true}, ".js": {"name": "javascript", "symbol": "//"}, ".jsm": {"name": "javascript", "symbol": "//"}, ".jsx": {"name": "javascript", "symbol": "//"}, @@ -51,6 +53,7 @@ ".pl": {"name": "perl", "symbol": "#"}, ".pm": {"name": "perl", "symbol": "#"}, ".pod": {"name": "perl", "symbol": "#"}, + ".png": {"name": "image", "symbol":"", "copy": true}, ".pp": {"name": "delphi", "symbol": "//"}, ".py": {"name": "python", "symbol": "#"}, ".rb": {"name": "ruby", "symbol": "#"}, From 7cf4ffe174b6e1a2f39094485d9621e4fcd7d6a2 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 3 Jul 2017 13:51:57 -0700 Subject: [PATCH 02/95] java test fake. --- test/fake_java.java | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 test/fake_java.java diff --git a/test/fake_java.java b/test/fake_java.java new file mode 100644 index 00000000..996f13d7 --- /dev/null +++ b/test/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); } +} From 3f6d3fa0f032a3a14530b6fe88b87be2d441a03d Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 3 Jul 2017 14:31:02 -0700 Subject: [PATCH 03/95] fakes --- test/fakes/.docco.json | 7 + test/fakes/.groc.json | 11 + test/fakes/README.md | 50 +++ test/fakes/doc/assets/behavior.js | 455 ++++++++++++++++++++++++ test/fakes/doc/assets/style.css | 1 + test/fakes/doc/fake_coffee.html | 7 + test/fakes/doc/fake_coffee2.html | 19 + test/fakes/doc/fake_js.html | 44 +++ test/fakes/doc/index.html | 31 ++ test/fakes/images/fluffybunny1.jpg | Bin 0 -> 12069 bytes test/fakes/images/fluffybunny2.jpg | Bin 0 -> 4744 bytes test/fakes/images/fluffybunny3.jpg | Bin 0 -> 3601 bytes test/fakes/src/fake_coffee.coffee | 31 ++ test/fakes/src/fake_coffee2.coffee | 36 ++ test/{ => fakes/src}/fake_java.java | 0 test/fakes/src/fake_js.js | 61 ++++ test/fakes/src/fake_litcoffee.litcoffee | 36 ++ 17 files changed, 789 insertions(+) create mode 100644 test/fakes/.docco.json create mode 100644 test/fakes/.groc.json create mode 100644 test/fakes/README.md create mode 100644 test/fakes/doc/assets/behavior.js create mode 100644 test/fakes/doc/assets/style.css create mode 100644 test/fakes/doc/fake_coffee.html create mode 100644 test/fakes/doc/fake_coffee2.html create mode 100644 test/fakes/doc/fake_js.html create mode 100644 test/fakes/doc/index.html create mode 100644 test/fakes/images/fluffybunny1.jpg create mode 100644 test/fakes/images/fluffybunny2.jpg create mode 100644 test/fakes/images/fluffybunny3.jpg create mode 100644 test/fakes/src/fake_coffee.coffee create mode 100644 test/fakes/src/fake_coffee2.coffee rename test/{ => fakes/src}/fake_java.java (100%) create mode 100644 test/fakes/src/fake_js.js create mode 100644 test/fakes/src/fake_litcoffee.litcoffee diff --git a/test/fakes/.docco.json b/test/fakes/.docco.json new file mode 100644 index 00000000..62b84f2d --- /dev/null +++ b/test/fakes/.docco.json @@ -0,0 +1,7 @@ +{ + "files": [ + "src/**/*.js", + "README.md", + "images/*.jpg" + ] +} diff --git a/test/fakes/.groc.json b/test/fakes/.groc.json new file mode 100644 index 00000000..cc7d19f6 --- /dev/null +++ b/test/fakes/.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/fakes/README.md b/test/fakes/README.md new file mode 100644 index 00000000..16d1899e --- /dev/null +++ b/test/fakes/README.md @@ -0,0 +1,50 @@ +# Test Readme + +With Fluffy Bunnies! + +## The Happy Bunny - Poem by Christopher Howie + +![Readme.md](images/fluffybunny1.jpg) + +``` +I am the happy bunny. +I hop, and when I hop, +I laugh, and I squeak. +Squeak, Squeak, Squeak, I go! +My little bunny nose +Squinches to and fro. +``` + +### Stanza 2 + +![Readme.md](images/fluffybunny2.jpg) +``` +I am the happy bunny. +I hop, and when I hop, +I am carefree, happy, and full of glee, +When I go hopping on my little tree! +Hop, Hop, Hop, I go! My little bunny legs +Leap to and fro. +``` +### Stanza 3 + +![Readme.md](images/fluffybunny3.jpg) + +``` +I am the happy bunny. +I hop, and when I hop, +I see my master, as he looks at my cage +He smiles, and laughs when I wiggle my ears! +Wiggle, Wiggle, Wiggle, I go! My little bunny ears +Wriggle to and fro. +``` + +### Stanza 4 +``` +I love him, and he loves me, and he +Makes me the happiest bunny I could be. +``` + +## Author + +Christopher Howie \ No newline at end of file diff --git a/test/fakes/doc/assets/behavior.js b/test/fakes/doc/assets/behavior.js new file mode 100644 index 00000000..2ae5a38b --- /dev/null +++ b/test/fakes/doc/assets/behavior.js @@ -0,0 +1,455 @@ +/*! jQuery v1.7.1 jquery.com | jquery.org/license */ +(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"":"")+""),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;g=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
a",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="
"+""+"
",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="
t
",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; +f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
","
"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() +{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);(function() { + var MAX_FILTER_SIZE, appendSearchNode, buildNav, buildTOCNode, clearFilter, clearHighlight, currentNode$, currentQuery, fileMap, focusCurrentNode, highlightMatch, moveCurrentNode, nav$, searchNodes, searchableNodes, selectNode, selectNodeByDocumentPath, setCurrentNodeExpanded, setTableOfContentsActive, tableOfContents, toc$, toggleTableOfContents, visitCurrentNode; + + tableOfContents = [ + { + "type": "file", + "data": { + "language": { + "nameMatchers": [".md", ".markdown", ".mkd", ".mkdn", ".mdown"], + "commentsOnly": true, + "name": "Markdown" + }, + "sourcePath": "/Users/rolov/Code/docco/test/fakes/README.md", + "projectPath": "README.md", + "targetPath": "index", + "pageTitle": "index", + "title": "index" + }, + "depth": 1 + }, { + "type": "file", + "data": { + "language": { + "nameMatchers": [".coffee", "Cakefile"], + "pygmentsLexer": "coffee-script", + "highlightJS": "coffeescript", + "multiLineComment": ["###*", " *", " ###", "###", "#", "###", "###*", "#", "###"], + "strictMultiLineEnd": false, + "singleLineComment": ["#"], + "ignorePrefix": "}", + "foldPrefix": "^", + "name": "CoffeeScript" + }, + "sourcePath": "/Users/rolov/Code/docco/test/fakes/src/fake_coffee.coffee", + "projectPath": "src/fake_coffee.coffee", + "targetPath": "fake_coffee", + "pageTitle": "fake_coffee", + "title": "fake_coffee" + }, + "depth": 1 + }, { + "type": "file", + "data": { + "language": { + "nameMatchers": [".coffee", "Cakefile"], + "pygmentsLexer": "coffee-script", + "highlightJS": "coffeescript", + "multiLineComment": ["###*", " *", " ###", "###", "#", "###", "###*", "#", "###"], + "strictMultiLineEnd": false, + "singleLineComment": ["#"], + "ignorePrefix": "}", + "foldPrefix": "^", + "name": "CoffeeScript" + }, + "sourcePath": "/Users/rolov/Code/docco/test/fakes/src/fake_coffee2.coffee", + "projectPath": "src/fake_coffee2.coffee", + "targetPath": "fake_coffee2", + "pageTitle": "fake_coffee2", + "title": "fake_coffee2" + }, + "depth": 1, + "outline": [] + }, { + "type": "file", + "data": { + "language": { + "nameMatchers": [".js"], + "pygmentsLexer": "javascript", + "multiLineComment": ["/*", "*", "*/"], + "singleLineComment": ["//"], + "ignorePrefix": "}", + "foldPrefix": "^", + "name": "JavaScript" + }, + "sourcePath": "/Users/rolov/Code/docco/test/fakes/src/fake_js.js", + "projectPath": "src/fake_js.js", + "targetPath": "fake_js", + "pageTitle": "fake_js", + "title": "fake_js" + }, + "depth": 1 + } + ]; + + nav$ = null; + + toc$ = null; + + setTableOfContentsActive = function(active) { + var html$; + html$ = $('html'); + if (active) { + nav$.addClass('active'); + return html$.addClass('popped'); + } else { + nav$.removeClass('active'); + return html$.removeClass('popped'); + } + }; + + toggleTableOfContents = function() { + return setTableOfContentsActive(!nav$.hasClass('active')); + }; + + currentNode$ = null; + + focusCurrentNode = function() { + var currentNodeBottom, currentNodeTop; + currentNodeTop = currentNode$.offset().top - toc$.children(':visible').first().offset().top; + currentNodeBottom = currentNodeTop + currentNode$.children('.label').height(); + if (currentNodeTop < toc$.scrollTop()) { + toc$.scrollTop(currentNodeTop); + } + if (currentNodeBottom > toc$.scrollTop() + toc$.height()) { + return toc$.scrollTop(currentNodeBottom - toc$.height()); + } + }; + + setCurrentNodeExpanded = function(expanded) { + var parents$; + if (expanded) { + currentNode$.addClass('expanded'); + } else { + if (currentNode$.hasClass('expanded')) { + currentNode$.removeClass('expanded'); + } else { + parents$ = currentNode$.parents('li'); + if (parents$.length > 0) { + selectNode(parents$.first()); + } + } + } + return focusCurrentNode(); + }; + + selectNode = function(newNode$) { + currentNode$.removeClass('selected'); + newNode$.addClass('selected'); + currentNode$ = newNode$; + return focusCurrentNode(); + }; + + selectNodeByDocumentPath = function(documentPath, headerSlug) { + var j, len, link, ref, urlChunks; + if (headerSlug == null) { + headerSlug = null; + } + currentNode$ = fileMap[documentPath]; + if (headerSlug) { + ref = currentNode$.find('.outline a'); + for (j = 0, len = ref.length; j < len; j++) { + link = ref[j]; + urlChunks = $(link).attr('href').split('#'); + if (urlChunks[1] === headerSlug) { + currentNode$ = $(link).parents('li').first(); + break; + } + } + } + currentNode$.addClass('selected expanded'); + currentNode$.parents('li').addClass('expanded'); + return focusCurrentNode(); + }; + + moveCurrentNode = function(up) { + var i, j, len, newIndex, node, visibleNodes$; + visibleNodes$ = toc$.find('li:visible:not(.filtered)'); + newIndex = 0; + for (i = j = 0, len = visibleNodes$.length; j < len; i = ++j) { + node = visibleNodes$[i]; + if (node === currentNode$[0]) { + newIndex = up ? i - 1 : i + 1; + if (newIndex < 0) { + newIndex = 0; + } + if (newIndex > visibleNodes$.length - 1) { + newIndex = visibleNodes$.length - 1; + } + break; + } + } + return selectNode($(visibleNodes$[newIndex])); + }; + + visitCurrentNode = function() { + var labelLink$; + labelLink$ = currentNode$.children('a.label'); + if (labelLink$.length > 0) { + return window.location = labelLink$.attr('href'); + } + }; + + MAX_FILTER_SIZE = 10; + + searchableNodes = []; + + appendSearchNode = function(node$) { + var text$; + text$ = node$.find('> .label .text'); + return searchableNodes.push([text$.text().toLowerCase(), node$, text$]); + }; + + currentQuery = ''; + + searchNodes = function(queryString) { + var c, filtered, j, k, l, len, len1, len2, matched, matcher, nodeInfo, p, results; + queryString = queryString.toLowerCase().replace(/\s+/, ''); + if (queryString === currentQuery) { + return; + } + currentQuery = queryString; + if (queryString === '') { + return clearFilter(); + } + matcher = new RegExp(((function() { + var j, len, results; + results = []; + for (j = 0, len = queryString.length; j < len; j++) { + c = queryString[j]; + results.push(c.replace(/[-[\]{}()*+?.,\\^$|#\s]/, "\\$&")); + } + return results; + })()).join('.*')); + matched = []; + filtered = []; + for (j = 0, len = searchableNodes.length; j < len; j++) { + nodeInfo = searchableNodes[j]; + if (matcher.test(nodeInfo[0])) { + matched.push(nodeInfo); + } else { + filtered.push(nodeInfo); + } + } + if (matched.length > MAX_FILTER_SIZE) { + return clearFilter(); + } + nav$.addClass('searching'); + for (k = 0, len1 = filtered.length; k < len1; k++) { + nodeInfo = filtered[k]; + nodeInfo[1].removeClass('matched-child'); + nodeInfo[1].addClass('filtered'); + clearHighlight(nodeInfo[2]); + } + results = []; + for (l = 0, len2 = matched.length; l < len2; l++) { + nodeInfo = matched[l]; + nodeInfo[1].removeClass('filtered matched-child'); + nodeInfo[1].addClass('matched'); + highlightMatch(nodeInfo[2], queryString); + results.push((function() { + var len3, m, ref, results1; + ref = nodeInfo[1].parents('li'); + results1 = []; + for (m = 0, len3 = ref.length; m < len3; m++) { + p = ref[m]; + results1.push($(p).addClass('matched-child')); + } + return results1; + })()); + } + return results; + }; + + clearFilter = function() { + var j, len, nodeInfo, results; + nav$.removeClass('searching'); + currentQuery = ''; + results = []; + for (j = 0, len = searchableNodes.length; j < len; j++) { + nodeInfo = searchableNodes[j]; + nodeInfo[1].removeClass('filtered matched-child'); + results.push(clearHighlight(nodeInfo[2])); + } + return results; + }; + + highlightMatch = function(text$, queryString) { + var char, foundIndex, furthestIndex, j, len, lowerText, markedText, nodeText; + nodeText = text$.text(); + lowerText = nodeText.toLowerCase(); + markedText = ''; + furthestIndex = 0; + for (j = 0, len = queryString.length; j < len; j++) { + char = queryString[j]; + foundIndex = lowerText.indexOf(char, furthestIndex); + markedText += nodeText.slice(furthestIndex, foundIndex) + ("" + nodeText[foundIndex] + ""); + furthestIndex = foundIndex + 1; + } + return text$.html(markedText + nodeText.slice(furthestIndex)); + }; + + clearHighlight = function(text$) { + return text$.text(text$.text()); + }; + + fileMap = {}; + + buildNav = function(metaInfo) { + var j, len, node, sourceURL; + nav$ = $("
\n").appendTo($('body')); + toc$ = nav$.find('.toc'); + if (metaInfo.githubURL) { + if (metaInfo.documentPath === 'index') { + sourceURL = metaInfo.githubURL; + } else { + sourceURL = metaInfo.githubURL + "/blob/master/" + metaInfo.projectPath; + } + nav$.find('.tools').prepend("
  • \n \n View source on GitHub\n \n
  • "); + } + for (j = 0, len = tableOfContents.length; j < len; j++) { + node = tableOfContents[j]; + toc$.append(buildTOCNode(node, metaInfo)); + } + return nav$; + }; + + buildTOCNode = function(node, metaInfo) { + var c, children$, clickLabel, discloser, discloser$, j, label$, len, node$, ref, ref1, ref2; + node$ = $("
  • "); + discloser = null; + switch (node.type) { + case 'file': + node$.append("" + node.data.title + ""); + clickLabel = function(evt) { + if (evt.target === discloser) { + node$.toggleClass('expanded'); + evt.preventDefault(); + return false; + } + return selectNode(node$); + }; + break; + case 'folder': + node$.append("" + node.data.title + ""); + clickLabel = function(evt) { + selectNode(node$); + node$.toggleClass('expanded'); + evt.preventDefault(); + return false; + }; + } + if (((ref = node.children) != null ? ref.length : void 0) > 0) { + children$ = $('
      '); + ref1 = node.children; + for (j = 0, len = ref1.length; j < len; j++) { + c = ref1[j]; + children$.append(buildTOCNode(c, metaInfo)); + } + node$.append(children$); + } + label$ = node$.find('> .label'); + label$.click(clickLabel); + discloser$ = $('').prependTo(label$); + if (!(((ref2 = node.children) != null ? ref2.length : void 0) > 0)) { + discloser$.addClass('placeholder'); + } + discloser = discloser$.get(0); + if (node.type === 'file') { + fileMap[node.data.targetPath] = node$; + } + appendSearchNode(node$); + return node$; + }; + + $(function() { + var lastMousedownTimestamp, metaInfo, search$, toggle$; + metaInfo = { + relativeRoot: $('meta[name="groc-relative-root"]').attr('content'), + githubURL: $('meta[name="groc-github-url"]').attr('content'), + documentPath: $('meta[name="groc-document-path"]').attr('content'), + projectPath: $('meta[name="groc-project-path"]').attr('content') + }; + nav$ = buildNav(metaInfo); + toc$ = nav$.find('.toc'); + search$ = $('#search'); + selectNodeByDocumentPath(metaInfo.documentPath, window.location.hash.replace('#', '')); + search$.focus(function() { + return setTableOfContentsActive(true); + }); + lastMousedownTimestamp = null; + nav$.mousedown(function(evt) { + if (evt.target !== toggle$[0]) { + return lastMousedownTimestamp = evt.timeStamp; + } + }); + search$.blur(function(evt) { + if (evt.timeStamp - lastMousedownTimestamp < 10) { + return search$.focus(); + } else { + return setTableOfContentsActive(false); + } + }); + toggle$ = nav$.find('.toggle'); + toggle$.click(function(evt) { + if (search$.is(':focus')) { + search$.blur(); + } else { + search$.focus(); + } + return evt.preventDefault(); + }); + toggle$.mousedown(function(evt) { + return evt.preventDefault(); + }); + $('body').keydown(function(evt) { + if (nav$.hasClass('active')) { + switch (evt.keyCode) { + case 13: + visitCurrentNode(); + break; + case 37: + setCurrentNodeExpanded(false); + break; + case 38: + moveCurrentNode(true); + break; + case 39: + setCurrentNodeExpanded(true); + break; + case 40: + moveCurrentNode(false); + break; + default: + return; + } + return evt.preventDefault(); + } + }); + search$.bind('keyup search', function(evt) { + return searchNodes(search$.val()); + }); + search$.keydown(function(evt) { + if (evt.keyCode === 27) { + if (search$.val().trim() === '') { + return search$.blur(); + } else { + return search$.val(''); + } + } + }); + return $('.code.folded').each(function(index, code) { + var code$; + code$ = $(code); + return code$.click(function(evt) { + code$.toggleClass('folded'); + evt.preventDefault(); + return false; + }); + }); + }); + +}).call(this); diff --git a/test/fakes/doc/assets/style.css b/test/fakes/doc/assets/style.css new file mode 100644 index 00000000..3804e617 --- /dev/null +++ b/test/fakes/doc/assets/style.css @@ -0,0 +1 @@ +html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font:inherit;font-size:100%;vertical-align:baseline}html{line-height:1}ol,ul{list-style:none}table{border-collapse:collapse;border-spacing:0}caption,th,td{text-align:left;font-weight:normal;vertical-align:middle}q,blockquote{quotes:none}q:before,q:after,blockquote:before,blockquote:after{content:"";content:none}a img{border:none}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}html,body{height:100%}#document{min-height:100%}body{max-width:33em}.segment{padding:0.5em 0 0.5em 33em;white-space:nowrap}.segment:first-child{padding-top:4.1em}.segment:last-child{padding-bottom:2em}.segment .comments,.segment .code{display:inline-block;vertical-align:top;padding:0 2em}.segment .comments{margin-left:-33em;width:29em;white-space:normal}.segment .code{white-space:pre}#meta{position:absolute;left:33em;padding:0.25em 1em}@media (max-width: 53em){html{font-size:1em}}@media (max-width: 52.94111em){html{font-size:0.99889em}}@media (max-width: 52.88222em){html{font-size:0.99778em}}@media (max-width: 52.82333em){html{font-size:0.99667em}}@media (max-width: 52.76444em){html{font-size:0.99556em}}@media (max-width: 52.70556em){html{font-size:0.99444em}}@media (max-width: 52.64667em){html{font-size:0.99333em}}@media (max-width: 52.58778em){html{font-size:0.99222em}}@media (max-width: 52.52889em){html{font-size:0.99111em}}@media (max-width: 52.47em){html{font-size:0.99em}}@media (max-width: 52.41111em){html{font-size:0.98889em}}@media (max-width: 52.35222em){html{font-size:0.98778em}}@media (max-width: 52.29333em){html{font-size:0.98667em}}@media (max-width: 52.23444em){html{font-size:0.98556em}}@media (max-width: 52.17556em){html{font-size:0.98444em}}@media (max-width: 52.11667em){html{font-size:0.98333em}}@media (max-width: 52.05778em){html{font-size:0.98222em}}@media (max-width: 51.99889em){html{font-size:0.98111em}}@media (max-width: 51.94em){html{font-size:0.98em}}@media (max-width: 51.88111em){html{font-size:0.97889em}}@media (max-width: 51.82222em){html{font-size:0.97778em}}@media (max-width: 51.76333em){html{font-size:0.97667em}}@media (max-width: 51.70444em){html{font-size:0.97556em}}@media (max-width: 51.64556em){html{font-size:0.97444em}}@media (max-width: 51.58667em){html{font-size:0.97333em}}@media (max-width: 51.52778em){html{font-size:0.97222em}}@media (max-width: 51.46889em){html{font-size:0.97111em}}@media (max-width: 51.41em){html{font-size:0.97em}}@media (max-width: 51.35111em){html{font-size:0.96889em}}@media (max-width: 51.29222em){html{font-size:0.96778em}}@media (max-width: 51.23333em){html{font-size:0.96667em}}@media (max-width: 51.17444em){html{font-size:0.96556em}}@media (max-width: 51.11556em){html{font-size:0.96444em}}@media (max-width: 51.05667em){html{font-size:0.96333em}}@media (max-width: 50.99778em){html{font-size:0.96222em}}@media (max-width: 50.93889em){html{font-size:0.96111em}}@media (max-width: 50.88em){html{font-size:0.96em}}@media (max-width: 50.82111em){html{font-size:0.95889em}}@media (max-width: 50.76222em){html{font-size:0.95778em}}@media (max-width: 50.70333em){html{font-size:0.95667em}}@media (max-width: 50.64444em){html{font-size:0.95556em}}@media (max-width: 50.58556em){html{font-size:0.95444em}}@media (max-width: 50.52667em){html{font-size:0.95333em}}@media (max-width: 50.46778em){html{font-size:0.95222em}}@media (max-width: 50.40889em){html{font-size:0.95111em}}@media (max-width: 50.35em){html{font-size:0.95em}}@media (max-width: 50.29111em){html{font-size:0.94889em}}@media (max-width: 50.23222em){html{font-size:0.94778em}}@media (max-width: 50.17333em){html{font-size:0.94667em}}@media (max-width: 50.11444em){html{font-size:0.94556em}}@media (max-width: 50.05556em){html{font-size:0.94444em}}@media (max-width: 49.99667em){html{font-size:0.94333em}}@media (max-width: 49.93778em){html{font-size:0.94222em}}@media (max-width: 49.87889em){html{font-size:0.94111em}}@media (max-width: 49.82em){html{font-size:0.94em}}@media (max-width: 49.76111em){html{font-size:0.93889em}}@media (max-width: 49.70222em){html{font-size:0.93778em}}@media (max-width: 49.64333em){html{font-size:0.93667em}}@media (max-width: 49.58444em){html{font-size:0.93556em}}@media (max-width: 49.52556em){html{font-size:0.93444em}}@media (max-width: 49.46667em){html{font-size:0.93333em}}@media (max-width: 49.40778em){html{font-size:0.93222em}}@media (max-width: 49.34889em){html{font-size:0.93111em}}@media (max-width: 49.29em){html{font-size:0.93em}}@media (max-width: 49.23111em){html{font-size:0.92889em}}@media (max-width: 49.17222em){html{font-size:0.92778em}}@media (max-width: 49.11333em){html{font-size:0.92667em}}@media (max-width: 49.05444em){html{font-size:0.92556em}}@media (max-width: 48.99556em){html{font-size:0.92444em}}@media (max-width: 48.93667em){html{font-size:0.92333em}}@media (max-width: 48.87778em){html{font-size:0.92222em}}@media (max-width: 48.81889em){html{font-size:0.92111em}}@media (max-width: 48.76em){html{font-size:0.92em}}@media (max-width: 48.70111em){html{font-size:0.91889em}}@media (max-width: 48.64222em){html{font-size:0.91778em}}@media (max-width: 48.58333em){html{font-size:0.91667em}}@media (max-width: 48.52444em){html{font-size:0.91556em}}@media (max-width: 48.46556em){html{font-size:0.91444em}}@media (max-width: 48.40667em){html{font-size:0.91333em}}@media (max-width: 48.34778em){html{font-size:0.91222em}}@media (max-width: 48.28889em){html{font-size:0.91111em}}@media (max-width: 48.23em){html{font-size:0.91em}}@media (max-width: 48.17111em){html{font-size:0.90889em}}@media (max-width: 48.11222em){html{font-size:0.90778em}}@media (max-width: 48.05333em){html{font-size:0.90667em}}@media (max-width: 47.99444em){html{font-size:0.90556em}}@media (max-width: 47.93556em){html{font-size:0.90444em}}@media (max-width: 47.87667em){html{font-size:0.90333em}}@media (max-width: 47.81778em){html{font-size:0.90222em}}@media (max-width: 47.75889em){html{font-size:0.90111em}}@media (max-width: 47.7em){html{font-size:0.9em}}@media (max-width: 47.64111em){html{font-size:0.89889em}}@media (max-width: 47.58222em){html{font-size:0.89778em}}@media (max-width: 47.52333em){html{font-size:0.89667em}}@media (max-width: 47.46444em){html{font-size:0.89556em}}@media (max-width: 47.40556em){html{font-size:0.89444em}}@media (max-width: 47.34667em){html{font-size:0.89333em}}@media (max-width: 47.28778em){html{font-size:0.89222em}}@media (max-width: 47.22889em){html{font-size:0.89111em}}@media (max-width: 47.17em){html{font-size:0.89em}}@media (max-width: 47.11111em){html{font-size:0.88889em}}@media (max-width: 47.05222em){html{font-size:0.88778em}}@media (max-width: 46.99333em){html{font-size:0.88667em}}@media (max-width: 46.93444em){html{font-size:0.88556em}}@media (max-width: 46.87556em){html{font-size:0.88444em}}@media (max-width: 46.81667em){html{font-size:0.88333em}}@media (max-width: 46.75778em){html{font-size:0.88222em}}@media (max-width: 46.69889em){html{font-size:0.88111em}}@media (max-width: 46.64em){html{font-size:0.88em}}@media (max-width: 46.58111em){html{font-size:0.87889em}}@media (max-width: 46.52222em){html{font-size:0.87778em}}@media (max-width: 46.46333em){html{font-size:0.87667em}}@media (max-width: 46.40444em){html{font-size:0.87556em}}@media (max-width: 46.34556em){html{font-size:0.87444em}}@media (max-width: 46.28667em){html{font-size:0.87333em}}@media (max-width: 46.22778em){html{font-size:0.87222em}}@media (max-width: 46.16889em){html{font-size:0.87111em}}@media (max-width: 46.11em){html{font-size:0.87em}}@media (max-width: 46.05111em){html{font-size:0.86889em}}@media (max-width: 45.99222em){html{font-size:0.86778em}}@media (max-width: 45.93333em){html{font-size:0.86667em}}@media (max-width: 45.87444em){html{font-size:0.86556em}}@media (max-width: 45.81556em){html{font-size:0.86444em}}@media (max-width: 45.75667em){html{font-size:0.86333em}}@media (max-width: 45.69778em){html{font-size:0.86222em}}@media (max-width: 45.63889em){html{font-size:0.86111em}}@media (max-width: 45.58em){html{font-size:0.86em}}@media (max-width: 45.52111em){html{font-size:0.85889em}}@media (max-width: 45.46222em){html{font-size:0.85778em}}@media (max-width: 45.40333em){html{font-size:0.85667em}}@media (max-width: 45.34444em){html{font-size:0.85556em}}@media (max-width: 45.28556em){html{font-size:0.85444em}}@media (max-width: 45.22667em){html{font-size:0.85333em}}@media (max-width: 45.16778em){html{font-size:0.85222em}}@media (max-width: 45.10889em){html{font-size:0.85111em}}@media (max-width: 45.05em){html{font-size:1em}body{margin:0 auto}.segment{padding:0;white-space:normal;max-width:29em;margin:0 auto}.segment .comments,.segment .code{display:block;padding:1em}.segment .comments{margin-left:0;width:auto}.segment .code{display:block;overflow-y:hidden;overflow-x:auto}.segment .code .wrapper{display:inline-block}#meta{position:static;margin:2em 0 0 0;overflow-y:hidden;overflow-x:auto}#meta .file-path{display:inline-block}}nav{position:fixed;top:0;right:0;width:20em}@media (max-width: 45.05em){nav{left:0;width:100%}}nav .tools{position:relative;z-index:100}nav .tools li{display:table-cell;vertical-align:middle;text-align:center;white-space:nowrap;height:2.1em;padding:0 0.55em}nav .tools .github{padding:0}nav .tools .github a{display:block;height:2.1em;width:2.1em;text-indent:-9001em}nav .tools .search{width:100%}nav .tools .search input{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;display:block;width:100%}nav .toc{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;position:absolute;top:2.1em;bottom:0;width:100%;overflow-x:hidden;overflow-y:auto}nav .toc li{position:relative}nav .toc .label{display:block;line-height:2em;padding:0 0.55em 0 0.55em}nav .toc li li .label{padding-left:1.1em}nav .toc li li li .label{padding-left:1.65em}nav .toc li li li li .label{padding-left:2.2em}nav .toc li li li li li .label{padding-left:2.75em}nav .toc li li li li li li .label{padding-left:3.3em}nav{-moz-transition:height 150ms 0;-o-transition:height 150ms 0;-webkit-transition:height 150ms 0;transition:height 150ms 0}nav .tools .toggle{-moz-transition:background 150ms;-o-transition:background 150ms;-webkit-transition:background 150ms;transition:background 150ms}nav.active{-moz-transition:height 0;-o-transition:height 0;-webkit-transition:height 0;transition:height 0;height:100%}nav .toc{-moz-transition:right 150ms;-o-transition:right 150ms;-webkit-transition:right 150ms;transition:right 150ms;right:-100%}nav.active .toc{right:0}@media (max-width: 45.05em){nav .toc{-moz-transition:left 150ms;-o-transition:left 150ms;-webkit-transition:left 150ms;transition:left 150ms;right:auto;left:-100%}nav.active .toc{left:0}}@media (max-width: 45.05em){body{-moz-transition:left 150ms;-o-transition:left 150ms;-webkit-transition:left 150ms;transition:left 150ms;position:relative;left:0}html.popped{overflow:hidden}html.popped body{left:100%;overflow:hidden}}nav .toc .children,nav .toc .outline{display:none}nav .toc .expanded>.children,nav .toc .expanded>.outline,nav .toc .expanded>.outline .children{display:block}nav .toc .discloser{-moz-transition-property:-moz-transform,-webkit-transform,-o-transform,-moz-transform;-o-transition-property:-moz-transform,-webkit-transform,-o-transform,-o-transform;-webkit-transition-property:-moz-transform,-webkit-transform,-o-transform,-webkit-transform;transition-property:-moz-transform -webkit-transform -o-transform transform;-moz-transition-duration:200ms;-o-transition-duration:200ms;-webkit-transition-duration:200ms;transition-duration:200ms;-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg);display:inline-block;height:9px;width:9px;padding:0.2em;margin:0.2em 0.2em -0.2em 0.2em;vertical-align:baseline;background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIE1hY2ludG9zaCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDowOEFDRENGQzE2NEUxMUUxODdDNUQ2ODM0QzVGRkVBMSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDowOEFDRENGRDE2NEUxMUUxODdDNUQ2ODM0QzVGRkVBMSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjA4QUNEQ0ZBMTY0RTExRTE4N0M1RDY4MzRDNUZGRUExIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjA4QUNEQ0ZCMTY0RTExRTE4N0M1RDY4MzRDNUZGRUExIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+nQHMgwAAAM1JREFUeNpi/P//P0NJSYkuAwNDJhDXAPE7BjIAExIbZNA9IC4CYjZKDAIBfiDuBeLzQOxBiUEwoAXE26FYixKDYMAD6rpeqGvJNogBGl5F0PDLpMQgGBAC4mlQF9pTYhAMGADxASBeB8RylBgEA4FAfAOIW4CYhxKDQIAZxmChwJD1QFwGxHfINegaEGcB8UFyA/sd1AA9dEOIddFfIJ4OzdAfcSkiZNAOIC6GegcvwGXQHagBm8jNtB+hBmiTYgi6i+ZCw+EFOWkBIMAA1W4l62UzKWwAAAAASUVORK5CYII=') center center no-repeat;background-size:9px 9px}nav .toc .discloser.placeholder,nav .toc .expanded>.outline .discloser{background:none}nav .toc .expanded>.label .discloser{-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-webkit-transform:rotate(90deg);transform:rotate(90deg)}nav .toc .filtered>.label{display:none}nav .toc .matched-child>.label{display:block}nav .toc .matched-child>.children,nav .toc .matched-child>.outline,nav .toc .matched-child>.outline .children{display:block}nav .toc .matched>.children,nav .toc .matched>.outline,nav .toc .matched>.outline .children{display:block}nav.searching .toc .discloser{display:none}.comments .wrapper{font-family:"Helvetica Neue",Helvetica,"Droid Sans",sans-serif;font-weight:300;font-size:0.9375em;line-height:1.35}.comments .wrapper h1,.comments .wrapper h2,.comments .wrapper h3,.comments .wrapper h4,.comments .wrapper h5,.comments .wrapper h6{font-family:"HelveticaNeue-UltraLight","Helvetica Neue",Helvetica,"Droid Sans",sans-serif;font-weight:100;letter-spacing:0.0625em;line-height:1.25;margin-bottom:0.5em}.comments .wrapper h1{font-size:2.5em}.comments .wrapper h2{font-size:2em}.comments .wrapper h3{font-size:1.6em}.comments .wrapper h4{font-size:1.4em}.comments .wrapper h5{font-size:1.3em}.comments .wrapper h6{font-size:1.2em}.comments .wrapper p{margin:1em 0}.comments .wrapper>*:first-child{margin-top:0}.comments .wrapper>*:last-child{margin-bottom:0}.comments .wrapper ol,.comments .wrapper ul{padding-left:1.75em;margin:1em 0}.comments .wrapper ol li{list-style:decimal}.comments .wrapper ul li{list-style:disc}.comments .wrapper li{margin:1em 0}.comments .wrapper li:first-child{margin-top:0}.comments .wrapper li:last-child{margin-bottom:0}.comments .wrapper code{display:inline-block;padding:0.25em 0.25em 0 0.25em}.comments .wrapper pre{display:block;overflow-x:auto;overflow-y:hidden;margin-bottom:1em}.comments .wrapper pre .hljs-comment,.comments .wrapper pre .hljs-template_comment,.comments .wrapper pre .diff .hljs-header,.comments .wrapper pre .hljs-doctype,.comments .wrapper pre .hljs-pi,.comments .wrapper pre .lisp .hljs-string,.comments .wrapper pre .hljs-javadoc{color:#93a1a1;font-style:italic}.comments .wrapper pre .hljs-keyword,.comments .wrapper pre .hljs-winutils,.comments .wrapper pre .method,.comments .wrapper pre .hljs-addition,.comments .wrapper pre .css .hljs-tag,.comments .wrapper pre .hljs-request,.comments .wrapper pre .hljs-status,.comments .wrapper pre .nginx .hljs-title{color:#859900}.comments .wrapper pre .hljs-number,.comments .wrapper pre .hljs-command,.comments .wrapper pre .hljs-string,.comments .wrapper pre .hljs-tag .hljs-value,.comments .wrapper pre .hljs-rules .hljs-value,.comments .wrapper pre .hljs-phpdoc,.comments .wrapper pre .tex .hljs-formula,.comments .wrapper pre .hljs-regexp,.comments .wrapper pre .hljs-hexcolor{color:#2aa198}.comments .wrapper pre .hljs-title,.comments .wrapper pre .hljs-localvars,.comments .wrapper pre .hljs-chunk,.comments .wrapper pre .hljs-decorator,.comments .wrapper pre .hljs-built_in,.comments .wrapper pre .hljs-identifier,.comments .wrapper pre .vhdl .hljs-literal,.comments .wrapper pre .hljs-id,.comments .wrapper pre .css .hljs-function{color:#268bd2}.comments .wrapper pre .hljs-attribute,.comments .wrapper pre .hljs-variable,.comments .wrapper pre .lisp .hljs-body,.comments .wrapper pre .smalltalk .hljs-number,.comments .wrapper pre .hljs-constant,.comments .wrapper pre .hljs-class .hljs-title,.comments .wrapper pre .hljs-parent,.comments .wrapper pre .haskell .hljs-type{color:#b58900}.comments .wrapper pre .hljs-preprocessor,.comments .wrapper pre .hljs-preprocessor .hljs-keyword,.comments .wrapper pre .hljs-pragma,.comments .wrapper pre .hljs-shebang,.comments .wrapper pre .hljs-symbol,.comments .wrapper pre .hljs-symbol .hljs-string,.comments .wrapper pre .diff .hljs-change,.comments .wrapper pre .hljs-special,.comments .wrapper pre .hljs-attr_selector,.comments .wrapper pre .hljs-important,.comments .wrapper pre .hljs-subst,.comments .wrapper pre .hljs-cdata,.comments .wrapper pre .clojure .hljs-title,.comments .wrapper pre .css .hljs-pseudo{color:#cb4b16}.comments .wrapper pre .hljs-deletion{color:#dc322f}.comments .wrapper pre .tex .hljs-formula{background:#eee8d5}.comments .wrapper pre code{padding:1em}.comments .wrapper blockquote{padding:0 1em}.comments .wrapper strong{font-weight:700}.comments .wrapper em{font-style:italic}html{background:#4a525a}#document{background:#f5fbff url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzI3MmMzMCIvPjxzdG9wIG9mZnNldD0iMzAlIiBzdG9wLWNvbG9yPSIjM2U0NTRjIi8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjNGE1MjVhIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g') 33em no-repeat;background:#f5fbff -webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, #272c30),color-stop(30%, #3e454c),color-stop(100%, #4a525a)) 33em no-repeat;background:#f5fbff -moz-linear-gradient(left, #272c30,#3e454c 0.3em,#4a525a 1em) 33em no-repeat;background:#f5fbff -webkit-linear-gradient(left, #272c30,#3e454c 0.3em,#4a525a 1em) 33em no-repeat;background:#f5fbff linear-gradient(to right, #272c30,#3e454c 0.3em,#4a525a 1em) 33em no-repeat;margin-right:-1em;padding-right:1em}@media (max-width: 45.05em){#document{margin-right:0;padding-right:0}}#meta>*{font-family:"Helvetica Neue",Helvetica,"Droid Sans",sans-serif;font-weight:300;font-size:0.9375em;line-height:1.35;text-shadow:#272c30 1px 1px 0}#meta>*,#meta>* a{color:#9faab7}#meta>* a{text-decoration:none}.comments .wrapper{font-family:"Helvetica Neue",Helvetica,"Droid Sans",sans-serif;font-weight:300;font-size:0.9375em;line-height:1.35;text-shadow:#fff 1px 1px 0;color:#4a525a}.code .wrapper{font-family:"Droid Sans Mono",Menlo,Monaco,monospace;font-size:0.75em;line-height:1.4;text-shadow:#272c30 1px 1px 0;color:#cbd1d8}.code .wrapper .hljs{display:block;padding:0.5em}.code .wrapper .hljs-comment,.code .wrapper .hljs-template_comment,.code .wrapper .diff .hljs-header,.code .wrapper .hljs-doctype,.code .wrapper .hljs-pi,.code .wrapper .lisp .hljs-string,.code .wrapper .hljs-javadoc{color:#b1bac4;font-style:italic}.code .wrapper .hljs-keyword,.code .wrapper .hljs-winutils,.code .wrapper .method,.code .wrapper .hljs-addition,.code .wrapper .css .hljs-tag,.code .wrapper .hljs-request,.code .wrapper .hljs-status,.code .wrapper .nginx .hljs-title{color:#e0c090}.code .wrapper .hljs-string{color:#e9baba}.code .wrapper .hljs-property{color:#b9d0af}.code .wrapper .hljs-function{color:#abd9cf}.code .wrapper .hljs-class{color:#cee4dd}.code .wrapper .hljs-number,.code .wrapper .hljs-command,.code .wrapper .hljs-tag .hljs-value,.code .wrapper .hljs-rules .hljs-value,.code .wrapper .hljs-phpdoc,.code .wrapper .tex .hljs-formula,.code .wrapper .hljs-regexp,.code .wrapper .hljs-hexcolor{color:#cba8d6}.code .wrapper .hljs-title,.code .wrapper .hljs-localvars,.code .wrapper .hljs-chunk,.code .wrapper .hljs-decorator,.code .wrapper .hljs-built_in,.code .wrapper .hljs-identifier,.code .wrapper .vhdl .hljs-literal,.code .wrapper .hljs-id,.code .wrapper .css .hljs-function{color:#a9c2ba}.code .wrapper .hljs-attribute,.code .wrapper .hljs-variable,.code .wrapper .lisp .hljs-body,.code .wrapper .smalltalk .hljs-number,.code .wrapper .hljs-constant,.code .wrapper .hljs-class .hljs-title,.code .wrapper .hljs-parent,.code .wrapper .haskell .hljs-type{color:#b9d0af}.code .wrapper .hljs-preprocessor,.code .wrapper .hljs-preprocessor .hljs-keyword,.code .wrapper .hljs-pragma,.code .wrapper .hljs-shebang,.code .wrapper .hljs-symbol,.code .wrapper .hljs-symbol .hljs-string,.code .wrapper .diff .hljs-change,.code .wrapper .hljs-special,.code .wrapper .hljs-attr_selector,.code .wrapper .hljs-important,.code .wrapper .hljs-subst,.code .wrapper .hljs-cdata,.code .wrapper .clojure .hljs-title,.code .wrapper .css .hljs-pseudo{color:#cee4dd}.code .wrapper .hljs-deletion{color:#dc322f}.code .wrapper .tex .hljs-formula{background:#e9baba}@media (max-width: 45.05em){.code{-moz-border-radius:0.4em;-webkit-border-radius:0.4em;border-radius:0.4em;-moz-box-shadow:#272c30 0 0 0.5em 0.2em inset;-webkit-box-shadow:#272c30 0 0 0.5em 0.2em inset;box-shadow:#272c30 0 0 0.5em 0.2em inset;background:#4a525a}.code .wrapper{-moz-box-shadow:#4a525a 0 0 0.25em 0.75em;-webkit-box-shadow:#4a525a 0 0 0.25em 0.75em;box-shadow:#4a525a 0 0 0.25em 0.75em;background:#4a525a}}@media (max-width: 29em){.code{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}}nav{text-shadow:#f0f0f0 1px 1px 0;color:#4a525a}nav .tools,nav .toc{font-family:"Helvetica Neue",Helvetica,"Droid Sans",sans-serif;font-weight:300;font-size:0.9375em;line-height:1.35}nav .tools{-moz-box-shadow:rgba(0,0,0,0.3) 0 0 0.5em 0.1em;-webkit-box-shadow:rgba(0,0,0,0.3) 0 0 0.5em 0.1em;box-shadow:rgba(0,0,0,0.3) 0 0 0.5em 0.1em;background:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIwLjkiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNjZGNkY2QiIHN0b3Atb3BhY2l0eT0iMC45Ii8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g');background:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(255,255,255,0.9)),color-stop(100%, rgba(205,205,205,0.9)));background:-moz-linear-gradient(top, rgba(255,255,255,0.9),rgba(205,205,205,0.9));background:-webkit-linear-gradient(top, rgba(255,255,255,0.9),rgba(205,205,205,0.9));background:linear-gradient(to bottom, rgba(255,255,255,0.9),rgba(205,205,205,0.9));-moz-border-radius-bottomleft:0.4em;-webkit-border-bottom-left-radius:0.4em;border-bottom-left-radius:0.4em;border-bottom:1px solid #4a525a;border-left:1px solid #4a525a}@media (max-width: 53em){nav .tools{-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0}}nav .tools li{border-right:1px solid #4a525a}nav .tools li:last-child{border-right:none}nav .tools .toggle{cursor:pointer}nav .tools .github a{-moz-transition:opacity 200ms;-o-transition:opacity 200ms;-webkit-transition:opacity 200ms;transition:opacity 200ms;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=50);opacity:0.5;background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACcAAAAwCAYAAACScGMWAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIE1hY2ludG9zaCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDowOEFDRENGODE2NEUxMUUxODdDNUQ2ODM0QzVGRkVBMSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDowOEFDRENGOTE2NEUxMUUxODdDNUQ2ODM0QzVGRkVBMSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjA4QUNEQ0Y2MTY0RTExRTE4N0M1RDY4MzRDNUZGRUExIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjA4QUNEQ0Y3MTY0RTExRTE4N0M1RDY4MzRDNUZGRUExIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+FC/Z5AAACv9JREFUeNrMWXl0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') center center no-repeat;background-size:19.5px 24px}nav .tools .github a:hover{filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=90);opacity:0.9}nav.active .tools{-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0}nav.active .tools .toggle{background:rgba(205,205,205,0.9);position:relative}nav .toc{-moz-box-shadow:rgba(0,0,0,0.3) 0 0 0.5em 0.1em;-webkit-box-shadow:rgba(0,0,0,0.3) 0 0 0.5em 0.1em;box-shadow:rgba(0,0,0,0.3) 0 0 0.5em 0.1em;background:rgba(230,230,230,0.9);border-left:1px solid #4a525a}nav .toc .label{color:#4a525a;text-decoration:none;border-top:1px solid rgba(192,192,192,0.9);border-bottom:1px solid rgba(192,192,192,0.9);margin-top:-1px}nav .toc .label:hover{background:rgba(205,205,205,0.9)}nav .toc .file>.label{font-weight:bold}nav .toc .selected>.label{background:#f5fbff}nav .toc .label em{font-weight:bold}nav .toc .file>.label em{color:#101214}nav .toc .matched-child>.label{filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=65);opacity:0.65;text-shadow:none;background:rgba(192,192,192,0.9)}@media (max-width: 45.05em){nav .tools,nav .toc{border-left-width:0}nav .tools{background:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2NkY2RjZCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff),color-stop(100%, #cdcdcd));background:-moz-linear-gradient(top, #ffffff,#cdcdcd);background:-webkit-linear-gradient(top, #ffffff,#cdcdcd);background:linear-gradient(to bottom, #ffffff,#cdcdcd)}nav .toc{background:#e6e6e6}}.comments .wrapper a{display:inline-block;color:#a8614e;text-decoration:none}.comments .wrapper a:hover,.comments .wrapper a:hover *{text-decoration:underline}.comments .wrapper code{font-family:"Droid Sans Mono",Menlo,Monaco,monospace;font-size:0.75em;line-height:1.4;border:1px solid #e6e0d5}.comments .wrapper pre,.comments .wrapper code{-moz-border-radius:0.4em;-webkit-border-radius:0.4em;border-radius:0.4em;background:#fbf8f3}.comments .wrapper pre{-moz-box-shadow:#f2ece3 0 0 0.4em 0.2em;-webkit-box-shadow:#f2ece3 0 0 0.4em 0.2em;box-shadow:#f2ece3 0 0 0.4em 0.2em;border:1px solid #d9c9af}.comments .wrapper pre code{border-width:0;background:transparent}.comments .wrapper blockquote{border-left:0.15em solid #959fa8;margin-left:-0.15em}body{-webkit-text-size-adjust:100%}input[type="search"]{-moz-border-radius:1em;-webkit-border-radius:1em;border-radius:1em;-moz-box-shadow:#ddd 0 1px 1px 0 inset;-webkit-box-shadow:#ddd 0 1px 1px 0 inset;box-shadow:#ddd 0 1px 1px 0 inset;border:1px solid #959595;padding:0.15em 0.8em}.comments.doc-section .wrapper{color:#252519}.comments.doc-section.doc-section-private .wrapper,.comments.doc-section.doc-section-protected .wrapper,.comments.doc-section.doc-section-internal .wrapper{color:#7f7f7f}.comments.doc-section .doc-section-header{font:bold 18px "helvetica neue",helvetica,sans-serif}.comments.doc-section .docs .doc-section-header code{font-size:18px}.code .marker,.code .marker.wrapper,.code .wrapper.marker{display:none}.code.folded .wrapper{display:none;cursor:default}.code.folded .marker{-moz-border-radius:0.2em;-webkit-border-radius:0.2em;border-radius:0.2em;-moz-box-shadow:#2f3539 1px 1px 1px 0;-webkit-box-shadow:#2f3539 1px 1px 1px 0;box-shadow:#2f3539 1px 1px 1px 0;display:inline-block;border:1px solid #73787f;padding:0.2em 0.5em;margin-left:-0.5em;margin-right:-0.5em;background:#58616b;font:12px "Droid Sans Mono",Menlo,Monaco,monospace;text-shadow:#2f3539 1px 1px 0px;cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:-moz-none;-ms-user-select:none;user-select:none}.code.folded .marker .c1{color:#73787f;font-style:normal}.code.folded .marker:hover{background:#5f6872}.code.folded .marker:hover .c1{color:#7b8087}.code.folded .marker .c1:after{content:" …"} diff --git a/test/fakes/doc/fake_coffee.html b/test/fakes/doc/fake_coffee.html new file mode 100644 index 00000000..2dce8227 --- /dev/null +++ b/test/fakes/doc/fake_coffee.html @@ -0,0 +1,7 @@ +fake_coffee

      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/fakes/doc/fake_coffee2.html b/test/fakes/doc/fake_coffee2.html new file mode 100644 index 00000000..78304f0f --- /dev/null +++ b/test/fakes/doc/fake_coffee2.html @@ -0,0 +1,19 @@ +fake_coffee2

      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 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}"
      \ No newline at end of file diff --git a/test/fakes/doc/fake_js.html b/test/fakes/doc/fake_js.html new file mode 100644 index 00000000..6697c127 --- /dev/null +++ b/test/fakes/doc/fake_js.html @@ -0,0 +1,44 @@ +fake_js
      var express = require('express'); +var path = require('path'); +var favicon = require('serve-favicon'); +var logger = require('morgan'); +var cookieParser = require('cookie-parser'); +var bodyParser = require('body-parser'); + +var routes = require('./routes/index'); +var users = require('./routes/users'); + +var app = express();

      view engine setup

      app.set('views', path.join(__dirname, 'views')); +app.set('view engine', 'ejs'); +app.set('json spaces', 2);

      uncomment after placing your favicon in /public

      //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); +app.use(logger('dev')); +app.use(bodyParser.json()); +app.use(bodyParser.urlencoded({ extended: false })); +app.use(cookieParser()); +app.use(express.static(path.join(__dirname, 'public'))); + +app.use('/', routes); +app.use('/users', users);

      catch 404 and forward to error handler

      app.use(function(req, res, next) { + var err = new Error('Not Found'); + err.status = 404; + next(err); +});

      error handlers

      development error handler +will print stacktrace

      if (app.get('env') === 'development') { + app.use(function(err, req, res, next) { + res.status(err.status || 500); + res.render('error', { + message: err.message, + error: err + }); + }); +}

      production error handler +no stacktraces leaked to user

      app.use(function(err, req, res, next) { + res.status(err.status || 500); + res.render('error', { + message: err.message, + error: {} + }); +}); + + +module.exports = app;
      \ No newline at end of file diff --git a/test/fakes/doc/index.html b/test/fakes/doc/index.html new file mode 100644 index 00000000..8f7fe7a1 --- /dev/null +++ b/test/fakes/doc/index.html @@ -0,0 +1,31 @@ +index

      Test Readme

      +

      With Fluffy Bunnies!

      +

      The Happy Bunny - Poem by Christopher Howie

      +

      Readme.md

      +
      I am the happy bunny.
      +I hop, and when I hop, 
      +I laugh, and I squeak.
      +Squeak, Squeak, Squeak, I go! 
      +My little bunny nose
      +Squinches to and fro.
      +

      Stanza 2

      +

      Readme.md

      +
      I am the happy bunny.
      +I hop, and when I hop, 
      +I am carefree, happy, and full of glee, 
      +When I go hopping on my little tree! 
      +Hop, Hop, Hop, I go! My little bunny legs
      +Leap to and fro.
      +

      Stanza 3

      +

      Readme.md

      +
      I am the happy bunny.
      +I hop, and when I hop, 
      +I see my master, as he looks at my cage
      +He smiles, and laughs when I wiggle my ears! 
      +Wiggle, Wiggle, Wiggle, I go! My little bunny ears
      +Wriggle to and fro.
      +

      Stanza 4

      +
      I love him, and he loves me, and he
      +Makes me the happiest bunny I could be.
      +

      Author

      +

      Christopher Howie

      \ No newline at end of file diff --git a/test/fakes/images/fluffybunny1.jpg b/test/fakes/images/fluffybunny1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ddacde89b465e38f39fb39893e7620a8559692d0 GIT binary patch literal 12069 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 literal 0 HcmV?d00001 diff --git a/test/fakes/images/fluffybunny3.jpg b/test/fakes/images/fluffybunny3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4d8367ea19c4579dee7cd8b0bf6dcc4190978def GIT binary patch literal 3601 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 DXvtDK literal 0 HcmV?d00001 diff --git a/test/fakes/src/fake_coffee.coffee b/test/fakes/src/fake_coffee.coffee new file mode 100644 index 00000000..67cb1be9 --- /dev/null +++ b/test/fakes/src/fake_coffee.coffee @@ -0,0 +1,31 @@ +### + 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/fakes/src/fake_coffee2.coffee b/test/fakes/src/fake_coffee2.coffee new file mode 100644 index 00000000..55608b94 --- /dev/null +++ b/test/fakes/src/fake_coffee2.coffee @@ -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/fake_java.java b/test/fakes/src/fake_java.java similarity index 100% rename from test/fake_java.java rename to test/fakes/src/fake_java.java diff --git a/test/fakes/src/fake_js.js b/test/fakes/src/fake_js.js new file mode 100644 index 00000000..27951545 --- /dev/null +++ b/test/fakes/src/fake_js.js @@ -0,0 +1,61 @@ +var express = require('express'); +var path = require('path'); +var favicon = require('serve-favicon'); +var logger = require('morgan'); +var cookieParser = require('cookie-parser'); +var bodyParser = require('body-parser'); + +var routes = require('./routes/index'); +var users = require('./routes/users'); + +var app = express(); + +// view engine setup +app.set('views', path.join(__dirname, 'views')); +app.set('view engine', 'ejs'); +app.set('json spaces', 2); + +// uncomment after placing your favicon in /public +//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); +app.use(logger('dev')); +app.use(bodyParser.json()); +app.use(bodyParser.urlencoded({ extended: false })); +app.use(cookieParser()); +app.use(express.static(path.join(__dirname, 'public'))); + +app.use('/', routes); +app.use('/users', users); + +// catch 404 and forward to error handler +app.use(function(req, res, next) { + var err = new Error('Not Found'); + err.status = 404; + next(err); +}); + +// error handlers + +// development error handler +// will print stacktrace +if (app.get('env') === 'development') { + app.use(function(err, req, res, next) { + res.status(err.status || 500); + res.render('error', { + message: err.message, + error: err + }); + }); +} + +// production error handler +// no stacktraces leaked to user +app.use(function(err, req, res, next) { + res.status(err.status || 500); + res.render('error', { + message: err.message, + error: {} + }); +}); + + +module.exports = app; diff --git a/test/fakes/src/fake_litcoffee.litcoffee b/test/fakes/src/fake_litcoffee.litcoffee new file mode 100644 index 00000000..25adf8ae --- /dev/null +++ b/test/fakes/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}" From 0b4ade9e9dea98d68681c462588370361c228748 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 3 Jul 2017 14:31:47 -0700 Subject: [PATCH 04/95] removed files that should be ignored --- test/fakes/doc/assets/behavior.js | 455 ------------------------------ test/fakes/doc/assets/style.css | 1 - test/fakes/doc/fake_coffee.html | 7 - test/fakes/doc/fake_coffee2.html | 19 -- test/fakes/doc/fake_js.html | 44 --- test/fakes/doc/index.html | 31 -- 6 files changed, 557 deletions(-) delete mode 100644 test/fakes/doc/assets/behavior.js delete mode 100644 test/fakes/doc/assets/style.css delete mode 100644 test/fakes/doc/fake_coffee.html delete mode 100644 test/fakes/doc/fake_coffee2.html delete mode 100644 test/fakes/doc/fake_js.html delete mode 100644 test/fakes/doc/index.html diff --git a/test/fakes/doc/assets/behavior.js b/test/fakes/doc/assets/behavior.js deleted file mode 100644 index 2ae5a38b..00000000 --- a/test/fakes/doc/assets/behavior.js +++ /dev/null @@ -1,455 +0,0 @@ -/*! jQuery v1.7.1 jquery.com | jquery.org/license */ -(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"":"")+""),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;g=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c

  • a",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="
    "+""+"
    ",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="
    t
    ",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
    ",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; -f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

    ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
    ";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
    ","
    "],thead:[1,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],col:[2,"","
    "],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
    ","
    "]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() -{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
    ").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);(function() { - var MAX_FILTER_SIZE, appendSearchNode, buildNav, buildTOCNode, clearFilter, clearHighlight, currentNode$, currentQuery, fileMap, focusCurrentNode, highlightMatch, moveCurrentNode, nav$, searchNodes, searchableNodes, selectNode, selectNodeByDocumentPath, setCurrentNodeExpanded, setTableOfContentsActive, tableOfContents, toc$, toggleTableOfContents, visitCurrentNode; - - tableOfContents = [ - { - "type": "file", - "data": { - "language": { - "nameMatchers": [".md", ".markdown", ".mkd", ".mkdn", ".mdown"], - "commentsOnly": true, - "name": "Markdown" - }, - "sourcePath": "/Users/rolov/Code/docco/test/fakes/README.md", - "projectPath": "README.md", - "targetPath": "index", - "pageTitle": "index", - "title": "index" - }, - "depth": 1 - }, { - "type": "file", - "data": { - "language": { - "nameMatchers": [".coffee", "Cakefile"], - "pygmentsLexer": "coffee-script", - "highlightJS": "coffeescript", - "multiLineComment": ["###*", " *", " ###", "###", "#", "###", "###*", "#", "###"], - "strictMultiLineEnd": false, - "singleLineComment": ["#"], - "ignorePrefix": "}", - "foldPrefix": "^", - "name": "CoffeeScript" - }, - "sourcePath": "/Users/rolov/Code/docco/test/fakes/src/fake_coffee.coffee", - "projectPath": "src/fake_coffee.coffee", - "targetPath": "fake_coffee", - "pageTitle": "fake_coffee", - "title": "fake_coffee" - }, - "depth": 1 - }, { - "type": "file", - "data": { - "language": { - "nameMatchers": [".coffee", "Cakefile"], - "pygmentsLexer": "coffee-script", - "highlightJS": "coffeescript", - "multiLineComment": ["###*", " *", " ###", "###", "#", "###", "###*", "#", "###"], - "strictMultiLineEnd": false, - "singleLineComment": ["#"], - "ignorePrefix": "}", - "foldPrefix": "^", - "name": "CoffeeScript" - }, - "sourcePath": "/Users/rolov/Code/docco/test/fakes/src/fake_coffee2.coffee", - "projectPath": "src/fake_coffee2.coffee", - "targetPath": "fake_coffee2", - "pageTitle": "fake_coffee2", - "title": "fake_coffee2" - }, - "depth": 1, - "outline": [] - }, { - "type": "file", - "data": { - "language": { - "nameMatchers": [".js"], - "pygmentsLexer": "javascript", - "multiLineComment": ["/*", "*", "*/"], - "singleLineComment": ["//"], - "ignorePrefix": "}", - "foldPrefix": "^", - "name": "JavaScript" - }, - "sourcePath": "/Users/rolov/Code/docco/test/fakes/src/fake_js.js", - "projectPath": "src/fake_js.js", - "targetPath": "fake_js", - "pageTitle": "fake_js", - "title": "fake_js" - }, - "depth": 1 - } - ]; - - nav$ = null; - - toc$ = null; - - setTableOfContentsActive = function(active) { - var html$; - html$ = $('html'); - if (active) { - nav$.addClass('active'); - return html$.addClass('popped'); - } else { - nav$.removeClass('active'); - return html$.removeClass('popped'); - } - }; - - toggleTableOfContents = function() { - return setTableOfContentsActive(!nav$.hasClass('active')); - }; - - currentNode$ = null; - - focusCurrentNode = function() { - var currentNodeBottom, currentNodeTop; - currentNodeTop = currentNode$.offset().top - toc$.children(':visible').first().offset().top; - currentNodeBottom = currentNodeTop + currentNode$.children('.label').height(); - if (currentNodeTop < toc$.scrollTop()) { - toc$.scrollTop(currentNodeTop); - } - if (currentNodeBottom > toc$.scrollTop() + toc$.height()) { - return toc$.scrollTop(currentNodeBottom - toc$.height()); - } - }; - - setCurrentNodeExpanded = function(expanded) { - var parents$; - if (expanded) { - currentNode$.addClass('expanded'); - } else { - if (currentNode$.hasClass('expanded')) { - currentNode$.removeClass('expanded'); - } else { - parents$ = currentNode$.parents('li'); - if (parents$.length > 0) { - selectNode(parents$.first()); - } - } - } - return focusCurrentNode(); - }; - - selectNode = function(newNode$) { - currentNode$.removeClass('selected'); - newNode$.addClass('selected'); - currentNode$ = newNode$; - return focusCurrentNode(); - }; - - selectNodeByDocumentPath = function(documentPath, headerSlug) { - var j, len, link, ref, urlChunks; - if (headerSlug == null) { - headerSlug = null; - } - currentNode$ = fileMap[documentPath]; - if (headerSlug) { - ref = currentNode$.find('.outline a'); - for (j = 0, len = ref.length; j < len; j++) { - link = ref[j]; - urlChunks = $(link).attr('href').split('#'); - if (urlChunks[1] === headerSlug) { - currentNode$ = $(link).parents('li').first(); - break; - } - } - } - currentNode$.addClass('selected expanded'); - currentNode$.parents('li').addClass('expanded'); - return focusCurrentNode(); - }; - - moveCurrentNode = function(up) { - var i, j, len, newIndex, node, visibleNodes$; - visibleNodes$ = toc$.find('li:visible:not(.filtered)'); - newIndex = 0; - for (i = j = 0, len = visibleNodes$.length; j < len; i = ++j) { - node = visibleNodes$[i]; - if (node === currentNode$[0]) { - newIndex = up ? i - 1 : i + 1; - if (newIndex < 0) { - newIndex = 0; - } - if (newIndex > visibleNodes$.length - 1) { - newIndex = visibleNodes$.length - 1; - } - break; - } - } - return selectNode($(visibleNodes$[newIndex])); - }; - - visitCurrentNode = function() { - var labelLink$; - labelLink$ = currentNode$.children('a.label'); - if (labelLink$.length > 0) { - return window.location = labelLink$.attr('href'); - } - }; - - MAX_FILTER_SIZE = 10; - - searchableNodes = []; - - appendSearchNode = function(node$) { - var text$; - text$ = node$.find('> .label .text'); - return searchableNodes.push([text$.text().toLowerCase(), node$, text$]); - }; - - currentQuery = ''; - - searchNodes = function(queryString) { - var c, filtered, j, k, l, len, len1, len2, matched, matcher, nodeInfo, p, results; - queryString = queryString.toLowerCase().replace(/\s+/, ''); - if (queryString === currentQuery) { - return; - } - currentQuery = queryString; - if (queryString === '') { - return clearFilter(); - } - matcher = new RegExp(((function() { - var j, len, results; - results = []; - for (j = 0, len = queryString.length; j < len; j++) { - c = queryString[j]; - results.push(c.replace(/[-[\]{}()*+?.,\\^$|#\s]/, "\\$&")); - } - return results; - })()).join('.*')); - matched = []; - filtered = []; - for (j = 0, len = searchableNodes.length; j < len; j++) { - nodeInfo = searchableNodes[j]; - if (matcher.test(nodeInfo[0])) { - matched.push(nodeInfo); - } else { - filtered.push(nodeInfo); - } - } - if (matched.length > MAX_FILTER_SIZE) { - return clearFilter(); - } - nav$.addClass('searching'); - for (k = 0, len1 = filtered.length; k < len1; k++) { - nodeInfo = filtered[k]; - nodeInfo[1].removeClass('matched-child'); - nodeInfo[1].addClass('filtered'); - clearHighlight(nodeInfo[2]); - } - results = []; - for (l = 0, len2 = matched.length; l < len2; l++) { - nodeInfo = matched[l]; - nodeInfo[1].removeClass('filtered matched-child'); - nodeInfo[1].addClass('matched'); - highlightMatch(nodeInfo[2], queryString); - results.push((function() { - var len3, m, ref, results1; - ref = nodeInfo[1].parents('li'); - results1 = []; - for (m = 0, len3 = ref.length; m < len3; m++) { - p = ref[m]; - results1.push($(p).addClass('matched-child')); - } - return results1; - })()); - } - return results; - }; - - clearFilter = function() { - var j, len, nodeInfo, results; - nav$.removeClass('searching'); - currentQuery = ''; - results = []; - for (j = 0, len = searchableNodes.length; j < len; j++) { - nodeInfo = searchableNodes[j]; - nodeInfo[1].removeClass('filtered matched-child'); - results.push(clearHighlight(nodeInfo[2])); - } - return results; - }; - - highlightMatch = function(text$, queryString) { - var char, foundIndex, furthestIndex, j, len, lowerText, markedText, nodeText; - nodeText = text$.text(); - lowerText = nodeText.toLowerCase(); - markedText = ''; - furthestIndex = 0; - for (j = 0, len = queryString.length; j < len; j++) { - char = queryString[j]; - foundIndex = lowerText.indexOf(char, furthestIndex); - markedText += nodeText.slice(furthestIndex, foundIndex) + ("" + nodeText[foundIndex] + ""); - furthestIndex = foundIndex + 1; - } - return text$.html(markedText + nodeText.slice(furthestIndex)); - }; - - clearHighlight = function(text$) { - return text$.text(text$.text()); - }; - - fileMap = {}; - - buildNav = function(metaInfo) { - var j, len, node, sourceURL; - nav$ = $("
    \n").appendTo($('body')); - toc$ = nav$.find('.toc'); - if (metaInfo.githubURL) { - if (metaInfo.documentPath === 'index') { - sourceURL = metaInfo.githubURL; - } else { - sourceURL = metaInfo.githubURL + "/blob/master/" + metaInfo.projectPath; - } - nav$.find('.tools').prepend("
  • \n \n View source on GitHub\n \n
  • "); - } - for (j = 0, len = tableOfContents.length; j < len; j++) { - node = tableOfContents[j]; - toc$.append(buildTOCNode(node, metaInfo)); - } - return nav$; - }; - - buildTOCNode = function(node, metaInfo) { - var c, children$, clickLabel, discloser, discloser$, j, label$, len, node$, ref, ref1, ref2; - node$ = $("
  • "); - discloser = null; - switch (node.type) { - case 'file': - node$.append("" + node.data.title + ""); - clickLabel = function(evt) { - if (evt.target === discloser) { - node$.toggleClass('expanded'); - evt.preventDefault(); - return false; - } - return selectNode(node$); - }; - break; - case 'folder': - node$.append("" + node.data.title + ""); - clickLabel = function(evt) { - selectNode(node$); - node$.toggleClass('expanded'); - evt.preventDefault(); - return false; - }; - } - if (((ref = node.children) != null ? ref.length : void 0) > 0) { - children$ = $('
      '); - ref1 = node.children; - for (j = 0, len = ref1.length; j < len; j++) { - c = ref1[j]; - children$.append(buildTOCNode(c, metaInfo)); - } - node$.append(children$); - } - label$ = node$.find('> .label'); - label$.click(clickLabel); - discloser$ = $('').prependTo(label$); - if (!(((ref2 = node.children) != null ? ref2.length : void 0) > 0)) { - discloser$.addClass('placeholder'); - } - discloser = discloser$.get(0); - if (node.type === 'file') { - fileMap[node.data.targetPath] = node$; - } - appendSearchNode(node$); - return node$; - }; - - $(function() { - var lastMousedownTimestamp, metaInfo, search$, toggle$; - metaInfo = { - relativeRoot: $('meta[name="groc-relative-root"]').attr('content'), - githubURL: $('meta[name="groc-github-url"]').attr('content'), - documentPath: $('meta[name="groc-document-path"]').attr('content'), - projectPath: $('meta[name="groc-project-path"]').attr('content') - }; - nav$ = buildNav(metaInfo); - toc$ = nav$.find('.toc'); - search$ = $('#search'); - selectNodeByDocumentPath(metaInfo.documentPath, window.location.hash.replace('#', '')); - search$.focus(function() { - return setTableOfContentsActive(true); - }); - lastMousedownTimestamp = null; - nav$.mousedown(function(evt) { - if (evt.target !== toggle$[0]) { - return lastMousedownTimestamp = evt.timeStamp; - } - }); - search$.blur(function(evt) { - if (evt.timeStamp - lastMousedownTimestamp < 10) { - return search$.focus(); - } else { - return setTableOfContentsActive(false); - } - }); - toggle$ = nav$.find('.toggle'); - toggle$.click(function(evt) { - if (search$.is(':focus')) { - search$.blur(); - } else { - search$.focus(); - } - return evt.preventDefault(); - }); - toggle$.mousedown(function(evt) { - return evt.preventDefault(); - }); - $('body').keydown(function(evt) { - if (nav$.hasClass('active')) { - switch (evt.keyCode) { - case 13: - visitCurrentNode(); - break; - case 37: - setCurrentNodeExpanded(false); - break; - case 38: - moveCurrentNode(true); - break; - case 39: - setCurrentNodeExpanded(true); - break; - case 40: - moveCurrentNode(false); - break; - default: - return; - } - return evt.preventDefault(); - } - }); - search$.bind('keyup search', function(evt) { - return searchNodes(search$.val()); - }); - search$.keydown(function(evt) { - if (evt.keyCode === 27) { - if (search$.val().trim() === '') { - return search$.blur(); - } else { - return search$.val(''); - } - } - }); - return $('.code.folded').each(function(index, code) { - var code$; - code$ = $(code); - return code$.click(function(evt) { - code$.toggleClass('folded'); - evt.preventDefault(); - return false; - }); - }); - }); - -}).call(this); diff --git a/test/fakes/doc/assets/style.css b/test/fakes/doc/assets/style.css deleted file mode 100644 index 3804e617..00000000 --- a/test/fakes/doc/assets/style.css +++ /dev/null @@ -1 +0,0 @@ -html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font:inherit;font-size:100%;vertical-align:baseline}html{line-height:1}ol,ul{list-style:none}table{border-collapse:collapse;border-spacing:0}caption,th,td{text-align:left;font-weight:normal;vertical-align:middle}q,blockquote{quotes:none}q:before,q:after,blockquote:before,blockquote:after{content:"";content:none}a img{border:none}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}html,body{height:100%}#document{min-height:100%}body{max-width:33em}.segment{padding:0.5em 0 0.5em 33em;white-space:nowrap}.segment:first-child{padding-top:4.1em}.segment:last-child{padding-bottom:2em}.segment .comments,.segment .code{display:inline-block;vertical-align:top;padding:0 2em}.segment .comments{margin-left:-33em;width:29em;white-space:normal}.segment .code{white-space:pre}#meta{position:absolute;left:33em;padding:0.25em 1em}@media (max-width: 53em){html{font-size:1em}}@media (max-width: 52.94111em){html{font-size:0.99889em}}@media (max-width: 52.88222em){html{font-size:0.99778em}}@media (max-width: 52.82333em){html{font-size:0.99667em}}@media (max-width: 52.76444em){html{font-size:0.99556em}}@media (max-width: 52.70556em){html{font-size:0.99444em}}@media (max-width: 52.64667em){html{font-size:0.99333em}}@media (max-width: 52.58778em){html{font-size:0.99222em}}@media (max-width: 52.52889em){html{font-size:0.99111em}}@media (max-width: 52.47em){html{font-size:0.99em}}@media (max-width: 52.41111em){html{font-size:0.98889em}}@media (max-width: 52.35222em){html{font-size:0.98778em}}@media (max-width: 52.29333em){html{font-size:0.98667em}}@media (max-width: 52.23444em){html{font-size:0.98556em}}@media (max-width: 52.17556em){html{font-size:0.98444em}}@media (max-width: 52.11667em){html{font-size:0.98333em}}@media (max-width: 52.05778em){html{font-size:0.98222em}}@media (max-width: 51.99889em){html{font-size:0.98111em}}@media (max-width: 51.94em){html{font-size:0.98em}}@media (max-width: 51.88111em){html{font-size:0.97889em}}@media (max-width: 51.82222em){html{font-size:0.97778em}}@media (max-width: 51.76333em){html{font-size:0.97667em}}@media (max-width: 51.70444em){html{font-size:0.97556em}}@media (max-width: 51.64556em){html{font-size:0.97444em}}@media (max-width: 51.58667em){html{font-size:0.97333em}}@media (max-width: 51.52778em){html{font-size:0.97222em}}@media (max-width: 51.46889em){html{font-size:0.97111em}}@media (max-width: 51.41em){html{font-size:0.97em}}@media (max-width: 51.35111em){html{font-size:0.96889em}}@media (max-width: 51.29222em){html{font-size:0.96778em}}@media (max-width: 51.23333em){html{font-size:0.96667em}}@media (max-width: 51.17444em){html{font-size:0.96556em}}@media (max-width: 51.11556em){html{font-size:0.96444em}}@media (max-width: 51.05667em){html{font-size:0.96333em}}@media (max-width: 50.99778em){html{font-size:0.96222em}}@media (max-width: 50.93889em){html{font-size:0.96111em}}@media (max-width: 50.88em){html{font-size:0.96em}}@media (max-width: 50.82111em){html{font-size:0.95889em}}@media (max-width: 50.76222em){html{font-size:0.95778em}}@media (max-width: 50.70333em){html{font-size:0.95667em}}@media (max-width: 50.64444em){html{font-size:0.95556em}}@media (max-width: 50.58556em){html{font-size:0.95444em}}@media (max-width: 50.52667em){html{font-size:0.95333em}}@media (max-width: 50.46778em){html{font-size:0.95222em}}@media (max-width: 50.40889em){html{font-size:0.95111em}}@media (max-width: 50.35em){html{font-size:0.95em}}@media (max-width: 50.29111em){html{font-size:0.94889em}}@media (max-width: 50.23222em){html{font-size:0.94778em}}@media (max-width: 50.17333em){html{font-size:0.94667em}}@media (max-width: 50.11444em){html{font-size:0.94556em}}@media (max-width: 50.05556em){html{font-size:0.94444em}}@media (max-width: 49.99667em){html{font-size:0.94333em}}@media (max-width: 49.93778em){html{font-size:0.94222em}}@media (max-width: 49.87889em){html{font-size:0.94111em}}@media (max-width: 49.82em){html{font-size:0.94em}}@media (max-width: 49.76111em){html{font-size:0.93889em}}@media (max-width: 49.70222em){html{font-size:0.93778em}}@media (max-width: 49.64333em){html{font-size:0.93667em}}@media (max-width: 49.58444em){html{font-size:0.93556em}}@media (max-width: 49.52556em){html{font-size:0.93444em}}@media (max-width: 49.46667em){html{font-size:0.93333em}}@media (max-width: 49.40778em){html{font-size:0.93222em}}@media (max-width: 49.34889em){html{font-size:0.93111em}}@media (max-width: 49.29em){html{font-size:0.93em}}@media (max-width: 49.23111em){html{font-size:0.92889em}}@media (max-width: 49.17222em){html{font-size:0.92778em}}@media (max-width: 49.11333em){html{font-size:0.92667em}}@media (max-width: 49.05444em){html{font-size:0.92556em}}@media (max-width: 48.99556em){html{font-size:0.92444em}}@media (max-width: 48.93667em){html{font-size:0.92333em}}@media (max-width: 48.87778em){html{font-size:0.92222em}}@media (max-width: 48.81889em){html{font-size:0.92111em}}@media (max-width: 48.76em){html{font-size:0.92em}}@media (max-width: 48.70111em){html{font-size:0.91889em}}@media (max-width: 48.64222em){html{font-size:0.91778em}}@media (max-width: 48.58333em){html{font-size:0.91667em}}@media (max-width: 48.52444em){html{font-size:0.91556em}}@media (max-width: 48.46556em){html{font-size:0.91444em}}@media (max-width: 48.40667em){html{font-size:0.91333em}}@media (max-width: 48.34778em){html{font-size:0.91222em}}@media (max-width: 48.28889em){html{font-size:0.91111em}}@media (max-width: 48.23em){html{font-size:0.91em}}@media (max-width: 48.17111em){html{font-size:0.90889em}}@media (max-width: 48.11222em){html{font-size:0.90778em}}@media (max-width: 48.05333em){html{font-size:0.90667em}}@media (max-width: 47.99444em){html{font-size:0.90556em}}@media (max-width: 47.93556em){html{font-size:0.90444em}}@media (max-width: 47.87667em){html{font-size:0.90333em}}@media (max-width: 47.81778em){html{font-size:0.90222em}}@media (max-width: 47.75889em){html{font-size:0.90111em}}@media (max-width: 47.7em){html{font-size:0.9em}}@media (max-width: 47.64111em){html{font-size:0.89889em}}@media (max-width: 47.58222em){html{font-size:0.89778em}}@media (max-width: 47.52333em){html{font-size:0.89667em}}@media (max-width: 47.46444em){html{font-size:0.89556em}}@media (max-width: 47.40556em){html{font-size:0.89444em}}@media (max-width: 47.34667em){html{font-size:0.89333em}}@media (max-width: 47.28778em){html{font-size:0.89222em}}@media (max-width: 47.22889em){html{font-size:0.89111em}}@media (max-width: 47.17em){html{font-size:0.89em}}@media (max-width: 47.11111em){html{font-size:0.88889em}}@media (max-width: 47.05222em){html{font-size:0.88778em}}@media (max-width: 46.99333em){html{font-size:0.88667em}}@media (max-width: 46.93444em){html{font-size:0.88556em}}@media (max-width: 46.87556em){html{font-size:0.88444em}}@media (max-width: 46.81667em){html{font-size:0.88333em}}@media (max-width: 46.75778em){html{font-size:0.88222em}}@media (max-width: 46.69889em){html{font-size:0.88111em}}@media (max-width: 46.64em){html{font-size:0.88em}}@media (max-width: 46.58111em){html{font-size:0.87889em}}@media (max-width: 46.52222em){html{font-size:0.87778em}}@media (max-width: 46.46333em){html{font-size:0.87667em}}@media (max-width: 46.40444em){html{font-size:0.87556em}}@media (max-width: 46.34556em){html{font-size:0.87444em}}@media (max-width: 46.28667em){html{font-size:0.87333em}}@media (max-width: 46.22778em){html{font-size:0.87222em}}@media (max-width: 46.16889em){html{font-size:0.87111em}}@media (max-width: 46.11em){html{font-size:0.87em}}@media (max-width: 46.05111em){html{font-size:0.86889em}}@media (max-width: 45.99222em){html{font-size:0.86778em}}@media (max-width: 45.93333em){html{font-size:0.86667em}}@media (max-width: 45.87444em){html{font-size:0.86556em}}@media (max-width: 45.81556em){html{font-size:0.86444em}}@media (max-width: 45.75667em){html{font-size:0.86333em}}@media (max-width: 45.69778em){html{font-size:0.86222em}}@media (max-width: 45.63889em){html{font-size:0.86111em}}@media (max-width: 45.58em){html{font-size:0.86em}}@media (max-width: 45.52111em){html{font-size:0.85889em}}@media (max-width: 45.46222em){html{font-size:0.85778em}}@media (max-width: 45.40333em){html{font-size:0.85667em}}@media (max-width: 45.34444em){html{font-size:0.85556em}}@media (max-width: 45.28556em){html{font-size:0.85444em}}@media (max-width: 45.22667em){html{font-size:0.85333em}}@media (max-width: 45.16778em){html{font-size:0.85222em}}@media (max-width: 45.10889em){html{font-size:0.85111em}}@media (max-width: 45.05em){html{font-size:1em}body{margin:0 auto}.segment{padding:0;white-space:normal;max-width:29em;margin:0 auto}.segment .comments,.segment .code{display:block;padding:1em}.segment .comments{margin-left:0;width:auto}.segment .code{display:block;overflow-y:hidden;overflow-x:auto}.segment .code .wrapper{display:inline-block}#meta{position:static;margin:2em 0 0 0;overflow-y:hidden;overflow-x:auto}#meta .file-path{display:inline-block}}nav{position:fixed;top:0;right:0;width:20em}@media (max-width: 45.05em){nav{left:0;width:100%}}nav .tools{position:relative;z-index:100}nav .tools li{display:table-cell;vertical-align:middle;text-align:center;white-space:nowrap;height:2.1em;padding:0 0.55em}nav .tools .github{padding:0}nav .tools .github a{display:block;height:2.1em;width:2.1em;text-indent:-9001em}nav .tools .search{width:100%}nav .tools .search input{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;display:block;width:100%}nav .toc{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;position:absolute;top:2.1em;bottom:0;width:100%;overflow-x:hidden;overflow-y:auto}nav .toc li{position:relative}nav .toc .label{display:block;line-height:2em;padding:0 0.55em 0 0.55em}nav .toc li li .label{padding-left:1.1em}nav .toc li li li .label{padding-left:1.65em}nav .toc li li li li .label{padding-left:2.2em}nav .toc li li li li li .label{padding-left:2.75em}nav .toc li li li li li li .label{padding-left:3.3em}nav{-moz-transition:height 150ms 0;-o-transition:height 150ms 0;-webkit-transition:height 150ms 0;transition:height 150ms 0}nav .tools .toggle{-moz-transition:background 150ms;-o-transition:background 150ms;-webkit-transition:background 150ms;transition:background 150ms}nav.active{-moz-transition:height 0;-o-transition:height 0;-webkit-transition:height 0;transition:height 0;height:100%}nav .toc{-moz-transition:right 150ms;-o-transition:right 150ms;-webkit-transition:right 150ms;transition:right 150ms;right:-100%}nav.active .toc{right:0}@media (max-width: 45.05em){nav .toc{-moz-transition:left 150ms;-o-transition:left 150ms;-webkit-transition:left 150ms;transition:left 150ms;right:auto;left:-100%}nav.active .toc{left:0}}@media (max-width: 45.05em){body{-moz-transition:left 150ms;-o-transition:left 150ms;-webkit-transition:left 150ms;transition:left 150ms;position:relative;left:0}html.popped{overflow:hidden}html.popped body{left:100%;overflow:hidden}}nav .toc .children,nav .toc .outline{display:none}nav .toc .expanded>.children,nav .toc .expanded>.outline,nav .toc .expanded>.outline .children{display:block}nav .toc .discloser{-moz-transition-property:-moz-transform,-webkit-transform,-o-transform,-moz-transform;-o-transition-property:-moz-transform,-webkit-transform,-o-transform,-o-transform;-webkit-transition-property:-moz-transform,-webkit-transform,-o-transform,-webkit-transform;transition-property:-moz-transform -webkit-transform -o-transform transform;-moz-transition-duration:200ms;-o-transition-duration:200ms;-webkit-transition-duration:200ms;transition-duration:200ms;-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg);display:inline-block;height:9px;width:9px;padding:0.2em;margin:0.2em 0.2em -0.2em 0.2em;vertical-align:baseline;background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIE1hY2ludG9zaCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDowOEFDRENGQzE2NEUxMUUxODdDNUQ2ODM0QzVGRkVBMSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDowOEFDRENGRDE2NEUxMUUxODdDNUQ2ODM0QzVGRkVBMSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjA4QUNEQ0ZBMTY0RTExRTE4N0M1RDY4MzRDNUZGRUExIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjA4QUNEQ0ZCMTY0RTExRTE4N0M1RDY4MzRDNUZGRUExIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+nQHMgwAAAM1JREFUeNpi/P//P0NJSYkuAwNDJhDXAPE7BjIAExIbZNA9IC4CYjZKDAIBfiDuBeLzQOxBiUEwoAXE26FYixKDYMAD6rpeqGvJNogBGl5F0PDLpMQgGBAC4mlQF9pTYhAMGADxASBeB8RylBgEA4FAfAOIW4CYhxKDQIAZxmChwJD1QFwGxHfINegaEGcB8UFyA/sd1AA9dEOIddFfIJ4OzdAfcSkiZNAOIC6GegcvwGXQHagBm8jNtB+hBmiTYgi6i+ZCw+EFOWkBIMAA1W4l62UzKWwAAAAASUVORK5CYII=') center center no-repeat;background-size:9px 9px}nav .toc .discloser.placeholder,nav .toc .expanded>.outline .discloser{background:none}nav .toc .expanded>.label .discloser{-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-webkit-transform:rotate(90deg);transform:rotate(90deg)}nav .toc .filtered>.label{display:none}nav .toc .matched-child>.label{display:block}nav .toc .matched-child>.children,nav .toc .matched-child>.outline,nav .toc .matched-child>.outline .children{display:block}nav .toc .matched>.children,nav .toc .matched>.outline,nav .toc .matched>.outline .children{display:block}nav.searching .toc .discloser{display:none}.comments .wrapper{font-family:"Helvetica Neue",Helvetica,"Droid Sans",sans-serif;font-weight:300;font-size:0.9375em;line-height:1.35}.comments .wrapper h1,.comments .wrapper h2,.comments .wrapper h3,.comments .wrapper h4,.comments .wrapper h5,.comments .wrapper h6{font-family:"HelveticaNeue-UltraLight","Helvetica Neue",Helvetica,"Droid Sans",sans-serif;font-weight:100;letter-spacing:0.0625em;line-height:1.25;margin-bottom:0.5em}.comments .wrapper h1{font-size:2.5em}.comments .wrapper h2{font-size:2em}.comments .wrapper h3{font-size:1.6em}.comments .wrapper h4{font-size:1.4em}.comments .wrapper h5{font-size:1.3em}.comments .wrapper h6{font-size:1.2em}.comments .wrapper p{margin:1em 0}.comments .wrapper>*:first-child{margin-top:0}.comments .wrapper>*:last-child{margin-bottom:0}.comments .wrapper ol,.comments .wrapper ul{padding-left:1.75em;margin:1em 0}.comments .wrapper ol li{list-style:decimal}.comments .wrapper ul li{list-style:disc}.comments .wrapper li{margin:1em 0}.comments .wrapper li:first-child{margin-top:0}.comments .wrapper li:last-child{margin-bottom:0}.comments .wrapper code{display:inline-block;padding:0.25em 0.25em 0 0.25em}.comments .wrapper pre{display:block;overflow-x:auto;overflow-y:hidden;margin-bottom:1em}.comments .wrapper pre .hljs-comment,.comments .wrapper pre .hljs-template_comment,.comments .wrapper pre .diff .hljs-header,.comments .wrapper pre .hljs-doctype,.comments .wrapper pre .hljs-pi,.comments .wrapper pre .lisp .hljs-string,.comments .wrapper pre .hljs-javadoc{color:#93a1a1;font-style:italic}.comments .wrapper pre .hljs-keyword,.comments .wrapper pre .hljs-winutils,.comments .wrapper pre .method,.comments .wrapper pre .hljs-addition,.comments .wrapper pre .css .hljs-tag,.comments .wrapper pre .hljs-request,.comments .wrapper pre .hljs-status,.comments .wrapper pre .nginx .hljs-title{color:#859900}.comments .wrapper pre .hljs-number,.comments .wrapper pre .hljs-command,.comments .wrapper pre .hljs-string,.comments .wrapper pre .hljs-tag .hljs-value,.comments .wrapper pre .hljs-rules .hljs-value,.comments .wrapper pre .hljs-phpdoc,.comments .wrapper pre .tex .hljs-formula,.comments .wrapper pre .hljs-regexp,.comments .wrapper pre .hljs-hexcolor{color:#2aa198}.comments .wrapper pre .hljs-title,.comments .wrapper pre .hljs-localvars,.comments .wrapper pre .hljs-chunk,.comments .wrapper pre .hljs-decorator,.comments .wrapper pre .hljs-built_in,.comments .wrapper pre .hljs-identifier,.comments .wrapper pre .vhdl .hljs-literal,.comments .wrapper pre .hljs-id,.comments .wrapper pre .css .hljs-function{color:#268bd2}.comments .wrapper pre .hljs-attribute,.comments .wrapper pre .hljs-variable,.comments .wrapper pre .lisp .hljs-body,.comments .wrapper pre .smalltalk .hljs-number,.comments .wrapper pre .hljs-constant,.comments .wrapper pre .hljs-class .hljs-title,.comments .wrapper pre .hljs-parent,.comments .wrapper pre .haskell .hljs-type{color:#b58900}.comments .wrapper pre .hljs-preprocessor,.comments .wrapper pre .hljs-preprocessor .hljs-keyword,.comments .wrapper pre .hljs-pragma,.comments .wrapper pre .hljs-shebang,.comments .wrapper pre .hljs-symbol,.comments .wrapper pre .hljs-symbol .hljs-string,.comments .wrapper pre .diff .hljs-change,.comments .wrapper pre .hljs-special,.comments .wrapper pre .hljs-attr_selector,.comments .wrapper pre .hljs-important,.comments .wrapper pre .hljs-subst,.comments .wrapper pre .hljs-cdata,.comments .wrapper pre .clojure .hljs-title,.comments .wrapper pre .css .hljs-pseudo{color:#cb4b16}.comments .wrapper pre .hljs-deletion{color:#dc322f}.comments .wrapper pre .tex .hljs-formula{background:#eee8d5}.comments .wrapper pre code{padding:1em}.comments .wrapper blockquote{padding:0 1em}.comments .wrapper strong{font-weight:700}.comments .wrapper em{font-style:italic}html{background:#4a525a}#document{background:#f5fbff url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuMCIgeTE9IjAuNSIgeDI9IjEuMCIgeTI9IjAuNSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzI3MmMzMCIvPjxzdG9wIG9mZnNldD0iMzAlIiBzdG9wLWNvbG9yPSIjM2U0NTRjIi8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjNGE1MjVhIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g') 33em no-repeat;background:#f5fbff -webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, #272c30),color-stop(30%, #3e454c),color-stop(100%, #4a525a)) 33em no-repeat;background:#f5fbff -moz-linear-gradient(left, #272c30,#3e454c 0.3em,#4a525a 1em) 33em no-repeat;background:#f5fbff -webkit-linear-gradient(left, #272c30,#3e454c 0.3em,#4a525a 1em) 33em no-repeat;background:#f5fbff linear-gradient(to right, #272c30,#3e454c 0.3em,#4a525a 1em) 33em no-repeat;margin-right:-1em;padding-right:1em}@media (max-width: 45.05em){#document{margin-right:0;padding-right:0}}#meta>*{font-family:"Helvetica Neue",Helvetica,"Droid Sans",sans-serif;font-weight:300;font-size:0.9375em;line-height:1.35;text-shadow:#272c30 1px 1px 0}#meta>*,#meta>* a{color:#9faab7}#meta>* a{text-decoration:none}.comments .wrapper{font-family:"Helvetica Neue",Helvetica,"Droid Sans",sans-serif;font-weight:300;font-size:0.9375em;line-height:1.35;text-shadow:#fff 1px 1px 0;color:#4a525a}.code .wrapper{font-family:"Droid Sans Mono",Menlo,Monaco,monospace;font-size:0.75em;line-height:1.4;text-shadow:#272c30 1px 1px 0;color:#cbd1d8}.code .wrapper .hljs{display:block;padding:0.5em}.code .wrapper .hljs-comment,.code .wrapper .hljs-template_comment,.code .wrapper .diff .hljs-header,.code .wrapper .hljs-doctype,.code .wrapper .hljs-pi,.code .wrapper .lisp .hljs-string,.code .wrapper .hljs-javadoc{color:#b1bac4;font-style:italic}.code .wrapper .hljs-keyword,.code .wrapper .hljs-winutils,.code .wrapper .method,.code .wrapper .hljs-addition,.code .wrapper .css .hljs-tag,.code .wrapper .hljs-request,.code .wrapper .hljs-status,.code .wrapper .nginx .hljs-title{color:#e0c090}.code .wrapper .hljs-string{color:#e9baba}.code .wrapper .hljs-property{color:#b9d0af}.code .wrapper .hljs-function{color:#abd9cf}.code .wrapper .hljs-class{color:#cee4dd}.code .wrapper .hljs-number,.code .wrapper .hljs-command,.code .wrapper .hljs-tag .hljs-value,.code .wrapper .hljs-rules .hljs-value,.code .wrapper .hljs-phpdoc,.code .wrapper .tex .hljs-formula,.code .wrapper .hljs-regexp,.code .wrapper .hljs-hexcolor{color:#cba8d6}.code .wrapper .hljs-title,.code .wrapper .hljs-localvars,.code .wrapper .hljs-chunk,.code .wrapper .hljs-decorator,.code .wrapper .hljs-built_in,.code .wrapper .hljs-identifier,.code .wrapper .vhdl .hljs-literal,.code .wrapper .hljs-id,.code .wrapper .css .hljs-function{color:#a9c2ba}.code .wrapper .hljs-attribute,.code .wrapper .hljs-variable,.code .wrapper .lisp .hljs-body,.code .wrapper .smalltalk .hljs-number,.code .wrapper .hljs-constant,.code .wrapper .hljs-class .hljs-title,.code .wrapper .hljs-parent,.code .wrapper .haskell .hljs-type{color:#b9d0af}.code .wrapper .hljs-preprocessor,.code .wrapper .hljs-preprocessor .hljs-keyword,.code .wrapper .hljs-pragma,.code .wrapper .hljs-shebang,.code .wrapper .hljs-symbol,.code .wrapper .hljs-symbol .hljs-string,.code .wrapper .diff .hljs-change,.code .wrapper .hljs-special,.code .wrapper .hljs-attr_selector,.code .wrapper .hljs-important,.code .wrapper .hljs-subst,.code .wrapper .hljs-cdata,.code .wrapper .clojure .hljs-title,.code .wrapper .css .hljs-pseudo{color:#cee4dd}.code .wrapper .hljs-deletion{color:#dc322f}.code .wrapper .tex .hljs-formula{background:#e9baba}@media (max-width: 45.05em){.code{-moz-border-radius:0.4em;-webkit-border-radius:0.4em;border-radius:0.4em;-moz-box-shadow:#272c30 0 0 0.5em 0.2em inset;-webkit-box-shadow:#272c30 0 0 0.5em 0.2em inset;box-shadow:#272c30 0 0 0.5em 0.2em inset;background:#4a525a}.code .wrapper{-moz-box-shadow:#4a525a 0 0 0.25em 0.75em;-webkit-box-shadow:#4a525a 0 0 0.25em 0.75em;box-shadow:#4a525a 0 0 0.25em 0.75em;background:#4a525a}}@media (max-width: 29em){.code{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}}nav{text-shadow:#f0f0f0 1px 1px 0;color:#4a525a}nav .tools,nav .toc{font-family:"Helvetica Neue",Helvetica,"Droid Sans",sans-serif;font-weight:300;font-size:0.9375em;line-height:1.35}nav .tools{-moz-box-shadow:rgba(0,0,0,0.3) 0 0 0.5em 0.1em;-webkit-box-shadow:rgba(0,0,0,0.3) 0 0 0.5em 0.1em;box-shadow:rgba(0,0,0,0.3) 0 0 0.5em 0.1em;background:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIwLjkiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNjZGNkY2QiIHN0b3Atb3BhY2l0eT0iMC45Ii8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g');background:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(255,255,255,0.9)),color-stop(100%, rgba(205,205,205,0.9)));background:-moz-linear-gradient(top, rgba(255,255,255,0.9),rgba(205,205,205,0.9));background:-webkit-linear-gradient(top, rgba(255,255,255,0.9),rgba(205,205,205,0.9));background:linear-gradient(to bottom, rgba(255,255,255,0.9),rgba(205,205,205,0.9));-moz-border-radius-bottomleft:0.4em;-webkit-border-bottom-left-radius:0.4em;border-bottom-left-radius:0.4em;border-bottom:1px solid #4a525a;border-left:1px solid #4a525a}@media (max-width: 53em){nav .tools{-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0}}nav .tools li{border-right:1px solid #4a525a}nav .tools li:last-child{border-right:none}nav .tools .toggle{cursor:pointer}nav .tools .github a{-moz-transition:opacity 200ms;-o-transition:opacity 200ms;-webkit-transition:opacity 200ms;transition:opacity 200ms;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=50);opacity:0.5;background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACcAAAAwCAYAAACScGMWAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIE1hY2ludG9zaCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDowOEFDRENGODE2NEUxMUUxODdDNUQ2ODM0QzVGRkVBMSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDowOEFDRENGOTE2NEUxMUUxODdDNUQ2ODM0QzVGRkVBMSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjA4QUNEQ0Y2MTY0RTExRTE4N0M1RDY4MzRDNUZGRUExIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjA4QUNEQ0Y3MTY0RTExRTE4N0M1RDY4MzRDNUZGRUExIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+FC/Z5AAACv9JREFUeNrMWXl0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') center center no-repeat;background-size:19.5px 24px}nav .tools .github a:hover{filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=90);opacity:0.9}nav.active .tools{-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0}nav.active .tools .toggle{background:rgba(205,205,205,0.9);position:relative}nav .toc{-moz-box-shadow:rgba(0,0,0,0.3) 0 0 0.5em 0.1em;-webkit-box-shadow:rgba(0,0,0,0.3) 0 0 0.5em 0.1em;box-shadow:rgba(0,0,0,0.3) 0 0 0.5em 0.1em;background:rgba(230,230,230,0.9);border-left:1px solid #4a525a}nav .toc .label{color:#4a525a;text-decoration:none;border-top:1px solid rgba(192,192,192,0.9);border-bottom:1px solid rgba(192,192,192,0.9);margin-top:-1px}nav .toc .label:hover{background:rgba(205,205,205,0.9)}nav .toc .file>.label{font-weight:bold}nav .toc .selected>.label{background:#f5fbff}nav .toc .label em{font-weight:bold}nav .toc .file>.label em{color:#101214}nav .toc .matched-child>.label{filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=65);opacity:0.65;text-shadow:none;background:rgba(192,192,192,0.9)}@media (max-width: 45.05em){nav .tools,nav .toc{border-left-width:0}nav .tools{background:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2NkY2RjZCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff),color-stop(100%, #cdcdcd));background:-moz-linear-gradient(top, #ffffff,#cdcdcd);background:-webkit-linear-gradient(top, #ffffff,#cdcdcd);background:linear-gradient(to bottom, #ffffff,#cdcdcd)}nav .toc{background:#e6e6e6}}.comments .wrapper a{display:inline-block;color:#a8614e;text-decoration:none}.comments .wrapper a:hover,.comments .wrapper a:hover *{text-decoration:underline}.comments .wrapper code{font-family:"Droid Sans Mono",Menlo,Monaco,monospace;font-size:0.75em;line-height:1.4;border:1px solid #e6e0d5}.comments .wrapper pre,.comments .wrapper code{-moz-border-radius:0.4em;-webkit-border-radius:0.4em;border-radius:0.4em;background:#fbf8f3}.comments .wrapper pre{-moz-box-shadow:#f2ece3 0 0 0.4em 0.2em;-webkit-box-shadow:#f2ece3 0 0 0.4em 0.2em;box-shadow:#f2ece3 0 0 0.4em 0.2em;border:1px solid #d9c9af}.comments .wrapper pre code{border-width:0;background:transparent}.comments .wrapper blockquote{border-left:0.15em solid #959fa8;margin-left:-0.15em}body{-webkit-text-size-adjust:100%}input[type="search"]{-moz-border-radius:1em;-webkit-border-radius:1em;border-radius:1em;-moz-box-shadow:#ddd 0 1px 1px 0 inset;-webkit-box-shadow:#ddd 0 1px 1px 0 inset;box-shadow:#ddd 0 1px 1px 0 inset;border:1px solid #959595;padding:0.15em 0.8em}.comments.doc-section .wrapper{color:#252519}.comments.doc-section.doc-section-private .wrapper,.comments.doc-section.doc-section-protected .wrapper,.comments.doc-section.doc-section-internal .wrapper{color:#7f7f7f}.comments.doc-section .doc-section-header{font:bold 18px "helvetica neue",helvetica,sans-serif}.comments.doc-section .docs .doc-section-header code{font-size:18px}.code .marker,.code .marker.wrapper,.code .wrapper.marker{display:none}.code.folded .wrapper{display:none;cursor:default}.code.folded .marker{-moz-border-radius:0.2em;-webkit-border-radius:0.2em;border-radius:0.2em;-moz-box-shadow:#2f3539 1px 1px 1px 0;-webkit-box-shadow:#2f3539 1px 1px 1px 0;box-shadow:#2f3539 1px 1px 1px 0;display:inline-block;border:1px solid #73787f;padding:0.2em 0.5em;margin-left:-0.5em;margin-right:-0.5em;background:#58616b;font:12px "Droid Sans Mono",Menlo,Monaco,monospace;text-shadow:#2f3539 1px 1px 0px;cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:-moz-none;-ms-user-select:none;user-select:none}.code.folded .marker .c1{color:#73787f;font-style:normal}.code.folded .marker:hover{background:#5f6872}.code.folded .marker:hover .c1{color:#7b8087}.code.folded .marker .c1:after{content:" …"} diff --git a/test/fakes/doc/fake_coffee.html b/test/fakes/doc/fake_coffee.html deleted file mode 100644 index 2dce8227..00000000 --- a/test/fakes/doc/fake_coffee.html +++ /dev/null @@ -1,7 +0,0 @@ -fake_coffee

      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/fakes/doc/fake_coffee2.html b/test/fakes/doc/fake_coffee2.html deleted file mode 100644 index 78304f0f..00000000 --- a/test/fakes/doc/fake_coffee2.html +++ /dev/null @@ -1,19 +0,0 @@ -fake_coffee2

      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 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}"
      \ No newline at end of file diff --git a/test/fakes/doc/fake_js.html b/test/fakes/doc/fake_js.html deleted file mode 100644 index 6697c127..00000000 --- a/test/fakes/doc/fake_js.html +++ /dev/null @@ -1,44 +0,0 @@ -fake_js
      var express = require('express'); -var path = require('path'); -var favicon = require('serve-favicon'); -var logger = require('morgan'); -var cookieParser = require('cookie-parser'); -var bodyParser = require('body-parser'); - -var routes = require('./routes/index'); -var users = require('./routes/users'); - -var app = express();

      view engine setup

      app.set('views', path.join(__dirname, 'views')); -app.set('view engine', 'ejs'); -app.set('json spaces', 2);

      uncomment after placing your favicon in /public

      //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); -app.use(logger('dev')); -app.use(bodyParser.json()); -app.use(bodyParser.urlencoded({ extended: false })); -app.use(cookieParser()); -app.use(express.static(path.join(__dirname, 'public'))); - -app.use('/', routes); -app.use('/users', users);

      catch 404 and forward to error handler

      app.use(function(req, res, next) { - var err = new Error('Not Found'); - err.status = 404; - next(err); -});

      error handlers

      development error handler -will print stacktrace

      if (app.get('env') === 'development') { - app.use(function(err, req, res, next) { - res.status(err.status || 500); - res.render('error', { - message: err.message, - error: err - }); - }); -}

      production error handler -no stacktraces leaked to user

      app.use(function(err, req, res, next) { - res.status(err.status || 500); - res.render('error', { - message: err.message, - error: {} - }); -}); - - -module.exports = app;
      \ No newline at end of file diff --git a/test/fakes/doc/index.html b/test/fakes/doc/index.html deleted file mode 100644 index 8f7fe7a1..00000000 --- a/test/fakes/doc/index.html +++ /dev/null @@ -1,31 +0,0 @@ -index

      Test Readme

      -

      With Fluffy Bunnies!

      -

      The Happy Bunny - Poem by Christopher Howie

      -

      Readme.md

      -
      I am the happy bunny.
      -I hop, and when I hop, 
      -I laugh, and I squeak.
      -Squeak, Squeak, Squeak, I go! 
      -My little bunny nose
      -Squinches to and fro.
      -

      Stanza 2

      -

      Readme.md

      -
      I am the happy bunny.
      -I hop, and when I hop, 
      -I am carefree, happy, and full of glee, 
      -When I go hopping on my little tree! 
      -Hop, Hop, Hop, I go! My little bunny legs
      -Leap to and fro.
      -

      Stanza 3

      -

      Readme.md

      -
      I am the happy bunny.
      -I hop, and when I hop, 
      -I see my master, as he looks at my cage
      -He smiles, and laughs when I wiggle my ears! 
      -Wiggle, Wiggle, Wiggle, I go! My little bunny ears
      -Wriggle to and fro.
      -

      Stanza 4

      -
      I love him, and he loves me, and he
      -Makes me the happiest bunny I could be.
      -

      Author

      -

      Christopher Howie

      \ No newline at end of file From 11cd9c045b5a3cf1c1e30e5246df64ebe6d12f11 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 3 Jul 2017 14:32:40 -0700 Subject: [PATCH 05/95] ignore test doc directory --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index a3ac9700..b7f361da 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ output docs test/data node_modules +test/fakes/doc From da1311a53a09e28e8e4ed54d38867ca38bf4e0c6 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 3 Jul 2017 14:33:26 -0700 Subject: [PATCH 06/95] ignore doc directories --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index b7f361da..ccc607c7 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,4 @@ output docs test/data node_modules -test/fakes/doc +doc From 3d1b3086a7cd054bc263ab9d717e049941b5a7bf Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 3 Jul 2017 17:49:37 -0700 Subject: [PATCH 07/95] optional hierarch kept and images file type that copies files to the target directory. --- docco.js | 170 ++++++++++++++++++++++++--------------- docco.js.map | 10 +++ docco.litcoffee | 110 ++++++++++++++++++------- package.json | 37 +++++---- resources/languages.json | 1 + test/fakes/.docco.json | 6 +- 6 files changed, 224 insertions(+), 110 deletions(-) create mode 100644 docco.js.map diff --git a/docco.js b/docco.js index 68c94f17..20a694bb 100644 --- a/docco.js +++ b/docco.js @@ -1,14 +1,8 @@ -// Generated by CoffeeScript 1.9.1 +// Generated by CoffeeScript 2.0.0-beta3 (function() { - var Docco, _, buildMatchers, commander, configure, defaults, document, format, fs, getLanguage, highlightjs, languages, marked, parse, path, run, version, write, - slice = [].slice; + var Docco, _, buildMatchers, commander, configure, defaults, document, format, fs, getLanguage, glob, highlightjs, languages, marked, parse, path, run, version, write; - document = function(options, callback) { - var config; - if (options == null) { - options = {}; - } - config = configure(options); + document = function(config = {}, callback) { return fs.mkdirs(config.output, function() { var complete, copyAsset, files, nextFile; callback || (callback = function(error) { @@ -27,50 +21,69 @@ if (error) { return callback(error); } - if (fs.existsSync(config["public"])) { - return copyAsset(config["public"], callback); + if (fs.existsSync(config.public)) { + return copyAsset(config.public, callback); } return callback(); }); }; files = config.sources.slice(); nextFile = function() { - var source; + var lang, source, toDirectory, toFile; 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(); - } - }); + if (config.keepHierarchy) { + toDirectory = config.root + '/' + config.output + '/' + (path.dirname(source)); + } else { + toDirectory = config.output; + } + if (!fs.existsSync(toDirectory)) { + fs.mkdirsSync(toDirectory); + } + lang = getLanguage(source, config); + if (lang.copy) { + toFile = toDirectory + '/' + path.basename(source); + 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, code, config); + format(source, sections, config); + toFile = toDirectory + '/' + (path.basename(source, path.extname(source))); + console.log(`Write To (source): ${source} or to ${toFile}`); + write(source, toFile, sections, config); + if (files.length) { + return nextFile(); + } else { + return complete(); + } + }); + } }; return nextFile(); }); }; - parse = function(source, code, config) { + 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 - }); + sections.push({docsText, codeText}); return hasCode = docsText = codeText = ''; }; if (lang.literate) { @@ -115,7 +128,7 @@ 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); + console.warn(`docco: couldn't highlight code block with unknown language '${lang}' in ${source}`); return code; } } @@ -125,16 +138,16 @@ section = sections[i]; code = highlightjs.highlight(language.name, section.codeText).value; code = code.replace(/\s+$/, ''); - section.codeHtml = "
      " + code + "
      "; + section.codeHtml = `
      ${code}
      `; results.push(section.docsHtml = marked(section.docsText)); } return results; }; - write = function(source, sections, config) { + write = function(source, to, sections, config) { var destination, first, firstSection, hasTitle, html, title; destination = function(file) { - return path.join(config.output, path.basename(file, path.extname(file)) + '.html'); + return to + '.html'; }; firstSection = _.find(sections, function(section) { return section.docsText.length > 0; @@ -147,14 +160,14 @@ html = config.template({ sources: config.sources, css: path.basename(config.css), - title: title, - hasTitle: hasTitle, - sections: sections, - path: path, - destination: destination + title, + hasTitle, + sections, + path, + destination }); - console.log("docco: " + source + " -> " + (destination(source))); - return fs.writeFileSync(destination(source), html); + console.log(`docco: ${source} -> ${destination(to)}`); + return fs.writeFileSync(destination(to), html); }; defaults = { @@ -164,12 +177,15 @@ css: null, extension: null, languages: {}, - marked: null + marked: null, + setup: '.docco.json', + help: false, + keepHierarchy: true }; configure = function(options) { var config, dir; - config = _.extend({}, defaults, _.pick.apply(_, [options].concat(slice.call(_.keys(defaults))))); + config = _.extend({}, defaults, _.pick(options, ..._.keys(defaults))); config.languages = buildMatchers(config.languages); if (options.template) { if (!options.css) { @@ -179,7 +195,7 @@ } else { dir = config.layout = path.join(__dirname, 'resources', config.layout); if (fs.existsSync(path.join(dir, 'public'))) { - config["public"] = 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'); @@ -192,7 +208,7 @@ var lang; lang = getLanguage(source, config); if (!lang) { - console.warn("docco: skipped unknown type (" + (path.basename(source)) + ")"); + console.warn(`docco: skipped unknown type (${path.basename(source)})`); } return lang; }).sort(); @@ -211,13 +227,17 @@ highlightjs = require('highlight.js'); + path = require('path'); + + glob = require('glob'); + languages = JSON.parse(fs.readFileSync(path.join(__dirname, 'resources', 'languages.json'))); buildMatchers = function(languages) { var ext, l; for (ext in languages) { l = languages[ext]; - l.commentMatcher = RegExp("^\\s*" + l.symbol + "\\s?"); + l.commentMatcher = RegExp(`^\\s*${l.symbol}\\s?`); l.commentFilter = /(^#![\/]|^\s*#\{)/; } return languages; @@ -242,26 +262,42 @@ 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 = process.argv) { + var config, file, files, globName, j, k, len, len1, ref, setup; + 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('-k, --keep', 'Keep the directory hierarchy', config.keepHierarchy).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); + 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); + config.root = process.cwd(); + console.log("root directory:" + config.root); + if (config.sources.length !== 0) { + files = []; + ref = config.sources; + for (j = 0, len = ref.length; j < len; j++) { + globName = ref[j]; + files = _.flatten(_.union(files, glob.sync(path.resolve(config.root, globName)))); + } + config.sources = []; + for (k = 0, len1 = files.length; k < len1; k++) { + file = files[k]; + config.sources.push(path.relative(config.root, file)); + } + console.log("---------------------------------------------------------------------"); + console.log("Files:" + JSON.stringify(config.sources, null, 2)); + console.log("---------------------------------------------------------------------"); + document(config); } else { - return console.log(commander.helpInformation()); + console.log(commander.helpInformation()); } }; - Docco = module.exports = { - run: run, - document: document, - parse: parse, - format: format, - version: version - }; + Docco = module.exports = {run, document, parse, format, version}; }).call(this); + +//# sourceMappingURL=docco.js.map diff --git a/docco.js.map b/docco.js.map new file mode 100644 index 00000000..d148d7e4 --- /dev/null +++ b/docco.js.map @@ -0,0 +1,10 @@ +{ + "version": 3, + "file": "docco.js", + "sourceRoot": "", + "sources": [ + "docco.litcoffee" + ], + "names": [], + "mappings": "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" +} \ No newline at end of file diff --git a/docco.litcoffee b/docco.litcoffee index cb0a291e..91cd1fcb 100644 --- a/docco.litcoffee +++ b/docco.litcoffee @@ -77,15 +77,15 @@ 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 - + 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 @@ -94,16 +94,46 @@ out in an HTML template. files = config.sources.slice() - nextFile = -> + 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() +If keeping the directory hierarchy, then insert the file's relative directory in to the path. + + if config.keepHierarchy + toDirectory = config.root + '/' + config.output + '/' + (path.dirname source) + else + toDirectory = config.output + +Make sure the target directory exits. + + # todo: async versions of exits ans mkdir. + if !fs.existsSync(toDirectory) + fs.mkdirsSync(toDirectory) + +Implementation of copying files if specified in the language file + + lang = getLanguage source, config + if lang.copy + toFile = toDirectory + '/' + path.basename source + 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, code, config + format source, sections, config + toFile = toDirectory + '/' + (path.basename source, path.extname source) + + console.log("Write To (source): #{source} or to #{toFile}") + + write source, toFile, sections, config + if files.length then nextFile() else complete() nextFile() @@ -192,10 +222,10 @@ 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) -> + write = (source, to, sections, config) -> destination = (file) -> - path.join(config.output, path.basename(file, path.extname(file)) + '.html') + to+'.html' The **title** of the file is either the first heading in the prose, or the name of the source file. @@ -209,8 +239,8 @@ name of the source file. 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 + console.log "docco: #{source} -> #{destination to}" + fs.writeFileSync destination(to), html Configuration @@ -227,6 +257,9 @@ user-specified options. extension: null languages: {} marked: null + setup: '.docco.json' + help: false + keepHierarchy: true **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 @@ -276,6 +309,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 @@ -315,7 +350,6 @@ Keep it DRY. Extract the docco **version** from `package.json` version = JSON.parse(fs.readFileSync(path.join(__dirname, 'package.json'))).version - Command Line Interface ---------------------- @@ -323,23 +357,45 @@ 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') + .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('-k, --keep', 'Keep the directory hierarchy', config.keepHierarchy) .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) + .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 + + setup = path.resolve config.setup + if fs.existsSync(setup) + config = _.extend(config, JSON.parse fs.readFileSync setup) if setup + + config.root = process.cwd() + console.log("root directory:"+config.root) + if config.sources.length isnt 0 + files =[] + for globName in config.sources + files = _.flatten _.union files, glob.sync path.resolve config.root, globName + config.sources = [] + for file in files + config.sources.push path.relative(config.root, file) + + console.log("---------------------------------------------------------------------") + console.log("Files:"+JSON.stringify(config.sources,null,2)) + console.log("---------------------------------------------------------------------") + document config else console.log commander.helpInformation() - + return Public API ---------- diff --git a/package.json b/package.json index e80f85fa..fac7f5f1 100644 --- a/package.json +++ b/package.json @@ -1,26 +1,35 @@ { - "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": "0.7.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", + "highlight.js": ">= 8.0.x", + "marked": ">= 0.2.7", + "path": "^0.12.7", + "shelljs": "^0.7.8", + "underscore": ">= 1.0.0" }, - "main" : "./docco", + "main": "./docco", "bin": { - "docco": "./bin/docco" + "docco": "./bin/docco" } } diff --git a/resources/languages.json b/resources/languages.json index c1b6799d..3be4eee7 100644 --- a/resources/languages.json +++ b/resources/languages.json @@ -29,6 +29,7 @@ ".hs": {"name": "haskell", "symbol": "--"}, ".ini": {"name": "ini", "symbol": ";"}, ".jade": {"name": "jade", "symbol": "//-"}, + ".jpg": {"name": "image", "copy": true}, ".js": {"name": "javascript", "symbol": "//"}, ".jsm": {"name": "javascript", "symbol": "//"}, ".jsx": {"name": "javascript", "symbol": "//"}, diff --git a/test/fakes/.docco.json b/test/fakes/.docco.json index 62b84f2d..c3701b32 100644 --- a/test/fakes/.docco.json +++ b/test/fakes/.docco.json @@ -1,7 +1,9 @@ { - "files": [ + "sources": [ "src/**/*.js", + "src/**/*.coffee", + "src/**/*.java", "README.md", - "images/*.jpg" + "images/**/*.jpg" ] } From 467c5ab4db2817c887e06e1e9f787f9224cb61dd Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 3 Jul 2017 18:25:22 -0700 Subject: [PATCH 08/95] flag changed to flatten. --- docco.js | 10 +++++----- docco.js.map | 2 +- docco.litcoffee | 11 ++++++----- test/fakes/.adocco.json | 9 +++++++++ 4 files changed, 21 insertions(+), 11 deletions(-) create mode 100644 test/fakes/.adocco.json diff --git a/docco.js b/docco.js index 20a694bb..2a6029b2 100644 --- a/docco.js +++ b/docco.js @@ -31,10 +31,10 @@ nextFile = function() { var lang, source, toDirectory, toFile; source = files.shift(); - if (config.keepHierarchy) { - toDirectory = config.root + '/' + config.output + '/' + (path.dirname(source)); - } else { + if (config.flatten) { toDirectory = config.output; + } else { + toDirectory = config.root + '/' + config.output + '/' + (path.dirname(source)); } if (!fs.existsSync(toDirectory)) { fs.mkdirsSync(toDirectory); @@ -180,7 +180,7 @@ marked: null, setup: '.docco.json', help: false, - keepHierarchy: true + flatten: false }; configure = function(options) { @@ -265,7 +265,7 @@ run = function(args = process.argv) { var config, file, files, globName, j, k, len, len1, ref, setup; 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('-k, --keep', 'Keep the directory hierarchy', config.keepHierarchy).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"; + 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); setup = path.resolve(config.setup); if (fs.existsSync(setup)) { diff --git a/docco.js.map b/docco.js.map index d148d7e4..3961986d 100644 --- a/docco.js.map +++ b/docco.js.map @@ -6,5 +6,5 @@ "docco.litcoffee" ], "names": [], - "mappings": "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" + "mappings": "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" } \ No newline at end of file diff --git a/docco.litcoffee b/docco.litcoffee index 6f96fdb0..8c07026f 100644 --- a/docco.litcoffee +++ b/docco.litcoffee @@ -99,10 +99,10 @@ out in an HTML template. If keeping the directory hierarchy, then insert the file's relative directory in to the path. - if config.keepHierarchy - toDirectory = config.root + '/' + config.output + '/' + (path.dirname source) - else + if config.flatten toDirectory = config.output + else + toDirectory = config.root + '/' + config.output + '/' + (path.dirname source) Make sure the target directory exits. @@ -259,7 +259,7 @@ user-specified options. marked: null setup: '.docco.json' help: false - keepHierarchy: true + flatten: false **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 @@ -331,6 +331,7 @@ Does the line begin with a comment? Ignore [hashbangs](http://en.wikipedia.org/wiki/Shebang_%28Unix%29) and interpolations... l.commentFilter = /(^#![/]|^\s*#\{)/ + languages languages = buildMatchers languages @@ -363,7 +364,7 @@ Parse options using [Commander](https://github.com/visionmedia/commander.js). .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('-k, --keep', 'Keep the directory hierarchy', config.keepHierarchy) + .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) diff --git a/test/fakes/.adocco.json b/test/fakes/.adocco.json new file mode 100644 index 00000000..c3701b32 --- /dev/null +++ b/test/fakes/.adocco.json @@ -0,0 +1,9 @@ +{ + "sources": [ + "src/**/*.js", + "src/**/*.coffee", + "src/**/*.java", + "README.md", + "images/**/*.jpg" + ] +} From c8dc8f569d48d9ae18256170ca9aa221cf4f07b9 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 3 Jul 2017 18:25:50 -0700 Subject: [PATCH 09/95] removed docco config for testing of parameter. --- test/fakes/.docco.json | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 test/fakes/.docco.json diff --git a/test/fakes/.docco.json b/test/fakes/.docco.json deleted file mode 100644 index c3701b32..00000000 --- a/test/fakes/.docco.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "sources": [ - "src/**/*.js", - "src/**/*.coffee", - "src/**/*.java", - "README.md", - "images/**/*.jpg" - ] -} From 3bc0468eefff1a7df2a378487e771ebbd232dee7 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 3 Jul 2017 18:26:03 -0700 Subject: [PATCH 10/95] bunny poem. --- test/fakes/README.md | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/test/fakes/README.md b/test/fakes/README.md index 16d1899e..2a3252c0 100644 --- a/test/fakes/README.md +++ b/test/fakes/README.md @@ -2,15 +2,15 @@ With Fluffy Bunnies! -## The Happy Bunny - Poem by Christopher Howie +## The Happy Bunny - Poem by Robb Lovell ![Readme.md](images/fluffybunny1.jpg) ``` -I am the happy bunny. -I hop, and when I hop, -I laugh, and I squeak. -Squeak, Squeak, Squeak, I go! +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. ``` @@ -20,10 +20,11 @@ Squinches to and fro. ![Readme.md](images/fluffybunny2.jpg) ``` I am the happy bunny. -I hop, and when I hop, -I am carefree, happy, and full of glee, +I hop high and low, +I am very happy, and full of glee, When I go hopping on my little tree! -Hop, Hop, Hop, I go! My little bunny legs +I Hop, Hop, Hop, and you see me go! +My little bunny legs Leap to and fro. ``` ### Stanza 3 @@ -31,20 +32,24 @@ Leap to and fro. ![Readme.md](images/fluffybunny3.jpg) ``` -I am the happy bunny. -I hop, and when I hop, -I see my master, as he looks at my cage -He smiles, and laughs when I wiggle my ears! -Wiggle, Wiggle, Wiggle, I go! My little bunny ears +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. ``` ### Stanza 4 ``` -I love him, and he loves me, and he -Makes me the happiest bunny I could be. +I love them, they love me, +that makes me the most happy +bunny I can be. ``` ## Author -Christopher Howie \ No newline at end of file +Robb Lovell + +(modified from Christopher Howie) \ No newline at end of file From e6dd9ba4b13164e0f5f3f95274f452f133a3a20f Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 3 Jul 2017 19:12:20 -0700 Subject: [PATCH 11/95] makes markdown images show on the right side of the page. --- docco.js | 38 +++++++++++++++++++++---- docco.js.map | 2 +- docco.litcoffee | 36 ++++++++++++++++++++--- resources/languages.json | 4 +-- test/fakes/.adocco.json | 1 + test/fakes/README.md | 13 ++++++--- test/fakes/src/fake_coffee.coffee | 5 ++-- test/fakes/src/fake_coffee2.coffee | 36 +++++++++++------------ test/fakes/src/fake_js.js | 2 ++ test/fakes/src/fake_litcoffee.js | 26 +++++++++++++++++ test/fakes/src/fake_litcoffee.js.map | 10 +++++++ test/fakes/src/fake_litcoffee.litcoffee | 2 +- 12 files changed, 137 insertions(+), 38 deletions(-) create mode 100644 test/fakes/src/fake_litcoffee.js create mode 100644 test/fakes/src/fake_litcoffee.js.map diff --git a/docco.js b/docco.js index 2a6029b2..78aff435 100644 --- a/docco.js +++ b/docco.js @@ -77,7 +77,7 @@ }; parse = function(source, code, config = {}) { - var codeText, docsText, hasCode, i, isText, j, k, lang, len, len1, line, lines, match, maybeCode, save, sections; + var LINK_REGEX, TEXT_REGEX, codeText, docsText, hasCode, i, isText, j, k, lang, len, len1, line, lines, link, links, match, maybeCode, save, sections, text, texts; lines = code.split('\n'); sections = []; lang = getLanguage(source, config); @@ -95,7 +95,25 @@ } for (k = 0, len1 = lines.length; k < len1; k++) { line = lines[k]; - if (line.match(lang.commentMatcher) && !line.match(lang.commentFilter)) { + if (lang.linkMatcher && line.match(lang.linkMatcher)) { + console.log(line); + LINK_REGEX = /\((.+)\)/; + TEXT_REGEX = /\[(.+)\]/; + links = LINK_REGEX.exec(line); + texts = TEXT_REGEX.exec(line); + if ((links != null) && links.length > 1 && (texts != null) && texts.length > 1) { + link = links[1]; + text = texts[1]; + codeText += '

      ' + text + '

      ' + '\n'; + } + hasCode = true; + } else if (lang.sectionMatcher && line.match(lang.sectionMatcher)) { + if (hasCode) { + save(); + } + docsText += (line = line.replace(lang.commentMatcher, '')) + '\n'; + save(); + } else if (line.match(lang.commentMatcher) && !line.match(lang.commentFilter)) { if (hasCode) { save(); } @@ -136,9 +154,13 @@ 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 = `
      ${code}
      `; + if (language.html) { + section.codeHtml = section.codeText; + } else { + code = highlightjs.highlight(language.name, section.codeText).value; + code = code.replace(/\s+$/, ''); + section.codeHtml = `
      ${code}
      `; + } results.push(section.docsHtml = marked(section.docsText)); } return results; @@ -239,6 +261,12 @@ l = languages[ext]; l.commentMatcher = RegExp(`^\\s*${l.symbol}\\s?`); l.commentFilter = /(^#![\/]|^\s*#\{)/; + if (l.link) { + l.linkMatcher = RegExp(`^${l.link}\\[(.+)\\]\\((.+)\\)`); + } + if (l.section) { + l.sectionMatcher = RegExp(`^${l.section}\\s?`); + } } return languages; }; diff --git a/docco.js.map b/docco.js.map index 3961986d..542ab674 100644 --- a/docco.js.map +++ b/docco.js.map @@ -6,5 +6,5 @@ "docco.litcoffee" ], "names": [], - "mappings": "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" + "mappings": "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" } \ No newline at end of file diff --git a/docco.litcoffee b/docco.litcoffee index 8c07026f..27bb17d3 100644 --- a/docco.litcoffee +++ b/docco.litcoffee @@ -169,7 +169,22 @@ normal below. lang.symbol + ' ' + line for line in lines - if line.match(lang.commentMatcher) and not line.match(lang.commentFilter) + if lang.linkMatcher and line.match(lang.linkMatcher) + console.log(line) + LINK_REGEX = /\((.+)\)/ + TEXT_REGEX = /\[(.+)\]/ + links = LINK_REGEX.exec(line) + texts = TEXT_REGEX.exec(line) + if links? and links.length > 1 and texts? and texts.length > 1 + link = links[1] + text = texts[1] + codeText += '

      '+text+'

      ' + '\n' + hasCode = yes + else if lang.sectionMatcher and line.match(lang.sectionMatcher) + save() if hasCode + docsText += (line = line.replace(lang.commentMatcher, '')) + '\n' + save() # if /^(---+|===+)$/.test line + else 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 @@ -213,9 +228,12 @@ if not specified. } for section, i in sections - code = highlightjs.highlight(language.name, section.codeText).value - code = code.replace(/\s+$/, '') - section.codeHtml = "
      #{code}
      " + if language.html + section.codeHtml = section.codeText + else + code = highlightjs.highlight(language.name, section.codeText).value + code = code.replace(/\s+$/, '') + section.codeHtml = "
      #{code}
      " section.docsHtml = marked(section.docsText) Once all of the code has finished highlighting, we can **write** the resulting @@ -331,6 +349,16 @@ Does the line begin with a comment? Ignore [hashbangs](http://en.wikipedia.org/wiki/Shebang_%28Unix%29) and interpolations... l.commentFilter = /(^#![/]|^\s*#\{)/ + +Look for links if necessary. + + if l.link + l.linkMatcher = ///^#{l.link}\[(.+)\]\((.+)\)/// + +Look for explict section breaks + + if l.section + l.sectionMatcher = ///^#{l.section}\s?/// languages languages = buildMatchers languages diff --git a/resources/languages.json b/resources/languages.json index e405645e..6f62d087 100644 --- a/resources/languages.json +++ b/resources/languages.json @@ -44,8 +44,8 @@ ".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}, + ".md": {"name": "markdown", "symbol": "", "section": "#", "link": "!", "html": true}, ".mm": {"name": "objectivec", "symbol": "//"}, ".p": {"name": "delphi", "symbol": "//"}, ".pas": {"name": "delphi", "symbol": "//"}, diff --git a/test/fakes/.adocco.json b/test/fakes/.adocco.json index c3701b32..30bb2758 100644 --- a/test/fakes/.adocco.json +++ b/test/fakes/.adocco.json @@ -2,6 +2,7 @@ "sources": [ "src/**/*.js", "src/**/*.coffee", + "src/**/*.litcoffee", "src/**/*.java", "README.md", "images/**/*.jpg" diff --git a/test/fakes/README.md b/test/fakes/README.md index 2a3252c0..cbbdc891 100644 --- a/test/fakes/README.md +++ b/test/fakes/README.md @@ -4,8 +4,6 @@ With Fluffy Bunnies! ## The Happy Bunny - Poem by Robb Lovell -![Readme.md](images/fluffybunny1.jpg) - ``` I am a happy bunny. I hop high and low, @@ -15,9 +13,10 @@ My little bunny nose Squinches to and fro. ``` +![Readme.md](images/fluffybunny1.jpg) + ### Stanza 2 -![Readme.md](images/fluffybunny2.jpg) ``` I am the happy bunny. I hop high and low, @@ -27,9 +26,12 @@ I Hop, Hop, Hop, and you see me go! My little bunny legs Leap to and fro. ``` + +![Readme.md](images/fluffybunny2.jpg) + + ### Stanza 3 -![Readme.md](images/fluffybunny3.jpg) ``` I am a happy bunny. @@ -41,6 +43,9 @@ My little bunny ears Wriggle to and fro. ``` +![Readme.md](images/fluffybunny3.jpg) + + ### Stanza 4 ``` I love them, they love me, diff --git a/test/fakes/src/fake_coffee.coffee b/test/fakes/src/fake_coffee.coffee index 67cb1be9..48e4ff33 100644 --- a/test/fakes/src/fake_coffee.coffee +++ b/test/fakes/src/fake_coffee.coffee @@ -1,6 +1,5 @@ -### - CoffeeScript. -### +# CoffeeScript. + # Assignment: number = 42 opposite = true diff --git a/test/fakes/src/fake_coffee2.coffee b/test/fakes/src/fake_coffee2.coffee index 55608b94..02cca2ae 100644 --- a/test/fakes/src/fake_coffee2.coffee +++ b/test/fakes/src/fake_coffee2.coffee @@ -1,25 +1,25 @@ #! /usr/bin/env coffee # fizzbuzz.litcoffee -### -This is the fizzbuzz test in literate CoffeeScript. -### + +# 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. -### + +# 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 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: diff --git a/test/fakes/src/fake_js.js b/test/fakes/src/fake_js.js index 27951545..4b6eec77 100644 --- a/test/fakes/src/fake_js.js +++ b/test/fakes/src/fake_js.js @@ -1,3 +1,5 @@ +// Express boilerplate. + var express = require('express'); var path = require('path'); var favicon = require('serve-favicon'); diff --git a/test/fakes/src/fake_litcoffee.js b/test/fakes/src/fake_litcoffee.js new file mode 100644 index 00000000..c34c5d47 --- /dev/null +++ b/test/fakes/src/fake_litcoffee.js @@ -0,0 +1,26 @@ +// Generated by CoffeeScript 2.0.0-beta3 +(function() { + var fizzbuzz; + + fizzbuzz = function(number) { + var i, results, x; + 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; + }; + +}).call(this); + +//# sourceMappingURL=fake_litcoffee.js.map diff --git a/test/fakes/src/fake_litcoffee.js.map b/test/fakes/src/fake_litcoffee.js.map new file mode 100644 index 00000000..e6b587c5 --- /dev/null +++ b/test/fakes/src/fake_litcoffee.js.map @@ -0,0 +1,10 @@ +{ + "version": 3, + "file": "fake_litcoffee.js", + "sourceRoot": "", + "sources": [ + "fake_litcoffee.litcoffee" + ], + "names": [], + "mappings": ";AA0BI;AAAA,MAAA;;EAAA,QAAA,GAAW,QAAA,CAAC,MAAD,CAAA;AACT,QAAA;IAAA,IAAqB,CAAA,KAAK,MAAA,GAAS,EAAnC;AAAA,aAAO,WAAP;;IACA,IAAqB,CAAA,KAAK,MAAA,GAAS,CAAnC;AAAA,aAAO,OAAP;;IACA,IAAqB,CAAA,KAAK,MAAA,GAAS,CAAnC;AAAA,aAAO,OAAP;;IACA,MAAM,CAAC,QAAP,CAAA;AAEA;SAAS,4BAAT;mBAGE,OAAO,CAAC,GAAR,CAAY,CAAA,CAAA,CAAG,CAAH,CAAA,MAAA,CAAA,CAAa,QAAA,CAAS,CAAT,CAAb,CAAA,CAAZ;AAHF;;EANS;AAAX" +} \ No newline at end of file diff --git a/test/fakes/src/fake_litcoffee.litcoffee b/test/fakes/src/fake_litcoffee.litcoffee index 25adf8ae..fc02ee9c 100644 --- a/test/fakes/src/fake_litcoffee.litcoffee +++ b/test/fakes/src/fake_litcoffee.litcoffee @@ -21,7 +21,7 @@ said yes and made a statement to not test the interviewee. The author later lear 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) -> From 15bd0331e2336b57b63886fb0c7f075ebc464c43 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 3 Jul 2017 19:31:01 -0700 Subject: [PATCH 12/95] flattened mode gets the css file correct now. --- docco.js | 11 +++++++++-- docco.js.map | 2 +- docco.litcoffee | 10 +++++++++- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/docco.js b/docco.js index 78aff435..275af979 100644 --- a/docco.js +++ b/docco.js @@ -167,7 +167,7 @@ }; write = function(source, to, sections, config) { - var destination, first, firstSection, hasTitle, html, title; + var cssPath, cssRelative, destination, first, firstSection, hasTitle, html, title, toDirectory; destination = function(file) { return to + '.html'; }; @@ -179,9 +179,16 @@ } hasTitle = first && first.type === 'heading' && first.depth === 1; title = hasTitle ? first.text : path.basename(source); + toDirectory = config.root + '/' + config.output + '/' + (path.dirname(source)); + cssPath = path.basename(config.css); + if (config.flatten) { + cssRelative = path.basename(cssPath); + } else { + cssRelative = path.relative(toDirectory, config.root + "/" + config.output + "/" + cssPath); + } html = config.template({ sources: config.sources, - css: path.basename(config.css), + css: cssRelative, title, hasTitle, sections, diff --git a/docco.js.map b/docco.js.map index 542ab674..14bac20e 100644 --- a/docco.js.map +++ b/docco.js.map @@ -6,5 +6,5 @@ "docco.litcoffee" ], "names": [], - "mappings": "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" + "mappings": "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" } \ No newline at end of file diff --git a/docco.litcoffee b/docco.litcoffee index 27bb17d3..7ceaa3ca 100644 --- a/docco.litcoffee +++ b/docco.litcoffee @@ -254,7 +254,15 @@ name of the source file. 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), + toDirectory = config.root + '/' + config.output + '/' + (path.dirname source) + cssPath = path.basename(config.css) + + if config.flatten + cssRelative = path.basename(cssPath) + else + cssRelative = path.relative(toDirectory, config.root+"/"+config.output+"/"+cssPath) + + html = config.template {sources: config.sources, css: cssRelative, title, hasTitle, sections, path, destination,} console.log "docco: #{source} -> #{destination to}" From 78c8e2cfa6fc7d440d0d552cc920c217c574e772 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 3 Jul 2017 22:12:47 -0700 Subject: [PATCH 13/95] Fix for links. Breaking change to themes. --- docco.js | 48 +++++++++++++++++++++++++++--------- docco.js.map | 2 +- docco.litcoffee | 47 ++++++++++++++++++++++++++--------- resources/classic/docco.jst | 2 +- resources/linear/docco.jst | 2 +- resources/parallel/docco.jst | 2 +- 6 files changed, 75 insertions(+), 28 deletions(-) diff --git a/docco.js b/docco.js index 275af979..4b3990e1 100644 --- a/docco.js +++ b/docco.js @@ -42,6 +42,7 @@ lang = getLanguage(source, config); if (lang.copy) { toFile = toDirectory + '/' + path.basename(source); + console.log(`docco: ${source} -> ${toFile}`); return fs.copy(source, toFile, function(error, result) { if (error) { return callback(error); @@ -62,7 +63,6 @@ sections = parse(source, code, config); format(source, sections, config); toFile = toDirectory + '/' + (path.basename(source, path.extname(source))); - console.log(`Write To (source): ${source} or to ${toFile}`); write(source, toFile, sections, config); if (files.length) { return nextFile(); @@ -96,7 +96,6 @@ for (k = 0, len1 = lines.length; k < len1; k++) { line = lines[k]; if (lang.linkMatcher && line.match(lang.linkMatcher)) { - console.log(line); LINK_REGEX = /\((.+)\)/; TEXT_REGEX = /\[(.+)\]/; links = LINK_REGEX.exec(line); @@ -167,9 +166,9 @@ }; write = function(source, to, sections, config) { - var cssPath, cssRelative, destination, first, firstSection, hasTitle, html, title, toDirectory; + var asource, asourcetToDirectory, cssPath, cssRelative, destination, first, firstSection, from, hasTitle, html, j, len, linkPath, ref, relativeLink, sourceNoExt, title, toDirectory, toExtName, toLinkBasenameNoExt, toLinkExtName, toSources; destination = function(file) { - return to + '.html'; + return file; }; firstSection = _.find(sections, function(section) { return section.docsText.length > 0; @@ -180,14 +179,43 @@ hasTitle = first && first.type === 'heading' && first.depth === 1; title = hasTitle ? first.text : path.basename(source); toDirectory = config.root + '/' + config.output + '/' + (path.dirname(source)); + toExtName = path.extname(source); + if (toExtName !== '.jpg' && toExtName !== '.png') { + toExtName = '.html'; + } cssPath = path.basename(config.css); if (config.flatten) { - cssRelative = path.basename(cssPath); + cssRelative = cssPath; } else { cssRelative = path.relative(toDirectory, config.root + "/" + config.output + "/" + cssPath); } + sourceNoExt = path.basename(source, path.extname(source)); + toSources = []; + ref = config.sources; + for (j = 0, len = ref.length; j < len; j++) { + asource = ref[j]; + linkPath = path.basename(asource); + asourcetToDirectory = config.root + '/' + config.output + '/' + (path.dirname(asource)); + toLinkBasenameNoExt = path.basename(asource, path.extname(asource)); + toLinkExtName = path.extname(asource); + if (toLinkExtName !== '.jpg' && toLinkExtName !== '.png') { + toLinkExtName = '.html'; + } + from = asourcetToDirectory + '/' + toLinkBasenameNoExt + toLinkExtName; + if (config.flatten) { + relativeLink = toLinkBasenameNoExt + toLinkExtName; + } else { + relativeLink = path.relative(to, from); + if (relativeLink === '') { + relativeLink = sourceNoExt; + } else { + relativeLink = relativeLink.slice(1); + } + } + toSources.push(relativeLink); + } html = config.template({ - sources: config.sources, + sources: toSources, css: cssRelative, title, hasTitle, @@ -195,8 +223,8 @@ path, destination }); - console.log(`docco: ${source} -> ${destination(to)}`); - return fs.writeFileSync(destination(to), html); + console.log(`docco: ${source} -> ${destination(to + toExtName)}`); + return fs.writeFileSync(destination(to + toExtName), html); }; defaults = { @@ -309,7 +337,6 @@ } } config.root = process.cwd(); - console.log("root directory:" + config.root); if (config.sources.length !== 0) { files = []; ref = config.sources; @@ -322,9 +349,6 @@ file = files[k]; config.sources.push(path.relative(config.root, file)); } - console.log("---------------------------------------------------------------------"); - console.log("Files:" + JSON.stringify(config.sources, null, 2)); - console.log("---------------------------------------------------------------------"); document(config); } else { console.log(commander.helpInformation()); diff --git a/docco.js.map b/docco.js.map index 14bac20e..7ed592c3 100644 --- a/docco.js.map +++ b/docco.js.map @@ -6,5 +6,5 @@ "docco.litcoffee" ], "names": [], - "mappings": "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" + "mappings": ";AA+EI;AAAA,MAAA;;EAAA,QAAA,GAAW,QAAA,CAAC,SAAS,CAAA,CAAV,EAAc,QAAd,CAAA;WAET,EAAE,CAAC,MAAH,CAAU,MAAM,CAAC,MAAjB,EAAyB,QAAA,CAAA,CAAA;AAEvB,UAAA;MAAA,aAAA,WAAa,QAAA,CAAC,KAAD,CAAA;QAAW,IAAe,KAAf;AAAA,gBAAM,MAAN;;MAAX;MACb,SAAA,GAAa,QAAA,CAAC,IAAD,EAAO,QAAP,CAAA;QACX,IAAA,CAAyB,EAAE,CAAC,UAAH,CAAc,IAAd,CAAzB;AAAA,iBAAO,QAAA,CAAA,EAAP;;eACA,EAAE,CAAC,IAAH,CAAQ,IAAR,EAAc,IAAI,CAAC,IAAL,CAAU,MAAM,CAAC,MAAjB,EAAyB,IAAI,CAAC,QAAL,CAAc,IAAd,CAAzB,CAAd,EAA6D,QAA7D;MAFW;MAIb,QAAA,GAAa,QAAA,CAAA,CAAA;eACX,SAAA,CAAU,MAAM,CAAC,GAAjB,EAAsB,QAAA,CAAC,KAAD,CAAA;UACpB,IAAyB,KAAzB;AAAA,mBAAO,QAAA,CAAS,KAAT,EAAP;;UACA,IAA4C,EAAE,CAAC,UAAH,CAAc,MAAM,CAAC,MAArB,CAA5C;AAAA,mBAAO,SAAA,CAAU,MAAM,CAAC,MAAjB,EAAyB,QAAzB,EAAP;;iBACA,QAAA,CAAA;QAHoB,CAAtB;MADW;MAMb,KAAA,GAAQ,MAAM,CAAC,OAAO,CAAC,KAAf,CAAA;MAER,QAAA,GAAW,QAAA,CAAA,CAAA;AACT,YAAA;QAAA,MAAA,GAAS,KAAK,CAAC,KAAN,CAAA;QAIT,IAAG,MAAM,CAAC,OAAV;UACE,WAAA,GAAc,MAAM,CAAC,OADvB;SAAA,MAAA;UAGE,WAAA,GAAc,MAAM,CAAC,IAAP,GAAc,GAAd,GAAoB,MAAM,CAAC,MAA3B,GAAoC,GAApC,GAA0C,CAAC,IAAI,CAAC,OAAL,CAAa,MAAb,CAAD,EAH1D;;QAQA,IAAG,CAAC,EAAE,CAAC,UAAH,CAAc,WAAd,CAAJ;UACE,EAAE,CAAC,UAAH,CAAc,WAAd,EADF;;QAKA,IAAA,GAAO,WAAA,CAAY,MAAZ,EAAoB,MAApB;QACP,IAAG,IAAI,CAAC,IAAR;UACE,MAAA,GAAS,WAAA,GAAc,GAAd,GAAoB,IAAI,CAAC,QAAL,CAAc,MAAd;UAC7B,OAAO,CAAC,GAAR,CAAY,CAAA,OAAA,CAAA,CAAU,MAAV,CAAA,IAAA,CAAA,CAAuB,MAAvB,CAAA,CAAZ;iBAEA,EAAE,CAAC,IAAH,CAAQ,MAAR,EAAgB,MAAhB,EAAwB,QAAA,CAAC,KAAD,EAAQ,MAAR,CAAA;YACtB,IAA0B,KAA1B;AAAA,qBAAO,QAAA,CAAS,KAAT,EAAP;;YACA,IAAG,KAAK,CAAC,MAAT;qBAAqB,QAAA,CAAA,EAArB;aAAA,MAAA;qBAAqC,QAAA,CAAA,EAArC;;UAFsB,CAAxB,EAJF;SAAA,MAAA;iBAWE,EAAE,CAAC,QAAH,CAAY,MAAZ,EAAoB,QAAA,CAAC,KAAD,EAAQ,MAAR,CAAA;AAClB,gBAAA;YAAA,IAA0B,KAA1B;AAAA,qBAAO,QAAA,CAAS,KAAT,EAAP;;YAEA,IAAA,GAAO,MAAM,CAAC,QAAP,CAAA;YACP,QAAA,GAAW,KAAA,CAAM,MAAN,EAAc,IAAd,EAAoB,MAApB;YACX,MAAA,CAAO,MAAP,EAAe,QAAf,EAAyB,MAAzB;YACA,MAAA,GAAS,WAAA,GAAc,GAAd,GAAoB,CAAC,IAAI,CAAC,QAAL,CAAc,MAAd,EAAsB,IAAI,CAAC,OAAL,CAAa,MAAb,CAAtB,CAAD;YAE7B,KAAA,CAAM,MAAN,EAAc,MAAd,EAAsB,QAAtB,EAAgC,MAAhC;YACA,IAAG,KAAK,CAAC,MAAT;qBAAqB,QAAA,CAAA,EAArB;aAAA,MAAA;qBAAqC,QAAA,CAAA,EAArC;;UATkB,CAApB,EAXF;;MAnBS;aAyCX,QAAA,CAAA;IAxDuB,CAAzB;EAFS;;EAiEX,KAAA,GAAQ,QAAA,CAAC,MAAD,EAAS,IAAT,EAAe,SAAS,CAAA,CAAxB,CAAA;AACN,QAAA;IAAA,KAAA,GAAW,IAAI,CAAC,KAAL,CAAW,IAAX;IACX,QAAA,GAAW;IACX,IAAA,GAAW,WAAA,CAAY,MAAZ,EAAoB,MAApB;IACX,OAAA,GAAW,QAAA,GAAW,QAAA,GAAW;IAEjC,IAAA,GAAO,QAAA,CAAA,CAAA;MACL,QAAQ,CAAC,IAAT,CAAc,CAAC,QAAD,EAAW,QAAX,CAAd;aACA,OAAA,GAAU,QAAA,GAAW,QAAA,GAAW;IAF3B;IAQP,IAAG,IAAI,CAAC,QAAR;MACE,MAAA,GAAS,SAAA,GAAY;AACrB,WAAA,+CAAA;;QACE,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,IAAI,CAAC,MAApB,GAAgC,EAD7B,GAGH,CAAA,MAAA,GAAS,IAAT,EACA,IAAI,CAAC,MAAL,GAAc,GAAd,GAAoB,IADpB;AAPJ,OAFF;;AAYA,SAAA,yCAAA;;MACE,IAAG,IAAI,CAAC,WAAL,IAAqB,IAAI,CAAC,KAAL,CAAW,IAAI,CAAC,WAAhB,CAAxB;QACE,UAAA,GAAa;QACb,UAAA,GAAa;QACb,KAAA,GAAQ,UAAU,CAAC,IAAX,CAAgB,IAAhB;QACR,KAAA,GAAQ,UAAU,CAAC,IAAX,CAAgB,IAAhB;QACR,IAAG,eAAA,IAAW,KAAK,CAAC,MAAN,GAAe,CAA1B,IAAgC,eAAhC,IAA2C,KAAK,CAAC,MAAN,GAAe,CAA7D;UACE,IAAA,GAAO,KAAM,CAAA,CAAA;UACb,IAAA,GAAO,KAAM,CAAA,CAAA;UACb,QAAA,IAAY,iBAAA,GAAkB,IAAlB,GAAuB,aAAvB,GAAqC,IAArC,GAA0C,YAA1C,GAAyD,KAHvE;;QAIA,OAAA,GAAU,KATZ;OAAA,MAUK,IAAG,IAAI,CAAC,cAAL,IAAwB,IAAI,CAAC,KAAL,CAAW,IAAI,CAAC,cAAhB,CAA3B;QACH,IAAU,OAAV;UAAA,IAAA,CAAA,EAAA;;QACA,QAAA,IAAY,CAAC,IAAA,GAAO,IAAI,CAAC,OAAL,CAAa,IAAI,CAAC,cAAlB,EAAkC,EAAlC,CAAR,CAAA,GAAiD;QAC7D,IAAA,CAAA,EAHG;OAAA,MAIA,IAAG,IAAI,CAAC,KAAL,CAAW,IAAI,CAAC,cAAhB,CAAA,IAAoC,CAAI,IAAI,CAAC,KAAL,CAAW,IAAI,CAAC,aAAhB,CAA3C;QACH,IAAU,OAAV;UAAA,IAAA,CAAA,EAAA;;QACA,QAAA,IAAY,CAAC,IAAA,GAAO,IAAI,CAAC,OAAL,CAAa,IAAI,CAAC,cAAlB,EAAkC,EAAlC,CAAR,CAAA,GAAiD;QAC7D,IAAU,eAAe,CAAC,IAAhB,CAAqB,IAArB,CAAV;UAAA,IAAA,CAAA,EAAA;SAHG;OAAA,MAAA;QAKH,OAAA,GAAU;QACV,QAAA,IAAY,IAAA,GAAO,KANhB;;AAfP;IAsBA,IAAA,CAAA;WAEA;EAlDM;;EAwDR,MAAA,GAAS,QAAA,CAAC,MAAD,EAAS,QAAT,EAAmB,MAAnB,CAAA;AACP,QAAA;IAAA,QAAA,GAAW,WAAA,CAAY,MAAZ,EAAoB,MAApB;IAIX,aAAA,GACE;MAAA,WAAA,EAAa;IAAb;IAEF,IAAG,MAAM,CAAC,MAAV;MACE,aAAA,GAAgB,MAAM,CAAC,OADzB;;IAGA,MAAM,CAAC,UAAP,CAAkB,aAAlB;IAMA,MAAM,CAAC,UAAP,CAAkB;MAChB,SAAA,EAAW,QAAA,CAAC,IAAD,EAAO,IAAP,CAAA;QACT,SAAA,OAAS,QAAQ,CAAC;QAElB,IAAG,WAAW,CAAC,WAAZ,CAAwB,IAAxB,CAAH;iBACE,WAAW,CAAC,SAAZ,CAAsB,IAAtB,EAA4B,IAA5B,CAAiC,CAAC,MADpC;SAAA,MAAA;UAGE,OAAO,CAAC,IAAR,CAAa,CAAA,4DAAA,CAAA,CAA+D,IAA/D,CAAA,KAAA,CAAA,CAA2E,MAA3E,CAAA,CAAb;iBACA,KAJF;;MAHS;IADK,CAAlB;AAWA;SAAA,kDAAA;;MACE,IAAG,QAAQ,CAAC,IAAZ;QACE,OAAO,CAAC,QAAR,GAAmB,OAAO,CAAC,SAD7B;OAAA,MAAA;QAGE,IAAA,GAAO,WAAW,CAAC,SAAZ,CAAsB,QAAQ,CAAC,IAA/B,EAAqC,OAAO,CAAC,QAA7C,CAAsD,CAAC;QAC9D,IAAA,GAAO,IAAI,CAAC,OAAL,CAAa,MAAb,EAAqB,EAArB;QACP,OAAO,CAAC,QAAR,GAAmB,CAAA,4BAAA,CAAA,CAA+B,IAA/B,CAAA,YAAA,EALrB;;mBAMA,OAAO,CAAC,QAAR,GAAmB,MAAA,CAAO,OAAO,CAAC,QAAf;AAPrB;;EA5BO;;EAyCT,KAAA,GAAQ,QAAA,CAAC,MAAD,EAAS,EAAT,EAAa,QAAb,EAAuB,MAAvB,CAAA;AAEN,QAAA;IAAA,WAAA,GAAc,QAAA,CAAC,IAAD,CAAA;aACZ;IADY;IAMd,YAAA,GAAe,CAAC,CAAC,IAAF,CAAO,QAAP,EAAiB,QAAA,CAAC,OAAD,CAAA;aAC9B,OAAO,CAAC,QAAQ,CAAC,MAAjB,GAA0B;IADI,CAAjB;IAEf,IAAkD,YAAlD;MAAA,KAAA,GAAQ,MAAM,CAAC,KAAP,CAAa,YAAY,CAAC,QAA1B,CAAoC,CAAA,CAAA,EAA5C;;IACA,QAAA,GAAW,KAAA,IAAU,KAAK,CAAC,IAAN,KAAc,SAAxB,IAAsC,KAAK,CAAC,KAAN,KAAe;IAChE,KAAA,GAAW,QAAH,GAAiB,KAAK,CAAC,IAAvB,GAAiC,IAAI,CAAC,QAAL,CAAc,MAAd;IAEzC,WAAA,GAAc,MAAM,CAAC,IAAP,GAAc,GAAd,GAAoB,MAAM,CAAC,MAA3B,GAAoC,GAApC,GAA0C,CAAC,IAAI,CAAC,OAAL,CAAa,MAAb,CAAD;IACxD,SAAA,GAAY,IAAI,CAAC,OAAL,CAAa,MAAb;IAEZ,IAAG,SAAA,KAAe,MAAf,IAA0B,SAAA,KAAe,MAA5C;MACE,SAAA,GAAY,QADd;;IAEA,OAAA,GAAU,IAAI,CAAC,QAAL,CAAc,MAAM,CAAC,GAArB;IAEV,IAAG,MAAM,CAAC,OAAV;MACE,WAAA,GAAc,QADhB;KAAA,MAAA;MAGE,WAAA,GAAc,IAAI,CAAC,QAAL,CAAc,WAAd,EAA2B,MAAM,CAAC,IAAP,GAAY,GAAZ,GAAgB,MAAM,CAAC,MAAvB,GAA8B,GAA9B,GAAkC,OAA7D,EAHhB;;IAKA,WAAA,GAAc,IAAI,CAAC,QAAL,CAAc,MAAd,EAAqB,IAAI,CAAC,OAAL,CAAa,MAAb,CAArB;IAEd,SAAA,GAAY;AACZ;AAAA,SAAA,qCAAA;;MACE,QAAA,GAAW,IAAI,CAAC,QAAL,CAAc,OAAd;MACX,mBAAA,GAAsB,MAAM,CAAC,IAAP,GAAc,GAAd,GAAoB,MAAM,CAAC,MAA3B,GAAoC,GAApC,GAA0C,CAAC,IAAI,CAAC,OAAL,CAAa,OAAb,CAAD;MAEhE,mBAAA,GAAsB,IAAI,CAAC,QAAL,CAAc,OAAd,EAAsB,IAAI,CAAC,OAAL,CAAa,OAAb,CAAtB;MACtB,aAAA,GAAgB,IAAI,CAAC,OAAL,CAAa,OAAb;MAEhB,IAAG,aAAA,KAAmB,MAAnB,IAA8B,aAAA,KAAmB,MAApD;QACE,aAAA,GAAgB,QADlB;;MAEA,IAAA,GAAO,mBAAA,GAAsB,GAAtB,GAA6B,mBAA7B,GAAmD;MAE1D,IAAG,MAAM,CAAC,OAAV;QACE,YAAA,GAAe,mBAAA,GAAsB,cADvC;OAAA,MAAA;QAGE,YAAA,GAAe,IAAI,CAAC,QAAL,CAAc,EAAd,EAAkB,IAAlB;QACf,IAAG,YAAA,KAAgB,EAAnB;UACE,YAAA,GAAe,YADjB;SAAA,MAAA;UAGE,YAAA,GAAe,YAAY,CAAC,KAAb,CAAmB,CAAnB,EAHjB;SAJF;;MAQA,SAAS,CAAC,IAAV,CAAe,YAAf;AAnBF;IAqBA,IAAA,GAAO,MAAM,CAAC,QAAP,CAAgB;MAAC,OAAA,EAAS,SAAV;MAAqB,GAAA,EAAK,WAA1B;MACrB,KADqB;MACd,QADc;MACJ,QADI;MACM,IADN;MACY;IADZ,CAAhB;IAGP,OAAO,CAAC,GAAR,CAAY,CAAA,OAAA,CAAA,CAAU,MAAV,CAAA,IAAA,CAAA,CAAuB,WAAA,CAAY,EAAA,GAAG,SAAf,CAAvB,CAAA,CAAZ;WACA,EAAE,CAAC,aAAH,CAAiB,WAAA,CAAY,EAAA,GAAG,SAAf,CAAjB,EAA4C,IAA5C;EAtDM;;EA+DR,QAAA,GACE;IAAA,MAAA,EAAY,UAAZ;IACA,MAAA,EAAY,MADZ;IAEA,QAAA,EAAY,IAFZ;IAGA,GAAA,EAAY,IAHZ;IAIA,SAAA,EAAY,IAJZ;IAKA,SAAA,EAAY,CAAA,CALZ;IAMA,MAAA,EAAY,IANZ;IAOA,KAAA,EAAY,aAPZ;IAQA,IAAA,EAAW,KARX;IASA,OAAA,EAAS;EATT;;EAeF,SAAA,GAAY,QAAA,CAAC,OAAD,CAAA;AACV,QAAA;IAAA,MAAA,GAAS,CAAC,CAAC,MAAF,CAAS,CAAA,CAAT,EAAa,QAAb,EAAuB,CAAC,CAAC,IAAF,CAAO,OAAP,EAAgB,GAAA,CAAC,CAAC,IAAF,CAAO,QAAP,CAAhB,CAAvB;IAET,MAAM,CAAC,SAAP,GAAmB,aAAA,CAAc,MAAM,CAAC,SAArB;IAOnB,IAAG,OAAO,CAAC,QAAX;MACE,IAAA,CAAO,OAAO,CAAC,GAAf;QACE,OAAO,CAAC,IAAR,CAAa,qCAAb,EADF;;MAEA,MAAM,CAAC,MAAP,GAAgB,KAHlB;KAAA,MAAA;MAKE,GAAA,GAAM,MAAM,CAAC,MAAP,GAAgB,IAAI,CAAC,IAAL,CAAU,SAAV,EAAqB,WAArB,EAAkC,MAAM,CAAC,MAAzC;MACtB,IAAiD,EAAE,CAAC,UAAH,CAAc,IAAI,CAAC,IAAL,CAAU,GAAV,EAAe,QAAf,CAAd,CAAjD;QAAA,MAAM,CAAC,MAAP,GAAsB,IAAI,CAAC,IAAL,CAAU,GAAV,EAAe,QAAf,EAAtB;;MACA,MAAM,CAAC,QAAP,GAAsB,IAAI,CAAC,IAAL,CAAU,GAAV,EAAe,WAAf;MACtB,MAAM,CAAC,GAAP,GAAsB,OAAO,CAAC,GAAR,IAAe,IAAI,CAAC,IAAL,CAAU,GAAV,EAAe,WAAf,EARvC;;IASA,MAAM,CAAC,QAAP,GAAkB,CAAC,CAAC,QAAF,CAAW,EAAE,CAAC,YAAH,CAAgB,MAAM,CAAC,QAAvB,CAAgC,CAAC,QAAjC,CAAA,CAAX;IAElB,IAAG,OAAO,CAAC,MAAX;MACE,MAAM,CAAC,MAAP,GAAgB,IAAI,CAAC,KAAL,CAAW,EAAE,CAAC,YAAH,CAAgB,OAAO,CAAC,MAAxB,CAAX,EADlB;;IAGA,MAAM,CAAC,OAAP,GAAiB,OAAO,CAAC,IAAI,CAAC,MAAb,CAAoB,QAAA,CAAC,MAAD,CAAA;AACnC,UAAA;MAAA,IAAA,GAAO,WAAA,CAAY,MAAZ,EAAoB,MAApB;MACP,IAAA,CAA4E,IAA5E;QAAA,OAAO,CAAC,IAAR,CAAa,CAAA,6BAAA,CAAA,CAAgC,IAAI,CAAC,QAAL,CAAc,MAAd,CAAhC,CAAA,CAAA,CAAb,EAAA;;aACA;IAHmC,CAApB,CAIhB,CAAC,IAJe,CAAA;WAMjB;EA9BU;;EAsCZ,CAAA,GAAc,OAAA,CAAQ,YAAR;;EACd,EAAA,GAAc,OAAA,CAAQ,UAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EACd,MAAA,GAAc,OAAA,CAAQ,QAAR;;EACd,SAAA,GAAc,OAAA,CAAQ,WAAR;;EACd,WAAA,GAAc,OAAA,CAAQ,cAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EAOd,SAAA,GAAY,IAAI,CAAC,KAAL,CAAW,EAAE,CAAC,YAAH,CAAgB,IAAI,CAAC,IAAL,CAAU,SAAV,EAAqB,WAArB,EAAkC,gBAAlC,CAAhB,CAAX;;EAIZ,aAAA,GAAgB,QAAA,CAAC,SAAD,CAAA;AACd,QAAA;AAAA,SAAA,gBAAA;;MAIE,CAAC,CAAC,cAAF,GAAmB,MAAA,CAAA,CAAA,KAAA,CAAA,CAAS,CAAC,CAAC,MAAX,CAAA,IAAA,CAAA;MAInB,CAAC,CAAC,aAAF,GAAkB;MAIlB,IAAG,CAAC,CAAC,IAAL;QACE,CAAC,CAAC,WAAF,GAAgB,MAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAC,IAAR,CAAA,oBAAA,CAAA,EADlB;;MAKA,IAAG,CAAC,CAAC,OAAL;QACE,CAAC,CAAC,cAAF,GAAmB,MAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAC,OAAR,CAAA,IAAA,CAAA,EADrB;;AAjBF;WAoBA;EArBc;;EAsBhB,SAAA,GAAY,aAAA,CAAc,SAAd;;EAKZ,WAAA,GAAc,QAAA,CAAC,MAAD,EAAS,MAAT,CAAA;AACZ,QAAA;IAAA,GAAA,GAAO,MAAM,CAAC,SAAP,IAAoB,IAAI,CAAC,OAAL,CAAa,MAAb,CAApB,IAA4C,IAAI,CAAC,QAAL,CAAc,MAAd;IACnD,IAAA,0CAAyB,CAAA,GAAA,WAAlB,IAA0B,SAAU,CAAA,GAAA;IAC3C,IAAG,IAAA,IAAS,IAAI,CAAC,IAAL,KAAa,UAAzB;MACE,OAAA,GAAU,IAAI,CAAC,OAAL,CAAa,IAAI,CAAC,QAAL,CAAc,MAAd,EAAsB,GAAtB,CAAb;MACV,IAAG,OAAA,IAAY,CAAA,QAAA,GAAW,SAAU,CAAA,OAAA,CAArB,CAAf;QACE,IAAA,GAAO,CAAC,CAAC,MAAF,CAAS,CAAA,CAAT,EAAa,QAAb,EAAuB;UAAC,QAAA,EAAU;QAAX,CAAvB,EADT;OAFF;;WAIA;EAPY;;EAWd,OAAA,GAAU,IAAI,CAAC,KAAL,CAAW,EAAE,CAAC,YAAH,CAAgB,IAAI,CAAC,IAAL,CAAU,SAAV,EAAqB,cAArB,CAAhB,CAAX,CAAiE,CAAC;;EAQ5E,GAAA,GAAM,QAAA,CAAC,OAAO,OAAO,CAAC,IAAhB,CAAA;AACJ,QAAA;IAAA,MAAA,GAAS;IAET,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,EAI4B,iCAJ5B,EAI+D,MAAM,CAAC,OAJtE,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,EASmC,6CATnC,EASkF,aATlF,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;IAET,KAAA,GAAQ,IAAI,CAAC,OAAL,CAAa,MAAM,CAAC,KAApB;IACR,IAAG,EAAE,CAAC,UAAH,CAAc,KAAd,CAAH;MACE,IAA+D,KAA/D;QAAA,MAAA,GAAS,CAAC,CAAC,MAAF,CAAS,MAAT,EAAiB,IAAI,CAAC,KAAL,CAAW,EAAE,CAAC,YAAH,CAAgB,KAAhB,CAAX,CAAjB,EAAT;OADF;;IAGA,MAAM,CAAC,IAAP,GAAc,OAAO,CAAC,GAAR,CAAA;IACd,IAAG,MAAM,CAAC,OAAO,CAAC,MAAf,KAA2B,CAA9B;MACE,KAAA,GAAO;AACP;AAAA,WAAA,qCAAA;;QACE,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;AADV;MAEA,MAAM,CAAC,OAAP,GAAiB;AACjB,WAAA,yCAAA;;QACE,MAAM,CAAC,OAAO,CAAC,IAAf,CAAoB,IAAI,CAAC,QAAL,CAAc,MAAM,CAAC,IAArB,EAA2B,IAA3B,CAApB;AADF;MAGA,QAAA,CAAS,MAAT,EARF;KAAA,MAAA;MAUE,OAAO,CAAC,GAAR,CAAY,SAAS,CAAC,eAAV,CAAA,CAAZ,EAVF;;EAxBI;;EAwCN,KAAA,GAAQ,MAAM,CAAC,OAAP,GAAiB,CAAC,GAAD,EAAM,QAAN,EAAgB,KAAhB,EAAuB,MAAvB,EAA+B,OAA/B;AA/XzB" } \ No newline at end of file diff --git a/docco.litcoffee b/docco.litcoffee index 7ceaa3ca..0074ee16 100644 --- a/docco.litcoffee +++ b/docco.litcoffee @@ -115,6 +115,8 @@ Implementation of copying files if specified in the language file lang = getLanguage source, config if lang.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() @@ -130,8 +132,6 @@ Implementation of spliting comments and code into split view html files. format source, sections, config toFile = toDirectory + '/' + (path.basename source, path.extname source) - console.log("Write To (source): #{source} or to #{toFile}") - write source, toFile, sections, config if files.length then nextFile() else complete() @@ -170,7 +170,6 @@ normal below. for line in lines if lang.linkMatcher and line.match(lang.linkMatcher) - console.log(line) LINK_REGEX = /\((.+)\)/ TEXT_REGEX = /\[(.+)\]/ links = LINK_REGEX.exec(line) @@ -243,7 +242,7 @@ and rendering it to the specified output path. write = (source, to, sections, config) -> destination = (file) -> - to+'.html' + file The **title** of the file is either the first heading in the prose, or the name of the source file. @@ -255,18 +254,46 @@ name of the source file. title = if hasTitle then first.text else path.basename source toDirectory = config.root + '/' + config.output + '/' + (path.dirname source) + toExtName = path.extname(source) + + if toExtName isnt '.jpg' and toExtName isnt '.png' + toExtName = '.html' cssPath = path.basename(config.css) if config.flatten - cssRelative = path.basename(cssPath) + cssRelative = cssPath else cssRelative = path.relative(toDirectory, config.root+"/"+config.output+"/"+cssPath) - html = config.template {sources: config.sources, css: cssRelative, + sourceNoExt = path.basename(source,path.extname(source)) + + toSources = [] + for asource in config.sources + linkPath = path.basename(asource) + asourcetToDirectory = config.root + '/' + config.output + '/' + (path.dirname asource) + + toLinkBasenameNoExt = path.basename(asource,path.extname(asource)) + toLinkExtName = path.extname(asource) + + if toLinkExtName isnt '.jpg' and toLinkExtName isnt '.png' + toLinkExtName = '.html' + from = asourcetToDirectory + '/' + toLinkBasenameNoExt + toLinkExtName + + if config.flatten + relativeLink = toLinkBasenameNoExt + toLinkExtName + else + relativeLink = path.relative(to, from) + if relativeLink is '' + relativeLink = sourceNoExt + else + relativeLink = relativeLink.slice(1) + toSources.push(relativeLink) + + html = config.template {sources: toSources, css: cssRelative, title, hasTitle, sections, path, destination,} - console.log "docco: #{source} -> #{destination to}" - fs.writeFileSync destination(to), html + console.log "docco: #{source} -> #{destination to+toExtName}" + fs.writeFileSync destination(to+toExtName), html Configuration @@ -417,7 +444,6 @@ Parse options using [Commander](https://github.com/visionmedia/commander.js). config = _.extend(config, JSON.parse fs.readFileSync setup) if setup config.root = process.cwd() - console.log("root directory:"+config.root) if config.sources.length isnt 0 files =[] for globName in config.sources @@ -426,9 +452,6 @@ Parse options using [Commander](https://github.com/visionmedia/commander.js). for file in files config.sources.push path.relative(config.root, file) - console.log("---------------------------------------------------------------------") - console.log("Files:"+JSON.stringify(config.sources,null,2)) - console.log("---------------------------------------------------------------------") document config else console.log commander.helpInformation() diff --git a/resources/classic/docco.jst b/resources/classic/docco.jst index bc956dbe..f4a57404 100644 --- a/resources/classic/docco.jst +++ b/resources/classic/docco.jst @@ -19,7 +19,7 @@
      <% for (var i=0, l=sources.length; i <% var source = sources[i]; %> - + <%= path.basename(source) %> <% } %> diff --git a/resources/linear/docco.jst b/resources/linear/docco.jst index c536828b..a73b03cd 100644 --- a/resources/linear/docco.jst +++ b/resources/linear/docco.jst @@ -29,7 +29,7 @@ <% for (var i=0, l = sources.length; i < l; i++) { %> <% var source = sources[i]; %>
    1. - + <%= path.basename(source) %>
    2. diff --git a/resources/parallel/docco.jst b/resources/parallel/docco.jst index 1cea1ab5..fdede511 100644 --- a/resources/parallel/docco.jst +++ b/resources/parallel/docco.jst @@ -20,7 +20,7 @@
      <% for (var i=0, l=sources.length; i <% var source = sources[i]; %> - + <%= path.basename(source) %> <% } %> From 279c1c93ba1affdebaf7b97f39381cab49c30c32 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 3 Jul 2017 22:13:05 -0700 Subject: [PATCH 14/95] .docco.json file for dock. --- .docco.json | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .docco.json diff --git a/.docco.json b/.docco.json new file mode 100644 index 00000000..883749d1 --- /dev/null +++ b/.docco.json @@ -0,0 +1,6 @@ +{ + "sources": [ + "docco.litcoffee", + "README.md" + ] +} From 3b3c2c910c898ad03cc51c6666ed8df047aa7f97 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 3 Jul 2017 22:24:10 -0700 Subject: [PATCH 15/95] move to major version 1.0.0 Breaking changes: Defaults to hierarchical file write. output directory's directory structure will match the directory structure where the original files are located. -f --flatten overrides Theme jst files must change 'path.basename(destination(source))' to 'destination(source)' (todo: backward compatibility flag?) Markdown files show images on the right side of the page. (todo: add flag for backward compatibility) Optional .docco.json file can have glob based filename specifications: '**/*.coffee'. Parameter -s --setup for specifying a docco.json file. Copies .jpg, .jpeg, .png, and .tiff files if specified. TODO: drier code, variable file extensions in the target directory. breaking changes with flatten and themes --- README | 12 +++++++----- docco.js | 2 +- docco.js.map | 2 +- docco.litcoffee | 12 ++++++++---- package.json | 2 +- resources/parallel/docco.jst | 2 +- 6 files changed, 19 insertions(+), 13 deletions(-) diff --git a/README b/README index c1a5e030..cc85802d 100644 --- a/README +++ b/README @@ -20,12 +20,14 @@ 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 + -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 diff --git a/docco.js b/docco.js index 4b3990e1..85e3cbee 100644 --- a/docco.js +++ b/docco.js @@ -180,7 +180,7 @@ title = hasTitle ? first.text : path.basename(source); toDirectory = config.root + '/' + config.output + '/' + (path.dirname(source)); toExtName = path.extname(source); - if (toExtName !== '.jpg' && toExtName !== '.png') { + if (toExtName !== '.jpg' && toExtName !== '.png' && toExtName !== '.tiff' && toExtName !== '.jpeg') { toExtName = '.html'; } cssPath = path.basename(config.css); diff --git a/docco.js.map b/docco.js.map index 7ed592c3..5cba6b77 100644 --- a/docco.js.map +++ b/docco.js.map @@ -6,5 +6,5 @@ "docco.litcoffee" ], "names": [], - "mappings": "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" + "mappings": "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" } \ No newline at end of file diff --git a/docco.litcoffee b/docco.litcoffee index 0074ee16..956d4607 100644 --- a/docco.litcoffee +++ b/docco.litcoffee @@ -241,6 +241,7 @@ and rendering it to the specified output path. write = (source, to, sections, config) -> + # todo: figure out how to remove the breaking change here. normally this should return file+'.html' destination = (file) -> file @@ -256,7 +257,8 @@ name of the source file. toDirectory = config.root + '/' + config.output + '/' + (path.dirname source) toExtName = path.extname(source) - if toExtName isnt '.jpg' and toExtName isnt '.png' + # todo: this needs to be dried out, need to be able to flag files that don't use .html extensions. + if toExtName isnt '.jpg' and toExtName isnt '.png' and toExtName isnt '.tiff' and toExtName isnt '.jpeg' toExtName = '.html' cssPath = path.basename(config.css) @@ -267,6 +269,7 @@ name of the source file. sourceNoExt = path.basename(source,path.extname(source)) + # todo: simplify the code below. toSources = [] for asource in config.sources linkPath = path.basename(asource) @@ -275,7 +278,8 @@ name of the source file. toLinkBasenameNoExt = path.basename(asource,path.extname(asource)) toLinkExtName = path.extname(asource) - if toLinkExtName isnt '.jpg' and toLinkExtName isnt '.png' + # todo: dry this out with the code above. + if toExtName isnt '.jpg' and toExtName isnt '.png' and toExtName isnt '.tiff' and toExtName isnt '.jpeg' toLinkExtName = '.html' from = asourcetToDirectory + '/' + toLinkBasenameNoExt + toLinkExtName @@ -427,12 +431,12 @@ Parse options using [Commander](https://github.com/visionmedia/commander.js). .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('-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('-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" diff --git a/package.json b/package.json index fac7f5f1..5798d44f 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "coffeescript" ], "author": "Jeremy Ashkenas", - "version": "0.7.0", + "version": "1.0.0", "license": "MIT", "repository": { "type": "git", diff --git a/resources/parallel/docco.jst b/resources/parallel/docco.jst index fdede511..1cea1ab5 100644 --- a/resources/parallel/docco.jst +++ b/resources/parallel/docco.jst @@ -20,7 +20,7 @@
      <% for (var i=0, l=sources.length; i <% var source = sources[i]; %> - + <%= path.basename(source) %> <% } %> From 526b7b278a45956bf83970f61b72c5a1010ce2e6 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Tue, 4 Jul 2017 13:02:38 -0700 Subject: [PATCH 16/95] refactor of getDestinations --- docco.js | 70 ++++++++++++++++++++++++++++++++++++++++++++++--- docco.js.map | 2 +- docco.litcoffee | 59 +++++++++++++++++++++++++++++++++++++++-- 3 files changed, 125 insertions(+), 6 deletions(-) diff --git a/docco.js b/docco.js index 85e3cbee..b8c9c7a5 100644 --- a/docco.js +++ b/docco.js @@ -1,6 +1,6 @@ // Generated by CoffeeScript 2.0.0-beta3 (function() { - var Docco, _, buildMatchers, commander, configure, defaults, document, format, fs, getLanguage, glob, highlightjs, languages, marked, parse, path, run, version, write; + var Docco, _, buildMatchers, commander, configure, defaults, document, format, fs, getDestinations, getLanguage, glob, highlightjs, languages, marked, parse, path, run, version, write; document = function(config = {}, callback) { return fs.mkdirs(config.output, function() { @@ -198,7 +198,7 @@ asourcetToDirectory = config.root + '/' + config.output + '/' + (path.dirname(asource)); toLinkBasenameNoExt = path.basename(asource, path.extname(asource)); toLinkExtName = path.extname(asource); - if (toLinkExtName !== '.jpg' && toLinkExtName !== '.png') { + if (toExtName !== '.jpg' && toExtName !== '.png' && toExtName !== '.tiff' && toExtName !== '.jpeg') { toLinkExtName = '.html'; } from = asourcetToDirectory + '/' + toLinkBasenameNoExt + toLinkExtName; @@ -272,6 +272,68 @@ return config; }; + getDestinations = function(config) { + var asource, asourcetToDirectory, cssPath, cssRelative, destinations, from, j, k, lang, len, len1, linkPath, ref, ref1, relativeLink, source, sourceNoExt, toDirectory, toExtName, toFile, toLinkBasenameNoExt, toLinkExtName, toSources; + destinations = []; + ref = config.sources; + for (j = 0, len = ref.length; j < len; j++) { + source = ref[j]; + if (config.flatten) { + toDirectory = config.output; + } else { + toDirectory = config.root + '/' + config.output + '/' + (path.dirname(source)); + } + lang = getLanguage(source, config); + if (lang.copy) { + toFile = toDirectory + '/' + path.basename(source); + } else { + toFile = toDirectory + '/' + (path.basename(source, path.extname(source))) + '.html'; + } + toExtName = path.extname(source); + if (toExtName !== '.jpg' && toExtName !== '.png' && toExtName !== '.tiff' && toExtName !== '.jpeg') { + toExtName = '.html'; + } + cssPath = path.basename(config.css); + if (config.flatten) { + cssRelative = cssPath; + } else { + cssRelative = path.relative(toDirectory, config.root + "/" + config.output + "/" + cssPath); + } + sourceNoExt = path.basename(source, path.extname(source)); + toSources = []; + ref1 = config.sources; + for (k = 0, len1 = ref1.length; k < len1; k++) { + asource = ref1[k]; + linkPath = path.basename(asource); + asourcetToDirectory = config.root + '/' + config.output + '/' + (path.dirname(asource)); + toLinkBasenameNoExt = path.basename(asource, path.extname(asource)); + toLinkExtName = path.extname(asource); + if (toExtName !== '.jpg' && toExtName !== '.png' && toExtName !== '.tiff' && toExtName !== '.jpeg') { + toLinkExtName = '.html'; + } + from = asourcetToDirectory + '/' + toLinkBasenameNoExt + toLinkExtName; + if (config.flatten) { + relativeLink = toLinkBasenameNoExt + toLinkExtName; + } else { + relativeLink = path.relative(to, from); + if (relativeLink === '') { + relativeLink = sourceNoExt; + } else { + relativeLink = relativeLink.slice(1); + } + } + toSources.push(relativeLink); + } + } + destinations.push({ + me: toFile, + extension: toExtName, + others: toSources, + cssPath: cssRelative + }); + return destinations; + }; + _ = require('underscore'); fs = require('fs-extra'); @@ -328,7 +390,7 @@ run = function(args = process.argv) { var config, file, files, globName, j, k, len, len1, ref, setup; 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('-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"; + 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); setup = path.resolve(config.setup); if (fs.existsSync(setup)) { @@ -349,6 +411,8 @@ file = files[k]; config.sources.push(path.relative(config.root, file)); } + config.destinations = getDestinations(config); + console.log(JSON.stringify(config.destinations)); document(config); } else { console.log(commander.helpInformation()); diff --git a/docco.js.map b/docco.js.map index 5cba6b77..df7d0e26 100644 --- a/docco.js.map +++ b/docco.js.map @@ -6,5 +6,5 @@ "docco.litcoffee" ], "names": [], - "mappings": "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" + "mappings": "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" } \ No newline at end of file diff --git a/docco.litcoffee b/docco.litcoffee index 956d4607..b3d1f39b 100644 --- a/docco.litcoffee +++ b/docco.litcoffee @@ -278,8 +278,8 @@ name of the source file. toLinkBasenameNoExt = path.basename(asource,path.extname(asource)) toLinkExtName = path.extname(asource) - # todo: dry this out with the code above. - if toExtName isnt '.jpg' and toExtName isnt '.png' and toExtName isnt '.tiff' and toExtName isnt '.jpeg' + # todo: dry this out with the code above. + if toExtName isnt '.jpg' and toExtName isnt '.png' and toExtName isnt '.tiff' and toExtName isnt '.jpeg' toLinkExtName = '.html' from = asourcetToDirectory + '/' + toLinkBasenameNoExt + toLinkExtName @@ -353,7 +353,60 @@ is only copied for the latter. ).sort() config + getDestinations = (config) -> + + destinations = [] + for source in config.sources + if config.flatten + toDirectory = config.output + else + toDirectory = config.root + '/' + config.output + '/' + (path.dirname source) + + lang = getLanguage source, config + if lang.copy + toFile = toDirectory + '/' + path.basename source + else + toFile = toDirectory + '/' + (path.basename source, path.extname source) + '.html' + + toExtName = path.extname(source) + + # todo: this needs to be dried out, need to be able to flag files that don't use .html extensions. + if toExtName isnt '.jpg' and toExtName isnt '.png' and toExtName isnt '.tiff' and toExtName isnt '.jpeg' + toExtName = '.html' + cssPath = path.basename(config.css) + if config.flatten + cssRelative = cssPath + else + cssRelative = path.relative(toDirectory, config.root+"/"+config.output+"/"+cssPath) + + sourceNoExt = path.basename(source,path.extname(source)) + + # todo: simplify the code below. + toSources = [] + for asource in config.sources + linkPath = path.basename(asource) + asourcetToDirectory = config.root + '/' + config.output + '/' + (path.dirname asource) + + toLinkBasenameNoExt = path.basename(asource,path.extname(asource)) + toLinkExtName = path.extname(asource) + + # todo: dry this out with the code above. + if toExtName isnt '.jpg' and toExtName isnt '.png' and toExtName isnt '.tiff' and toExtName isnt '.jpeg' + toLinkExtName = '.html' + from = asourcetToDirectory + '/' + toLinkBasenameNoExt + toLinkExtName + + if config.flatten + relativeLink = toLinkBasenameNoExt + toLinkExtName + else + relativeLink = path.relative(to, from) + if relativeLink is '' + relativeLink = sourceNoExt + else + relativeLink = relativeLink.slice(1) + toSources.push(relativeLink) + destinations.push({me: toFile, extension: toExtName, others: toSources, cssPath: cssRelative}) + return destinations Helpers & Initial Setup ----------------------- @@ -456,6 +509,8 @@ Parse options using [Commander](https://github.com/visionmedia/commander.js). for file in files config.sources.push path.relative(config.root, file) + config.destinations = getDestinations config + console.log(JSON.stringify(config.destinations)) document config else console.log commander.helpInformation() From f0c940009d5cbeeb459e7a047280cc185938930c Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Tue, 4 Jul 2017 13:09:01 -0700 Subject: [PATCH 17/95] minor changes, this version doesn't link up non-flattened files --- docco.js | 4 ++-- docco.js.map | 2 +- docco.litcoffee | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docco.js b/docco.js index 85e3cbee..fc236a89 100644 --- a/docco.js +++ b/docco.js @@ -198,7 +198,7 @@ asourcetToDirectory = config.root + '/' + config.output + '/' + (path.dirname(asource)); toLinkBasenameNoExt = path.basename(asource, path.extname(asource)); toLinkExtName = path.extname(asource); - if (toLinkExtName !== '.jpg' && toLinkExtName !== '.png') { + if (toExtName !== '.jpg' && toExtName !== '.png' && toExtName !== '.tiff' && toExtName !== '.jpeg') { toLinkExtName = '.html'; } from = asourcetToDirectory + '/' + toLinkBasenameNoExt + toLinkExtName; @@ -328,7 +328,7 @@ run = function(args = process.argv) { var config, file, files, globName, j, k, len, len1, ref, setup; 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('-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"; + 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); setup = path.resolve(config.setup); if (fs.existsSync(setup)) { diff --git a/docco.js.map b/docco.js.map index 5cba6b77..b2b056df 100644 --- a/docco.js.map +++ b/docco.js.map @@ -6,5 +6,5 @@ "docco.litcoffee" ], "names": [], - "mappings": "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" + "mappings": "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" } \ No newline at end of file diff --git a/docco.litcoffee b/docco.litcoffee index 956d4607..0b5b0bac 100644 --- a/docco.litcoffee +++ b/docco.litcoffee @@ -78,7 +78,7 @@ 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 @@ -278,8 +278,8 @@ name of the source file. toLinkBasenameNoExt = path.basename(asource,path.extname(asource)) toLinkExtName = path.extname(asource) - # todo: dry this out with the code above. - if toExtName isnt '.jpg' and toExtName isnt '.png' and toExtName isnt '.tiff' and toExtName isnt '.jpeg' + # todo: dry this out with the code above. + if toExtName isnt '.jpg' and toExtName isnt '.png' and toExtName isnt '.tiff' and toExtName isnt '.jpeg' toLinkExtName = '.html' from = asourcetToDirectory + '/' + toLinkBasenameNoExt + toLinkExtName @@ -388,7 +388,7 @@ Does the line begin with a comment? Ignore [hashbangs](http://en.wikipedia.org/wiki/Shebang_%28Unix%29) and interpolations... l.commentFilter = /(^#![/]|^\s*#\{)/ - + Look for links if necessary. if l.link From a2e8eb469ff6811718d6554ca2b5056627eb828e Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Wed, 5 Jul 2017 18:53:53 -0700 Subject: [PATCH 18/95] Working refactor. All Unit test working --- docco.js | 119 +++++------ docco.js.map | 2 +- docco.litcoffee | 123 +++++------ package.json | 3 +- resources/parallel/docco.jst | 2 +- .../fakes/fake-jst-result.litcoffee | 41 ++++ test/unit-tests/fakes/fake-jst.litcoffee | 56 +++++ ...fake-linear-jst-flattened-result.litcoffee | 14 ++ ...ke-linear-jst-unflattened-result.litcoffee | 15 ++ .../fakes/fake-linear-jst.litcoffee | 53 +++++ .../informationOnFilesFlattened.litcoffee | 50 +++-- .../informationOnFilesUnFlattened.litcoffee | 192 +++++++++--------- .../unit-tests/unit-test-getCSSPath.litcoffee | 4 +- ...t-test-getDestinationInformation.litcoffee | 77 ++++++- .../unit-test-getInformationOnFiles.litcoffee | 3 +- .../unit-test-getLanguage.litcoffee | 2 +- test/unit-tests/unit-test-getOthers.litcoffee | 69 +++++++ .../unit-test-getRelativePath.litcoffee | 2 +- test/unit-tests/unit-test-write.litcoffee | 98 +++++++++ 19 files changed, 666 insertions(+), 259 deletions(-) create mode 100644 test/unit-tests/fakes/fake-jst-result.litcoffee create mode 100644 test/unit-tests/fakes/fake-jst.litcoffee create mode 100644 test/unit-tests/fakes/fake-linear-jst-flattened-result.litcoffee create mode 100644 test/unit-tests/fakes/fake-linear-jst-unflattened-result.litcoffee create mode 100644 test/unit-tests/fakes/fake-linear-jst.litcoffee create mode 100644 test/unit-tests/unit-test-getOthers.litcoffee create mode 100644 test/unit-tests/unit-test-write.litcoffee diff --git a/docco.js b/docco.js index fdd8f192..c9613ec8 100644 --- a/docco.js +++ b/docco.js @@ -1,6 +1,6 @@ // Generated by CoffeeScript 2.0.0-beta3 (function() { - var Docco, _, buildMatchers, commander, configure, defaults, document, format, fs, getCSSPath, getDestinationInformation, getInformationOnFiles, getLanguage, getRelativePath, getSourceInformation, glob, highlightjs, languages, marked, parse, path, run, version, write; + var Docco, _, buildMatchers, commander, configure, defaults, document, format, fs, getCSSPath, getDestinationInformation, getInformationOnFiles, getLanguage, getOthers, getRelativePath, getSourceInformation, glob, highlightjs, languages, marked, parse, path, run, version, write; document = function(config = {}, callback) { return fs.mkdirs(config.output, function() { @@ -31,7 +31,8 @@ nextFile = function() { var lang, source, toDirectory, toFile; source = files.shift(); - if (config.flatten) { + lang = getLanguage(source, config); + if (config.flatten && !lang.copy) { toDirectory = config.output; } else { toDirectory = config.root + '/' + config.output + '/' + (path.dirname(source)); @@ -39,7 +40,6 @@ if (!fs.existsSync(toDirectory)) { fs.mkdirsSync(toDirectory); } - lang = getLanguage(source, config); if (lang.copy) { toFile = toDirectory + '/' + path.basename(source); console.log(`docco: ${source} -> ${toFile}`); @@ -63,7 +63,7 @@ sections = parse(source, code, config); format(source, sections, config); toFile = toDirectory + '/' + (path.basename(source, path.extname(source))); - write(source, toFile, sections, config); + write(source, sections, config); if (files.length) { return nextFile(); } else { @@ -165,11 +165,17 @@ return results; }; - write = function(source, to, sections, config) { - var asource, asourcetToDirectory, cssPath, cssRelative, destination, first, firstSection, from, hasTitle, html, j, len, linkPath, ref, relativeLink, sourceNoExt, title, toDirectory, toExtName, toLinkBasenameNoExt, toLinkExtName, toSources; + write = function(source, sections, config) { + var destination, fileInfo, first, firstSection, hasTitle, html, objectValues, others, title; + console.log("source: " + source); 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; }); @@ -178,53 +184,19 @@ } hasTitle = first && first.type === 'heading' && first.depth === 1; title = hasTitle ? first.text : path.basename(source); - toDirectory = config.root + '/' + config.output + '/' + (path.dirname(source)); - toExtName = path.extname(source); - if (toExtName !== '.jpg' && toExtName !== '.png' && toExtName !== '.tiff' && toExtName !== '.jpeg') { - toExtName = '.html'; - } - cssPath = path.basename(config.css); - if (config.flatten) { - cssRelative = cssPath; - } else { - cssRelative = path.relative(toDirectory, config.root + "/" + config.output + "/" + cssPath); - } - sourceNoExt = path.basename(source, path.extname(source)); - toSources = []; - ref = config.sources; - for (j = 0, len = ref.length; j < len; j++) { - asource = ref[j]; - linkPath = path.basename(asource); - asourcetToDirectory = config.root + '/' + config.output + '/' + (path.dirname(asource)); - toLinkBasenameNoExt = path.basename(asource, path.extname(asource)); - toLinkExtName = path.extname(asource); - if (toExtName !== '.jpg' && toExtName !== '.png' && toExtName !== '.tiff' && toExtName !== '.jpeg') { - toLinkExtName = '.html'; - } - from = asourcetToDirectory + '/' + toLinkBasenameNoExt + toLinkExtName; - if (config.flatten) { - relativeLink = toLinkBasenameNoExt + toLinkExtName; - } else { - relativeLink = path.relative(to, from); - if (relativeLink === '') { - relativeLink = sourceNoExt; - } else { - relativeLink = relativeLink.slice(1); - } - } - toSources.push(relativeLink); - } + fileInfo = config.informationOnFiles[source]; + others = objectValues(fileInfo.others); html = config.template({ - sources: toSources, - css: cssRelative, + sources: others, + css: fileInfo.destination.css, title, hasTitle, sections, path, destination }); - console.log(`docco: ${source} -> ${destination(to + toExtName)}`); - return fs.writeFileSync(destination(to + toExtName), html); + console.log(`docco: ${source} -> ${destination(fileInfo.destination.path)}`); + fs.writeFileSync(destination(fileInfo.destination.path), html); }; defaults = { @@ -258,6 +230,7 @@ config.css = options.css || path.join(dir, 'docco.css'); } config.template = _.template(fs.readFileSync(config.template).toString()); + console.log("Template:" + config.template); if (options.marked) { config.marked = JSON.parse(fs.readFileSync(options.marked)); } @@ -272,21 +245,25 @@ return config; }; - getSourceInformation = function(file, rootDirectory) { + 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; }; getDestinationInformation = function(language, source, rootDirectory, targetDirectory, flatten) { var destination; destination = {}; - console.log(`SourcE: ${JSON.stringify(source)}, ${JSON.stringify(rootDirectory)}, ${JSON.stringify(targetDirectory)}, ${JSON.stringify(flatten)})`); destination.root = rootDirectory; - if (flatten) { + if (flatten && !language.copy) { destination.dir = targetDirectory; } else { destination.dir = source.dir === '' ? targetDirectory : targetDirectory + "/" + source.dir; @@ -299,6 +276,11 @@ 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; @@ -307,12 +289,13 @@ getRelativePath = function(fromFile, toFile, base) { var fromTo; console.log(`From: ${fromFile} To: ${toFile}`); - fromTo = path.relative("/x/" + fromFile, "/x/" + toFile); + fromTo = path.relative(fromFile, toFile); if (fromTo === '' || fromTo === '.' || fromTo === '..' || fromTo === '../') { fromTo = base; } else { fromTo = fromTo.slice(3); } + console.log(`Path: ${fromTo}`); return fromTo; }; @@ -325,8 +308,24 @@ return cssPath; }; + getOthers = function(file, informationOnFiles, config) { + var destinationFileInformation, j, len, other, others, ref, source, sourceFileInformation, target; + sourceFileInformation = informationOnFiles[file]; + source = sourceFileInformation.source; + others = {}; + ref = config.sources; + for (j = 0, len = ref.length; j < len; j++) { + other = ref[j]; + destinationFileInformation = informationOnFiles[other]; + target = destinationFileInformation.destination; + console.log(JSON.stringify(destinationFileInformation.destination, null, 2)); + others[target.base] = getRelativePath(source.relativefile, target.relativefile, target.base); + } + return others; + }; + getInformationOnFiles = function(config) { - var destination, destinationFileInformation, destinations, file, informationOnFiles, j, k, language, len, len1, len2, m, other, others, ref, ref1, ref2, rootDirectory, source, sourceDirectory, sourceFileInformation, target, targetDirectory; + var destination, destinations, file, informationOnFiles, j, k, language, len, len1, ref, ref1, rootDirectory, source, sourceDirectory, targetDirectory; targetDirectory = config.output; sourceDirectory = config.root; rootDirectory = config.root; @@ -335,7 +334,7 @@ for (j = 0, len = ref.length; j < len; j++) { file = ref[j]; destinations = {}; - source = getSourceInformation(file, rootDirectory); + source = getSourceInformation(file, rootDirectory, config.flatten); language = getLanguage(file, config); destination = getDestinationInformation(language, source, rootDirectory, targetDirectory, config.flatten); destination.css = getCSSPath(config.css, targetDirectory, destination.file); @@ -346,17 +345,7 @@ ref1 = config.sources; for (k = 0, len1 = ref1.length; k < len1; k++) { file = ref1[k]; - sourceFileInformation = informationOnFiles[file]; - source = sourceFileInformation.source; - others = {}; - ref2 = config.sources; - for (m = 0, len2 = ref2.length; m < len2; m++) { - other = ref2[m]; - destinationFileInformation = informationOnFiles[other]; - target = destinationFileInformation.destination; - others[target.base] = getRelativePath(source.file, target.file, target.base); - } - informationOnFiles[file].others = others; + informationOnFiles[file].others = getOthers(file, informationOnFiles, config); } return informationOnFiles; }; @@ -438,14 +427,14 @@ file = files[k]; config.sources.push(path.relative(config.root, file)); } - config.informationOnFiles = informationOnFiles(config); + config.informationOnFiles = getInformationOnFiles(config); document(config); } else { console.log(commander.helpInformation()); } }; - Docco = module.exports = {run, document, parse, format, version, languages, getDestinationInformation, getLanguage, getInformationOnFiles, getCSSPath, getRelativePath}; + Docco = module.exports = {run, document, parse, format, write, version, languages, getDestinationInformation, getLanguage, getInformationOnFiles, getCSSPath, getRelativePath, getOthers}; }).call(this); diff --git a/docco.js.map b/docco.js.map index 861fe9ca..4f9f0549 100644 --- a/docco.js.map +++ b/docco.js.map @@ -6,5 +6,5 @@ "docco.litcoffee" ], "names": [], - "mappings": "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" + "mappings": "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" } \ No newline at end of file diff --git a/docco.litcoffee b/docco.litcoffee index 9bd5202d..4b9b09f7 100644 --- a/docco.litcoffee +++ b/docco.litcoffee @@ -99,7 +99,9 @@ out in an HTML template. If keeping the directory hierarchy, then insert the file's relative directory in to the path. - if config.flatten + lang = getLanguage source, config + + if config.flatten and !lang.copy toDirectory = config.output else toDirectory = config.root + '/' + config.output + '/' + (path.dirname source) @@ -112,7 +114,6 @@ Make sure the target directory exits. Implementation of copying files if specified in the language file - lang = getLanguage source, config if lang.copy toFile = toDirectory + '/' + path.basename source console.log "docco: #{source} -> #{toFile}" @@ -132,7 +133,10 @@ Implementation of spliting comments and code into split view html files. format source, sections, config toFile = toDirectory + '/' + (path.basename source, path.extname source) - write source, toFile, sections, config + write source, sections, config + +# writeO source, toFile, sections, config + if files.length then nextFile() else complete() nextFile() @@ -239,14 +243,18 @@ 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, to, sections, config) -> + write = (source, sections, config) -> + + console.log("source: "+source) # todo: figure out how to remove the breaking change here. normally this should return file+'.html' destination = (file) -> file -The **title** of the file is either the first heading in the prose, or the -name of the source file. + objectValues = (obj) -> + Object.keys(obj).map((key) -> + obj[key] + ) firstSection = _.find sections, (section) -> section.docsText.length > 0 @@ -254,50 +262,14 @@ name of the source file. hasTitle = first and first.type is 'heading' and first.depth is 1 title = if hasTitle then first.text else path.basename source - toDirectory = config.root + '/' + config.output + '/' + (path.dirname source) - toExtName = path.extname(source) + fileInfo = config.informationOnFiles[source] + others = objectValues(fileInfo.others) + html = config.template { sources: others, css: fileInfo.destination.css, + title, hasTitle, sections, path, destination } - # todo: this needs to be dried out, need to be able to flag files that don't use .html extensions. - if toExtName isnt '.jpg' and toExtName isnt '.png' and toExtName isnt '.tiff' and toExtName isnt '.jpeg' - toExtName = '.html' - cssPath = path.basename(config.css) - - if config.flatten - cssRelative = cssPath - else - cssRelative = path.relative(toDirectory, config.root+"/"+config.output+"/"+cssPath) - - sourceNoExt = path.basename(source,path.extname(source)) - - # todo: simplify the code below. - toSources = [] - for asource in config.sources - linkPath = path.basename(asource) - asourcetToDirectory = config.root + '/' + config.output + '/' + (path.dirname asource) - - toLinkBasenameNoExt = path.basename(asource,path.extname(asource)) - toLinkExtName = path.extname(asource) - - # todo: dry this out with the code above. - if toExtName isnt '.jpg' and toExtName isnt '.png' and toExtName isnt '.tiff' and toExtName isnt '.jpeg' - toLinkExtName = '.html' - from = asourcetToDirectory + '/' + toLinkBasenameNoExt + toLinkExtName - - if config.flatten - relativeLink = toLinkBasenameNoExt + toLinkExtName - else - relativeLink = path.relative(to, from) - if relativeLink is '' - relativeLink = sourceNoExt - else - relativeLink = relativeLink.slice(1) - toSources.push(relativeLink) - - html = config.template {sources: toSources, css: cssRelative, - title, hasTitle, sections, path, destination,} - - console.log "docco: #{source} -> #{destination to+toExtName}" - fs.writeFileSync destination(to+toExtName), html + console.log "docco: #{source} -> #{destination fileInfo.destination.path}" + fs.writeFileSync destination(fileInfo.destination.path), html + return Configuration @@ -342,6 +314,7 @@ is only copied for the latter. 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() + console.log("Template:"+config.template) if options.marked config.marked = JSON.parse fs.readFileSync(options.marked) @@ -354,22 +327,22 @@ is only copied for the latter. config - getSourceInformation = (file, rootDirectory) -> + 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 getDestinationInformation = (language, source, rootDirectory, targetDirectory, flatten) -> destination = { } - - console.log("SourcE: #{JSON.stringify(source)}, - #{JSON.stringify(rootDirectory)}, #{JSON.stringify(targetDirectory)}, #{JSON.stringify(flatten)})") - destination.root = rootDirectory - if flatten + if flatten and !language.copy destination.dir = targetDirectory else destination.dir = if source.dir is '' then targetDirectory else targetDirectory+"/"+source.dir @@ -382,6 +355,10 @@ is only copied for the latter. 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 @@ -390,12 +367,13 @@ is only copied for the latter. getRelativePath = (fromFile, toFile, base) -> console.log("From: #{fromFile} To: #{toFile}") - fromTo = path.relative("/x/"+fromFile,"/x/"+toFile) + fromTo = path.relative(fromFile,toFile) if fromTo is '' or fromTo is '.' or fromTo is '..' or fromTo is '../' fromTo = base else fromTo = fromTo.slice(3) + console.log("Path: #{fromTo}") fromTo getCSSPath = (cssFile, targetDirectory, file) -> @@ -404,10 +382,23 @@ is only copied for the latter. cssPath = path.relative(file, css.file) cssPath = cssPath.slice(3) + cssPath - getInformationOnFiles = (config) -> + getOthers = (file, informationOnFiles, config) -> + sourceFileInformation = informationOnFiles[file] + source = sourceFileInformation.source + others = {} + for other in config.sources + destinationFileInformation = informationOnFiles[other] + target = destinationFileInformation.destination + + console.log(JSON.stringify(destinationFileInformation.destination,null,2)) + others[target.base] = getRelativePath source.relativefile, target.relativefile, target.base + others + + getInformationOnFiles = (config) -> targetDirectory = config.output sourceDirectory = config.root rootDirectory = config.root @@ -423,7 +414,7 @@ the two. First the source name: - source = getSourceInformation(file, rootDirectory) + source = getSourceInformation(file, rootDirectory, config.flatten) Next the destination: @@ -442,15 +433,7 @@ Now, figure out the relative paths the css: Now, figure out the relative paths to the other source files: for file in config.sources - sourceFileInformation = informationOnFiles[file] - source = sourceFileInformation.source - others = {} - for other in config.sources - destinationFileInformation = informationOnFiles[other] - target = destinationFileInformation.destination - others[target.base] = getRelativePath source.file, target.file, target.base - - informationOnFiles[file].others = others + informationOnFiles[file].others = getOthers(file, informationOnFiles, config) return informationOnFiles @@ -556,7 +539,7 @@ Parse options using [Commander](https://github.com/visionmedia/commander.js). for file in files config.sources.push path.relative(config.root, file) - config.informationOnFiles = informationOnFiles config + config.informationOnFiles = getInformationOnFiles config document config else console.log commander.helpInformation() @@ -570,11 +553,13 @@ Public API document, parse, format, + write, version, languages, getDestinationInformation, getLanguage, getInformationOnFiles, getCSSPath, - getRelativePath + getRelativePath, + getOthers } diff --git a/package.json b/package.json index 158e5ad7..facfa905 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ }, "devDependencies": { "chai": "^4.0.2", - "mocha": "^3.4.2" + "mocha": "^3.4.2", + "mockery": "^2.1.0" } } diff --git a/resources/parallel/docco.jst b/resources/parallel/docco.jst index 1cea1ab5..fdede511 100644 --- a/resources/parallel/docco.jst +++ b/resources/parallel/docco.jst @@ -20,7 +20,7 @@
      <% for (var i=0, l=sources.length; i <% var source = sources[i]; %> - + <%= path.basename(source) %> <% } %> diff --git a/test/unit-tests/fakes/fake-jst-result.litcoffee b/test/unit-tests/fakes/fake-jst-result.litcoffee new file mode 100644 index 00000000..1c3b922c --- /dev/null +++ b/test/unit-tests/fakes/fake-jst-result.litcoffee @@ -0,0 +1,41 @@ + module.exports = ' fake_coffee.coffee ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + '
      ' + + '
      ' + + ' ' + + '
        ' + + '
      • ' + + '
        ' + + '

        fake_coffee.coffee

        ' + + '
        ' + + '
      • ' + + '
      • ' + + '
        ' + + '
        ' + + ' ' + + '
        ' + + '
        ' + + '
        ' + + '
        ' + + '
        code=here;
        ' + + '
        ' + + '
        ' + + '
      • ' + + '
      ' + + '
      ' + + ' ' + + '' \ 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 100644 index 00000000..16563bbd --- /dev/null +++ b/test/unit-tests/fakes/fake-jst.litcoffee @@ -0,0 +1,56 @@ + module.exports = ' + + + <%= title %> + + + + + +
      +
      + <% if (sources.length > 1) { %> + + <% } %> +
        + <% if (!hasTitle) { %> +
      • +
        +

        <%= title %>

        +
        +
      • + <% } %> + <% for (var i=0, l=sections.length; i + <% var section = sections[i]; %> +
      • +
        + <% heading = section.docsHtml.match(/^\s*<(h\d)>/) %> +
        + +
        + <%= section.docsHtml %> +
        + <% if (section.codeText.replace(/\s/gm, \'\') != \'\') { %> +
        <%= section.codeHtml %>
        + <% } %> +
      • + <% } %> +
      +
      + + + ' \ 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 100644 index 00000000..d11b8ee9 --- /dev/null +++ b/test/unit-tests/fakes/fake-linear-jst-flattened-result.litcoffee @@ -0,0 +1,14 @@ + module.exports = ' ' + + 'fake_coffee.coffee ' + + ' ' + + ' ' + + '
      ' + + '

      fake_coffee.coffee

      ' + + '

      Table of Contents

      1. ' + + ' README.html
      2. ' + + '
      3. fake_coffee.html
      4. ' + + '
      5. fake_litcoffee.html
      6. ' + + '
      7. fluffybunny1.jpg
      8. ' + + '
      ' + + '
      code=here;
      ' + + '
      h
      ' \ 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 100644 index 00000000..ca6dfc4b --- /dev/null +++ b/test/unit-tests/fakes/fake-linear-jst-unflattened-result.litcoffee @@ -0,0 +1,15 @@ + module.exports = ' ' + + 'fake_coffee.coffee ' + + ' ' + + ' ' + + ' ' + + '
      ' + + '

      fake_coffee.coffee

      ' + + '

      Table of Contents

        ' + + '
      1. README.html
      2. ' + + '
      3. fake_coffee.html
      4. ' + + '
      5. fake_litcoffee.html
      6. ' + + '
      7. fluffybunny1.jpg
      8. ' + + '
      ' + + '
      code=here;
      ' + + '
      h
      ' \ 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 100644 index 00000000..b2e5effa --- /dev/null +++ b/test/unit-tests/fakes/fake-linear-jst.litcoffee @@ -0,0 +1,53 @@ + module.exports = ' + + + <%= title %> + + + + + +
      +
      + +
      + <% if (hasTitle) { %> + <% var section = sections.shift(); %> + <%= section.docsHtml %> + <% if (!(/^\s*$/).test(section.codeText)) { %> + <%= section.codeHtml %> + <% } %> + <% } else { %> +

      <%= title %>

      + <% } %> + + <% if (sources.length > 1) { %> +
      +

      Table of Contents

      +
        + <% for (var i=0, l = sources.length; i < l; i++) { %> + <% var source = sources[i]; %> +
      1. + + <%= path.basename(source) %> + +
      2. + <% } %> +
      +
      + <% } %> +
      + + <% for (var i = 0, l = sections.length; i + <% var section = sections[i]; %> + <%= section.docsHtml %> + <% if (!(/^\s*$/).test(section.codeText)) { %> + <%= section.codeHtml %> + <% } %> + <% } %> +
      h
      +
      +
      + + + ' \ No newline at end of file diff --git a/test/unit-tests/fakes/informationOnFilesFlattened.litcoffee b/test/unit-tests/fakes/informationOnFilesFlattened.litcoffee index e440e734..a86411f4 100644 --- a/test/unit-tests/fakes/informationOnFilesFlattened.litcoffee +++ b/test/unit-tests/fakes/informationOnFilesFlattened.litcoffee @@ -11,13 +11,14 @@ A fake for the flattended getInformationOnFiles test. "name": "README" "path": "/Project/docs/README.html" "pathdir": "/Project/docs" + "relativefile": "README.html" "root": "/Project" } "others": { - "README.html": "docs/README.html" - "fake_coffee.html": "docs/fake_coffee.html" - "fake_litcoffee.html": "docs/fake_litcoffee.html" - "fluffybunny1.jpg": "docs/fluffybunny1.jpg" + "README.html": "README.html" + "fake_coffee.html": "fake_coffee.html" + "fake_litcoffee.html": "fake_litcoffee.html" + "fluffybunny1.jpg": "images/fluffybunny1.jpg" } "source": { "base": "README.md" @@ -26,26 +27,28 @@ A fake for the flattended getInformationOnFiles test. "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" + "css": "../docco.css" + "dir": "docs/images" "ext": ".jpg" - "file": "docs/fluffybunny1.jpg" + "file": "docs/images/fluffybunny1.jpg" "name": "fluffybunny1" - "path": "/Project/docs/fluffybunny1.jpg" - "pathdir": "/Project/docs" + "path": "/Project/docs/images/fluffybunny1.jpg" + "pathdir": "/Project/docs/images" + "relativefile": "images/fluffybunny1.jpg" "root": "/Project" } "others": { - "README.html": "../docs/README.html" - "fake_coffee.html": "../docs/fake_coffee.html" - "fake_litcoffee.html": "../docs/fake_litcoffee.html" - "fluffybunny1.jpg": "../docs/fluffybunny1.jpg" + "README.html": "README.html" + "fake_coffee.html": "fake_coffee.html" + "fake_litcoffee.html": "fake_litcoffee.html" + "fluffybunny1.jpg": "images/fluffybunny1.jpg" } "source": { "base": "fluffybunny1.jpg" @@ -54,6 +57,7 @@ A fake for the flattended getInformationOnFiles test. "file": "images/fluffybunny1.jpg" "name": "fluffybunny1" "path": "/Project/images/fluffybunny1.jpg" + "relativefile": "fluffybunny1.jpg" "root": "/Project" } } @@ -67,13 +71,14 @@ A fake for the flattended getInformationOnFiles test. "name": "fake_coffee" "path": "/Project/docs/fake_coffee.html" "pathdir": "/Project/docs" + "relativefile": "fake_coffee.html" "root": "/Project" } "others": { - "README.html": "../docs/README.html" - "fake_coffee.html": "../docs/fake_coffee.html" - "fake_litcoffee.html": "../docs/fake_litcoffee.html" - "fluffybunny1.jpg": "../docs/fluffybunny1.jpg" + "README.html": "README.html" + "fake_coffee.html": "fake_coffee.html" + "fake_litcoffee.html": "fake_litcoffee.html" + "fluffybunny1.jpg": "images/fluffybunny1.jpg" } "source": { "base": "fake_coffee.coffee" @@ -82,6 +87,7 @@ A fake for the flattended getInformationOnFiles test. "file": "src/fake_coffee.coffee" "name": "fake_coffee" "path": "/Project/src/fake_coffee.coffee" + "relativefile": "fake_coffee.coffee" "root": "/Project" } } @@ -95,13 +101,14 @@ A fake for the flattended getInformationOnFiles test. "name": "fake_litcoffee" "path": "/Project/docs/fake_litcoffee.html" "pathdir": "/Project/docs" + "relativefile": "fake_litcoffee.html" "root": "/Project" } "others": { - "README.html": "../../docs/README.html" - "fake_coffee.html": "../../docs/fake_coffee.html" - "fake_litcoffee.html": "../../docs/fake_litcoffee.html" - "fluffybunny1.jpg": "../../docs/fluffybunny1.jpg" + "README.html": "README.html" + "fake_coffee.html": "fake_coffee.html" + "fake_litcoffee.html": "fake_litcoffee.html" + "fluffybunny1.jpg": "images/fluffybunny1.jpg" } "source": { "base": "fake_litcoffee.litcoffee" @@ -110,6 +117,7 @@ A fake for the flattended getInformationOnFiles test. "file": "src/lib/fake_litcoffee.litcoffee" "name": "fake_litcoffee" "path": "/Project/src/lib/fake_litcoffee.litcoffee" + "relativefile": "fake_litcoffee.litcoffee" "root": "/Project" } } diff --git a/test/unit-tests/fakes/informationOnFilesUnFlattened.litcoffee b/test/unit-tests/fakes/informationOnFilesUnFlattened.litcoffee index be93bbcc..24181fc3 100644 --- a/test/unit-tests/fakes/informationOnFilesUnFlattened.litcoffee +++ b/test/unit-tests/fakes/informationOnFilesUnFlattened.litcoffee @@ -1,116 +1,124 @@ A fake for the unflattended getInformationOnFiles test. module.exports = { - "src/fake_coffee.coffee": { - "destination": { - "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", - "css": "../docco.css" - }, - "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" - }, - "others": { - "fake_coffee.html": "../docs/src/fake_coffee.html", - "README.html": "../docs/README.html", - "fluffybunny1.jpg": "../docs/images/fluffybunny1.jpg", - "fake_litcoffee.html": "../docs/src/lib/fake_litcoffee.html" - } - }, "README.md": { "destination": { - "root": "/Project", - "dir": "docs", - "ext": ".html", - "base": "README.html", - "name": "README", - "file": "docs/README.html", - "path": "/Project/docs/README.html", - "pathdir": "/Project/docs", + "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" + } + "others": { + "README.html": "README.html" + "fake_coffee.html": "src/fake_coffee.html" + "fake_litcoffee.html": "src/lib/fake_litcoffee.html" + "fluffybunny1.jpg": "images/fluffybunny1.jpg" + } "source": { - "root": "/Project", - "dir": "", - "base": "README.md", - "ext": ".md", - "name": "README", - "file": "README.md", + "base": "README.md" + "dir": "" + "ext": ".md" + "file": "README.md" + "name": "README" "path": "/Project/README.md" - }, - "others": { - "fake_coffee.html": "docs/src/fake_coffee.html", - "README.html": "docs/README.html", - "fluffybunny1.jpg": "docs/images/fluffybunny1.jpg", - "fake_litcoffee.html": "docs/src/lib/fake_litcoffee.html" + "relativefile": "README.md" + "root": "/Project" } - }, + } "images/fluffybunny1.jpg": { "destination": { - "root": "/Project", - "dir": "docs/images", - "ext": ".jpg", - "base": "fluffybunny1.jpg", - "name": "fluffybunny1", - "file": "docs/images/fluffybunny1.jpg", - "path": "/Project/docs/images/fluffybunny1.jpg", - "pathdir": "/Project/docs/images", + "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" + } + "others": { + "README.html": "../README.html" + "fake_coffee.html": "../src/fake_coffee.html" + "fake_litcoffee.html": "../src/lib/fake_litcoffee.html" + "fluffybunny1.jpg": "fluffybunny1.jpg" + } "source": { - "root": "/Project", - "dir": "images", - "base": "fluffybunny1.jpg", - "ext": ".jpg", - "name": "fluffybunny1", - "file": "images/fluffybunny1.jpg", + "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" + } "others": { - "fake_coffee.html": "../docs/src/fake_coffee.html", - "README.html": "../docs/README.html", - "fluffybunny1.jpg": "../docs/images/fluffybunny1.jpg", - "fake_litcoffee.html": "../docs/src/lib/fake_litcoffee.html" + "README.html": "../README.html" + "fake_coffee.html": "fake_coffee.html" + "fake_litcoffee.html": "lib/fake_litcoffee.html" + "fluffybunny1.jpg": "../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": { - "root": "/Project", - "dir": "docs/src/lib", - "ext": ".html", - "base": "fake_litcoffee.html", - "name": "fake_litcoffee", - "file": "docs/src/lib/fake_litcoffee.html", - "path": "/Project/docs/src/lib/fake_litcoffee.html", - "pathdir": "/Project/docs/src/lib", + "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" + } + "others": { + "README.html": "../../README.html" + "fake_coffee.html": "../fake_coffee.html" + "fake_litcoffee.html": "fake_litcoffee.html" + "fluffybunny1.jpg": "../../images/fluffybunny1.jpg" + } "source": { - "root": "/Project", - "dir": "src/lib", - "base": "fake_litcoffee.litcoffee", - "ext": ".litcoffee", - "name": "fake_litcoffee", - "file": "src/lib/fake_litcoffee.litcoffee", + "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" - }, - "others": { - "fake_coffee.html": "../../docs/src/fake_coffee.html", - "README.html": "../../docs/README.html", - "fluffybunny1.jpg": "../../docs/images/fluffybunny1.jpg", - "fake_litcoffee.html": "../../docs/src/lib/fake_litcoffee.html" + "relativefile": "src/lib/fake_litcoffee.litcoffee" + "root": "/Project" } } } \ No newline at end of file diff --git a/test/unit-tests/unit-test-getCSSPath.litcoffee b/test/unit-tests/unit-test-getCSSPath.litcoffee index ffd01051..aea6bbd0 100644 --- a/test/unit-tests/unit-test-getCSSPath.litcoffee +++ b/test/unit-tests/unit-test-getCSSPath.litcoffee @@ -1,9 +1,9 @@ -# This tests if getLanguage is working correctly. +# This tests if getLanguage is working correctly #!/usr/bin/env node { should } = require('chai'); should() - { getCSSPath } = require('../../docco') describe 'docco getCSSPath', () -> + { getCSSPath } = require('../../docco') it 'gets the path to the css in the same directory.', () -> cssPath = getCSSPath('file.css', 'docs', 'docs/file.html' ) diff --git a/test/unit-tests/unit-test-getDestinationInformation.litcoffee b/test/unit-tests/unit-test-getDestinationInformation.litcoffee index ebdde966..8d84d16e 100644 --- a/test/unit-tests/unit-test-getDestinationInformation.litcoffee +++ b/test/unit-tests/unit-test-getDestinationInformation.litcoffee @@ -1,8 +1,8 @@ # This tests if getLanguage is working correctly. { assert, should } = require('chai'); should() - { languages, getLanguage, getDestinationInformation } = require('../../docco') describe 'docco getDestinationInformation', () -> + { languages, getLanguage, getDestinationInformation } = require('../../docco') it 'unflattened: gets destinationInformation for one source', () -> file = "src/fake_coffee.coffee" @@ -20,7 +20,7 @@ rootDirectory = '/Project' targetDirectory = 'docs' flatten = false - destination = getDestinationInformation(languages, source, rootDirectory, targetDirectory, flatten) + destination = getDestinationInformation(language, source, rootDirectory, targetDirectory, flatten) console.log(JSON.stringify(destination,null,2)) result = { "root": "/Project", @@ -30,7 +30,8 @@ "name": "fake_coffee", "file": "docs/src/fake_coffee.html", "path": "/Project/docs/src/fake_coffee.html", - "pathdir": "/Project/docs/src" + "pathdir": "/Project/docs/src", + "relativefile": "src/fake_coffee.html" } assert.deepEqual(destination, result) return @@ -51,7 +52,7 @@ rootDirectory = '/Project' targetDirectory = 'docs' flatten = true - destination = getDestinationInformation(languages, source, rootDirectory, targetDirectory, flatten) + destination = getDestinationInformation(language, source, rootDirectory, targetDirectory, flatten) console.log(JSON.stringify(destination,null,2)) result = { "base": "fake_coffee.html" @@ -62,6 +63,74 @@ "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, config + 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) + console.log(JSON.stringify(destination,null,2)) + 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, config + 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) + console.log(JSON.stringify(destination,null,2)) + 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 \ No newline at end of file diff --git a/test/unit-tests/unit-test-getInformationOnFiles.litcoffee b/test/unit-tests/unit-test-getInformationOnFiles.litcoffee index 8d548e33..4a6ee6d2 100644 --- a/test/unit-tests/unit-test-getInformationOnFiles.litcoffee +++ b/test/unit-tests/unit-test-getInformationOnFiles.litcoffee @@ -2,8 +2,8 @@ #!/usr/bin/env node { assert, should } = require('chai'); should() - { languages, getInformationOnFiles } = require('../../docco') describe 'docco getInformationOnFiles', () -> + { languages, getInformationOnFiles } = require('../../docco') it 'calculates file information with unflattened request', () -> informationOnFilesFake = require './fakes/informationOnFilesUnFlattened' @@ -38,6 +38,7 @@ "images/fluffybunny1.jpg" "src/lib/fake_litcoffee.litcoffee" ] + flatten: true informationOnFiles = getInformationOnFiles(config) assert.deepEqual(informationOnFiles, informationOnFilesFake) return diff --git a/test/unit-tests/unit-test-getLanguage.litcoffee b/test/unit-tests/unit-test-getLanguage.litcoffee index 5b23f633..4e8e4132 100644 --- a/test/unit-tests/unit-test-getLanguage.litcoffee +++ b/test/unit-tests/unit-test-getLanguage.litcoffee @@ -2,8 +2,8 @@ #!/usr/bin/env node { should } = require('chai'); should() - { languages, getLanguage } = require('../../docco') describe 'docco getLanguage', () -> + { languages, getLanguage } = require('../../docco') it 'gets the right language for the given a coffescript file.', () -> source = "src/fake_coffee.coffee" diff --git a/test/unit-tests/unit-test-getOthers.litcoffee b/test/unit-tests/unit-test-getOthers.litcoffee new file mode 100644 index 00000000..e521772a --- /dev/null +++ b/test/unit-tests/unit-test-getOthers.litcoffee @@ -0,0 +1,69 @@ +# This tests if getLanguage is working correctly. + + { assert, should } = require('chai'); should() + describe 'docco getOthers', () -> + { getOthers } = require('../../docco') + + 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": "README.html" + "fake_coffee.html": "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": "../README.html" + "fake_coffee.html": "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": "README.html" + "fake_coffee.html": "fake_coffee.html" + }) + return + + it 'gets paths to other destination files: 1 level down, flattened.', () -> + informationOnFiles = require './fakes/informationOnFilesFlattened' + config = { + sources: [ + 'README.md' + 'src/fake_coffee.coffee' + ] + flatten: true + } + others = getOthers('src/fake_coffee.coffee', informationOnFiles, config) + assert.deepEqual(others, { + "README.html": "README.html" + "fake_coffee.html": "fake_coffee.html" + }) + return \ No newline at end of file diff --git a/test/unit-tests/unit-test-getRelativePath.litcoffee b/test/unit-tests/unit-test-getRelativePath.litcoffee index ba9f3a8a..60166d1d 100644 --- a/test/unit-tests/unit-test-getRelativePath.litcoffee +++ b/test/unit-tests/unit-test-getRelativePath.litcoffee @@ -2,8 +2,8 @@ #!/usr/bin/env node { should } = require('chai'); should() - { getRelativePath } = require('../../docco') describe 'docco getRelativePath', () -> + { getRelativePath } = require('../../docco') it 'gets the path to a file in the same directory.', () -> cssPath = getRelativePath('./file.css', './file.html', 'file.html' ) diff --git a/test/unit-tests/unit-test-write.litcoffee b/test/unit-tests/unit-test-write.litcoffee new file mode 100644 index 00000000..8971b303 --- /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, 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":"
      code=here;
      ", + "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":"
      code=here;
      ", + "docsHtml":""}] + result = write(source, sections, config) + mockery.deregisterMock('fs-extra') + + return + + return \ No newline at end of file From 7681054397c9821c6f2994aa3e4281c7c5c3aac0 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Wed, 5 Jul 2017 19:08:17 -0700 Subject: [PATCH 19/95] gulp file, ignore all built js and js.map, --- docco.js | 441 ------------------ docco.js.map | 10 - gulpfile.coffee | 47 ++ package.json | 10 +- test/fakes/src/fake_js.js | 63 --- test/fakes/src/fake_litcoffee.js | 26 -- test/fakes/src/fake_litcoffee.js.map | 11 +- .../fakes/fake-linear-jst.litcoffee | 53 --- 8 files changed, 57 insertions(+), 604 deletions(-) delete mode 100644 docco.js delete mode 100644 docco.js.map create mode 100644 gulpfile.coffee delete mode 100644 test/fakes/src/fake_js.js delete mode 100644 test/fakes/src/fake_litcoffee.js delete mode 100644 test/unit-tests/fakes/fake-linear-jst.litcoffee diff --git a/docco.js b/docco.js deleted file mode 100644 index c9613ec8..00000000 --- a/docco.js +++ /dev/null @@ -1,441 +0,0 @@ -// Generated by CoffeeScript 2.0.0-beta3 -(function() { - var Docco, _, buildMatchers, commander, configure, defaults, document, format, fs, getCSSPath, getDestinationInformation, getInformationOnFiles, getLanguage, getOthers, getRelativePath, getSourceInformation, glob, highlightjs, languages, marked, parse, path, run, version, write; - - document = function(config = {}, callback) { - 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 lang, source, toDirectory, toFile; - source = files.shift(); - lang = getLanguage(source, config); - if (config.flatten && !lang.copy) { - toDirectory = config.output; - } else { - toDirectory = config.root + '/' + config.output + '/' + (path.dirname(source)); - } - if (!fs.existsSync(toDirectory)) { - fs.mkdirsSync(toDirectory); - } - if (lang.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, code, config); - format(source, sections, config); - toFile = toDirectory + '/' + (path.basename(source, path.extname(source))); - write(source, sections, config); - if (files.length) { - return nextFile(); - } else { - return complete(); - } - }); - } - }; - return nextFile(); - }); - }; - - parse = function(source, code, config = {}) { - var LINK_REGEX, TEXT_REGEX, codeText, docsText, hasCode, i, isText, j, k, lang, len, len1, line, lines, link, links, match, maybeCode, save, sections, text, texts; - lines = code.split('\n'); - sections = []; - lang = getLanguage(source, config); - hasCode = docsText = codeText = ''; - save = function() { - sections.push({docsText, 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 (lang.linkMatcher && line.match(lang.linkMatcher)) { - LINK_REGEX = /\((.+)\)/; - TEXT_REGEX = /\[(.+)\]/; - links = LINK_REGEX.exec(line); - texts = TEXT_REGEX.exec(line); - if ((links != null) && links.length > 1 && (texts != null) && texts.length > 1) { - link = links[1]; - text = texts[1]; - codeText += '

      ' + text + '

      ' + '\n'; - } - hasCode = true; - } else if (lang.sectionMatcher && line.match(lang.sectionMatcher)) { - if (hasCode) { - save(); - } - docsText += (line = line.replace(lang.commentMatcher, '')) + '\n'; - save(); - } else 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; - }; - - 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]; - if (language.html) { - section.codeHtml = section.codeText; - } else { - code = highlightjs.highlight(language.name, section.codeText).value; - code = code.replace(/\s+$/, ''); - section.codeHtml = `
      ${code}
      `; - } - results.push(section.docsHtml = marked(section.docsText)); - } - return results; - }; - - write = function(source, sections, config) { - var destination, fileInfo, first, firstSection, hasTitle, html, objectValues, others, title; - console.log("source: " + source); - 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); - html = config.template({ - sources: others, - css: fileInfo.destination.css, - title, - hasTitle, - sections, - path, - destination - }); - console.log(`docco: ${source} -> ${destination(fileInfo.destination.path)}`); - fs.writeFileSync(destination(fileInfo.destination.path), html); - }; - - defaults = { - layout: 'parallel', - output: 'docs', - template: null, - css: null, - extension: null, - languages: {}, - marked: null, - setup: '.docco.json', - help: false, - flatten: false - }; - - configure = function(options) { - var config, dir; - config = _.extend({}, defaults, _.pick(options, ..._.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()); - console.log("Template:" + config.template); - 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; - }; - - 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; - }; - - 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; - }; - - getRelativePath = function(fromFile, toFile, base) { - var fromTo; - console.log(`From: ${fromFile} To: ${toFile}`); - fromTo = path.relative(fromFile, toFile); - if (fromTo === '' || fromTo === '.' || fromTo === '..' || fromTo === '../') { - fromTo = base; - } else { - fromTo = fromTo.slice(3); - } - console.log(`Path: ${fromTo}`); - return fromTo; - }; - - 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; - }; - - getOthers = function(file, informationOnFiles, config) { - var destinationFileInformation, j, len, other, others, ref, source, sourceFileInformation, target; - sourceFileInformation = informationOnFiles[file]; - source = sourceFileInformation.source; - others = {}; - ref = config.sources; - for (j = 0, len = ref.length; j < len; j++) { - other = ref[j]; - destinationFileInformation = informationOnFiles[other]; - target = destinationFileInformation.destination; - console.log(JSON.stringify(destinationFileInformation.destination, null, 2)); - others[target.base] = getRelativePath(source.relativefile, target.relativefile, target.base); - } - return others; - }; - - getInformationOnFiles = function(config) { - var destination, destinations, file, informationOnFiles, j, k, language, len, len1, ref, ref1, rootDirectory, source, sourceDirectory, targetDirectory; - targetDirectory = config.output; - sourceDirectory = config.root; - rootDirectory = config.root; - informationOnFiles = {}; - ref = config.sources; - for (j = 0, len = ref.length; j < len; j++) { - file = ref[j]; - destinations = {}; - source = getSourceInformation(file, rootDirectory, config.flatten); - language = getLanguage(file, config); - 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; - } - ref1 = config.sources; - for (k = 0, len1 = ref1.length; k < len1; k++) { - file = ref1[k]; - informationOnFiles[file].others = getOthers(file, informationOnFiles, config); - } - return informationOnFiles; - }; - - _ = 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'); - - languages = JSON.parse(fs.readFileSync(path.join(__dirname, 'resources', 'languages.json'))); - - buildMatchers = function(languages) { - var ext, l; - for (ext in languages) { - l = languages[ext]; - l.commentMatcher = RegExp(`^\\s*${l.symbol}\\s?`); - l.commentFilter = /(^#![\/]|^\s*#\{)/; - if (l.link) { - l.linkMatcher = RegExp(`^${l.link}\\[(.+)\\]\\((.+)\\)`); - } - if (l.section) { - l.sectionMatcher = RegExp(`^${l.section}\\s?`); - } - } - return languages; - }; - - languages = buildMatchers(languages); - - 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; - }; - - version = JSON.parse(fs.readFileSync(path.join(__dirname, 'package.json'))).version; - - run = function(args = process.argv) { - var config, file, files, globName, j, k, len, len1, ref, setup; - 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('-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); - setup = path.resolve(config.setup); - if (fs.existsSync(setup)) { - if (setup) { - config = _.extend(config, JSON.parse(fs.readFileSync(setup))); - } - } - config.root = process.cwd(); - if (config.sources.length !== 0) { - files = []; - ref = config.sources; - for (j = 0, len = ref.length; j < len; j++) { - globName = ref[j]; - files = _.flatten(_.union(files, glob.sync(path.resolve(config.root, globName)))); - } - config.sources = []; - for (k = 0, len1 = files.length; k < len1; k++) { - file = files[k]; - config.sources.push(path.relative(config.root, file)); - } - config.informationOnFiles = getInformationOnFiles(config); - document(config); - } else { - console.log(commander.helpInformation()); - } - }; - - Docco = module.exports = {run, document, parse, format, write, version, languages, getDestinationInformation, getLanguage, getInformationOnFiles, getCSSPath, getRelativePath, getOthers}; - -}).call(this); - -//# sourceMappingURL=docco.js.map diff --git a/docco.js.map b/docco.js.map deleted file mode 100644 index 4f9f0549..00000000 --- a/docco.js.map +++ /dev/null @@ -1,10 +0,0 @@ -{ - "version": 3, - "file": "docco.js", - "sourceRoot": "", - "sources": [ - "docco.litcoffee" - ], - "names": [], - "mappings": "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" -} \ No newline at end of file diff --git a/gulpfile.coffee b/gulpfile.coffee new file mode 100644 index 00000000..9d47d7ff --- /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', 'test/**/*.litcoffee'] + +javascriptFiles = ['docco.js', 'docco.js.map', 'test/**/*.js'] + +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/package.json b/package.json index facfa905..d8e535d6 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,15 @@ }, "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", "mocha": "^3.4.2", - "mockery": "^2.1.0" + "mockery": "^2.1.0", + "touch": "^3.1.0" } } diff --git a/test/fakes/src/fake_js.js b/test/fakes/src/fake_js.js deleted file mode 100644 index 4b6eec77..00000000 --- a/test/fakes/src/fake_js.js +++ /dev/null @@ -1,63 +0,0 @@ -// Express boilerplate. - -var express = require('express'); -var path = require('path'); -var favicon = require('serve-favicon'); -var logger = require('morgan'); -var cookieParser = require('cookie-parser'); -var bodyParser = require('body-parser'); - -var routes = require('./routes/index'); -var users = require('./routes/users'); - -var app = express(); - -// view engine setup -app.set('views', path.join(__dirname, 'views')); -app.set('view engine', 'ejs'); -app.set('json spaces', 2); - -// uncomment after placing your favicon in /public -//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); -app.use(logger('dev')); -app.use(bodyParser.json()); -app.use(bodyParser.urlencoded({ extended: false })); -app.use(cookieParser()); -app.use(express.static(path.join(__dirname, 'public'))); - -app.use('/', routes); -app.use('/users', users); - -// catch 404 and forward to error handler -app.use(function(req, res, next) { - var err = new Error('Not Found'); - err.status = 404; - next(err); -}); - -// error handlers - -// development error handler -// will print stacktrace -if (app.get('env') === 'development') { - app.use(function(err, req, res, next) { - res.status(err.status || 500); - res.render('error', { - message: err.message, - error: err - }); - }); -} - -// production error handler -// no stacktraces leaked to user -app.use(function(err, req, res, next) { - res.status(err.status || 500); - res.render('error', { - message: err.message, - error: {} - }); -}); - - -module.exports = app; diff --git a/test/fakes/src/fake_litcoffee.js b/test/fakes/src/fake_litcoffee.js deleted file mode 100644 index c34c5d47..00000000 --- a/test/fakes/src/fake_litcoffee.js +++ /dev/null @@ -1,26 +0,0 @@ -// Generated by CoffeeScript 2.0.0-beta3 -(function() { - var fizzbuzz; - - fizzbuzz = function(number) { - var i, results, x; - 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; - }; - -}).call(this); - -//# sourceMappingURL=fake_litcoffee.js.map diff --git a/test/fakes/src/fake_litcoffee.js.map b/test/fakes/src/fake_litcoffee.js.map index e6b587c5..51b13241 100644 --- a/test/fakes/src/fake_litcoffee.js.map +++ b/test/fakes/src/fake_litcoffee.js.map @@ -1,10 +1 @@ -{ - "version": 3, - "file": "fake_litcoffee.js", - "sourceRoot": "", - "sources": [ - "fake_litcoffee.litcoffee" - ], - "names": [], - "mappings": ";AA0BI;AAAA,MAAA;;EAAA,QAAA,GAAW,QAAA,CAAC,MAAD,CAAA;AACT,QAAA;IAAA,IAAqB,CAAA,KAAK,MAAA,GAAS,EAAnC;AAAA,aAAO,WAAP;;IACA,IAAqB,CAAA,KAAK,MAAA,GAAS,CAAnC;AAAA,aAAO,OAAP;;IACA,IAAqB,CAAA,KAAK,MAAA,GAAS,CAAnC;AAAA,aAAO,OAAP;;IACA,MAAM,CAAC,QAAP,CAAA;AAEA;SAAS,4BAAT;mBAGE,OAAO,CAAC,GAAR,CAAY,CAAA,CAAA,CAAG,CAAH,CAAA,MAAA,CAAA,CAAa,QAAA,CAAS,CAAT,CAAb,CAAA,CAAZ;AAHF;;EANS;AAAX" -} \ No newline at end of file +{"version":3,"file":"fake_litcoffee.js","sources":["fakes/src/fake_litcoffee.litcoffee"],"names":[],"mappings":"AA0BI,IAAA;;AAAA,QAAA,GAAW,SAAC,MAAD;AACT,MAAA;EAAA,IAAqB,CAAA,KAAK,MAAA,GAAS,EAAnC;AAAA,WAAO,WAAP;;EACA,IAAqB,CAAA,KAAK,MAAA,GAAS,CAAnC;AAAA,WAAO,OAAP;;EACA,IAAqB,CAAA,KAAK,MAAA,GAAS,CAAnC;AAAA,WAAO,OAAP;;EACA,MAAM,CAAC,QAAP,CAAA;AAEA;OAAS,4BAAT;iBAGE,OAAO,CAAC,GAAR,CAAe,CAAD,GAAG,QAAH,GAAU,CAAC,QAAA,CAAS,CAAT,CAAD,CAAxB;AAHF;;AANS","sourcesContent":["#! /usr/bin/env coffee\n# fizzbuzz.litcoffee\n\nThis is the fizzbuzz test in literate CoffeeScript.\n\n## What should FizzBuzz do?\n\nThe FizzBuzz test should print:\n\n- 'fizz' for every number divisible by 3,\n- 'buzz' for every number divisible by 5,\n- 'fizzbuzz' if the number is divisible by 3 and 5\n- else: just print the number.\n\n## Fun Facts\n\nFizzBuzz is commonly used to interview programmers and test their coding skills.\nOnce the author [@rmetzler](http://github.com/rmetzler) was asked on a job interview\nto write a \"coding test\". He answered by asking if the meant test was FizzBuzz. The interviewer\nsaid yes and made a statement to not test the interviewee. The author later learned he didn't\nget the job, was sad and decided on writing FizzBuzz as a learning tool.\n\n## FizzBuzz in CoffeeScript\n---\n# FizzBuzz in CoffeeScript could look like this:\n\n fizzbuzz = (number) ->\n return 'fizzbuzz' if 0 == number % 15\n return 'buzz' if 0 == number % 5\n return 'fizz' if 0 == number % 3\n number.toString()\n\n for x in [1..100]\n\n # pretty print\n console.log \"#{x}\\t->\\t#{fizzbuzz x}\"\n"]} \ 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 deleted file mode 100644 index b2e5effa..00000000 --- a/test/unit-tests/fakes/fake-linear-jst.litcoffee +++ /dev/null @@ -1,53 +0,0 @@ - module.exports = ' - - - <%= title %> - - - - - -
      -
      - -
      - <% if (hasTitle) { %> - <% var section = sections.shift(); %> - <%= section.docsHtml %> - <% if (!(/^\s*$/).test(section.codeText)) { %> - <%= section.codeHtml %> - <% } %> - <% } else { %> -

      <%= title %>

      - <% } %> - - <% if (sources.length > 1) { %> -
      -

      Table of Contents

      -
        - <% for (var i=0, l = sources.length; i < l; i++) { %> - <% var source = sources[i]; %> -
      1. - - <%= path.basename(source) %> - -
      2. - <% } %> -
      -
      - <% } %> -
      - - <% for (var i = 0, l = sections.length; i - <% var section = sections[i]; %> - <%= section.docsHtml %> - <% if (!(/^\s*$/).test(section.codeText)) { %> - <%= section.codeHtml %> - <% } %> - <% } %> -
      h
      -
      -
      - - - ' \ No newline at end of file From 39e43930fc2e04cd3555fc16c12d0768660bfa59 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Wed, 5 Jul 2017 19:15:58 -0700 Subject: [PATCH 20/95] unit tests formatted to compile correctly. --- .../unit-tests/unit-test-getCSSPath.litcoffee | 44 +-- ...t-test-getDestinationInformation.litcoffee | 258 +++++++++--------- .../unit-test-getInformationOnFiles.litcoffee | 79 +++--- .../unit-test-getLanguage.litcoffee | 55 ++-- test/unit-tests/unit-test-getOthers.litcoffee | 126 ++++----- .../unit-test-getRelativePath.litcoffee | 49 ++-- test/unit-tests/unit-test-write.litcoffee | 192 ++++++------- 7 files changed, 401 insertions(+), 402 deletions(-) diff --git a/test/unit-tests/unit-test-getCSSPath.litcoffee b/test/unit-tests/unit-test-getCSSPath.litcoffee index aea6bbd0..cc9e824a 100644 --- a/test/unit-tests/unit-test-getCSSPath.litcoffee +++ b/test/unit-tests/unit-test-getCSSPath.litcoffee @@ -1,27 +1,29 @@ # This tests if getLanguage is working correctly - #!/usr/bin/env node - { should } = require('chai'); should() - describe 'docco getCSSPath', () -> - { getCSSPath } = require('../../docco') - - 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 + { should } = require('chai'); should() - 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 + describe 'docco getCSSPath', () -> - 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 + { getCSSPath } = require('../../docco') + + 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 - 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 \ No newline at end of file diff --git a/test/unit-tests/unit-test-getDestinationInformation.litcoffee b/test/unit-tests/unit-test-getDestinationInformation.litcoffee index 8d84d16e..79c4f618 100644 --- a/test/unit-tests/unit-test-getDestinationInformation.litcoffee +++ b/test/unit-tests/unit-test-getDestinationInformation.litcoffee @@ -1,136 +1,136 @@ # This tests if getLanguage is working correctly. - { assert, should } = require('chai'); should() - describe 'docco getDestinationInformation', () -> - { languages, getLanguage, getDestinationInformation } = require('../../docco') + { assert, should } = require('chai'); should() + describe 'docco getDestinationInformation', () -> + { languages, getLanguage, getDestinationInformation } = require('../../docco') - it 'unflattened: gets destinationInformation for one source', () -> - file = "src/fake_coffee.coffee" - config = { languages:languages } - language = getLanguage file, config - 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) - console.log(JSON.stringify(destination,null,2)) - 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 'unflattened: gets destinationInformation for one source', () -> + file = "src/fake_coffee.coffee" + config = { languages:languages } + language = getLanguage file, config + 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) + console.log(JSON.stringify(destination,null,2)) + 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, config - 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) - console.log(JSON.stringify(destination,null,2)) - 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 'flattened: gets destinationInformation for one source', () -> + file = "src/fake_coffee.coffee" + config = { languages:languages } + language = getLanguage file, config + 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) + console.log(JSON.stringify(destination,null,2)) + 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, config - language.copy.should.be.true + it 'unflattened: gets destinationInformation for one copy source', () -> + file = "images/fluffybunny1.jpg" + config = { languages:languages } + language = getLanguage file, config + 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) - console.log(JSON.stringify(destination,null,2)) - 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 + 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) + console.log(JSON.stringify(destination,null,2)) + 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, config - 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) - console.log(JSON.stringify(destination,null,2)) - 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 \ No newline at end of file + it 'flattened: gets destinationInformation for one copy source', () -> + file = "images/fluffybunny1.jpg" + config = { languages:languages } + language = getLanguage file, config + 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) + console.log(JSON.stringify(destination,null,2)) + 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 \ No newline at end of file diff --git a/test/unit-tests/unit-test-getInformationOnFiles.litcoffee b/test/unit-tests/unit-test-getInformationOnFiles.litcoffee index 4a6ee6d2..34cc94da 100644 --- a/test/unit-tests/unit-test-getInformationOnFiles.litcoffee +++ b/test/unit-tests/unit-test-getInformationOnFiles.litcoffee @@ -1,44 +1,43 @@ # This tests if getDestinations is working correctly. - #!/usr/bin/env node - { assert, should } = require('chai'); should() - describe 'docco getInformationOnFiles', () -> - { languages, getInformationOnFiles } = require('../../docco') + { assert, should } = require('chai'); should() + describe 'docco getInformationOnFiles', () -> + { languages, getInformationOnFiles } = require('../../docco') - it 'calculates file information with unflattened request', () -> - informationOnFilesFake = require './fakes/informationOnFilesUnFlattened' - source = "src/fake_coffee.coffee" - config = - languages:languages - output: 'docs' - root: '/Project' - css: 'docco.css' - sources: [ - "src/fake_coffee.coffee" - "README.md" - "images/fluffybunny1.jpg" - "src/lib/fake_litcoffee.litcoffee" - ] - informationOnFiles = getInformationOnFiles(config) - assert.deepEqual(informationOnFiles, informationOnFilesFake) - return + it 'calculates file information with unflattened request', () -> + informationOnFilesFake = require './fakes/informationOnFilesUnFlattened' + source = "src/fake_coffee.coffee" + config = + languages:languages + output: 'docs' + root: '/Project' + css: 'docco.css' + sources: [ + "src/fake_coffee.coffee" + "README.md" + "images/fluffybunny1.jpg" + "src/lib/fake_litcoffee.litcoffee" + ] + 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 + 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 diff --git a/test/unit-tests/unit-test-getLanguage.litcoffee b/test/unit-tests/unit-test-getLanguage.litcoffee index 4e8e4132..809b4cc7 100644 --- a/test/unit-tests/unit-test-getLanguage.litcoffee +++ b/test/unit-tests/unit-test-getLanguage.litcoffee @@ -1,33 +1,32 @@ # This tests if getLanguage is working correctly. - #!/usr/bin/env node - { should } = require('chai'); should() - describe 'docco getLanguage', () -> - { languages, getLanguage } = require('../../docco') + { should } = require('chai'); should() + describe 'docco getLanguage', () -> + { languages, getLanguage } = require('../../docco') - it 'gets the right language for the given a coffescript file.', () -> - source = "src/fake_coffee.coffee" - config = { languages:languages } - language = getLanguage source, config - language.name.should.be.equal("coffeescript") - language.symbol.should.be.equal("#") - return + it 'gets the right language for the given a coffescript file.', () -> + source = "src/fake_coffee.coffee" + config = { languages:languages } + language = getLanguage source, config + 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, config - 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 a markdown file.', () -> + source = "README.md" + config = { languages:languages } + language = getLanguage source, config + 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, config - language.name.should.be.equal("image") - language.copy.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, config + language.name.should.be.equal("image") + language.copy.should.be.true + return diff --git a/test/unit-tests/unit-test-getOthers.litcoffee b/test/unit-tests/unit-test-getOthers.litcoffee index e521772a..bcaa1442 100644 --- a/test/unit-tests/unit-test-getOthers.litcoffee +++ b/test/unit-tests/unit-test-getOthers.litcoffee @@ -1,69 +1,69 @@ # This tests if getLanguage is working correctly. - { assert, should } = require('chai'); should() - describe 'docco getOthers', () -> - { getOthers } = require('../../docco') + { assert, should } = require('chai'); should() + describe 'docco getOthers', () -> + { getOthers } = require('../../docco') - 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": "README.html" - "fake_coffee.html": "src/fake_coffee.html" - }) - return + 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": "README.html" + "fake_coffee.html": "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": "../README.html" - "fake_coffee.html": "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": "../README.html" + "fake_coffee.html": "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": "README.html" - "fake_coffee.html": "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": "README.html" + "fake_coffee.html": "fake_coffee.html" + }) + return - it 'gets paths to other destination files: 1 level down, flattened.', () -> - informationOnFiles = require './fakes/informationOnFilesFlattened' - config = { - sources: [ - 'README.md' - 'src/fake_coffee.coffee' - ] - flatten: true - } - others = getOthers('src/fake_coffee.coffee', informationOnFiles, config) - assert.deepEqual(others, { - "README.html": "README.html" - "fake_coffee.html": "fake_coffee.html" - }) - return \ No newline at end of file + it 'gets paths to other destination files: 1 level down, flattened.', () -> + informationOnFiles = require './fakes/informationOnFilesFlattened' + config = { + sources: [ + 'README.md' + 'src/fake_coffee.coffee' + ] + flatten: true + } + others = getOthers('src/fake_coffee.coffee', informationOnFiles, config) + assert.deepEqual(others, { + "README.html": "README.html" + "fake_coffee.html": "fake_coffee.html" + }) + return \ No newline at end of file diff --git a/test/unit-tests/unit-test-getRelativePath.litcoffee b/test/unit-tests/unit-test-getRelativePath.litcoffee index 60166d1d..d4c9e2e2 100644 --- a/test/unit-tests/unit-test-getRelativePath.litcoffee +++ b/test/unit-tests/unit-test-getRelativePath.litcoffee @@ -1,33 +1,32 @@ # This tests if getLanguage is working correctly. - #!/usr/bin/env node - { should } = require('chai'); should() - describe 'docco getRelativePath', () -> - { getRelativePath } = require('../../docco') + { should } = require('chai'); should() + describe 'docco getRelativePath', () -> + { getRelativePath } = require('../../docco') - 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 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 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 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 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 + 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 + return diff --git a/test/unit-tests/unit-test-write.litcoffee b/test/unit-tests/unit-test-write.litcoffee index 8971b303..3ac77ce8 100644 --- a/test/unit-tests/unit-test-write.litcoffee +++ b/test/unit-tests/unit-test-write.litcoffee @@ -1,98 +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, 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":"
      code=here;
      ", - "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":"
      code=here;
      ", - "docsHtml":""}] - result = write(source, sections, config) - mockery.deregisterMock('fs-extra') - - return - - return \ No newline at end of file + { 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, 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":"
      code=here;
      ", + "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":"
      code=here;
      ", + "docsHtml":""}] + result = write(source, sections, config) + mockery.deregisterMock('fs-extra') + + return + + return \ No newline at end of file From a7ccca2599a43fbb043fc3218440072555c1f440 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Wed, 5 Jul 2017 19:43:10 -0700 Subject: [PATCH 21/95] Fixed unit tests for gulp build. --- docco.litcoffee | 3 +- .../fakes/fake-jst-result.litcoffee | 82 +++--- test/unit-tests/fakes/fake-jst.litcoffee | 105 ++++---- ...fake-linear-jst-flattened-result.litcoffee | 15 +- ...ke-linear-jst-unflattened-result.litcoffee | 30 +-- .../fakes/fake-linear-jst.litcoffee | 52 ++++ .../informationOnFilesFlattened.litcoffee | 236 +++++++++--------- .../informationOnFilesUnFlattened.litcoffee | 236 +++++++++--------- 8 files changed, 398 insertions(+), 361 deletions(-) create mode 100644 test/unit-tests/fakes/fake-linear-jst.litcoffee diff --git a/docco.litcoffee b/docco.litcoffee index 4b9b09f7..c8546a52 100644 --- a/docco.litcoffee +++ b/docco.litcoffee @@ -135,8 +135,6 @@ Implementation of spliting comments and code into split view html files. write source, sections, config -# writeO source, toFile, sections, config - if files.length then nextFile() else complete() nextFile() @@ -248,6 +246,7 @@ and rendering it to the specified output path. console.log("source: "+source) # todo: figure out how to remove the breaking change here. normally this should return file+'.html' + destination = (file) -> file diff --git a/test/unit-tests/fakes/fake-jst-result.litcoffee b/test/unit-tests/fakes/fake-jst-result.litcoffee index 1c3b922c..cf3e667f 100644 --- a/test/unit-tests/fakes/fake-jst-result.litcoffee +++ b/test/unit-tests/fakes/fake-jst-result.litcoffee @@ -1,41 +1,41 @@ - module.exports = ' fake_coffee.coffee ' + - ' ' + - ' ' + - ' ' + - ' ' + - ' ' + - '
      ' + - '
      ' + - ' ' + - '
        ' + - '
      • ' + - '
        ' + - '

        fake_coffee.coffee

        ' + - '
        ' + - '
      • ' + - '
      • ' + - '
        ' + - '
        ' + - ' ' + - '
        ' + - '
        ' + - '
        ' + - '
        ' + - '
        code=here;
        ' + - '
        ' + - '
        ' + - '
      • ' + - '
      ' + - '
      ' + - ' ' + - '' \ No newline at end of file + module.exports = ' fake_coffee.coffee ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + '
      ' + + '
      ' + + ' ' + + '
        ' + + '
      • ' + + '
        ' + + '

        fake_coffee.coffee

        ' + + '
        ' + + '
      • ' + + '
      • ' + + '
        ' + + '
        ' + + ' ' + + '
        ' + + '
        ' + + '
        ' + + '
        ' + + '
        code=here;
        ' + + '
        ' + + '
        ' + + '
      • ' + + '
      ' + + '
      ' + + ' ' + + '' \ No newline at end of file diff --git a/test/unit-tests/fakes/fake-jst.litcoffee b/test/unit-tests/fakes/fake-jst.litcoffee index 16563bbd..da360870 100644 --- a/test/unit-tests/fakes/fake-jst.litcoffee +++ b/test/unit-tests/fakes/fake-jst.litcoffee @@ -1,56 +1,55 @@ - module.exports = ' - - - <%= title %> - - - - - -
      -
      - <% if (sources.length > 1) { %> - - <% } %> -
        - <% if (!hasTitle) { %> -
      • + module.exports = ' + + + <%= title %> + + + + + +
        +
        + <% if (sources.length > 1) { %> + + <% } %> +
          + <% if (!hasTitle) { %> +
        • +
          +

          <%= title %>

          +
          +
        • + <% } %> + <% for (var i=0, l=sections.length; i + <% var section = sections[i]; %> +
        • -

          <%= title %>

          + <% heading = section.docsHtml.match(/^\s*<(h\d)>/) %> +
          + +
          + <%= section.docsHtml %>
          + <% if (section.codeText.replace(/\s/gm, \'\') != \'\') { %> +
          <%= section.codeHtml %>
          + <% } %>
        • - <% } %> - <% for (var i=0, l=sections.length; i - <% var section = sections[i]; %> -
        • -
          - <% heading = section.docsHtml.match(/^\s*<(h\d)>/) %> -
          - -
          - <%= section.docsHtml %> -
          - <% if (section.codeText.replace(/\s/gm, \'\') != \'\') { %> -
          <%= section.codeHtml %>
          - <% } %> -
        • - <% } %> -
        -
        - - - ' \ No newline at end of file + <% } %> +
      +
      + + ' \ 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 index d11b8ee9..c2d5bbea 100644 --- a/test/unit-tests/fakes/fake-linear-jst-flattened-result.litcoffee +++ b/test/unit-tests/fakes/fake-linear-jst-flattened-result.litcoffee @@ -1,14 +1 @@ - module.exports = ' ' + - 'fake_coffee.coffee ' + - ' ' + - ' ' + - '
      ' + - '

      fake_coffee.coffee

      ' + - '

      Table of Contents

      1. ' + - ' README.html
      2. ' + - '
      3. fake_coffee.html
      4. ' + - '
      5. fake_litcoffee.html
      6. ' + - '
      7. fluffybunny1.jpg
      8. ' + - '
      ' + - '
      code=here;
      ' + - '
      h
      ' \ No newline at end of file + module.exports = ' fake_coffee.coffee
      code=here;
      h
      ' \ 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 index ca6dfc4b..55899bf5 100644 --- a/test/unit-tests/fakes/fake-linear-jst-unflattened-result.litcoffee +++ b/test/unit-tests/fakes/fake-linear-jst-unflattened-result.litcoffee @@ -1,15 +1,15 @@ - module.exports = ' ' + - 'fake_coffee.coffee ' + - ' ' + - ' ' + - ' ' + - '
      ' + - '

      fake_coffee.coffee

      ' + - '

      Table of Contents

        ' + - '
      1. README.html
      2. ' + - '
      3. fake_coffee.html
      4. ' + - '
      5. fake_litcoffee.html
      6. ' + - '
      7. fluffybunny1.jpg
      8. ' + - '
      ' + - '
      code=here;
      ' + - '
      h
      ' \ No newline at end of file + module.exports = ' ' + + 'fake_coffee.coffee ' + + ' ' + + ' ' + + ' ' + + '
      ' + + '

      fake_coffee.coffee

      ' + + '

      Table of Contents

        ' + + '
      1. README.html
      2. ' + + '
      3. fake_coffee.html
      4. ' + + '
      5. fake_litcoffee.html
      6. ' + + '
      7. fluffybunny1.jpg
      8. ' + + '
      ' + + '
      code=here;
      ' + + '
      h
      ' \ 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 100644 index 00000000..4699c72b --- /dev/null +++ b/test/unit-tests/fakes/fake-linear-jst.litcoffee @@ -0,0 +1,52 @@ + module.exports = ' + + + <%= title %> + + + + + +
      +
      + +
      + <% if (hasTitle) { %> + <% var section = sections.shift(); %> + <%= section.docsHtml %> + <% if (!(/^\s*$/).test(section.codeText)) { %> + <%= section.codeHtml %> + <% } %> + <% } else { %> +

      <%= title %>

      + <% } %> + + <% if (sources.length > 1) { %> +
      +

      Table of Contents

      +
        + <% for (var i=0, l = sources.length; i < l; i++) { %> + <% var source = sources[i]; %> +
      1. + + <%= path.basename(source) %> + +
      2. + <% } %> +
      +
      + <% } %> +
      + + <% for (var i = 0, l = sections.length; i + <% var section = sections[i]; %> + <%= section.docsHtml %> + <% if (!(/^\s*$/).test(section.codeText)) { %> + <%= section.codeHtml %> + <% } %> + <% } %> +
      h
      +
      +
      + + ' \ No newline at end of file diff --git a/test/unit-tests/fakes/informationOnFilesFlattened.litcoffee b/test/unit-tests/fakes/informationOnFilesFlattened.litcoffee index a86411f4..e3400a4e 100644 --- a/test/unit-tests/fakes/informationOnFilesFlattened.litcoffee +++ b/test/unit-tests/fakes/informationOnFilesFlattened.litcoffee @@ -1,124 +1,124 @@ 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" + 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" + } + "others": { + "README.html": "README.html" + "fake_coffee.html": "fake_coffee.html" + "fake_litcoffee.html": "fake_litcoffee.html" + "fluffybunny1.jpg": "images/fluffybunny1.jpg" + } + "source": { + "base": "README.md" + "dir": "" + "ext": ".md" + "file": "README.md" + "name": "README" + "path": "/Project/README.md" + "relativefile": "README.md" + "root": "/Project" + } } - "others": { - "README.html": "README.html" - "fake_coffee.html": "fake_coffee.html" - "fake_litcoffee.html": "fake_litcoffee.html" - "fluffybunny1.jpg": "images/fluffybunny1.jpg" + "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" + } + "others": { + "README.html": "README.html" + "fake_coffee.html": "fake_coffee.html" + "fake_litcoffee.html": "fake_litcoffee.html" + "fluffybunny1.jpg": "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" + } } - "source": { - "base": "README.md" - "dir": "" - "ext": ".md" - "file": "README.md" - "name": "README" - "path": "/Project/README.md" - "relativefile": "README.md" - "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" + } + "others": { + "README.html": "README.html" + "fake_coffee.html": "fake_coffee.html" + "fake_litcoffee.html": "fake_litcoffee.html" + "fluffybunny1.jpg": "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" + } } - } - "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" + "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" + } + "others": { + "README.html": "README.html" + "fake_coffee.html": "fake_coffee.html" + "fake_litcoffee.html": "fake_litcoffee.html" + "fluffybunny1.jpg": "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" + } } - "others": { - "README.html": "README.html" - "fake_coffee.html": "fake_coffee.html" - "fake_litcoffee.html": "fake_litcoffee.html" - "fluffybunny1.jpg": "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" - } - "others": { - "README.html": "README.html" - "fake_coffee.html": "fake_coffee.html" - "fake_litcoffee.html": "fake_litcoffee.html" - "fluffybunny1.jpg": "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" - } - "others": { - "README.html": "README.html" - "fake_coffee.html": "fake_coffee.html" - "fake_litcoffee.html": "fake_litcoffee.html" - "fluffybunny1.jpg": "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 + } \ No newline at end of file diff --git a/test/unit-tests/fakes/informationOnFilesUnFlattened.litcoffee b/test/unit-tests/fakes/informationOnFilesUnFlattened.litcoffee index 24181fc3..f1bd9904 100644 --- a/test/unit-tests/fakes/informationOnFilesUnFlattened.litcoffee +++ b/test/unit-tests/fakes/informationOnFilesUnFlattened.litcoffee @@ -1,124 +1,124 @@ 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" + 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" + } + "others": { + "README.html": "README.html" + "fake_coffee.html": "src/fake_coffee.html" + "fake_litcoffee.html": "src/lib/fake_litcoffee.html" + "fluffybunny1.jpg": "images/fluffybunny1.jpg" + } + "source": { + "base": "README.md" + "dir": "" + "ext": ".md" + "file": "README.md" + "name": "README" + "path": "/Project/README.md" + "relativefile": "README.md" + "root": "/Project" + } } - "others": { - "README.html": "README.html" - "fake_coffee.html": "src/fake_coffee.html" - "fake_litcoffee.html": "src/lib/fake_litcoffee.html" - "fluffybunny1.jpg": "images/fluffybunny1.jpg" + "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" + } + "others": { + "README.html": "../README.html" + "fake_coffee.html": "../src/fake_coffee.html" + "fake_litcoffee.html": "../src/lib/fake_litcoffee.html" + "fluffybunny1.jpg": "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" + } } - "source": { - "base": "README.md" - "dir": "" - "ext": ".md" - "file": "README.md" - "name": "README" - "path": "/Project/README.md" - "relativefile": "README.md" - "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" + } + "others": { + "README.html": "../README.html" + "fake_coffee.html": "fake_coffee.html" + "fake_litcoffee.html": "lib/fake_litcoffee.html" + "fluffybunny1.jpg": "../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" + } } - } - "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" + "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" + } + "others": { + "README.html": "../../README.html" + "fake_coffee.html": "../fake_coffee.html" + "fake_litcoffee.html": "fake_litcoffee.html" + "fluffybunny1.jpg": "../../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" + } } - "others": { - "README.html": "../README.html" - "fake_coffee.html": "../src/fake_coffee.html" - "fake_litcoffee.html": "../src/lib/fake_litcoffee.html" - "fluffybunny1.jpg": "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" - } - "others": { - "README.html": "../README.html" - "fake_coffee.html": "fake_coffee.html" - "fake_litcoffee.html": "lib/fake_litcoffee.html" - "fluffybunny1.jpg": "../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" - } - "others": { - "README.html": "../../README.html" - "fake_coffee.html": "../fake_coffee.html" - "fake_litcoffee.html": "fake_litcoffee.html" - "fluffybunny1.jpg": "../../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 + } \ No newline at end of file From 59ad5687f470bf22046ccd7844a2ae5731242267 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Thu, 6 Jul 2017 11:12:31 -0700 Subject: [PATCH 22/95] unit tests and smaller files, unit tests not passing, broken functionality. --- docco.litcoffee | 387 +----------- docco_original.litcoffee | 565 ++++++++++++++++++ src/buildMatchers.litcoffee | 26 + src/configure.litcoffee | 59 ++ src/document.litcoffee | 80 +++ src/format.litcoffee | 50 ++ src/getCSSPath.litcoffee | 14 + src/getDestinationInformation.litcoffee | 32 + src/getInformationOnFiles.litcoffee | 63 ++ src/getLanguage.litcoffee | 16 + src/getOthers.litcoffee | 16 + src/getRelativePath.litcoffee | 16 + src/getSourceInformation.litcoffee | 15 + src/parse.litcoffee | 68 +++ src/write.litcoffee | 44 ++ test/unit-tests/fakes/fake_coffee.coffee | 9 + .../informationOnFilesFlattened.litcoffee | 30 + .../informationOnFilesUnFlattened.litcoffee | 30 + .../unit-test-buildMatchers.litcoffee | 18 + test/unit-tests/unit-test-configure.litcoffee | 48 ++ test/unit-tests/unit-test-document.litcoffee | 8 + test/unit-tests/unit-test-format.litcoffee | 8 + .../unit-tests/unit-test-getCSSPath.litcoffee | 4 +- ...t-test-getDestinationInformation.litcoffee | 13 +- .../unit-test-getInformationOnFiles.litcoffee | 7 +- .../unit-test-getLanguage.litcoffee | 10 +- test/unit-tests/unit-test-getOthers.litcoffee | 4 +- .../unit-test-getRelativePath.litcoffee | 3 +- test/unit-tests/unit-test-parse.litcoffee | 12 + test/unit-tests/unit-test-write.litcoffee | 4 +- 30 files changed, 1268 insertions(+), 391 deletions(-) create mode 100644 docco_original.litcoffee create mode 100644 src/buildMatchers.litcoffee create mode 100644 src/configure.litcoffee create mode 100644 src/document.litcoffee create mode 100644 src/format.litcoffee create mode 100644 src/getCSSPath.litcoffee create mode 100644 src/getDestinationInformation.litcoffee create mode 100644 src/getInformationOnFiles.litcoffee create mode 100644 src/getLanguage.litcoffee create mode 100644 src/getOthers.litcoffee create mode 100644 src/getRelativePath.litcoffee create mode 100644 src/getSourceInformation.litcoffee create mode 100644 src/parse.litcoffee create mode 100644 src/write.litcoffee create mode 100644 test/unit-tests/fakes/fake_coffee.coffee create mode 100644 test/unit-tests/unit-test-buildMatchers.litcoffee create mode 100644 test/unit-tests/unit-test-configure.litcoffee create mode 100644 test/unit-tests/unit-test-document.litcoffee create mode 100644 test/unit-tests/unit-test-format.litcoffee create mode 100644 test/unit-tests/unit-test-parse.litcoffee diff --git a/docco.litcoffee b/docco.litcoffee index c8546a52..039a89b0 100644 --- a/docco.litcoffee +++ b/docco.litcoffee @@ -77,365 +77,39 @@ 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. - - lang = getLanguage source, config - - if config.flatten and !lang.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 lang.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, code, config - format source, sections, config - toFile = toDirectory + '/' + (path.basename source, path.extname source) - - 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 lang.linkMatcher and line.match(lang.linkMatcher) - LINK_REGEX = /\((.+)\)/ - TEXT_REGEX = /\[(.+)\]/ - links = LINK_REGEX.exec(line) - texts = TEXT_REGEX.exec(line) - if links? and links.length > 1 and texts? and texts.length > 1 - link = links[1] - text = texts[1] - codeText += '

      '+text+'

      ' + '\n' - hasCode = yes - else if lang.sectionMatcher and line.match(lang.sectionMatcher) - save() if hasCode - docsText += (line = line.replace(lang.commentMatcher, '')) + '\n' - save() # if /^(---+|===+)$/.test line - else 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 - if language.html - section.codeHtml = section.codeText - else - code = highlightjs.highlight(language.name, section.codeText).value - code = code.replace(/\s+$/, '') - section.codeHtml = "
      #{code}
      " - section.docsHtml = marked(section.docsText) + format = require './src/format' 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) -> - - console.log("source: "+source) - - # 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) - html = config.template { sources: others, css: fileInfo.destination.css, - title, hasTitle, sections, path, destination } - - console.log "docco: #{source} -> #{destination fileInfo.destination.path}" - fs.writeFileSync destination(fileInfo.destination.path), html - return - + write = require './src/write' 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 - setup: '.docco.json' - help: false - flatten: false + **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() - console.log("Template:"+config.template) - - 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 - - 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 - - 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 - - getRelativePath = (fromFile, toFile, base) -> - console.log("From: #{fromFile} To: #{toFile}") - fromTo = path.relative(fromFile,toFile) - if fromTo is '' or fromTo is '.' or fromTo is '..' or fromTo is '../' - fromTo = base - else - fromTo = fromTo.slice(3) - - console.log("Path: #{fromTo}") - fromTo - - getCSSPath = (cssFile, targetDirectory, file) -> - css = path.parse(cssFile) - css.file = targetDirectory+'/'+css.base - - cssPath = path.relative(file, css.file) - cssPath = cssPath.slice(3) - - cssPath - - getOthers = (file, informationOnFiles, config) -> - sourceFileInformation = informationOnFiles[file] - source = sourceFileInformation.source - others = {} - for other in config.sources - destinationFileInformation = informationOnFiles[other] - target = destinationFileInformation.destination - - console.log(JSON.stringify(destinationFileInformation.destination,null,2)) - others[target.base] = getRelativePath source.relativefile, target.relativefile, target.base - - others - - 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 - destinations = {} - -First the source name: - - source = getSourceInformation(file, rootDirectory, config.flatten) - -Next the destination: - - language = getLanguage file, config - - 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 - -Now, figure out the relative paths to the other source files: - - for file in config.sources - informationOnFiles[file].others = getOthers(file, informationOnFiles, config) - - return informationOnFiles + configure = require './src/configure' + getInformationOnFiles = require './src/getInformationOnFiles' Helpers & Initial Setup ----------------------- @@ -460,42 +134,10 @@ language to Docco, just add it to the file. Build out the appropriate matchers and delimiters for each language. - buildMatchers = (languages) -> - for ext, l of languages - -Does the line begin with a comment? + buildMatchers = require './src/buildMatchers' - 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.linkMatcher = ///^#{l.link}\[(.+)\]\((.+)\)/// - -Look for explict section breaks - - if l.section - l.sectionMatcher = ///^#{l.section}\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 @@ -507,6 +149,7 @@ 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) -> + console.log(JSON.stringify(args,null,2) config = defaults commander.version(version) @@ -538,8 +181,8 @@ Parse options using [Commander](https://github.com/visionmedia/commander.js). for file in files config.sources.push path.relative(config.root, file) - config.informationOnFiles = getInformationOnFiles config - document config + config.informationOnFiles = getInformationOnFiles languages, config + document config languages else console.log commander.helpInformation() return @@ -555,10 +198,6 @@ Public API write, version, languages, - getDestinationInformation, - getLanguage, - getInformationOnFiles, - getCSSPath, - getRelativePath, - getOthers + + getInformationOnFiles } diff --git a/docco_original.litcoffee b/docco_original.litcoffee new file mode 100644 index 00000000..2661447d --- /dev/null +++ b/docco_original.litcoffee @@ -0,0 +1,565 @@ +Docco +===== + +**Docco** is a quick-and-dirty documentation generator, written in +[Literate CoffeeScript](http://coffeescript.org/#literate). +It produces an HTML document that displays your comments intermingled with your +code. All prose is passed through +[Markdown](http://daringfireball.net/projects/markdown/syntax), and code is +passed through [Highlight.js](http://highlightjs.org/) syntax highlighting. +This page is the result of running Docco against its own +[source file](https://github.com/jashkenas/docco/blob/master/docco.litcoffee). + +1. Install Docco with **npm**: `sudo npm install -g docco` + +2. Run it against your code: `docco src/*.coffee` + +There is no "Step 3". This will generate an HTML page for each of the named +source files, with a menu linking to the other pages, saving the whole mess +into a `docs` folder (configurable). + +The [Docco source](http://github.com/jashkenas/docco) is available on GitHub, +and is released under the [MIT license](http://opensource.org/licenses/MIT). + +Docco can be used to process code written in any programming language. If it +doesn't handle your favorite yet, feel free to +[add it to the list](https://github.com/jashkenas/docco/blob/master/resources/languages.json). +Finally, the ["literate" style](http://coffeescript.org/#literate) of *any* +language is also supported — just tack an `.md` extension on the end: +`.coffee.md`, `.py.md`, and so on. + + +Partners in Crime: +------------------ + +* If Node.js doesn't run on your platform, or you'd prefer a more +convenient package, get [Ryan Tomayko](http://github.com/rtomayko)'s +[Rocco](http://rtomayko.github.io/rocco/rocco.html), the **Ruby** port that's +available as a gem. + +* If you're writing shell scripts, try +[Shocco](http://rtomayko.github.io/shocco/), a port for the **POSIX shell**, +also by Mr. Tomayko. + +* If **Python** is more your speed, take a look at +[Nick Fitzgerald](http://github.com/fitzgen)'s [Pycco](https://pycco-docs.github.io/pycco/). + +* For **Clojure** fans, [Fogus](http://blog.fogus.me/)'s +[Marginalia](http://fogus.me/fun/marginalia/) is a bit of a departure from +"quick-and-dirty", but it'll get the job done. + +* There's a **Go** port called [Gocco](http://nikhilm.github.io/gocco/), +written by [Nikhil Marathe](https://github.com/nikhilm). + +* For all you **PHP** buffs out there, Fredi Bach's +[sourceMakeup](http://jquery-jkit.com/sourcemakeup/) (we'll let the faux pas +with respect to our naming scheme slide), should do the trick nicely. + +* **Lua** enthusiasts can get their fix with +[Robert Gieseke](https://github.com/rgieseke)'s [Locco](http://rgieseke.github.io/locco/). + +* And if you happen to be a **.NET** +aficionado, check out [Don Wilson](https://github.com/dontangg)'s +[Nocco](http://dontangg.github.io/nocco/). + +* Going further afield from the quick-and-dirty, [Groc](http://nevir.github.io/groc/) +is a **CoffeeScript** fork of Docco that adds a searchable table of contents, +and aims to gracefully handle large projects with complex hierarchies of code. + +Note that not all ports will support all Docco features ... yet. + + +Main Documentation Generation Functions +--------------------------------------- + +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. + + lang = getLanguage source, config + + if config.flatten and !lang.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 lang.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, code, config + format source, sections, config + toFile = toDirectory + '/' + (path.basename source, path.extname source) + + write source, sections, config + + if files.length then nextFile() else complete() + + nextFile() + +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 lang.linkMatcher and line.match(lang.linkMatcher) + LINK_REGEX = /\((.+)\)/ + TEXT_REGEX = /\[(.+)\]/ + links = LINK_REGEX.exec(line) + texts = TEXT_REGEX.exec(line) + if links? and links.length > 1 and texts? and texts.length > 1 + link = links[1] + text = texts[1] + codeText += '

      '+text+'

      ' + '\n' + hasCode = yes + else if lang.sectionMatcher and line.match(lang.sectionMatcher) + save() if hasCode + docsText += (line = line.replace(lang.commentMatcher, '')) + '\n' + save() # if /^(---+|===+)$/.test line + else 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 + +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 + if language.html + section.codeHtml = section.codeText + else + code = highlightjs.highlight(language.name, section.codeText).value + code = code.replace(/\s+$/, '') + section.codeHtml = "
      #{code}
      " + 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) -> + + console.log("source: "+source) + + # 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) + html = config.template { sources: others, css: fileInfo.destination.css, + title, hasTitle, sections, path, destination } + + console.log "docco: #{source} -> #{destination fileInfo.destination.path}" + fs.writeFileSync destination(fileInfo.destination.path), html + return + + +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 + setup: '.docco.json' + help: false + flatten: false + +**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() + console.log("Template:"+config.template) + + 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 + + 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 + + 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 + + getRelativePath = (fromFile, toFile, base) -> + console.log("From: #{fromFile} To: #{toFile}") + fromTo = path.relative(fromFile,toFile) + if fromTo is '' or fromTo is '.' or fromTo is '..' or fromTo is '../' + fromTo = base + else + fromTo = fromTo.slice(3) + + console.log("Path: #{fromTo}") + fromTo + + getCSSPath = (cssFile, targetDirectory, file) -> + css = path.parse(cssFile) + css.file = targetDirectory+'/'+css.base + + cssPath = path.relative(file, css.file) + cssPath = cssPath.slice(3) + + cssPath + + getOthers = (file, informationOnFiles, config) -> + sourceFileInformation = informationOnFiles[file] + source = sourceFileInformation.source + others = {} + for other in config.sources + destinationFileInformation = informationOnFiles[other] + target = destinationFileInformation.destination + + console.log(JSON.stringify(destinationFileInformation.destination,null,2)) + others[target.base] = getRelativePath source.relativefile, target.relativefile, target.base + + others + + 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 + destinations = {} + +First the source name: + + source = getSourceInformation(file, rootDirectory, config.flatten) + +Next the destination: + + language = getLanguage file, config + + 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 + +Now, figure out the relative paths to the other source files: + + for file in config.sources + informationOnFiles[file].others = getOthers(file, informationOnFiles, config) + + return informationOnFiles + + +Helpers & Initial Setup +----------------------- + +Require our external dependencies. + + _ = 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' + +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 +`symbol` that indicates a line comment. To add support for a new programming +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*#\{)/ + +Look for links if necessary. + + if l.link + l.linkMatcher = ///^#{l.link}\[(.+)\]\((.+)\)/// + +Look for explict section breaks + + if l.section + l.sectionMatcher = ///^#{l.section}\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 + +Command Line Interface +---------------------- + +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) -> + 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('-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 + + 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 + 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, + write, + version, + languages, + getDestinationInformation, + getLanguage, + getInformationOnFiles, + getCSSPath, + getRelativePath, + getOthers + } diff --git a/src/buildMatchers.litcoffee b/src/buildMatchers.litcoffee new file mode 100644 index 00000000..db84312d --- /dev/null +++ b/src/buildMatchers.litcoffee @@ -0,0 +1,26 @@ +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*#\{)/ + +Look for links if necessary. + + if l.link + l.linkMatcher = ///^#{l.link}\[(.+)\]\((.+)\)/// + +Look for explict section breaks + + if l.section + l.sectionMatcher = ///^#{l.section}\s?/// + + languages + + module.exports = buildMatchers diff --git a/src/configure.litcoffee b/src/configure.litcoffee new file mode 100644 index 00000000..f9789e6e --- /dev/null +++ b/src/configure.litcoffee @@ -0,0 +1,59 @@ + _ = require 'underscore' + fs = require 'fs-extra' + path = require 'path' + getLanguage = require './getLanguage' + buildMatchers = require './buildMatchers' + +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 + setup: '.docco.json' + help: false + flatten: false + +**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() + console.log("Template:"+config.template) + + 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 + + module.exports = configure diff --git a/src/document.litcoffee b/src/document.litcoffee new file mode 100644 index 00000000..2353cd75 --- /dev/null +++ b/src/document.litcoffee @@ -0,0 +1,80 @@ + _ = 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' + +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 = {}, languages, 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 = getLanguage source, languages, config + + if config.flatten and !lang.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, 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() + + module.exports = document + diff --git a/src/format.litcoffee b/src/format.litcoffee new file mode 100644 index 00000000..47e47b20 --- /dev/null +++ b/src/format.litcoffee @@ -0,0 +1,50 @@ + _ = 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). + + 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, language) -> + language or= language.name + + if highlightjs.getLanguage(language) + highlightjs.highlight(language, code).value + else + console.warn "docco: couldn't highlight code block with unknown language '#{language}' 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 = "
      #{code}
      " + section.docsHtml = marked(section.docsText) + + module.exports = format \ No newline at end of file diff --git a/src/getCSSPath.litcoffee b/src/getCSSPath.litcoffee new file mode 100644 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.litcoffee b/src/getDestinationInformation.litcoffee new file mode 100644 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.litcoffee b/src/getInformationOnFiles.litcoffee new file mode 100644 index 00000000..b38dd3d0 --- /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' + + getInformationOnFiles = (languages, 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 + destinations = {} + +First the source name: + + source = getSourceInformation(file, rootDirectory, config.flatten) + +Next the destination: + + language = getLanguage file, languages, config + + 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 + informationOnFiles[file].others = getOthers(file, informationOnFiles, config) + + return informationOnFiles + + module.exports = getInformationOnFiles + diff --git a/src/getLanguage.litcoffee b/src/getLanguage.litcoffee new file mode 100644 index 00000000..f2fdbbe4 --- /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, 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 + + module.exports = getLanguage \ No newline at end of file diff --git a/src/getOthers.litcoffee b/src/getOthers.litcoffee new file mode 100644 index 00000000..56b488c3 --- /dev/null +++ b/src/getOthers.litcoffee @@ -0,0 +1,16 @@ + 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 + + console.log(JSON.stringify(destinationFileInformation.destination,null,2)) + others[target.base] = getRelativePath source.relativefile, target.relativefile, target.base + + others + + module.exports = getOthers diff --git a/src/getRelativePath.litcoffee b/src/getRelativePath.litcoffee new file mode 100644 index 00000000..adaefe57 --- /dev/null +++ b/src/getRelativePath.litcoffee @@ -0,0 +1,16 @@ +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) -> + console.log("From: #{fromFile} To: #{toFile}") + fromTo = path.relative(fromFile,toFile) + if fromTo is '' or fromTo is '.' or fromTo is '..' or fromTo is '../' + fromTo = base + else + fromTo = fromTo.slice(3) + + console.log("Path: #{fromTo}") + fromTo + + module.exports = getRelativePath \ No newline at end of file diff --git a/src/getSourceInformation.litcoffee b/src/getSourceInformation.litcoffee new file mode 100644 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.litcoffee b/src/parse.litcoffee new file mode 100644 index 00000000..26e8c715 --- /dev/null +++ b/src/parse.litcoffee @@ -0,0 +1,68 @@ + _ = 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' + + +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 lang.linkMatcher and line.match(lang.linkMatcher) + LINK_REGEX = /\((.+)\)/ + TEXT_REGEX = /\[(.+)\]/ + links = LINK_REGEX.exec(line) + texts = TEXT_REGEX.exec(line) + if links? and links.length > 1 and texts? and texts.length > 1 + link = links[1] + text = texts[1] + codeText += '

      '+text+'

      ' + '\n' + hasCode = yes + else if lang.sectionMatcher and line.match(lang.sectionMatcher) + save() if hasCode + docsText += (line = line.replace(lang.commentMatcher, '')) + '\n' + save() # if /^(---+|===+)$/.test line + else 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 + + module.exports = parse \ No newline at end of file diff --git a/src/write.litcoffee b/src/write.litcoffee new file mode 100644 index 00000000..5e5109b3 --- /dev/null +++ b/src/write.litcoffee @@ -0,0 +1,44 @@ + _ = 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. + + write = (source, sections, config) -> + + console.log("source: "+source) + + # 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) + html = config.template { sources: others, css: fileInfo.destination.css, + title, hasTitle, sections, path, destination } + + console.log "docco: #{source} -> #{destination fileInfo.destination.path}" + fs.writeFileSync destination(fileInfo.destination.path), html + return + + module.exports = write diff --git a/test/unit-tests/fakes/fake_coffee.coffee b/test/unit-tests/fakes/fake_coffee.coffee new file mode 100644 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.litcoffee b/test/unit-tests/fakes/informationOnFilesFlattened.litcoffee index e3400a4e..9627717d 100644 --- a/test/unit-tests/fakes/informationOnFilesFlattened.litcoffee +++ b/test/unit-tests/fakes/informationOnFilesFlattened.litcoffee @@ -14,6 +14,17 @@ A fake for the flattended getInformationOnFiles test. "relativefile": "README.html" "root": "/Project" } + "language": { + "commentFilter": /(^#![\/]|^\s*#\{)/ + "commentMatcher": /^\s*\s?/ + "html": true + "link": "!" + "linkMatcher": /^!\[(.+)\]\((.+)\)/ + "name": "markdown" + "section": "#" + "sectionMatcher": /^#\s?/ + "symbol": "" + } "others": { "README.html": "README.html" "fake_coffee.html": "fake_coffee.html" @@ -44,6 +55,12 @@ A fake for the flattended getInformationOnFiles test. "relativefile": "images/fluffybunny1.jpg" "root": "/Project" } + "language": { + "commentFilter": /(^#![\/]|^\s*#\{)/ + "commentMatcher": /^\s*undefined\s?/ + "copy": true + "name": "image" + } "others": { "README.html": "README.html" "fake_coffee.html": "fake_coffee.html" @@ -74,6 +91,12 @@ A fake for the flattended getInformationOnFiles test. "relativefile": "fake_coffee.html" "root": "/Project" } + "language": { + "commentFilter": /(^#![\/]|^\s*#\{)/ + "commentMatcher": /^\s*#\s?/ + "name": "coffeescript" + "symbol": "#" + } "others": { "README.html": "README.html" "fake_coffee.html": "fake_coffee.html" @@ -104,6 +127,13 @@ A fake for the flattended getInformationOnFiles test. "relativefile": "fake_litcoffee.html" "root": "/Project" } + "language": { + "commentFilter": /(^#![\/]|^\s*#\{)/ + "commentMatcher": /^\s*#\s?/ + "literate": true + "name": "coffeescript" + "symbol": "#" + } "others": { "README.html": "README.html" "fake_coffee.html": "fake_coffee.html" diff --git a/test/unit-tests/fakes/informationOnFilesUnFlattened.litcoffee b/test/unit-tests/fakes/informationOnFilesUnFlattened.litcoffee index f1bd9904..19e4b83d 100644 --- a/test/unit-tests/fakes/informationOnFilesUnFlattened.litcoffee +++ b/test/unit-tests/fakes/informationOnFilesUnFlattened.litcoffee @@ -14,6 +14,17 @@ A fake for the unflattended getInformationOnFiles test. "relativefile": "README.html" "root": "/Project" } + "language": { + "commentFilter": /(^#![\/]|^\s*#\{)/ + "commentMatcher": /^\s*\s?/ + "html": true + "link": "!" + "linkMatcher": /^!\[(.+)\]\((.+)\)/ + "name": "markdown" + "section": "#" + "sectionMatcher": /^#\s?/ + "symbol": "" + } "others": { "README.html": "README.html" "fake_coffee.html": "src/fake_coffee.html" @@ -44,6 +55,12 @@ A fake for the unflattended getInformationOnFiles test. "relativefile": "images/fluffybunny1.jpg" "root": "/Project" } + "language": { + "commentFilter": /(^#![\/]|^\s*#\{)/ + "commentMatcher": /^\s*undefined\s?/ + "copy": true + "name": "image" + } "others": { "README.html": "../README.html" "fake_coffee.html": "../src/fake_coffee.html" @@ -74,6 +91,12 @@ A fake for the unflattended getInformationOnFiles test. "relativefile": "src/fake_coffee.html" "root": "/Project" } + "language": { + "commentFilter": /(^#![\/]|^\s*#\{)/ + "commentMatcher": /^\s*#\s?/ + "name": "coffeescript" + "symbol": "#" + } "others": { "README.html": "../README.html" "fake_coffee.html": "fake_coffee.html" @@ -104,6 +127,13 @@ A fake for the unflattended getInformationOnFiles test. "relativefile": "src/lib/fake_litcoffee.html" "root": "/Project" } + "language": { + "commentFilter": /(^#![\/]|^\s*#\{)/ + "commentMatcher": /^\s*#\s?/ + "literate": true + "name": "coffeescript" + "symbol": "#" + } "others": { "README.html": "../../README.html" "fake_coffee.html": "../fake_coffee.html" diff --git a/test/unit-tests/unit-test-buildMatchers.litcoffee b/test/unit-tests/unit-test-buildMatchers.litcoffee new file mode 100644 index 00000000..3b50fe1a --- /dev/null +++ b/test/unit-tests/unit-test-buildMatchers.litcoffee @@ -0,0 +1,18 @@ +# 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,///^#{l.link}\[(.+)\]\((.+)\)///) + if l.section + assert.deepEqual(l.sectionMatcher,///^#{l.section}\s?///) diff --git a/test/unit-tests/unit-test-configure.litcoffee b/test/unit-tests/unit-test-configure.litcoffee new file mode 100644 index 00000000..5e7eeb29 --- /dev/null +++ b/test/unit-tests/unit-test-configure.litcoffee @@ -0,0 +1,48 @@ +# 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" + ] + + 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 diff --git a/test/unit-tests/unit-test-document.litcoffee b/test/unit-tests/unit-test-document.litcoffee new file mode 100644 index 00000000..e1c23064 --- /dev/null +++ b/test/unit-tests/unit-test-document.litcoffee @@ -0,0 +1,8 @@ +# This tests if parse is working correctly. + + { assert, should } = require('chai'); should() + document = require '../../src/document' + + describe 'docco document', () -> + + it 'document docco', () -> diff --git a/test/unit-tests/unit-test-format.litcoffee b/test/unit-tests/unit-test-format.litcoffee new file mode 100644 index 00000000..2936a8fa --- /dev/null +++ b/test/unit-tests/unit-test-format.litcoffee @@ -0,0 +1,8 @@ +# This tests if parse is working correctly. + + { assert, should } = require('chai'); should() + format = require '../../src/format' + + describe 'docco format', () -> + + it 'format docco', () -> diff --git a/test/unit-tests/unit-test-getCSSPath.litcoffee b/test/unit-tests/unit-test-getCSSPath.litcoffee index cc9e824a..c20c1fe9 100644 --- a/test/unit-tests/unit-test-getCSSPath.litcoffee +++ b/test/unit-tests/unit-test-getCSSPath.litcoffee @@ -1,10 +1,10 @@ -# This tests if getLanguage is working correctly +# This tests if getCSSPath is working correctly { should } = require('chai'); should() + getCSSPath = require('../../src/getCSSPath') describe 'docco getCSSPath', () -> - { getCSSPath } = require('../../docco') it 'gets the path to the css in the same directory.', () -> cssPath = getCSSPath('file.css', 'docs', 'docs/file.html' ) diff --git a/test/unit-tests/unit-test-getDestinationInformation.litcoffee b/test/unit-tests/unit-test-getDestinationInformation.litcoffee index 79c4f618..0bf506b0 100644 --- a/test/unit-tests/unit-test-getDestinationInformation.litcoffee +++ b/test/unit-tests/unit-test-getDestinationInformation.litcoffee @@ -1,13 +1,16 @@ # 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', () -> - { languages, getLanguage, getDestinationInformation } = require('../../docco') it 'unflattened: gets destinationInformation for one source', () -> file = "src/fake_coffee.coffee" config = { languages:languages } - language = getLanguage file, config + language = getLanguage file, languages, config source = { "root":"/Project", "dir":"src", @@ -39,7 +42,7 @@ it 'flattened: gets destinationInformation for one source', () -> file = "src/fake_coffee.coffee" config = { languages:languages } - language = getLanguage file, config + language = getLanguage file, languages, config source = { "root":"/Project", "dir":"src", @@ -71,7 +74,7 @@ it 'unflattened: gets destinationInformation for one copy source', () -> file = "images/fluffybunny1.jpg" config = { languages:languages } - language = getLanguage file, config + language = getLanguage file, languages, config language.copy.should.be.true source = { @@ -105,7 +108,7 @@ it 'flattened: gets destinationInformation for one copy source', () -> file = "images/fluffybunny1.jpg" config = { languages:languages } - language = getLanguage file, config + language = getLanguage file, languages, config language.copy.should.be.true source = { "root":"/Project", diff --git a/test/unit-tests/unit-test-getInformationOnFiles.litcoffee b/test/unit-tests/unit-test-getInformationOnFiles.litcoffee index 34cc94da..dc263f7f 100644 --- a/test/unit-tests/unit-test-getInformationOnFiles.litcoffee +++ b/test/unit-tests/unit-test-getInformationOnFiles.litcoffee @@ -2,7 +2,8 @@ { assert, should } = require('chai'); should() describe 'docco getInformationOnFiles', () -> - { languages, getInformationOnFiles } = require('../../docco') + { languages } = require('../../docco') + getInformationOnFiles = require('../../src/getInformationOnFiles') it 'calculates file information with unflattened request', () -> informationOnFilesFake = require './fakes/informationOnFilesUnFlattened' @@ -18,7 +19,7 @@ "images/fluffybunny1.jpg" "src/lib/fake_litcoffee.litcoffee" ] - informationOnFiles = getInformationOnFiles(config) + informationOnFiles = getInformationOnFiles(languages, config) assert.deepEqual(informationOnFiles, informationOnFilesFake) return @@ -38,6 +39,6 @@ "src/lib/fake_litcoffee.litcoffee" ] flatten: true - informationOnFiles = getInformationOnFiles(config) + informationOnFiles = getInformationOnFiles(languages, config) assert.deepEqual(informationOnFiles, informationOnFilesFake) return diff --git a/test/unit-tests/unit-test-getLanguage.litcoffee b/test/unit-tests/unit-test-getLanguage.litcoffee index 809b4cc7..1f8e4a7a 100644 --- a/test/unit-tests/unit-test-getLanguage.litcoffee +++ b/test/unit-tests/unit-test-getLanguage.litcoffee @@ -1,13 +1,15 @@ # This tests if getLanguage is working correctly. { should } = require('chai'); should() + getLanguage = require('../../src/getLanguage') + {languages} = require('../../docco') + describe 'docco getLanguage', () -> - { languages, getLanguage } = require('../../docco') it 'gets the right language for the given a coffescript file.', () -> source = "src/fake_coffee.coffee" config = { languages:languages } - language = getLanguage source, config + language = getLanguage source, languages, config language.name.should.be.equal("coffeescript") language.symbol.should.be.equal("#") return @@ -15,7 +17,7 @@ it 'gets the right language for the given a markdown file.', () -> source = "README.md" config = { languages:languages } - language = getLanguage source, config + language = getLanguage source, languages, config language.name.should.be.equal("markdown") language.symbol.should.be.equal("") language.section.should.be.equal("#") @@ -26,7 +28,7 @@ it 'gets the right language for the given an image file.', () -> source = "images/fluffybunny.jpg" config = { languages:languages } - language = getLanguage source, config + language = getLanguage source, languages, config language.name.should.be.equal("image") language.copy.should.be.true return diff --git a/test/unit-tests/unit-test-getOthers.litcoffee b/test/unit-tests/unit-test-getOthers.litcoffee index bcaa1442..25651d33 100644 --- a/test/unit-tests/unit-test-getOthers.litcoffee +++ b/test/unit-tests/unit-test-getOthers.litcoffee @@ -1,8 +1,10 @@ # This tests if getLanguage is working correctly. { assert, should } = require('chai'); should() + + getOthers = require '../../src/getOthers' + describe 'docco getOthers', () -> - { getOthers } = require('../../docco') it 'gets paths to other destination files: top level, unflattened.', () -> informationOnFiles = require './fakes/informationOnFilesUnFlattened' diff --git a/test/unit-tests/unit-test-getRelativePath.litcoffee b/test/unit-tests/unit-test-getRelativePath.litcoffee index d4c9e2e2..009737e0 100644 --- a/test/unit-tests/unit-test-getRelativePath.litcoffee +++ b/test/unit-tests/unit-test-getRelativePath.litcoffee @@ -1,8 +1,9 @@ # This tests if getLanguage is working correctly. { should } = require('chai'); should() + getRelativePath = require('../../src/getRelativePath') + describe 'docco getRelativePath', () -> - { getRelativePath } = require('../../docco') it 'gets the path to a file in the same directory.', () -> cssPath = getRelativePath('./file.css', './file.html', 'file.html' ) diff --git a/test/unit-tests/unit-test-parse.litcoffee b/test/unit-tests/unit-test-parse.litcoffee new file mode 100644 index 00000000..5b47126f --- /dev/null +++ b/test/unit-tests/unit-test-parse.litcoffee @@ -0,0 +1,12 @@ +# This tests if parse is working correctly. + + { assert, should } = require('chai'); should() + parse = require '../../src/parse' + + describe 'docco parse', () -> + + it 'parse some source code', () -> + source = require './fakes/fake_coffee.coffee' + + sections = parse(source, code, config) + diff --git a/test/unit-tests/unit-test-write.litcoffee b/test/unit-tests/unit-test-write.litcoffee index 3ac77ce8..e537b3e0 100644 --- a/test/unit-tests/unit-test-write.litcoffee +++ b/test/unit-tests/unit-test-write.litcoffee @@ -1,6 +1,7 @@ # This tests if write is working correctly. { assert, should } = require('chai'); should() + mockery = require('mockery') mockery.enable({ useCleanCache: true, @@ -31,7 +32,8 @@ assert.equal(html,resultOfTemplateUnFlattened) }) - { write, languages } = require('../../docco') + write = require '../../src/write' + { languages } = require('../../docco') template = require './fakes/fake-linear-jst' informationOnFilesFlattened = require './fakes/informationOnFilesFlattened' From 295b8706fb7099e042cfad15d7e099636c1d42e3 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Thu, 6 Jul 2017 21:04:33 -0700 Subject: [PATCH 23/95] fixed command line arguments to the program. --- README | 5 +++ docco.litcoffee | 45 ++++++++----------- docco_original.litcoffee | 15 +++++++ gulpfile.coffee | 2 +- src/configure.litcoffee | 20 +-------- src/document.litcoffee | 16 +++++-- src/format.litcoffee | 13 +++--- src/getInformationOnFiles.litcoffee | 2 +- src/getLanguage.litcoffee | 6 +-- src/parse.litcoffee | 22 +++++---- test/fakes/src/fake_java.java | 6 +-- test/unit-tests/fakes/fake_coffee.coffee | 4 +- test/unit-tests/unit-test-configure.litcoffee | 13 +++++- ...t-test-getDestinationInformation.litcoffee | 8 ++-- .../unit-test-getLanguage.litcoffee | 6 +-- test/unit-tests/unit-test-parse.litcoffee | 18 +++++++- 16 files changed, 113 insertions(+), 88 deletions(-) diff --git a/README b/README index cc85802d..9a0d7673 100644 --- a/README +++ b/README @@ -31,3 +31,8 @@ Usage: docco [options] FILES -s, --setup [file], use configuration file, normally docco.json -t, --template [file] use a custom .jst template -V, --version output the version number + +TODO: + + * Multiline comments + * Links to files that are included or required \ No newline at end of file diff --git a/docco.litcoffee b/docco.litcoffee index 039a89b0..7711ddca 100644 --- a/docco.litcoffee +++ b/docco.litcoffee @@ -79,30 +79,9 @@ out in an HTML template. 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 = 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 = require './src/format' - -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 = require './src/write' - Configuration ------------- - - **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. @@ -142,6 +121,21 @@ 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: 'parallel' + output: 'docs' + template: null + css: null + extension: null + languages: {} + marked: null + setup: '.docco.json' + help: false + flatten: false + Command Line Interface ---------------------- @@ -149,7 +143,7 @@ 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) -> - console.log(JSON.stringify(args,null,2) + console.log("args:" + JSON.stringify(args)) config = defaults commander.version(version) @@ -166,7 +160,7 @@ Parse options using [Commander](https://github.com/visionmedia/commander.js). .parse(args) .name = "docco" - config = configure commander + config = configure commander, defaults, languages setup = path.resolve config.setup if fs.existsSync(setup) @@ -182,7 +176,7 @@ Parse options using [Commander](https://github.com/visionmedia/commander.js). config.sources.push path.relative(config.root, file) config.informationOnFiles = getInformationOnFiles languages, config - document config languages + document config, languages else console.log commander.helpInformation() return @@ -193,9 +187,6 @@ Public API Docco = module.exports = { run, document, - parse, - format, - write, version, languages, diff --git a/docco_original.litcoffee b/docco_original.litcoffee index 2661447d..8595c479 100644 --- a/docco_original.litcoffee +++ b/docco_original.litcoffee @@ -504,6 +504,21 @@ Keep it DRY. Extract the docco **version** from `package.json` Command Line Interface ---------------------- +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 + setup: '.docco.json' + help: false + flatten: false + Finally, let's define the interface to run Docco from the command line. Parse options using [Commander](https://github.com/visionmedia/commander.js). diff --git a/gulpfile.coffee b/gulpfile.coffee index 9d47d7ff..97376d0f 100644 --- a/gulpfile.coffee +++ b/gulpfile.coffee @@ -11,7 +11,7 @@ parallelize = require("concurrent-transform") threads = 100 -coffeeFiles = ['docco.litcoffee', 'test/**/*.litcoffee'] +coffeeFiles = ['docco.litcoffee', 'test/**/*.litcoffee', 'test/unit-tests/fakes/fake_coffee.coffee'] javascriptFiles = ['docco.js', 'docco.js.map', 'test/**/*.js'] diff --git a/src/configure.litcoffee b/src/configure.litcoffee index f9789e6e..9606f2a0 100644 --- a/src/configure.litcoffee +++ b/src/configure.litcoffee @@ -4,26 +4,12 @@ getLanguage = require './getLanguage' buildMatchers = require './buildMatchers' -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 - setup: '.docco.json' - help: false - flatten: false **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) -> + module.exports = configure = (options, defaults, languages) -> config = _.extend {}, defaults, _.pick(options, _.keys(defaults)...) config.languages = buildMatchers config.languages @@ -49,11 +35,9 @@ is only copied for the latter. config.marked = JSON.parse fs.readFileSync(options.marked) config.sources = options.args.filter((source) -> - lang = getLanguage source, config + lang = getLanguage source, languages, config.extension console.warn "docco: skipped unknown type (#{path.basename source})" unless lang lang ).sort() config - - module.exports = configure diff --git a/src/document.litcoffee b/src/document.litcoffee index 2353cd75..37591f6f 100644 --- a/src/document.litcoffee +++ b/src/document.litcoffee @@ -8,6 +8,9 @@ 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 @@ -36,9 +39,11 @@ out in an HTML template. If keeping the directory hierarchy, then insert the file's relative directory in to the path. - language = getLanguage source, languages, config + console.log("Extension: "+config.extension) + console.log("languages:" +languages) + language = getLanguage source, languages, config.extension - if config.flatten and !lang.copy + if config.flatten and !language.copy toDirectory = config.output else toDirectory = config.root + '/' + config.output + '/' + (path.dirname source) @@ -66,15 +71,18 @@ Implementation of spliting comments and code into split view html files. return callback(error) if error code = buffer.toString() - sections = parse source, code, config + console.log "docco Code: #{code} " + console.log "docco Language: #{JSON.stringify(language)} " + + 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.litcoffee b/src/format.litcoffee index 47e47b20..e49dbab7 100644 --- a/src/format.litcoffee +++ b/src/format.litcoffee @@ -11,7 +11,7 @@ To **format** and highlight the now-parsed sections of code, we use **Highlight. over stdio, and run the text of their corresponding comments through **Markdown**, using [Marked](https://github.com/chjj/marked). - format = (source, language, sections, config) -> + module.exports = format = (source, language, sections, config) -> Pass any user defined options to Marked if specified via command line option @@ -28,13 +28,13 @@ as either the language specified in the code block or the language of the file if not specified. marked.setOptions { - highlight: (code, language) -> - language or= language.name + highlight: (code, lang) -> + lang or= language.name - if highlightjs.getLanguage(language) - highlightjs.highlight(language, code).value + if highlightjs.getLanguage(lang) + highlightjs.highlight(lang, code).value else - console.warn "docco: couldn't highlight code block with unknown language '#{language}' in #{source}" + console.warn "docco: couldn't highlight code block with unknown language '#{lang}' in #{source}" code } @@ -47,4 +47,3 @@ if not specified. section.codeHtml = "
      #{code}
      " section.docsHtml = marked(section.docsText) - module.exports = format \ No newline at end of file diff --git a/src/getInformationOnFiles.litcoffee b/src/getInformationOnFiles.litcoffee index b38dd3d0..d83455d9 100644 --- a/src/getInformationOnFiles.litcoffee +++ b/src/getInformationOnFiles.litcoffee @@ -39,7 +39,7 @@ First the source name: Next the destination: - language = getLanguage file, languages, config + language = getLanguage file, languages, config.extension destination = getDestinationInformation(language, source, rootDirectory, targetDirectory, config.flatten) diff --git a/src/getLanguage.litcoffee b/src/getLanguage.litcoffee index f2fdbbe4..5f416406 100644 --- a/src/getLanguage.litcoffee +++ b/src/getLanguage.litcoffee @@ -4,9 +4,9 @@ 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, config) -> - ext = config.extension or path.extname(source) or path.basename(source) - lang = config.languages?[ext] or languages[ext] + 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] diff --git a/src/parse.litcoffee b/src/parse.litcoffee index 26e8c715..1090dccb 100644 --- a/src/parse.litcoffee +++ b/src/parse.litcoffee @@ -7,16 +7,15 @@ path = require 'path' glob = require 'glob' - 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 = {}) -> + module.exports = parse = (source, language, code, config = {}) -> lines = code.split '\n' sections = [] - lang = getLanguage source, config + hasCode = docsText = codeText = '' save = -> @@ -27,20 +26,20 @@ 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 + 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 lang.symbol else '' + if isText then language.symbol else '' else isText = yes - lang.symbol + ' ' + line + language.symbol + ' ' + line for line in lines - if lang.linkMatcher and line.match(lang.linkMatcher) + if language.linkMatcher and line.match(language.linkMatcher) LINK_REGEX = /\((.+)\)/ TEXT_REGEX = /\[(.+)\]/ links = LINK_REGEX.exec(line) @@ -50,13 +49,13 @@ normal below. text = texts[1] codeText += '

      '+text+'

      ' + '\n' hasCode = yes - else if lang.sectionMatcher and line.match(lang.sectionMatcher) + else if language.sectionMatcher and line.match(language.sectionMatcher) save() if hasCode - docsText += (line = line.replace(lang.commentMatcher, '')) + '\n' + docsText += (line = line.replace(language.commentMatcher, '')) + '\n' save() # if /^(---+|===+)$/.test line - else if line.match(lang.commentMatcher) and not line.match(lang.commentFilter) + else if line.match(language.commentMatcher) and not line.match(language.commentFilter) save() if hasCode - docsText += (line = line.replace(lang.commentMatcher, '')) + '\n' + docsText += (line = line.replace(language.commentMatcher, '')) + '\n' save() if /^(---+|===+)$/.test line else hasCode = yes @@ -65,4 +64,3 @@ normal below. sections - module.exports = parse \ No newline at end of file diff --git a/test/fakes/src/fake_java.java b/test/fakes/src/fake_java.java index 996f13d7..3136546b 100644 --- a/test/fakes/src/fake_java.java +++ b/test/fakes/src/fake_java.java @@ -9,9 +9,9 @@ public class Stopwatch public static final double NANOS_PER_SEC = 1000000000.0; - /** - start the stop watch. - */ + // + // start the stop watch. + // public void start(){ startTime = System.nanoTime(); } diff --git a/test/unit-tests/fakes/fake_coffee.coffee b/test/unit-tests/fakes/fake_coffee.coffee index 8c304b6c..b7590833 100644 --- a/test/unit-tests/fakes/fake_coffee.coffee +++ b/test/unit-tests/fakes/fake_coffee.coffee @@ -1,4 +1,4 @@ -# Assignment: +module.exports = "# Assignment: number = 42 opposite = true @@ -6,4 +6,4 @@ opposite = true number = -42 if opposite # Functions: -square = (x) -> x * x +square = (x) -> x * x" diff --git a/test/unit-tests/unit-test-configure.litcoffee b/test/unit-tests/unit-test-configure.litcoffee index 5e7eeb29..61e3e179 100644 --- a/test/unit-tests/unit-test-configure.litcoffee +++ b/test/unit-tests/unit-test-configure.litcoffee @@ -30,6 +30,17 @@ "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]') @@ -45,4 +56,4 @@ .parse(args) .name = "docco" - config = configure commander + config = configure commander, defaults diff --git a/test/unit-tests/unit-test-getDestinationInformation.litcoffee b/test/unit-tests/unit-test-getDestinationInformation.litcoffee index 0bf506b0..14a6fa91 100644 --- a/test/unit-tests/unit-test-getDestinationInformation.litcoffee +++ b/test/unit-tests/unit-test-getDestinationInformation.litcoffee @@ -10,7 +10,7 @@ it 'unflattened: gets destinationInformation for one source', () -> file = "src/fake_coffee.coffee" config = { languages:languages } - language = getLanguage file, languages, config + language = getLanguage file, languages source = { "root":"/Project", "dir":"src", @@ -42,7 +42,7 @@ it 'flattened: gets destinationInformation for one source', () -> file = "src/fake_coffee.coffee" config = { languages:languages } - language = getLanguage file, languages, config + language = getLanguage file, languages source = { "root":"/Project", "dir":"src", @@ -74,7 +74,7 @@ it 'unflattened: gets destinationInformation for one copy source', () -> file = "images/fluffybunny1.jpg" config = { languages:languages } - language = getLanguage file, languages, config + language = getLanguage file, languages language.copy.should.be.true source = { @@ -108,7 +108,7 @@ it 'flattened: gets destinationInformation for one copy source', () -> file = "images/fluffybunny1.jpg" config = { languages:languages } - language = getLanguage file, languages, config + language = getLanguage file, languages language.copy.should.be.true source = { "root":"/Project", diff --git a/test/unit-tests/unit-test-getLanguage.litcoffee b/test/unit-tests/unit-test-getLanguage.litcoffee index 1f8e4a7a..22ad9a0e 100644 --- a/test/unit-tests/unit-test-getLanguage.litcoffee +++ b/test/unit-tests/unit-test-getLanguage.litcoffee @@ -9,7 +9,7 @@ it 'gets the right language for the given a coffescript file.', () -> source = "src/fake_coffee.coffee" config = { languages:languages } - language = getLanguage source, languages, config + language = getLanguage source, languages language.name.should.be.equal("coffeescript") language.symbol.should.be.equal("#") return @@ -17,7 +17,7 @@ it 'gets the right language for the given a markdown file.', () -> source = "README.md" config = { languages:languages } - language = getLanguage source, languages, config + language = getLanguage source, languages language.name.should.be.equal("markdown") language.symbol.should.be.equal("") language.section.should.be.equal("#") @@ -28,7 +28,7 @@ it 'gets the right language for the given an image file.', () -> source = "images/fluffybunny.jpg" config = { languages:languages } - language = getLanguage source, languages, config + language = getLanguage source, languages language.name.should.be.equal("image") language.copy.should.be.true return diff --git a/test/unit-tests/unit-test-parse.litcoffee b/test/unit-tests/unit-test-parse.litcoffee index 5b47126f..c08382cc 100644 --- a/test/unit-tests/unit-test-parse.litcoffee +++ b/test/unit-tests/unit-test-parse.litcoffee @@ -6,7 +6,21 @@ describe 'docco parse', () -> it 'parse some source code', () -> - source = require './fakes/fake_coffee.coffee' + code = require './fakes/fake_coffee' + source = './fakes/fake_coffee' + config = + layout: 'parallel' + output: 'docs' + template: null + css: null + extension: null + languages: {} + marked: null + setup: '.docco.json' + help: false + flatten: false + language = {"name":"coffeescript","symbol":"#","commentMatcher":{},"commentFilter":{}} - sections = parse(source, code, config) + sections = parse(source, language, code, config) + console.log(JSON.stringify(sections,null,2)) From 5643bf23037ba8e794dbc4e8d51eaf2c3ea1ed40 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Thu, 6 Jul 2017 22:04:38 -0700 Subject: [PATCH 24/95] Unit tests for everything but document. --- docco.litcoffee | 11 ++-- gulpfile.coffee | 2 +- src/configure.litcoffee | 5 +- src/document.litcoffee | 6 +-- src/getInformationOnFiles.litcoffee | 7 ++- src/parse.litcoffee | 1 + test/unit-tests/fakes/fake_coffee.coffee | 4 +- test/unit-tests/unit-test-format.litcoffee | 50 +++++++++++++++++++ .../unit-test-getInformationOnFiles.litcoffee | 4 +- test/unit-tests/unit-test-parse.litcoffee | 23 +++++++-- 10 files changed, 85 insertions(+), 28 deletions(-) diff --git a/docco.litcoffee b/docco.litcoffee index 7711ddca..ceba86dc 100644 --- a/docco.litcoffee +++ b/docco.litcoffee @@ -111,12 +111,6 @@ 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 = require './src/buildMatchers' - - languages = buildMatchers languages - Keep it DRY. Extract the docco **version** from `package.json` version = JSON.parse(fs.readFileSync(path.join(__dirname, 'package.json'))).version @@ -175,8 +169,9 @@ Parse options using [Commander](https://github.com/visionmedia/commander.js). for file in files config.sources.push path.relative(config.root, file) - config.informationOnFiles = getInformationOnFiles languages, config - document config, languages + config.informationOnFiles = getInformationOnFiles config + + document config else console.log commander.helpInformation() return diff --git a/gulpfile.coffee b/gulpfile.coffee index 97376d0f..9d47d7ff 100644 --- a/gulpfile.coffee +++ b/gulpfile.coffee @@ -11,7 +11,7 @@ parallelize = require("concurrent-transform") threads = 100 -coffeeFiles = ['docco.litcoffee', 'test/**/*.litcoffee', 'test/unit-tests/fakes/fake_coffee.coffee'] +coffeeFiles = ['docco.litcoffee', 'test/**/*.litcoffee'] javascriptFiles = ['docco.js', 'docco.js.map', 'test/**/*.js'] diff --git a/src/configure.litcoffee b/src/configure.litcoffee index 9606f2a0..becc477a 100644 --- a/src/configure.litcoffee +++ b/src/configure.litcoffee @@ -4,7 +4,6 @@ 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. @@ -12,7 +11,9 @@ source files for languages for which we have definitions. module.exports = configure = (options, defaults, languages) -> config = _.extend {}, defaults, _.pick(options, _.keys(defaults)...) - config.languages = buildMatchers config.languages +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. diff --git a/src/document.litcoffee b/src/document.litcoffee index 37591f6f..89374f5d 100644 --- a/src/document.litcoffee +++ b/src/document.litcoffee @@ -17,7 +17,7 @@ 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 = {}, languages, callback) -> + document = (config = {}, callback) -> fs.mkdirs config.output, -> @@ -39,9 +39,7 @@ out in an HTML template. If keeping the directory hierarchy, then insert the file's relative directory in to the path. - console.log("Extension: "+config.extension) - console.log("languages:" +languages) - language = getLanguage source, languages, config.extension + language = config.informationOnFiles[source].language if config.flatten and !language.copy toDirectory = config.output diff --git a/src/getInformationOnFiles.litcoffee b/src/getInformationOnFiles.litcoffee index d83455d9..7eb0dbb8 100644 --- a/src/getInformationOnFiles.litcoffee +++ b/src/getInformationOnFiles.litcoffee @@ -19,7 +19,7 @@ getLanguage = require './getLanguage' - getInformationOnFiles = (languages, config) -> + getInformationOnFiles = (config) -> targetDirectory = config.output sourceDirectory = config.root rootDirectory = config.root @@ -31,7 +31,7 @@ the two. informationOnFiles = {} for file in config.sources - destinations = {} + language = getLanguage file, config.languages, config.extension First the source name: @@ -39,8 +39,7 @@ First the source name: Next the destination: - language = getLanguage file, languages, config.extension - + destinations = {} destination = getDestinationInformation(language, source, rootDirectory, targetDirectory, config.flatten) Now, figure out the relative paths the css: diff --git a/src/parse.litcoffee b/src/parse.litcoffee index 1090dccb..5edd9d30 100644 --- a/src/parse.litcoffee +++ b/src/parse.litcoffee @@ -21,6 +21,7 @@ individual **section** for it. Each section is an object with `docsText` and 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 diff --git a/test/unit-tests/fakes/fake_coffee.coffee b/test/unit-tests/fakes/fake_coffee.coffee index b7590833..8c304b6c 100644 --- a/test/unit-tests/fakes/fake_coffee.coffee +++ b/test/unit-tests/fakes/fake_coffee.coffee @@ -1,4 +1,4 @@ -module.exports = "# Assignment: +# Assignment: number = 42 opposite = true @@ -6,4 +6,4 @@ opposite = true number = -42 if opposite # Functions: -square = (x) -> x * x" +square = (x) -> x * x diff --git a/test/unit-tests/unit-test-format.litcoffee b/test/unit-tests/unit-test-format.litcoffee index 2936a8fa..6855c400 100644 --- a/test/unit-tests/unit-test-format.litcoffee +++ b/test/unit-tests/unit-test-format.litcoffee @@ -2,7 +2,57 @@ { 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) + console.log("Sections:"+JSON.stringify(sections,null,2)) + 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("
      number   = 42\nopposite = true
      ") + sections[0].docsHtml.should.be.equal("

      Assignment:

      \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("
      number = -42 if opposite
      ") + sections[1].docsHtml.should.be.equal("

      Conditions:

      \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("
      square = (x) -> x * x
      ") + sections[2].docsHtml.should.be.equal("

      Functions:

      \n") + + + diff --git a/test/unit-tests/unit-test-getInformationOnFiles.litcoffee b/test/unit-tests/unit-test-getInformationOnFiles.litcoffee index dc263f7f..55e452e2 100644 --- a/test/unit-tests/unit-test-getInformationOnFiles.litcoffee +++ b/test/unit-tests/unit-test-getInformationOnFiles.litcoffee @@ -19,7 +19,7 @@ "images/fluffybunny1.jpg" "src/lib/fake_litcoffee.litcoffee" ] - informationOnFiles = getInformationOnFiles(languages, config) + informationOnFiles = getInformationOnFiles(config) assert.deepEqual(informationOnFiles, informationOnFilesFake) return @@ -39,6 +39,6 @@ "src/lib/fake_litcoffee.litcoffee" ] flatten: true - informationOnFiles = getInformationOnFiles(languages, config) + informationOnFiles = getInformationOnFiles(config) assert.deepEqual(informationOnFiles, informationOnFilesFake) return diff --git a/test/unit-tests/unit-test-parse.litcoffee b/test/unit-tests/unit-test-parse.litcoffee index c08382cc..e8233625 100644 --- a/test/unit-tests/unit-test-parse.litcoffee +++ b/test/unit-tests/unit-test-parse.litcoffee @@ -1,13 +1,16 @@ # 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 some source code', () -> - code = require './fakes/fake_coffee' - source = './fakes/fake_coffee' + 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' @@ -19,8 +22,18 @@ setup: '.docco.json' help: false flatten: false - language = {"name":"coffeescript","symbol":"#","commentMatcher":{},"commentFilter":{}} + languages = [{"name":"coffeescript","symbol":"#","commentMatcher":{},"commentFilter":{}}] + languages = buildMatchers languages - sections = parse(source, language, code, config) + sections = parse(source, languages[0], code, config) console.log(JSON.stringify(sections,null,2)) + 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") + From c90decb4f57be18fa6efbedbc43f7c2ec4bfd092 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Thu, 6 Jul 2017 23:19:27 -0700 Subject: [PATCH 25/95] corrected exports of docco.litcoffee --- .gitignore | 2 + docco.litcoffee | 23 ++-- package.json | 8 ++ src/buildMatchers.litcoffee | 4 +- src/configure.litcoffee | 1 - src/document.litcoffee | 5 +- src/getInformationOnFiles.litcoffee | 5 +- src/getOthers.litcoffee | 1 - src/getRelativePath.litcoffee | 2 - src/write.litcoffee | 6 +- .../unit-test-buildMatchers.litcoffee | 2 + test/unit-tests/unit-test-configure.litcoffee | 2 + test/unit-tests/unit-test-document.litcoffee | 98 +++++++++++++++- test/unit-tests/unit-test-format.litcoffee | 110 +++++++++--------- .../unit-tests/unit-test-getCSSPath.litcoffee | 1 - ...t-test-getDestinationInformation.litcoffee | 7 +- .../unit-test-getInformationOnFiles.litcoffee | 6 +- .../unit-test-getLanguage.litcoffee | 1 + test/unit-tests/unit-test-getOthers.litcoffee | 3 +- .../unit-test-getRelativePath.litcoffee | 1 - test/unit-tests/unit-test-parse.litcoffee | 4 +- test/unit-tests/unit-test-write.litcoffee | 2 - 22 files changed, 192 insertions(+), 102 deletions(-) diff --git a/.gitignore b/.gitignore index 73fb6a6a..c86a40c0 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,5 @@ node_modules doc **/*.js **/*.map +artifacts +.nyc_output diff --git a/docco.litcoffee b/docco.litcoffee index ceba86dc..22179904 100644 --- a/docco.litcoffee +++ b/docco.litcoffee @@ -79,6 +79,19 @@ out in an HTML template. 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 = 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 = require './src/format' + Configuration ------------- @@ -137,7 +150,6 @@ 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) -> - console.log("args:" + JSON.stringify(args)) config = defaults commander.version(version) @@ -179,11 +191,4 @@ Parse options using [Commander](https://github.com/visionmedia/commander.js). Public API ---------- - Docco = module.exports = { - run, - document, - version, - languages, - - getInformationOnFiles - } + module.exports = Docco = {run, document, parse, format, languages, version} \ No newline at end of file diff --git a/package.json b/package.json index d8e535d6..e87400ca 100644 --- a/package.json +++ b/package.json @@ -41,8 +41,16 @@ "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:functional": "jenkins-mocha test/functional-tests/*.js", + "test:unit": "jenkins-mocha test/unit-tests/*.js; jenkins-mocha --cobertura test/unit-tests/*.js", + "build": "gulp build", + "clean": "gulp clean" } } diff --git a/src/buildMatchers.litcoffee b/src/buildMatchers.litcoffee index db84312d..8e59f23f 100644 --- a/src/buildMatchers.litcoffee +++ b/src/buildMatchers.litcoffee @@ -1,6 +1,6 @@ Build out the appropriate matchers and delimiters for each language. - buildMatchers = (languages) -> + module.exports = buildMatchers = (languages) -> for ext, l of languages Does the line begin with a comment? @@ -22,5 +22,3 @@ Look for explict section breaks l.sectionMatcher = ///^#{l.section}\s?/// languages - - module.exports = buildMatchers diff --git a/src/configure.litcoffee b/src/configure.litcoffee index becc477a..92ef6a66 100644 --- a/src/configure.litcoffee +++ b/src/configure.litcoffee @@ -30,7 +30,6 @@ is only copied for the latter. 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() - console.log("Template:"+config.template) if options.marked config.marked = JSON.parse fs.readFileSync(options.marked) diff --git a/src/document.litcoffee b/src/document.litcoffee index 89374f5d..f499e8ef 100644 --- a/src/document.litcoffee +++ b/src/document.litcoffee @@ -56,8 +56,7 @@ 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() @@ -69,8 +68,6 @@ Implementation of spliting comments and code into split view html files. return callback(error) if error code = buffer.toString() - console.log "docco Code: #{code} " - console.log "docco Language: #{JSON.stringify(language)} " sections = parse source, language, code, config format source, language, sections, config diff --git a/src/getInformationOnFiles.litcoffee b/src/getInformationOnFiles.litcoffee index 7eb0dbb8..53411452 100644 --- a/src/getInformationOnFiles.litcoffee +++ b/src/getInformationOnFiles.litcoffee @@ -19,7 +19,7 @@ getLanguage = require './getLanguage' - getInformationOnFiles = (config) -> + module.exports = getInformationOnFiles = (config) -> targetDirectory = config.output sourceDirectory = config.root rootDirectory = config.root @@ -57,6 +57,3 @@ Now, figure out the relative paths to the other source files: informationOnFiles[file].others = getOthers(file, informationOnFiles, config) return informationOnFiles - - module.exports = getInformationOnFiles - diff --git a/src/getOthers.litcoffee b/src/getOthers.litcoffee index 56b488c3..8749090a 100644 --- a/src/getOthers.litcoffee +++ b/src/getOthers.litcoffee @@ -8,7 +8,6 @@ destinationFileInformation = informationOnFiles[other] target = destinationFileInformation.destination - console.log(JSON.stringify(destinationFileInformation.destination,null,2)) others[target.base] = getRelativePath source.relativefile, target.relativefile, target.base others diff --git a/src/getRelativePath.litcoffee b/src/getRelativePath.litcoffee index adaefe57..ff00a751 100644 --- a/src/getRelativePath.litcoffee +++ b/src/getRelativePath.litcoffee @@ -3,14 +3,12 @@ This function determines the relative path of any html file in the destination f path = require 'path' getRelativePath = (fromFile, toFile, base) -> - console.log("From: #{fromFile} To: #{toFile}") fromTo = path.relative(fromFile,toFile) if fromTo is '' or fromTo is '.' or fromTo is '..' or fromTo is '../' fromTo = base else fromTo = fromTo.slice(3) - console.log("Path: #{fromTo}") fromTo module.exports = getRelativePath \ No newline at end of file diff --git a/src/write.litcoffee b/src/write.litcoffee index 5e5109b3..123b1308 100644 --- a/src/write.litcoffee +++ b/src/write.litcoffee @@ -12,9 +12,7 @@ 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) -> - - console.log("source: "+source) + module.exports = write = (source, sections, config) -> # todo: figure out how to remove the breaking change here. normally this should return file+'.html' @@ -40,5 +38,3 @@ and rendering it to the specified output path. console.log "docco: #{source} -> #{destination fileInfo.destination.path}" fs.writeFileSync destination(fileInfo.destination.path), html return - - module.exports = write diff --git a/test/unit-tests/unit-test-buildMatchers.litcoffee b/test/unit-tests/unit-test-buildMatchers.litcoffee index 3b50fe1a..e0cce33f 100644 --- a/test/unit-tests/unit-test-buildMatchers.litcoffee +++ b/test/unit-tests/unit-test-buildMatchers.litcoffee @@ -16,3 +16,5 @@ assert.deepEqual(l.linkMatcher,///^#{l.link}\[(.+)\]\((.+)\)///) 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.litcoffee b/test/unit-tests/unit-test-configure.litcoffee index 61e3e179..03102b8e 100644 --- a/test/unit-tests/unit-test-configure.litcoffee +++ b/test/unit-tests/unit-test-configure.litcoffee @@ -57,3 +57,5 @@ .name = "docco" config = configure commander, defaults + return + return diff --git a/test/unit-tests/unit-test-document.litcoffee b/test/unit-tests/unit-test-document.litcoffee index e1c23064..3d6d8c58 100644 --- a/test/unit-tests/unit-test-document.litcoffee +++ b/test/unit-tests/unit-test-document.litcoffee @@ -1,8 +1,96 @@ -# This tests if parse is working correctly. +# This tests if document is working correctly. - { assert, should } = require('chai'); should() - document = require '../../src/document' + { 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') - describe 'docco document', () -> + 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: () -> + console.log("readFileSync:") + return '{ + ".coffee": {"name": "coffeescript", "symbol": "#"}, + ".litcoffee": {"name": "coffeescript", "symbol": "#", "literate": true}, + ".md": {"name": "markdown", "symbol": "", "section": "#", "link": "!", "html": true} + }' + writeFileSync: (destination, html) -> + console.log("writeFileSync:"+destination+ " html"+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 + }) - it 'document docco', () -> + mockery.registerMock('parse', (source, language, code, config = {}) -> + console.log("PARSE::::") + ) + mockery.registerMock('format', (source, language, sections, config) -> + console.log("FORMAT::::") + ) + mockery.registerMock('./write', (source, sections, config) -> + source.should.be.equal("README.md") + assert.deepEqual(sections, [ + { + "docsText": "x=3\n", + "codeText": "", + "codeHtml": "", + "docsHtml": "

      x=3

      \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-format.litcoffee b/test/unit-tests/unit-test-format.litcoffee index 6855c400..72af3b33 100644 --- a/test/unit-tests/unit-test-format.litcoffee +++ b/test/unit-tests/unit-test-format.litcoffee @@ -1,58 +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) - console.log("Sections:"+JSON.stringify(sections,null,2)) - 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("
      number   = 42\nopposite = true
      ") - sections[0].docsHtml.should.be.equal("

      Assignment:

      \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("
      number = -42 if opposite
      ") - sections[1].docsHtml.should.be.equal("

      Conditions:

      \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("
      square = (x) -> x * x
      ") - sections[2].docsHtml.should.be.equal("

      Functions:

      \n") - - + { 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("
      number   = 42\nopposite = true
      ") + sections[0].docsHtml.should.be.equal("

      Assignment:

      \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("
      number = -42 if opposite
      ") + sections[1].docsHtml.should.be.equal("

      Conditions:

      \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("
      square = (x) -> x * x
      ") + sections[2].docsHtml.should.be.equal("

      Functions:

      \n") + + return + return diff --git a/test/unit-tests/unit-test-getCSSPath.litcoffee b/test/unit-tests/unit-test-getCSSPath.litcoffee index c20c1fe9..405a6abb 100644 --- a/test/unit-tests/unit-test-getCSSPath.litcoffee +++ b/test/unit-tests/unit-test-getCSSPath.litcoffee @@ -25,5 +25,4 @@ 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.litcoffee b/test/unit-tests/unit-test-getDestinationInformation.litcoffee index 14a6fa91..136b9732 100644 --- a/test/unit-tests/unit-test-getDestinationInformation.litcoffee +++ b/test/unit-tests/unit-test-getDestinationInformation.litcoffee @@ -24,7 +24,6 @@ targetDirectory = 'docs' flatten = false destination = getDestinationInformation(language, source, rootDirectory, targetDirectory, flatten) - console.log(JSON.stringify(destination,null,2)) result = { "root": "/Project", "dir": "docs/src", @@ -56,7 +55,6 @@ targetDirectory = 'docs' flatten = true destination = getDestinationInformation(language, source, rootDirectory, targetDirectory, flatten) - console.log(JSON.stringify(destination,null,2)) result = { "base": "fake_coffee.html" "dir": "docs" @@ -90,7 +88,6 @@ targetDirectory = 'docs' flatten = false destination = getDestinationInformation(language, source, rootDirectory, targetDirectory, flatten) - console.log(JSON.stringify(destination,null,2)) result = { "root": "/Project", "dir": "docs/images", @@ -123,7 +120,6 @@ targetDirectory = 'docs' flatten = true destination = getDestinationInformation(language, source, rootDirectory, targetDirectory, flatten) - console.log(JSON.stringify(destination,null,2)) result = { "root": "/Project" "dir": "docs/images" @@ -136,4 +132,5 @@ "relativefile": "images/fluffybunny1.jpg" } assert.deepEqual(destination, result) - return \ No newline at end of file + return + 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 index 55e452e2..8310b14f 100644 --- a/test/unit-tests/unit-test-getInformationOnFiles.litcoffee +++ b/test/unit-tests/unit-test-getInformationOnFiles.litcoffee @@ -1,6 +1,8 @@ # 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') @@ -9,7 +11,6 @@ informationOnFilesFake = require './fakes/informationOnFilesUnFlattened' source = "src/fake_coffee.coffee" config = - languages:languages output: 'docs' root: '/Project' css: 'docco.css' @@ -19,6 +20,8 @@ "images/fluffybunny1.jpg" "src/lib/fake_litcoffee.litcoffee" ] + config.languages = buildMatchers languages + informationOnFiles = getInformationOnFiles(config) assert.deepEqual(informationOnFiles, informationOnFilesFake) return @@ -42,3 +45,4 @@ informationOnFiles = getInformationOnFiles(config) assert.deepEqual(informationOnFiles, informationOnFilesFake) return + 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 index 22ad9a0e..6af4d4cc 100644 --- a/test/unit-tests/unit-test-getLanguage.litcoffee +++ b/test/unit-tests/unit-test-getLanguage.litcoffee @@ -32,3 +32,4 @@ 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.litcoffee b/test/unit-tests/unit-test-getOthers.litcoffee index 25651d33..5d21c509 100644 --- a/test/unit-tests/unit-test-getOthers.litcoffee +++ b/test/unit-tests/unit-test-getOthers.litcoffee @@ -68,4 +68,5 @@ "README.html": "README.html" "fake_coffee.html": "fake_coffee.html" }) - return \ No newline at end of file + return + return \ No newline at end of file diff --git a/test/unit-tests/unit-test-getRelativePath.litcoffee b/test/unit-tests/unit-test-getRelativePath.litcoffee index 009737e0..d2fd31da 100644 --- a/test/unit-tests/unit-test-getRelativePath.litcoffee +++ b/test/unit-tests/unit-test-getRelativePath.litcoffee @@ -29,5 +29,4 @@ 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.litcoffee b/test/unit-tests/unit-test-parse.litcoffee index e8233625..4c61b1d3 100644 --- a/test/unit-tests/unit-test-parse.litcoffee +++ b/test/unit-tests/unit-test-parse.litcoffee @@ -26,7 +26,6 @@ languages = buildMatchers languages sections = parse(source, languages[0], code, config) - console.log(JSON.stringify(sections,null,2)) sections[0].docsText.should.be.equal("Assignment:\n") sections[0].codeText.should.be.equal("number = 42\nopposite = true\n\n") @@ -36,4 +35,5 @@ 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-write.litcoffee b/test/unit-tests/unit-test-write.litcoffee index e537b3e0..2005a4a7 100644 --- a/test/unit-tests/unit-test-write.litcoffee +++ b/test/unit-tests/unit-test-write.litcoffee @@ -94,7 +94,5 @@ "docsHtml":""}] result = write(source, sections, config) mockery.deregisterMock('fs-extra') - return - return \ No newline at end of file From b00ce875be6029d266d0ff87b796a9a2fd8cffb4 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Thu, 6 Jul 2017 23:57:52 -0700 Subject: [PATCH 26/95] unit test for run. --- test/unit-tests/unit-test-run.litcoffee | 97 +++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 test/unit-tests/unit-test-run.litcoffee diff --git a/test/unit-tests/unit-test-run.litcoffee b/test/unit-tests/unit-test-run.litcoffee new file mode 100644 index 00000000..ee57bc76 --- /dev/null +++ b/test/unit-tests/unit-test-run.litcoffee @@ -0,0 +1,97 @@ +# This tests if run 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', { + existsSync: (file) -> + console.log("existsSync: "+file) + readFileSync: (file) -> + if times is 0 + times++ + return '{"name":"coffeescript","symbol":"#"}' + else + return '{ "version": "1.0.0" }' + + }) + mockery.registerMock('./src/document', (config) -> + assert.deepEqual(config, { + "layout": "parallel", + "output": "docs", + "template": null, + "css": null, + "extension": null, + "languages": {}, + "marked": null, + "setup": ".docco.json", + "help": false, + "flatten": false, + "sources": [], + "root": "/Users/rolov/Code/docco", + "informationOnFiles": {} + }) + ) + mockery.registerMock('./src/configure', (commander, defaults, languages) -> + commander.name.should.be.equal('docco') + assert.deepEqual(languages, { + "name": "coffeescript", + "symbol": "#" + }) + assert.deepEqual(defaults, { + "layout": "parallel", + "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" + ] + 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('-L, --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') From 1f30f2fa47eb3ee55dbe9729b9d65ad6205d3397 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Fri, 7 Jul 2017 00:02:22 -0700 Subject: [PATCH 27/95] removed original docco and console.logs --- docco_original.litcoffee | 580 ------------------- test/unit-tests/unit-test-document.litcoffee | 4 - test/unit-tests/unit-test-run.litcoffee | 2 +- 3 files changed, 1 insertion(+), 585 deletions(-) delete mode 100644 docco_original.litcoffee diff --git a/docco_original.litcoffee b/docco_original.litcoffee deleted file mode 100644 index 8595c479..00000000 --- a/docco_original.litcoffee +++ /dev/null @@ -1,580 +0,0 @@ -Docco -===== - -**Docco** is a quick-and-dirty documentation generator, written in -[Literate CoffeeScript](http://coffeescript.org/#literate). -It produces an HTML document that displays your comments intermingled with your -code. All prose is passed through -[Markdown](http://daringfireball.net/projects/markdown/syntax), and code is -passed through [Highlight.js](http://highlightjs.org/) syntax highlighting. -This page is the result of running Docco against its own -[source file](https://github.com/jashkenas/docco/blob/master/docco.litcoffee). - -1. Install Docco with **npm**: `sudo npm install -g docco` - -2. Run it against your code: `docco src/*.coffee` - -There is no "Step 3". This will generate an HTML page for each of the named -source files, with a menu linking to the other pages, saving the whole mess -into a `docs` folder (configurable). - -The [Docco source](http://github.com/jashkenas/docco) is available on GitHub, -and is released under the [MIT license](http://opensource.org/licenses/MIT). - -Docco can be used to process code written in any programming language. If it -doesn't handle your favorite yet, feel free to -[add it to the list](https://github.com/jashkenas/docco/blob/master/resources/languages.json). -Finally, the ["literate" style](http://coffeescript.org/#literate) of *any* -language is also supported — just tack an `.md` extension on the end: -`.coffee.md`, `.py.md`, and so on. - - -Partners in Crime: ------------------- - -* If Node.js doesn't run on your platform, or you'd prefer a more -convenient package, get [Ryan Tomayko](http://github.com/rtomayko)'s -[Rocco](http://rtomayko.github.io/rocco/rocco.html), the **Ruby** port that's -available as a gem. - -* If you're writing shell scripts, try -[Shocco](http://rtomayko.github.io/shocco/), a port for the **POSIX shell**, -also by Mr. Tomayko. - -* If **Python** is more your speed, take a look at -[Nick Fitzgerald](http://github.com/fitzgen)'s [Pycco](https://pycco-docs.github.io/pycco/). - -* For **Clojure** fans, [Fogus](http://blog.fogus.me/)'s -[Marginalia](http://fogus.me/fun/marginalia/) is a bit of a departure from -"quick-and-dirty", but it'll get the job done. - -* There's a **Go** port called [Gocco](http://nikhilm.github.io/gocco/), -written by [Nikhil Marathe](https://github.com/nikhilm). - -* For all you **PHP** buffs out there, Fredi Bach's -[sourceMakeup](http://jquery-jkit.com/sourcemakeup/) (we'll let the faux pas -with respect to our naming scheme slide), should do the trick nicely. - -* **Lua** enthusiasts can get their fix with -[Robert Gieseke](https://github.com/rgieseke)'s [Locco](http://rgieseke.github.io/locco/). - -* And if you happen to be a **.NET** -aficionado, check out [Don Wilson](https://github.com/dontangg)'s -[Nocco](http://dontangg.github.io/nocco/). - -* Going further afield from the quick-and-dirty, [Groc](http://nevir.github.io/groc/) -is a **CoffeeScript** fork of Docco that adds a searchable table of contents, -and aims to gracefully handle large projects with complex hierarchies of code. - -Note that not all ports will support all Docco features ... yet. - - -Main Documentation Generation Functions ---------------------------------------- - -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. - - lang = getLanguage source, config - - if config.flatten and !lang.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 lang.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, code, config - format source, sections, config - toFile = toDirectory + '/' + (path.basename source, path.extname source) - - write source, sections, config - - if files.length then nextFile() else complete() - - nextFile() - -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 lang.linkMatcher and line.match(lang.linkMatcher) - LINK_REGEX = /\((.+)\)/ - TEXT_REGEX = /\[(.+)\]/ - links = LINK_REGEX.exec(line) - texts = TEXT_REGEX.exec(line) - if links? and links.length > 1 and texts? and texts.length > 1 - link = links[1] - text = texts[1] - codeText += '

      '+text+'

      ' + '\n' - hasCode = yes - else if lang.sectionMatcher and line.match(lang.sectionMatcher) - save() if hasCode - docsText += (line = line.replace(lang.commentMatcher, '')) + '\n' - save() # if /^(---+|===+)$/.test line - else 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 - -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 - if language.html - section.codeHtml = section.codeText - else - code = highlightjs.highlight(language.name, section.codeText).value - code = code.replace(/\s+$/, '') - section.codeHtml = "
      #{code}
      " - 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) -> - - console.log("source: "+source) - - # 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) - html = config.template { sources: others, css: fileInfo.destination.css, - title, hasTitle, sections, path, destination } - - console.log "docco: #{source} -> #{destination fileInfo.destination.path}" - fs.writeFileSync destination(fileInfo.destination.path), html - return - - -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 - setup: '.docco.json' - help: false - flatten: false - -**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() - console.log("Template:"+config.template) - - 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 - - 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 - - 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 - - getRelativePath = (fromFile, toFile, base) -> - console.log("From: #{fromFile} To: #{toFile}") - fromTo = path.relative(fromFile,toFile) - if fromTo is '' or fromTo is '.' or fromTo is '..' or fromTo is '../' - fromTo = base - else - fromTo = fromTo.slice(3) - - console.log("Path: #{fromTo}") - fromTo - - getCSSPath = (cssFile, targetDirectory, file) -> - css = path.parse(cssFile) - css.file = targetDirectory+'/'+css.base - - cssPath = path.relative(file, css.file) - cssPath = cssPath.slice(3) - - cssPath - - getOthers = (file, informationOnFiles, config) -> - sourceFileInformation = informationOnFiles[file] - source = sourceFileInformation.source - others = {} - for other in config.sources - destinationFileInformation = informationOnFiles[other] - target = destinationFileInformation.destination - - console.log(JSON.stringify(destinationFileInformation.destination,null,2)) - others[target.base] = getRelativePath source.relativefile, target.relativefile, target.base - - others - - 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 - destinations = {} - -First the source name: - - source = getSourceInformation(file, rootDirectory, config.flatten) - -Next the destination: - - language = getLanguage file, config - - 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 - -Now, figure out the relative paths to the other source files: - - for file in config.sources - informationOnFiles[file].others = getOthers(file, informationOnFiles, config) - - return informationOnFiles - - -Helpers & Initial Setup ------------------------ - -Require our external dependencies. - - _ = 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' - -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 -`symbol` that indicates a line comment. To add support for a new programming -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*#\{)/ - -Look for links if necessary. - - if l.link - l.linkMatcher = ///^#{l.link}\[(.+)\]\((.+)\)/// - -Look for explict section breaks - - if l.section - l.sectionMatcher = ///^#{l.section}\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 - -Command Line Interface ----------------------- - -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 - setup: '.docco.json' - help: false - flatten: false - -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) -> - 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('-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 - - 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 - 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, - write, - version, - languages, - getDestinationInformation, - getLanguage, - getInformationOnFiles, - getCSSPath, - getRelativePath, - getOthers - } diff --git a/test/unit-tests/unit-test-document.litcoffee b/test/unit-tests/unit-test-document.litcoffee index 3d6d8c58..99163cd6 100644 --- a/test/unit-tests/unit-test-document.litcoffee +++ b/test/unit-tests/unit-test-document.litcoffee @@ -36,14 +36,12 @@ callback(null, "x=3") return readFileSync: () -> - console.log("readFileSync:") return '{ ".coffee": {"name": "coffeescript", "symbol": "#"}, ".litcoffee": {"name": "coffeescript", "symbol": "#", "literate": true}, ".md": {"name": "markdown", "symbol": "", "section": "#", "link": "!", "html": true} }' writeFileSync: (destination, html) -> - console.log("writeFileSync:"+destination+ " html"+html) if flattened destination.should.be.equal("/Project/docs/fake_coffee.html") assert.equal(html,resultOfTemplateFlattened) @@ -54,10 +52,8 @@ }) mockery.registerMock('parse', (source, language, code, config = {}) -> - console.log("PARSE::::") ) mockery.registerMock('format', (source, language, sections, config) -> - console.log("FORMAT::::") ) mockery.registerMock('./write', (source, sections, config) -> source.should.be.equal("README.md") diff --git a/test/unit-tests/unit-test-run.litcoffee b/test/unit-tests/unit-test-run.litcoffee index ee57bc76..51740e33 100644 --- a/test/unit-tests/unit-test-run.litcoffee +++ b/test/unit-tests/unit-test-run.litcoffee @@ -10,7 +10,7 @@ times = 0 mockery.registerMock('fs-extra', { existsSync: (file) -> - console.log("existsSync: "+file) + readFileSync: (file) -> if times is 0 times++ From a963db95b9ee6940b96c46c21c039f2562df5c1b Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Fri, 7 Jul 2017 00:10:44 -0700 Subject: [PATCH 28/95] renamed test/fakes to test/sim --- src/document.litcoffee | 2 +- test/fakes/src/fake_litcoffee.js.map | 1 - test/{fakes => sim}/.adocco.json | 0 test/{fakes => sim}/.groc.json | 0 test/{fakes => sim}/README.md | 0 test/{fakes => sim}/images/fluffybunny1.jpg | Bin test/{fakes => sim}/images/fluffybunny2.jpg | Bin test/{fakes => sim}/images/fluffybunny3.jpg | Bin test/{fakes => sim}/src/fake_coffee.coffee | 0 test/{fakes => sim}/src/fake_coffee2.coffee | 0 test/{fakes => sim}/src/fake_java.java | 0 test/{fakes => sim}/src/fake_litcoffee.litcoffee | 0 12 files changed, 1 insertion(+), 2 deletions(-) delete mode 100644 test/fakes/src/fake_litcoffee.js.map rename test/{fakes => sim}/.adocco.json (100%) rename test/{fakes => sim}/.groc.json (100%) rename test/{fakes => sim}/README.md (100%) rename test/{fakes => sim}/images/fluffybunny1.jpg (100%) rename test/{fakes => sim}/images/fluffybunny2.jpg (100%) rename test/{fakes => sim}/images/fluffybunny3.jpg (100%) rename test/{fakes => sim}/src/fake_coffee.coffee (100%) rename test/{fakes => sim}/src/fake_coffee2.coffee (100%) rename test/{fakes => sim}/src/fake_java.java (100%) rename test/{fakes => sim}/src/fake_litcoffee.litcoffee (100%) diff --git a/src/document.litcoffee b/src/document.litcoffee index f499e8ef..8bddbe6c 100644 --- a/src/document.litcoffee +++ b/src/document.litcoffee @@ -56,6 +56,7 @@ 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 @@ -80,4 +81,3 @@ Implementation of spliting comments and code into split view html files. return module.exports = document - diff --git a/test/fakes/src/fake_litcoffee.js.map b/test/fakes/src/fake_litcoffee.js.map deleted file mode 100644 index 51b13241..00000000 --- a/test/fakes/src/fake_litcoffee.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"fake_litcoffee.js","sources":["fakes/src/fake_litcoffee.litcoffee"],"names":[],"mappings":"AA0BI,IAAA;;AAAA,QAAA,GAAW,SAAC,MAAD;AACT,MAAA;EAAA,IAAqB,CAAA,KAAK,MAAA,GAAS,EAAnC;AAAA,WAAO,WAAP;;EACA,IAAqB,CAAA,KAAK,MAAA,GAAS,CAAnC;AAAA,WAAO,OAAP;;EACA,IAAqB,CAAA,KAAK,MAAA,GAAS,CAAnC;AAAA,WAAO,OAAP;;EACA,MAAM,CAAC,QAAP,CAAA;AAEA;OAAS,4BAAT;iBAGE,OAAO,CAAC,GAAR,CAAe,CAAD,GAAG,QAAH,GAAU,CAAC,QAAA,CAAS,CAAT,CAAD,CAAxB;AAHF;;AANS","sourcesContent":["#! /usr/bin/env coffee\n# fizzbuzz.litcoffee\n\nThis is the fizzbuzz test in literate CoffeeScript.\n\n## What should FizzBuzz do?\n\nThe FizzBuzz test should print:\n\n- 'fizz' for every number divisible by 3,\n- 'buzz' for every number divisible by 5,\n- 'fizzbuzz' if the number is divisible by 3 and 5\n- else: just print the number.\n\n## Fun Facts\n\nFizzBuzz is commonly used to interview programmers and test their coding skills.\nOnce the author [@rmetzler](http://github.com/rmetzler) was asked on a job interview\nto write a \"coding test\". He answered by asking if the meant test was FizzBuzz. The interviewer\nsaid yes and made a statement to not test the interviewee. The author later learned he didn't\nget the job, was sad and decided on writing FizzBuzz as a learning tool.\n\n## FizzBuzz in CoffeeScript\n---\n# FizzBuzz in CoffeeScript could look like this:\n\n fizzbuzz = (number) ->\n return 'fizzbuzz' if 0 == number % 15\n return 'buzz' if 0 == number % 5\n return 'fizz' if 0 == number % 3\n number.toString()\n\n for x in [1..100]\n\n # pretty print\n console.log \"#{x}\\t->\\t#{fizzbuzz x}\"\n"]} \ No newline at end of file diff --git a/test/fakes/.adocco.json b/test/sim/.adocco.json similarity index 100% rename from test/fakes/.adocco.json rename to test/sim/.adocco.json diff --git a/test/fakes/.groc.json b/test/sim/.groc.json similarity index 100% rename from test/fakes/.groc.json rename to test/sim/.groc.json diff --git a/test/fakes/README.md b/test/sim/README.md similarity index 100% rename from test/fakes/README.md rename to test/sim/README.md diff --git a/test/fakes/images/fluffybunny1.jpg b/test/sim/images/fluffybunny1.jpg similarity index 100% rename from test/fakes/images/fluffybunny1.jpg rename to test/sim/images/fluffybunny1.jpg diff --git a/test/fakes/images/fluffybunny2.jpg b/test/sim/images/fluffybunny2.jpg similarity index 100% rename from test/fakes/images/fluffybunny2.jpg rename to test/sim/images/fluffybunny2.jpg diff --git a/test/fakes/images/fluffybunny3.jpg b/test/sim/images/fluffybunny3.jpg similarity index 100% rename from test/fakes/images/fluffybunny3.jpg rename to test/sim/images/fluffybunny3.jpg diff --git a/test/fakes/src/fake_coffee.coffee b/test/sim/src/fake_coffee.coffee similarity index 100% rename from test/fakes/src/fake_coffee.coffee rename to test/sim/src/fake_coffee.coffee diff --git a/test/fakes/src/fake_coffee2.coffee b/test/sim/src/fake_coffee2.coffee similarity index 100% rename from test/fakes/src/fake_coffee2.coffee rename to test/sim/src/fake_coffee2.coffee diff --git a/test/fakes/src/fake_java.java b/test/sim/src/fake_java.java similarity index 100% rename from test/fakes/src/fake_java.java rename to test/sim/src/fake_java.java diff --git a/test/fakes/src/fake_litcoffee.litcoffee b/test/sim/src/fake_litcoffee.litcoffee similarity index 100% rename from test/fakes/src/fake_litcoffee.litcoffee rename to test/sim/src/fake_litcoffee.litcoffee From f5cacd1e4af511c667130dd8fb1bf9faca05b3c5 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Fri, 7 Jul 2017 00:12:19 -0700 Subject: [PATCH 29/95] keep the simulated js file --- .gitignore | 1 + test/sim/src/fake_litcoffee.js | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 test/sim/src/fake_litcoffee.js diff --git a/.gitignore b/.gitignore index c86a40c0..0d53a5ae 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ doc **/*.map artifacts .nyc_output +!/test/sim/src/fake_litcoffee.js diff --git a/test/sim/src/fake_litcoffee.js b/test/sim/src/fake_litcoffee.js new file mode 100644 index 00000000..162f813c --- /dev/null +++ b/test/sim/src/fake_litcoffee.js @@ -0,0 +1,22 @@ +var fizzbuzz; + +fizzbuzz = function(number) { + var i, results, x; + 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 From 066e1f1743baafaff1368675b49cb9d5b2ed37d3 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Fri, 7 Jul 2017 00:18:08 -0700 Subject: [PATCH 30/95] build verification and cleanup --- gulpfile.coffee | 4 ++-- package.json | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/gulpfile.coffee b/gulpfile.coffee index 9d47d7ff..7f211d83 100644 --- a/gulpfile.coffee +++ b/gulpfile.coffee @@ -11,9 +11,9 @@ parallelize = require("concurrent-transform") threads = 100 -coffeeFiles = ['docco.litcoffee', 'test/**/*.litcoffee'] +coffeeFiles = ['docco.litcoffee', 'src/**/*.litcoffee', 'test/unit-tests/**/*.litcoffee'] -javascriptFiles = ['docco.js', 'docco.js.map', 'test/**/*.js'] +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) diff --git a/package.json b/package.json index e87400ca..762a17f4 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,6 @@ }, "scripts": { "test": "npm run test:unit", - "test:functional": "jenkins-mocha test/functional-tests/*.js", "test:unit": "jenkins-mocha test/unit-tests/*.js; jenkins-mocha --cobertura test/unit-tests/*.js", "build": "gulp build", "clean": "gulp clean" From d6f3ee3bed883f0a1cc69f3489a0c697dcd2c8bf Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Fri, 7 Jul 2017 00:22:37 -0700 Subject: [PATCH 31/95] removed unnecessary dependency. --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index 762a17f4..85bbadab 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,6 @@ "highlight.js": ">= 8.0.x", "marked": ">= 0.2.7", "path": "^0.12.7", - "shelljs": "^0.7.8", "underscore": ">= 1.0.0" }, "main": "./docco", From aab6cc3141a65f5c75a1a0f75e6da9043930ab15 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Fri, 7 Jul 2017 00:34:49 -0700 Subject: [PATCH 32/95] Readme update --- README | 41 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/README b/README index 9a0d7673..21223c3a 100644 --- a/README +++ b/README @@ -12,11 +12,11 @@ documentation generator. For more information, see: http://jashkenas.github.com/docco/ -Installation: +### Installation: sudo npm install -g docco -Usage: docco [options] FILES +### Usage: docco [options] [FILES] Options: @@ -32,7 +32,42 @@ Usage: docco [options] FILES -t, --template [file] use a custom .jst template -V, --version output the version number -TODO: +### 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: + +``` +npm install +npm run clean +npm run build +``` + +### TODO: * Multiline comments * Links to files that are included or required \ No newline at end of file From 074e15d3f81f888e7ff3e1534d8fc1c73eff227d Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Fri, 7 Jul 2017 00:36:39 -0700 Subject: [PATCH 33/95] renamed to readme to extension with .md --- README => README.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename README => README.md (100%) diff --git a/README b/README.md similarity index 100% rename from README rename to README.md From 737d58cea6cec3714c28db3a970f024c0e5b774e Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Fri, 7 Jul 2017 00:44:05 -0700 Subject: [PATCH 34/95] Update README.md fixed docco text title --- README.md | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 21223c3a..1c7d4240 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,11 @@ - ____ -/\ _`\ -\ \ \/\ \ ___ ___ ___ ___ - \ \ \ \ \ / __`\ /'___\ /'___\ / __`\ - \ \ \_\ \ /\ \ \ \ /\ \__/ /\ \__/ /\ \ \ \ - \ \____/ \ \____/ \ \____\ \ \____\ \ \____/ - \/___/ \/___/ \/____/ \/____/ \/___/ + + ______ + /\ __ \ + \ \ \/\ \ ___ ___ ___ ___ + \ \ \ \ \ / __`\ /'___\ /'___\ / __`\ + \ \ \_\ \ /\ \ \ \ /\ \__/ /\ \__/ /\ \ \ \ + \ \____/ \ \____/ \ \____\ \ \____\ \ \____/ + \/___/ \/___/ \/____/ \/____/ \/___/ Docco is a quick-and-dirty, hundred-line-long, literate-programming-style @@ -70,4 +71,4 @@ npm run build ### TODO: * Multiline comments - * Links to files that are included or required \ No newline at end of file + * Links to files that are included or required From e6b0f50869a4f303fc064de5d0a9a796971003eb Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Fri, 7 Jul 2017 00:47:38 -0700 Subject: [PATCH 35/95] formatting of readme. --- README.md => README.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename README.md => README.markdown (99%) diff --git a/README.md b/README.markdown similarity index 99% rename from README.md rename to README.markdown index 1c7d4240..ddaf727b 100644 --- a/README.md +++ b/README.markdown @@ -1,4 +1,4 @@ - +``` ______ /\ __ \ \ \ \/\ \ ___ ___ ___ ___ @@ -7,7 +7,7 @@ \ \____/ \ \____/ \ \____\ \ \____\ \ \____/ \/___/ \/___/ \/____/ \/____/ \/___/ - +``` Docco is a quick-and-dirty, hundred-line-long, literate-programming-style documentation generator. For more information, see: From 300d7beaaf533e3002f151750a95b0d24020780f Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Fri, 7 Jul 2017 00:48:10 -0700 Subject: [PATCH 36/95] readme --- README.markdown => README.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename README.markdown => README.md (100%) diff --git a/README.markdown b/README.md similarity index 100% rename from README.markdown rename to README.md From e65bb97bf563e2fa78a713af807ff79f8a4bce00 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Fri, 7 Jul 2017 09:05:06 -0700 Subject: [PATCH 37/95] Added release notes and some todos. --- README.md | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/README.md b/README.md index ddaf727b..79ac3200 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,47 @@ 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 doccumentation 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 + + Refactors: + + * Code refactored into smaller chuncks + * Unit testing framework added and unit tests written to %85 coverage (more work needed here) + * All built javascript is ignored in .gitignore + * 'npm build' builds all javascript with gulp + * 'npm test' runs all unit tests + + Breaking Changes: + + * .jst template files need to remove call to 'path.basename()' + to modify the destination source file for links to other files + + This: + + `` + + Needs to be changed to + + `` + + * hierarchical directory structure of source is kept by default. + Use --flatten to get the old behavior + + ### TODO: * Multiline comments * Links to files that are included or required + * publish to github + * index.html documentation update + From 07c394ff00a8dc6a9ae6ee2f8889eb4257acfdbc Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Fri, 7 Jul 2017 09:06:23 -0700 Subject: [PATCH 38/95] Readme tweak --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 79ac3200..5bb5021f 100644 --- a/README.md +++ b/README.md @@ -68,9 +68,9 @@ npm run clean npm run build ``` -*** Release Notes: +### Release Notes: - Functionality: +##### Functionality: * Added configuration file capabilities with a .docco.json file * --setup flag to specify a different configuration file @@ -80,7 +80,7 @@ npm run build * For markdown files, referenced images are displayed in the code section which means that in the parallel theme, images are displayed on the right - Refactors: +##### Refactors: * Code refactored into smaller chuncks * Unit testing framework added and unit tests written to %85 coverage (more work needed here) @@ -88,7 +88,7 @@ npm run build * 'npm build' builds all javascript with gulp * 'npm test' runs all unit tests - Breaking Changes: +##### Breaking Changes: * .jst template files need to remove call to 'path.basename()' to modify the destination source file for links to other files From 3f02fc7cbbd52c3000e5fd9eb238eaf3e380bcd5 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Fri, 7 Jul 2017 09:20:33 -0700 Subject: [PATCH 39/95] travis build --- README.md | 8 +++++--- travis.yml | 17 +++++++++++++++++ 2 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 travis.yml diff --git a/README.md b/README.md index 5bb5021f..f2345684 100644 --- a/README.md +++ b/README.md @@ -62,6 +62,8 @@ Other values possible are: ### Build: +[![Build Status](https://travis-ci.org/travis-ci/travis-web.svg?branch=master)](https://travis-ci.org/travis-ci/travis-web) + ``` npm install npm run clean @@ -70,7 +72,7 @@ npm run build ### Release Notes: -##### Functionality: +#### Functionality: * Added configuration file capabilities with a .docco.json file * --setup flag to specify a different configuration file @@ -80,7 +82,7 @@ npm run build * For markdown files, referenced images are displayed in the code section which means that in the parallel theme, images are displayed on the right -##### Refactors: +#### Refactors: * Code refactored into smaller chuncks * Unit testing framework added and unit tests written to %85 coverage (more work needed here) @@ -88,7 +90,7 @@ npm run build * 'npm build' builds all javascript with gulp * 'npm test' runs all unit tests -##### Breaking Changes: +#### Breaking Changes: * .jst template files need to remove call to 'path.basename()' to modify the destination source file for links to other files diff --git a/travis.yml b/travis.yml new file mode 100644 index 00000000..67264a8e --- /dev/null +++ b/travis.yml @@ -0,0 +1,17 @@ +language: node_js + +node_js: + - "iojs" + - "7" + +before_script: + - npm install -g gulp-cli + +script: gulp + +cache: + directories: + - "node_modules" + +install: + - npm install \ No newline at end of file From ba23b6dfdd917120fee7f8a29384aa3daa9118f2 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Fri, 7 Jul 2017 09:21:03 -0700 Subject: [PATCH 40/95] travis ci build/badge note --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index f2345684..9494c7df 100644 --- a/README.md +++ b/README.md @@ -89,6 +89,7 @@ npm run build * All built javascript is ignored in .gitignore * 'npm build' builds all javascript with gulp * 'npm test' runs all unit tests + * travis ci build and badge #### Breaking Changes: From 3ff1bacf5f089471959f614e74de07a1111af670 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Fri, 7 Jul 2017 09:22:26 -0700 Subject: [PATCH 41/95] renamed travis.yml --- travis.yml => .travis.yml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename travis.yml => .travis.yml (100%) diff --git a/travis.yml b/.travis.yml similarity index 100% rename from travis.yml rename to .travis.yml From 23f27e365c85878e59c8bda45e23bf76e45a2872 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Fri, 7 Jul 2017 09:25:08 -0700 Subject: [PATCH 42/95] Updated build badge to correct url --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 9494c7df..e03cdfa7 100644 --- a/README.md +++ b/README.md @@ -62,8 +62,7 @@ Other values possible are: ### Build: -[![Build Status](https://travis-ci.org/travis-ci/travis-web.svg?branch=master)](https://travis-ci.org/travis-ci/travis-web) - +[![Build Status](https://travis-ci.org/robblovell/docco.svg?branch=master)](https://travis-ci.org/robblovell/docco) ``` npm install npm run clean From a1649ed7317bf697f0023f5e9f2f24810f70e26d Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Fri, 7 Jul 2017 09:25:47 -0700 Subject: [PATCH 43/95] just node 7 for tests --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 67264a8e..41e13b4c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,6 @@ language: node_js node_js: - - "iojs" - "7" before_script: From 44a83289f0372b412bd1bb71e99b5dc8059257b0 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Fri, 7 Jul 2017 09:26:45 -0700 Subject: [PATCH 44/95] build of coffeescript --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 41e13b4c..b4009ec4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,4 +13,5 @@ cache: - "node_modules" install: - - npm install \ No newline at end of file + - npm install + - npm build \ No newline at end of file From 1d2fab85ab56c2af261a1066216a7a005fbf1bbc Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Fri, 7 Jul 2017 09:30:31 -0700 Subject: [PATCH 45/95] travis ci script --- .travis.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index b4009ec4..fc0df288 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,4 +14,9 @@ cache: install: - npm install - - npm build \ No newline at end of file + +build: + - npm build + +test: + - npm test \ No newline at end of file From 78451ba208979d55b71c83c4a5f81a9e11765ca1 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Fri, 7 Jul 2017 09:34:16 -0700 Subject: [PATCH 46/95] travis ci script fix --- .travis.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index fc0df288..2654bd0a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,8 +6,6 @@ node_js: before_script: - npm install -g gulp-cli -script: gulp - cache: directories: - "node_modules" From 36d5b17d2f5df1d7dbd1675fa37dce82953284b6 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Fri, 7 Jul 2017 09:36:30 -0700 Subject: [PATCH 47/95] removed travis.yml build section --- .travis.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2654bd0a..af8e921b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,8 +12,6 @@ cache: install: - npm install - -build: - npm build test: From 4fcdcdad9a58bf3438fce5041342184ca9ab5b2e Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Fri, 7 Jul 2017 09:38:25 -0700 Subject: [PATCH 48/95] removed need for gulp global install --- .travis.yml | 3 --- package.json | 4 ++-- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index af8e921b..a942dbdf 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,9 +3,6 @@ language: node_js node_js: - "7" -before_script: - - npm install -g gulp-cli - cache: directories: - "node_modules" diff --git a/package.json b/package.json index 85bbadab..0eb35df8 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "scripts": { "test": "npm run test:unit", "test:unit": "jenkins-mocha test/unit-tests/*.js; jenkins-mocha --cobertura test/unit-tests/*.js", - "build": "gulp build", - "clean": "gulp clean" + "build": "node_modules/gulp/bin/gulp build", + "clean": "node_modules/gulp/bin/gulp clean" } } From f905710fbd261ddbaea3cf5f91e74a553c6bd015 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Fri, 7 Jul 2017 09:40:02 -0700 Subject: [PATCH 49/95] npm run build --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index a942dbdf..5c036be5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,7 +9,7 @@ cache: install: - npm install - - npm build + - npm run build test: - npm test \ No newline at end of file From c38672749c45928cf9e66f3c4f2502a029810b21 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Fri, 7 Jul 2017 09:41:46 -0700 Subject: [PATCH 50/95] fixed run command for local gulp --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 0eb35df8..5c159f22 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "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 build", - "clean": "node_modules/gulp/bin/gulp clean" + "build": "node_modules/gulp/bin/gulp.js build", + "clean": "node_modules/gulp/bin/gulp.js clean" } } From 079b39161bc7f44f08e8ff583179b4f7a6e69a9c Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Fri, 7 Jul 2017 10:10:03 -0700 Subject: [PATCH 51/95] fixed unit test and completed another --- test/unit-tests/fakes/fake-config.litcoffee | 73 +++++++++++++++++++ test/unit-tests/unit-test-configure.litcoffee | 10 +++ test/unit-tests/unit-test-run.litcoffee | 45 +++++++----- 3 files changed, 110 insertions(+), 18 deletions(-) create mode 100644 test/unit-tests/fakes/fake-config.litcoffee diff --git a/test/unit-tests/fakes/fake-config.litcoffee b/test/unit-tests/fakes/fake-config.litcoffee new file mode 100644 index 00000000..37a55e4c --- /dev/null +++ b/test/unit-tests/fakes/fake-config.litcoffee @@ -0,0 +1,73 @@ +# + + 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": "/Users/rolov/Code/docco/docs/README.html" + "pathdir": "/Users/rolov/Code/docco/docs" + "relativefile": "README.html" + "root": "/Users/rolov/Code/docco" + } + "language": { + "html": true + "link": "!" + "name": "markdown" + "section": "#" + "symbol": "" + } + "others": { + "README.html": "README.html" + } + "source": { + "base": "README.md" + "dir": "" + "ext": ".md" + "file": "README.md" + "name": "README" + "path": "/Users/rolov/Code/docco/README.md" + "relativefile": "README.md" + "root": "/Users/rolov/Code/docco" + } + } + } + "languages": { + ".markdown": { + "html": true + "link": "!" + "name": "markdown" + "section": "#" + "symbol": "" + } + ".md": { + "html": true + "link": "!" + "name": "markdown" + "section": "#" + "symbol": "" + } + "coffeescript": { + "name": "coffeescript" + "symbol": "#" + } + } + "layout": "parallel" + "marked": null + "output": "docs" + "root": "/Users/rolov/Code/docco" + "setup": ".docco.json" + "sources": [ + "README.md" + ] + "template": null + } \ No newline at end of file diff --git a/test/unit-tests/unit-test-configure.litcoffee b/test/unit-tests/unit-test-configure.litcoffee index 03102b8e..b0395a75 100644 --- a/test/unit-tests/unit-test-configure.litcoffee +++ b/test/unit-tests/unit-test-configure.litcoffee @@ -57,5 +57,15 @@ .name = "docco" config = configure commander, defaults + + config.css.should.be.equal("/Users/rolov/Code/docco/resources/parallel/docco.css") + config.flatten.should.be.equal(false) + config.layout.should.be.equal("/Users/rolov/Code/docco/resources/parallel") + config.output.should.be.equal("docs") + config.public.should.be.equal("/Users/rolov/Code/docco/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-run.litcoffee b/test/unit-tests/unit-test-run.litcoffee index 51740e33..6f868954 100644 --- a/test/unit-tests/unit-test-run.litcoffee +++ b/test/unit-tests/unit-test-run.litcoffee @@ -14,33 +14,39 @@ readFileSync: (file) -> if times is 0 times++ - return '{"name":"coffeescript","symbol":"#"}' + 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) -> - assert.deepEqual(config, { - "layout": "parallel", - "output": "docs", - "template": null, - "css": null, - "extension": null, - "languages": {}, - "marked": null, - "setup": ".docco.json", - "help": false, - "flatten": false, - "sources": [], - "root": "/Users/rolov/Code/docco", - "informationOnFiles": {} - }) + fakeConfig = require './fakes/fake-config' + + assert.deepEqual(config, fakeConfig) ) mockery.registerMock('./src/configure', (commander, defaults, languages) -> commander.name.should.be.equal('docco') assert.deepEqual(languages, { - "name": "coffeescript", - "symbol": "#" + ".markdown": { + "html": true + "link": "!" + "name": "markdown" + "section": "#" + "symbol": "" + } + ".md": { + "html": true + "link": "!" + "name": "markdown" + "section": "#" + "symbol": "" + } + "coffeescript": { + "name": "coffeescript" + "symbol": "#" + } }) assert.deepEqual(defaults, { "layout": "parallel", @@ -58,6 +64,9 @@ "README.md", "images/fluffybunny1.jpg" ] + defaults.languages = languages + defaults.css = 'docco.css' + defaults.extension = '.md' return defaults ) optionTimes = 0 From 542b1c2ff0e8ea8f32f4b40355365ffb5ce4933c Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Fri, 7 Jul 2017 10:30:23 -0700 Subject: [PATCH 52/95] path problem in configure unit test. --- test/unit-tests/unit-test-configure.litcoffee | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/unit-tests/unit-test-configure.litcoffee b/test/unit-tests/unit-test-configure.litcoffee index b0395a75..08df2769 100644 --- a/test/unit-tests/unit-test-configure.litcoffee +++ b/test/unit-tests/unit-test-configure.litcoffee @@ -58,11 +58,11 @@ config = configure commander, defaults - config.css.should.be.equal("/Users/rolov/Code/docco/resources/parallel/docco.css") + config.css.should.contain("resources/parallel/docco.css") config.flatten.should.be.equal(false) - config.layout.should.be.equal("/Users/rolov/Code/docco/resources/parallel") + config.layout.should.contain("resources/parallel") config.output.should.be.equal("docs") - config.public.should.be.equal("/Users/rolov/Code/docco/resources/parallel/public") + 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 From 097b4bac450201f54761774979d936772a47b20c Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Fri, 7 Jul 2017 15:34:39 -0700 Subject: [PATCH 53/95] Unit tests fixed for paths and root directories --- .../unit-test-fixForMatch.litcoffee | 32 +++++++++++++++++ test/unit-tests/unit-test-run.litcoffee | 3 ++ .../unit-test-typeIsArray.litcoffee | 35 +++++++++++++++++++ test/unit-tests/utils/fixForMatch.litcoffee | 22 ++++++++++++ test/unit-tests/utils/typeIsArray.litcoffee | 2 ++ test/unit-tests/utils/typeIsObject.litcoffee | 1 + 6 files changed, 95 insertions(+) create mode 100644 test/unit-tests/unit-test-fixForMatch.litcoffee create mode 100644 test/unit-tests/unit-test-typeIsArray.litcoffee create mode 100644 test/unit-tests/utils/fixForMatch.litcoffee create mode 100644 test/unit-tests/utils/typeIsArray.litcoffee create mode 100644 test/unit-tests/utils/typeIsObject.litcoffee diff --git a/test/unit-tests/unit-test-fixForMatch.litcoffee b/test/unit-tests/unit-test-fixForMatch.litcoffee new file mode 100644 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-run.litcoffee b/test/unit-tests/unit-test-run.litcoffee index 6f868954..d912842f 100644 --- a/test/unit-tests/unit-test-run.litcoffee +++ b/test/unit-tests/unit-test-run.litcoffee @@ -1,6 +1,7 @@ # This tests if run is working correctly. { assert, should } = require('chai'); should() + fixForMatch = require './utils/fixForMatch' mockery = require('mockery') mockery.enable({ useCleanCache: true, @@ -23,6 +24,8 @@ }) 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) ) diff --git a/test/unit-tests/unit-test-typeIsArray.litcoffee b/test/unit-tests/unit-test-typeIsArray.litcoffee new file mode 100644 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/utils/fixForMatch.litcoffee b/test/unit-tests/utils/fixForMatch.litcoffee new file mode 100644 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.litcoffee b/test/unit-tests/utils/typeIsArray.litcoffee new file mode 100644 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.litcoffee b/test/unit-tests/utils/typeIsObject.litcoffee new file mode 100644 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 From 92f782eda52b5bb9d747b889895d34cc20235ad0 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Fri, 7 Jul 2017 15:37:27 -0700 Subject: [PATCH 54/95] Update README.md travis badge --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index e03cdfa7..02ee660d 100644 --- a/README.md +++ b/README.md @@ -63,6 +63,7 @@ Other values possible are: ### Build: [![Build Status](https://travis-ci.org/robblovell/docco.svg?branch=master)](https://travis-ci.org/robblovell/docco) + ``` npm install npm run clean From 98c0dfa1d4d6564e8879b923092c5d4472716cc0 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 10 Jul 2017 10:05:06 -0700 Subject: [PATCH 55/95] configuration file for docco documentation. --- .docco.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.docco.json b/.docco.json index 883749d1..45e40fdb 100644 --- a/.docco.json +++ b/.docco.json @@ -1,6 +1,7 @@ { "sources": [ "docco.litcoffee", - "README.md" + "README.md", + "src/**/*.litcoffee" ] } From 63dffc4fb1f06953de614b780aa27693a64792d3 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 10 Jul 2017 10:15:52 -0700 Subject: [PATCH 56/95] version stuff --- docco.litcoffee | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docco.litcoffee b/docco.litcoffee index 22179904..f10b172c 100644 --- a/docco.litcoffee +++ b/docco.litcoffee @@ -127,6 +127,7 @@ language to Docco, just add it to the file. Keep it DRY. Extract the docco **version** from `package.json` version = JSON.parse(fs.readFileSync(path.join(__dirname, 'package.json'))).version + console.log("Version: "+version) Default configuration **options**. All of these may be extended by user-specified options. @@ -168,6 +169,7 @@ Parse options using [Commander](https://github.com/visionmedia/commander.js). config = configure commander, defaults, languages + console.log("#{JSON.stringify(config,null,2)}") setup = path.resolve config.setup if fs.existsSync(setup) config = _.extend(config, JSON.parse fs.readFileSync setup) if setup From 4ba4f3845b16aff781fd27e05280c97547dd62d0 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 10 Jul 2017 10:19:48 -0700 Subject: [PATCH 57/95] prescript for npm install. --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 5c159f22..075f25db 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ "touch": "^3.1.0" }, "scripts": { + "install": "npm run build", "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", From a9950bc1e787f53e10b435dba1f8b3e55b00b734 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 10 Jul 2017 10:22:35 -0700 Subject: [PATCH 58/95] prepublish script --- .gitignore | 1 + package.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 0d53a5ae..7a49071b 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ doc artifacts .nyc_output !/test/sim/src/fake_litcoffee.js +npm-debug.log diff --git a/package.json b/package.json index 075f25db..ed07ab02 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "touch": "^3.1.0" }, "scripts": { - "install": "npm run build", + "prepublish": "npm run build", "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", From 7c6e45a7a33b5de55eba144b4ef9c50b0095dc13 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 10 Jul 2017 10:26:23 -0700 Subject: [PATCH 59/95] one more try at install build --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ed07ab02..d60e2684 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "touch": "^3.1.0" }, "scripts": { - "prepublish": "npm run build", + "postinstall": "npm run build", "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", From 83e7a66bd7a02dbdc09740de84fbac11d2f41452 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 10 Jul 2017 10:27:18 -0700 Subject: [PATCH 60/95] another try at post install --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d60e2684..2deb67fa 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "touch": "^3.1.0" }, "scripts": { - "postinstall": "npm run build", + "postinstall": "node_modules/gulp/bin/gulp.js build", "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", From 8cc4fb5e7322147c5698b6d6636fd9ccef1a9a4e Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 10 Jul 2017 10:28:42 -0700 Subject: [PATCH 61/95] gulp build --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2deb67fa..0bebdf42 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "touch": "^3.1.0" }, "scripts": { - "postinstall": "node_modules/gulp/bin/gulp.js build", + "postinstall": "gulp build", "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", From d4f4e50cf350a9b225adae5f779b67563c76127e Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 10 Jul 2017 10:37:07 -0700 Subject: [PATCH 62/95] don't use gulp? --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0bebdf42..e8de15b3 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "touch": "^3.1.0" }, "scripts": { - "postinstall": "gulp build", + "postinstall": "coffee -f '**/*.litcoffee'", "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", From d8a301961a74586dabbbebc215e6f61dde621f8f Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 10 Jul 2017 10:44:36 -0700 Subject: [PATCH 63/95] coffee -c --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e8de15b3..4390b50e 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "touch": "^3.1.0" }, "scripts": { - "postinstall": "coffee -f '**/*.litcoffee'", + "postinstall": "coffee -c **/*.litcoffee", "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", From e4030e357fd1e8aee569cd9e04977b5140cf739f Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 10 Jul 2017 10:45:54 -0700 Subject: [PATCH 64/95] removed post install --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index 4390b50e..5c159f22 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,6 @@ "touch": "^3.1.0" }, "scripts": { - "postinstall": "coffee -c **/*.litcoffee", "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", From 583c788c6ccf80aa13e8b0284325b88b7c6f94c1 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 10 Jul 2017 10:46:13 -0700 Subject: [PATCH 65/95] check in compiled js. :( --- .gitignore | 4 +- docco.js | 92 +++++++++++ docco.js.map | 1 + src/buildMatchers.js | 21 +++ src/buildMatchers.js.map | 1 + src/configure.js | 48 ++++++ src/configure.js.map | 1 + src/document.js | 108 ++++++++++++ src/document.js.map | 1 + src/format.js | 56 +++++++ src/format.js.map | 1 + src/getCSSPath.js | 18 ++ src/getCSSPath.js.map | 1 + src/getDestinationInformation.js | 36 ++++ src/getDestinationInformation.js.map | 1 + src/getInformationOnFiles.js | 60 +++++++ src/getInformationOnFiles.js.map | 1 + src/getLanguage.js | 24 +++ src/getLanguage.js.map | 1 + src/getOthers.js | 24 +++ src/getOthers.js.map | 1 + src/getRelativePath.js | 20 +++ src/getRelativePath.js.map | 1 + src/getSourceInformation.js | 23 +++ src/getSourceInformation.js.map | 1 + src/parse.js | 79 +++++++++ src/parse.js.map | 1 + src/write.js | 54 ++++++ src/write.js.map | 1 + test/unit-tests/fakes/fake-config.js | 71 ++++++++ test/unit-tests/fakes/fake-config.js.map | 1 + test/unit-tests/fakes/fake-jst-result.js | 3 + test/unit-tests/fakes/fake-jst-result.js.map | 1 + test/unit-tests/fakes/fake-jst.js | 3 + test/unit-tests/fakes/fake-jst.js.map | 1 + .../fakes/fake-linear-jst-flattened-result.js | 3 + .../fake-linear-jst-flattened-result.js.map | 1 + .../fake-linear-jst-unflattened-result.js | 3 + .../fake-linear-jst-unflattened-result.js.map | 1 + test/unit-tests/fakes/fake-linear-jst.js | 3 + test/unit-tests/fakes/fake-linear-jst.js.map | 1 + .../fakes/informationOnFilesFlattened.js | 154 ++++++++++++++++++ .../fakes/informationOnFilesFlattened.js.map | 1 + .../fakes/informationOnFilesUnFlattened.js | 154 ++++++++++++++++++ .../informationOnFilesUnFlattened.js.map | 1 + test/unit-tests/unit-test-buildMatchers.js | 35 ++++ .../unit-tests/unit-test-buildMatchers.js.map | 1 + test/unit-tests/unit-test-configure.js | 60 +++++++ test/unit-tests/unit-test-configure.js.map | 1 + test/unit-tests/unit-test-document.js | 104 ++++++++++++ test/unit-tests/unit-test-document.js.map | 1 + test/unit-tests/unit-test-fixForMatch.js | 47 ++++++ test/unit-tests/unit-test-fixForMatch.js.map | 1 + test/unit-tests/unit-test-format.js | 64 ++++++++ test/unit-tests/unit-test-format.js.map | 1 + test/unit-tests/unit-test-getCSSPath.js | 32 ++++ test/unit-tests/unit-test-getCSSPath.js.map | 1 + .../unit-test-getDestinationInformation.js | 150 +++++++++++++++++ ...unit-test-getDestinationInformation.js.map | 1 + .../unit-test-getInformationOnFiles.js | 45 +++++ .../unit-test-getInformationOnFiles.js.map | 1 + test/unit-tests/unit-test-getLanguage.js | 47 ++++++ test/unit-tests/unit-test-getLanguage.js.map | 1 + test/unit-tests/unit-test-getOthers.js | 64 ++++++++ test/unit-tests/unit-test-getOthers.js.map | 1 + test/unit-tests/unit-test-getRelativePath.js | 37 +++++ .../unit-test-getRelativePath.js.map | 1 + test/unit-tests/unit-test-parse.js | 49 ++++++ test/unit-tests/unit-test-parse.js.map | 1 + test/unit-tests/unit-test-run.js | 142 ++++++++++++++++ test/unit-tests/unit-test-run.js.map | 1 + test/unit-tests/unit-test-typeIsArray.js | 54 ++++++ test/unit-tests/unit-test-typeIsArray.js.map | 1 + test/unit-tests/unit-test-write.js | 104 ++++++++++++ test/unit-tests/unit-test-write.js.map | 1 + test/unit-tests/utils/fixForMatch.js | 32 ++++ test/unit-tests/utils/fixForMatch.js.map | 1 + test/unit-tests/utils/typeIsArray.js | 9 + test/unit-tests/utils/typeIsArray.js.map | 1 + test/unit-tests/utils/typeIsObject.js | 5 + test/unit-tests/utils/typeIsObject.js.map | 1 + 81 files changed, 2179 insertions(+), 2 deletions(-) create mode 100644 docco.js create mode 100644 docco.js.map create mode 100644 src/buildMatchers.js create mode 100644 src/buildMatchers.js.map create mode 100644 src/configure.js create mode 100644 src/configure.js.map create mode 100644 src/document.js create mode 100644 src/document.js.map create mode 100644 src/format.js create mode 100644 src/format.js.map create mode 100644 src/getCSSPath.js create mode 100644 src/getCSSPath.js.map create mode 100644 src/getDestinationInformation.js create mode 100644 src/getDestinationInformation.js.map create mode 100644 src/getInformationOnFiles.js create mode 100644 src/getInformationOnFiles.js.map create mode 100644 src/getLanguage.js create mode 100644 src/getLanguage.js.map create mode 100644 src/getOthers.js create mode 100644 src/getOthers.js.map create mode 100644 src/getRelativePath.js create mode 100644 src/getRelativePath.js.map create mode 100644 src/getSourceInformation.js create mode 100644 src/getSourceInformation.js.map create mode 100644 src/parse.js create mode 100644 src/parse.js.map create mode 100644 src/write.js create mode 100644 src/write.js.map create mode 100644 test/unit-tests/fakes/fake-config.js create mode 100644 test/unit-tests/fakes/fake-config.js.map create mode 100644 test/unit-tests/fakes/fake-jst-result.js create mode 100644 test/unit-tests/fakes/fake-jst-result.js.map create mode 100644 test/unit-tests/fakes/fake-jst.js create mode 100644 test/unit-tests/fakes/fake-jst.js.map create mode 100644 test/unit-tests/fakes/fake-linear-jst-flattened-result.js create mode 100644 test/unit-tests/fakes/fake-linear-jst-flattened-result.js.map create mode 100644 test/unit-tests/fakes/fake-linear-jst-unflattened-result.js create mode 100644 test/unit-tests/fakes/fake-linear-jst-unflattened-result.js.map create mode 100644 test/unit-tests/fakes/fake-linear-jst.js create mode 100644 test/unit-tests/fakes/fake-linear-jst.js.map create mode 100644 test/unit-tests/fakes/informationOnFilesFlattened.js create mode 100644 test/unit-tests/fakes/informationOnFilesFlattened.js.map create mode 100644 test/unit-tests/fakes/informationOnFilesUnFlattened.js create mode 100644 test/unit-tests/fakes/informationOnFilesUnFlattened.js.map create mode 100644 test/unit-tests/unit-test-buildMatchers.js create mode 100644 test/unit-tests/unit-test-buildMatchers.js.map create mode 100644 test/unit-tests/unit-test-configure.js create mode 100644 test/unit-tests/unit-test-configure.js.map create mode 100644 test/unit-tests/unit-test-document.js create mode 100644 test/unit-tests/unit-test-document.js.map create mode 100644 test/unit-tests/unit-test-fixForMatch.js create mode 100644 test/unit-tests/unit-test-fixForMatch.js.map create mode 100644 test/unit-tests/unit-test-format.js create mode 100644 test/unit-tests/unit-test-format.js.map create mode 100644 test/unit-tests/unit-test-getCSSPath.js create mode 100644 test/unit-tests/unit-test-getCSSPath.js.map create mode 100644 test/unit-tests/unit-test-getDestinationInformation.js create mode 100644 test/unit-tests/unit-test-getDestinationInformation.js.map create mode 100644 test/unit-tests/unit-test-getInformationOnFiles.js create mode 100644 test/unit-tests/unit-test-getInformationOnFiles.js.map create mode 100644 test/unit-tests/unit-test-getLanguage.js create mode 100644 test/unit-tests/unit-test-getLanguage.js.map create mode 100644 test/unit-tests/unit-test-getOthers.js create mode 100644 test/unit-tests/unit-test-getOthers.js.map create mode 100644 test/unit-tests/unit-test-getRelativePath.js create mode 100644 test/unit-tests/unit-test-getRelativePath.js.map create mode 100644 test/unit-tests/unit-test-parse.js create mode 100644 test/unit-tests/unit-test-parse.js.map create mode 100644 test/unit-tests/unit-test-run.js create mode 100644 test/unit-tests/unit-test-run.js.map create mode 100644 test/unit-tests/unit-test-typeIsArray.js create mode 100644 test/unit-tests/unit-test-typeIsArray.js.map create mode 100644 test/unit-tests/unit-test-write.js create mode 100644 test/unit-tests/unit-test-write.js.map create mode 100644 test/unit-tests/utils/fixForMatch.js create mode 100644 test/unit-tests/utils/fixForMatch.js.map create mode 100644 test/unit-tests/utils/typeIsArray.js create mode 100644 test/unit-tests/utils/typeIsArray.js.map create mode 100644 test/unit-tests/utils/typeIsObject.js create mode 100644 test/unit-tests/utils/typeIsObject.js.map diff --git a/.gitignore b/.gitignore index 7a49071b..ee006570 100644 --- a/.gitignore +++ b/.gitignore @@ -4,8 +4,8 @@ docs test/data node_modules doc -**/*.js -**/*.map +#**/*.js +#**/*.map artifacts .nyc_output !/test/sim/src/fake_litcoffee.js diff --git a/docco.js b/docco.js new file mode 100644 index 00000000..de30c15f --- /dev/null +++ b/docco.js @@ -0,0 +1,92 @@ +var Docco, _, commander, configure, defaults, document, format, fs, getInformationOnFiles, glob, highlightjs, languages, marked, parse, path, run, version; + +document = require('./src/document'); + +parse = require('./src/parse'); + +format = require('./src/format'); + +configure = require('./src/configure'); + +getInformationOnFiles = require('./src/getInformationOnFiles'); + +_ = 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'); + +languages = JSON.parse(fs.readFileSync(path.join(__dirname, 'resources', 'languages.json'))); + +version = JSON.parse(fs.readFileSync(path.join(__dirname, 'package.json'))).version; + +console.log("Version: " + version); + +defaults = { + layout: 'parallel', + output: 'docs', + template: null, + css: null, + extension: null, + languages: {}, + marked: null, + setup: '.docco.json', + help: false, + flatten: false +}; + +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('-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, languages); + console.log("" + (JSON.stringify(config, null, 2))); + setup = path.resolve(config.setup); + if (fs.existsSync(setup)) { + if (setup) { + config = _.extend(config, JSON.parse(fs.readFileSync(setup))); + } + } + 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)))); + } + 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..0dc493ad --- /dev/null +++ b/docco.js.map @@ -0,0 +1 @@ +{"version":3,"file":"docco.js","sources":["docco.litcoffee"],"names":[],"mappings":"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","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 console.log(\"Version: \"+version)\n\nDefault configuration **options**. All of these may be extended by\nuser-specified options.\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\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('-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, languages\n\n console.log(\"#{JSON.stringify(config,null,2)}\")\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 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}"]} \ No newline at end of file diff --git a/src/buildMatchers.js b/src/buildMatchers.js new file mode 100644 index 00000000..fd53ded9 --- /dev/null +++ b/src/buildMatchers.js @@ -0,0 +1,21 @@ +// Generated by CoffeeScript 1.12.6 +(function() { + var buildMatchers; + + module.exports = buildMatchers = function(languages) { + var ext, l; + for (ext in languages) { + l = languages[ext]; + l.commentMatcher = RegExp("^\\s*" + l.symbol + "\\s?"); + l.commentFilter = /(^#![\/]|^\s*#\{)/; + if (l.link) { + l.linkMatcher = RegExp("^" + l.link + "\\[(.+)\\]\\((.+)\\)"); + } + if (l.section) { + l.sectionMatcher = RegExp("^" + l.section + "\\s?"); + } + } + return languages; + }; + +}).call(this); diff --git a/src/buildMatchers.js.map b/src/buildMatchers.js.map new file mode 100644 index 00000000..e63f4abc --- /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,WAAF,GAAgB,MAAA,CAAA,GAAA,GAAM,CAAC,CAAC,IAAR,GAAa,sBAAb,EADlB;;IAKA,IAAG,CAAC,CAAC,OAAL;MACE,CAAC,CAAC,cAAF,GAAmB,MAAA,CAAA,GAAA,GAAM,CAAC,CAAC,OAAR,GAAgB,MAAhB,EADrB;;AAjBF;SAoBA;AArB+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.linkMatcher = ///^#{l.link}\\[(.+)\\]\\((.+)\\)///\n\nLook for explict section breaks\n\n if l.section\n l.sectionMatcher = ///^#{l.section}\\s?///\n\n languages\n"]} \ No newline at end of file diff --git a/src/configure.js b/src/configure.js new file mode 100644 index 00000000..1659dd83 --- /dev/null +++ b/src/configure.js @@ -0,0 +1,48 @@ +// Generated by CoffeeScript 1.12.6 +(function() { + 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; + }; + +}).call(this); 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/document.js b/src/document.js new file mode 100644 index 00000000..15a46cfe --- /dev/null +++ b/src/document.js @@ -0,0 +1,108 @@ +// Generated by CoffeeScript 1.12.6 +(function() { + 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; + +}).call(this); 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":"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","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/format.js b/src/format.js new file mode 100644 index 00000000..5ed7946b --- /dev/null +++ b/src/format.js @@ -0,0 +1,56 @@ +// Generated by CoffeeScript 1.12.6 +(function() { + 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 = "
      " + code + "
      "; + } + results.push(section.docsHtml = marked(section.docsText)); + } + return results; + }; + +}).call(this); 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 = \"
      #{code}
      \"\n section.docsHtml = marked(section.docsText)\n\n"]} \ No newline at end of file diff --git a/src/getCSSPath.js b/src/getCSSPath.js new file mode 100644 index 00000000..2d5c68fe --- /dev/null +++ b/src/getCSSPath.js @@ -0,0 +1,18 @@ +// Generated by CoffeeScript 1.12.6 +(function() { + 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; + +}).call(this); 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/getDestinationInformation.js b/src/getDestinationInformation.js new file mode 100644 index 00000000..b30d9c78 --- /dev/null +++ b/src/getDestinationInformation.js @@ -0,0 +1,36 @@ +// Generated by CoffeeScript 1.12.6 +(function() { + 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; + +}).call(this); 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/getInformationOnFiles.js b/src/getInformationOnFiles.js new file mode 100644 index 00000000..8298af37 --- /dev/null +++ b/src/getInformationOnFiles.js @@ -0,0 +1,60 @@ +// Generated by CoffeeScript 1.12.6 +(function() { + 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, 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); + 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]; + informationOnFiles[file].others = getOthers(file, informationOnFiles, config); + } + return informationOnFiles; + }; + +}).call(this); diff --git a/src/getInformationOnFiles.js.map b/src/getInformationOnFiles.js.map new file mode 100644 index 00000000..3683500d --- /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;IAIX,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;AAnBtC;AAuBA;AAAA,OAAA,wCAAA;;IACE,kBAAmB,CAAA,IAAA,CAAK,CAAC,MAAzB,GAAkC,SAAA,CAAU,IAAV,EAAgB,kBAAhB,EAAoC,MAApC;AADpC;AAGA,SAAO;AArCgC","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\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 informationOnFiles[file].others = getOthers(file, informationOnFiles, config)\n\n return informationOnFiles\n"]} \ No newline at end of file diff --git a/src/getLanguage.js b/src/getLanguage.js new file mode 100644 index 00000000..1e545e8b --- /dev/null +++ b/src/getLanguage.js @@ -0,0 +1,24 @@ +// Generated by CoffeeScript 1.12.6 +(function() { + 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; + +}).call(this); 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/getOthers.js b/src/getOthers.js new file mode 100644 index 00000000..f82f4dc0 --- /dev/null +++ b/src/getOthers.js @@ -0,0 +1,24 @@ +// Generated by CoffeeScript 1.12.6 +(function() { + var getOthers, getRelativePath; + + getRelativePath = require('./getRelativePath'); + + getOthers = function(file, informationOnFiles, config) { + var destinationFileInformation, i, 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; + others[target.base] = getRelativePath(source.relativefile, target.relativefile, target.base); + } + return others; + }; + + module.exports = getOthers; + +}).call(this); diff --git a/src/getOthers.js.map b/src/getOthers.js.map new file mode 100644 index 00000000..5016f00d --- /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;IAEpC,MAAO,CAAA,MAAM,CAAC,IAAP,CAAP,GAAsB,eAAA,CAAgB,MAAM,CAAC,YAAvB,EAAqC,MAAM,CAAC,YAA5C,EAA0D,MAAM,CAAC,IAAjE;AAJxB;SAMA;AAVU;;AAYZ,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\n others[target.base] = getRelativePath source.relativefile, target.relativefile, target.base\n\n others\n\n module.exports = getOthers\n"]} \ No newline at end of file diff --git a/src/getRelativePath.js b/src/getRelativePath.js new file mode 100644 index 00000000..c7cc8816 --- /dev/null +++ b/src/getRelativePath.js @@ -0,0 +1,20 @@ +// Generated by CoffeeScript 1.12.6 +(function() { + 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; + +}).call(this); 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/getSourceInformation.js b/src/getSourceInformation.js new file mode 100644 index 00000000..eed424e3 --- /dev/null +++ b/src/getSourceInformation.js @@ -0,0 +1,23 @@ +// Generated by CoffeeScript 1.12.6 +(function() { + 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; + +}).call(this); 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/parse.js b/src/parse.js new file mode 100644 index 00000000..5ed03eaa --- /dev/null +++ b/src/parse.js @@ -0,0 +1,79 @@ +// Generated by CoffeeScript 1.12.6 +(function() { + var _, commander, fs, glob, highlightjs, marked, parse, 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 = parse = function(source, language, code, config) { + var LINK_REGEX, TEXT_REGEX, codeText, docsText, hasCode, i, isText, j, k, len, len1, line, lines, link, links, match, maybeCode, save, sections, text, texts; + 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); + } + } + for (k = 0, len1 = lines.length; k < len1; k++) { + line = lines[k]; + if (language.linkMatcher && line.match(language.linkMatcher)) { + LINK_REGEX = /\((.+)\)/; + TEXT_REGEX = /\[(.+)\]/; + links = LINK_REGEX.exec(line); + texts = TEXT_REGEX.exec(line); + if ((links != null) && links.length > 1 && (texts != null) && texts.length > 1) { + link = links[1]; + text = texts[1]; + codeText += '

      ' + text + '

      ' + '\n'; + } + hasCode = true; + } 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; + }; + +}).call(this); diff --git a/src/parse.js.map b/src/parse.js.map new file mode 100644 index 00000000..f088ce04 --- /dev/null +++ b/src/parse.js.map @@ -0,0 +1 @@ +{"version":3,"file":"parse.js","sources":["parse.litcoffee"],"names":[],"mappings":"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","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\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 for line in lines\n if language.linkMatcher and line.match(language.linkMatcher)\n LINK_REGEX = /\\((.+)\\)/\n TEXT_REGEX = /\\[(.+)\\]/\n links = LINK_REGEX.exec(line)\n texts = TEXT_REGEX.exec(line)\n if links? and links.length > 1 and texts? and texts.length > 1\n link = links[1]\n text = texts[1]\n codeText += '

      '+text+'

      ' + '\\n'\n hasCode = yes\n else if language.sectionMatcher and line.match(language.sectionMatcher)\n save() if hasCode\n docsText += (line = line.replace(language.commentMatcher, '')) + '\\n'\n save() # if /^(---+|===+)$/.test line\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/write.js b/src/write.js new file mode 100644 index 00000000..391f3970 --- /dev/null +++ b/src/write.js @@ -0,0 +1,54 @@ +// Generated by CoffeeScript 1.12.6 +(function() { + 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, first, firstSection, hasTitle, html, 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); + html = config.template({ + sources: others, + css: fileInfo.destination.css, + title: title, + hasTitle: hasTitle, + sections: sections, + path: path, + destination: destination + }); + console.log("docco: " + source + " -> " + (destination(fileInfo.destination.path))); + fs.writeFileSync(destination(fileInfo.destination.path), html); + }; + +}).call(this); diff --git a/src/write.js.map b/src/write.js.map new file mode 100644 index 00000000..a0429881 --- /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,IAAA,GAAO,MAAM,CAAC,QAAP,CAAgB;IAAE,OAAA,EAAS,MAAX;IAAmB,GAAA,EAAK,QAAQ,CAAC,WAAW,CAAC,GAA7C;IACrB,OAAA,KADqB;IACd,UAAA,QADc;IACJ,UAAA,QADI;IACM,MAAA,IADN;IACY,aAAA,WADZ;GAAhB;EAGP,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;AAxBuB","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 html = config.template { sources: others, css: fileInfo.destination.css,\n title, hasTitle, sections, path, destination }\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/test/unit-tests/fakes/fake-config.js b/test/unit-tests/fakes/fake-config.js new file mode 100644 index 00000000..50e66229 --- /dev/null +++ b/test/unit-tests/fakes/fake-config.js @@ -0,0 +1,71 @@ +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": "/Users/rolov/Code/docco/docs/README.html", + "pathdir": "/Users/rolov/Code/docco/docs", + "relativefile": "README.html", + "root": "/Users/rolov/Code/docco" + }, + "language": { + "html": true, + "link": "!", + "name": "markdown", + "section": "#", + "symbol": "" + }, + "others": { + "README.html": "README.html" + }, + "source": { + "base": "README.md", + "dir": "", + "ext": ".md", + "file": "README.md", + "name": "README", + "path": "/Users/rolov/Code/docco/README.md", + "relativefile": "README.md", + "root": "/Users/rolov/Code/docco" + } + } + }, + "languages": { + ".markdown": { + "html": true, + "link": "!", + "name": "markdown", + "section": "#", + "symbol": "" + }, + ".md": { + "html": true, + "link": "!", + "name": "markdown", + "section": "#", + "symbol": "" + }, + "coffeescript": { + "name": "coffeescript", + "symbol": "#" + } + }, + "layout": "parallel", + "marked": null, + "output": "docs", + "root": "/Users/rolov/Code/docco", + "setup": ".docco.json", + "sources": ["README.md"], + "template": null +}; + +//# 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..0358faa1 --- /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,0CAPK;QAQb,SAAA,EAAW,8BARE;QASb,cAAA,EAAgB,aATH;QAUb,MAAA,EAAQ,yBAVK;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,aADP;OApBC;MAuBX,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,mCANA;QAOR,cAAA,EAAgB,WAPR;QAQR,MAAA,EAAQ,yBARA;OAvBC;KADO;GALP;EAyCf,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;GAzCE;EA6Df,QAAA,EAAU,UA7DK;EA8Df,QAAA,EAAU,IA9DK;EA+Df,QAAA,EAAU,MA/DK;EAgEf,MAAA,EAAQ,yBAhEO;EAiEf,OAAA,EAAS,aAjEM;EAkEf,SAAA,EAAW,CACT,WADS,CAlEI;EAqEf,UAAA,EAAY,IArEG","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\": \"/Users/rolov/Code/docco/docs/README.html\"\n \"pathdir\": \"/Users/rolov/Code/docco/docs\"\n \"relativefile\": \"README.html\"\n \"root\": \"/Users/rolov/Code/docco\"\n }\n \"language\": {\n \"html\": true\n \"link\": \"!\"\n \"name\": \"markdown\"\n \"section\": \"#\"\n \"symbol\": \"\"\n }\n \"others\": {\n \"README.html\": \"README.html\"\n }\n \"source\": {\n \"base\": \"README.md\"\n \"dir\": \"\"\n \"ext\": \".md\"\n \"file\": \"README.md\"\n \"name\": \"README\"\n \"path\": \"/Users/rolov/Code/docco/README.md\"\n \"relativefile\": \"README.md\"\n \"root\": \"/Users/rolov/Code/docco\"\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\": \"parallel\"\n \"marked\": null\n \"output\": \"docs\"\n \"root\": \"/Users/rolov/Code/docco\"\n \"setup\": \".docco.json\"\n \"sources\": [\n \"README.md\"\n ]\n \"template\": null\n }"]} \ 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 100644 index 00000000..b75fec9f --- /dev/null +++ b/test/unit-tests/fakes/fake-jst-result.js @@ -0,0 +1,3 @@ +module.exports = ' fake_coffee.coffee ' + ' ' + ' ' + ' ' + ' ' + ' ' + '
      ' + '
      ' + '
      ' + '
        ' + '
      • ' + '
        ' + '

        fake_coffee.coffee

        ' + '
        ' + '
      • ' + '
      • ' + '
        ' + '
        ' + ' ' + '
        ' + '
        ' + '
        ' + '
        ' + '
        code=here;
        ' + '
        ' + '
        ' + '
      • ' + '
      ' + '
      ' + ' ' + ''; + +//# 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 = ' fake_coffee.coffee ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n '
      ' +\n '
      ' +\n ' ' +\n '
        ' +\n '
      • ' +\n '
        ' +\n '

        fake_coffee.coffee

        ' +\n '
        ' +\n '
      • ' +\n '
      • ' +\n '
        ' +\n '
        ' +\n ' ' +\n '
        ' +\n '
        ' +\n '
        ' +\n '
        ' +\n '
        code=here;
        ' +\n '
        ' +\n '
        ' +\n '
      • ' +\n '
      ' +\n '
      ' +\n ' ' +\n ''"]} \ 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 100644 index 00000000..00cee6aa --- /dev/null +++ b/test/unit-tests/fakes/fake-jst.js @@ -0,0 +1,3 @@ +module.exports = ' <%= title %>
      <% if (sources.length > 1) { %> <% } %>
        <% if (!hasTitle) { %>
      • <%= title %>

      • <% } %> <% for (var i=0, l=sections.length; i <% var section = sections[i]; %>
      • <% heading = section.docsHtml.match(/^\s*<(h\d)>/) %>
        <%= section.docsHtml %>
        <% if (section.codeText.replace(/\s/gm, \'\') != \'\') { %>
        <%= section.codeHtml %>
        <% } %>
      • <% } %>
      '; + +//# 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 = '\n \n \n <%= title %>\n \n \n \" />\n \n \n
      \n
      \n <% if (sources.length > 1) { %>\n \n <% } %>\n
        \n <% if (!hasTitle) { %>\n
      • \n
        \n

        <%= title %>

        \n
        \n
      • \n <% } %>\n <% for (var i=0, l=sections.length; i\n <% var section = sections[i]; %>\n
      • \">\n
        \n <% heading = section.docsHtml.match(/^\\s*<(h\\d)>/) %>\n
        \">\n \">¶\n
        \n <%= section.docsHtml %>\n
        \n <% if (section.codeText.replace(/\\s/gm, \\'\\') != \\'\\') { %>\n
        <%= section.codeHtml %>
        \n <% } %>\n
      • \n <% } %>\n
      \n
      \n \n '"]} \ 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 100644 index 00000000..b2c9cb86 --- /dev/null +++ b/test/unit-tests/fakes/fake-linear-jst-flattened-result.js @@ -0,0 +1,3 @@ +module.exports = ' fake_coffee.coffee
      code=here;
      h
      '; + +//# 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 = ' fake_coffee.coffee
      code=here;
      h
      '"]} \ 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 100644 index 00000000..8ca014a7 --- /dev/null +++ b/test/unit-tests/fakes/fake-linear-jst-unflattened-result.js @@ -0,0 +1,3 @@ +module.exports = ' ' + 'fake_coffee.coffee ' + ' ' + ' ' + ' ' + '
      ' + '

      fake_coffee.coffee

      ' + '
      ' + '
      code=here;
      ' + '
      h
      '; + +//# 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 = ' ' +\n 'fake_coffee.coffee ' +\n ' ' +\n ' ' +\n ' ' +\n '
      ' +\n '

      fake_coffee.coffee

      ' +\n '

      Table of Contents

        ' +\n '
      1. README.html
      2. ' +\n '
      3. fake_coffee.html
      4. ' +\n '
      5. fake_litcoffee.html
      6. ' +\n '
      7. fluffybunny1.jpg
      8. ' +\n '
      ' +\n '
      code=here;
      ' +\n '
      h
      '"]} \ 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 100644 index 00000000..8c4e2de9 --- /dev/null +++ b/test/unit-tests/fakes/fake-linear-jst.js @@ -0,0 +1,3 @@ +module.exports = ' <%= title %>
      <% if (hasTitle) { %> <% var section = sections.shift(); %> <%= section.docsHtml %> <% if (!(/^\s*$/).test(section.codeText)) { %> <%= section.codeHtml %> <% } %> <% } else { %>

      <%= title %>

      <% } %> <% if (sources.length > 1) { %>

      Table of Contents

        <% for (var i=0, l = sources.length; i < l; i++) { %> <% var source = sources[i]; %>
      1. <%= path.basename(source) %>
      2. <% } %>
      <% } %>
      <% for (var i = 0, l = sections.length; i <% var section = sections[i]; %> <%= section.docsHtml %> <% if (!(/^\s*$/).test(section.codeText)) { %> <%= section.codeHtml %> <% } %> <% } %>
      h
      '; + +//# 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 = '\n \n \n <%= title %>\n \n \n \" />\n \n \n
      \n
      \n\n
      \n <% if (hasTitle) { %>\n <% var section = sections.shift(); %>\n <%= section.docsHtml %>\n <% if (!(/^\\s*$/).test(section.codeText)) { %>\n <%= section.codeHtml %>\n <% } %>\n <% } else { %>\n

      <%= title %>

      \n <% } %>\n\n <% if (sources.length > 1) { %>\n
      \n

      Table of Contents

      \n
        \n <% for (var i=0, l = sources.length; i < l; i++) { %>\n <% var source = sources[i]; %>\n
      1. \n \">\n <%= path.basename(source) %>\n \n
      2. \n <% } %>\n
      \n
      \n <% } %>\n
      \n\n <% for (var i = 0, l = sections.length; i\n <% var section = sections[i]; %>\n <%= section.docsHtml %>\n <% if (!(/^\\s*$/).test(section.codeText)) { %>\n <%= section.codeHtml %>\n <% } %>\n <% } %>\n
      h
      \n
      \n
      \n \n '"]} \ No newline at end of file diff --git a/test/unit-tests/fakes/informationOnFilesFlattened.js b/test/unit-tests/fakes/informationOnFilesFlattened.js new file mode 100644 index 00000000..7760f01e --- /dev/null +++ b/test/unit-tests/fakes/informationOnFilesFlattened.js @@ -0,0 +1,154 @@ +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": { + "commentFilter": /(^#![\/]|^\s*#\{)/, + "commentMatcher": /^\s*\s?/, + "html": true, + "link": "!", + "linkMatcher": /^!\[(.+)\]\((.+)\)/, + "name": "markdown", + "section": "#", + "sectionMatcher": /^#\s?/, + "symbol": "" + }, + "others": { + "README.html": "README.html", + "fake_coffee.html": "fake_coffee.html", + "fake_litcoffee.html": "fake_litcoffee.html", + "fluffybunny1.jpg": "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": "README.html", + "fake_coffee.html": "fake_coffee.html", + "fake_litcoffee.html": "fake_litcoffee.html", + "fluffybunny1.jpg": "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?/, + "name": "coffeescript", + "symbol": "#" + }, + "others": { + "README.html": "README.html", + "fake_coffee.html": "fake_coffee.html", + "fake_litcoffee.html": "fake_litcoffee.html", + "fluffybunny1.jpg": "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": "README.html", + "fake_coffee.html": "fake_coffee.html", + "fake_litcoffee.html": "fake_litcoffee.html", + "fluffybunny1.jpg": "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..83ffc062 --- /dev/null +++ b/test/unit-tests/fakes/informationOnFilesFlattened.js.map @@ -0,0 +1 @@ +{"version":3,"file":"informationOnFilesFlattened.js","sources":["fakes/informationOnFilesFlattened.litcoffee"],"names":[],"mappings":"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","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 \"commentFilter\": /(^#![\\/]|^\\s*#\\{)/\n \"commentMatcher\": /^\\s*\\s?/\n \"html\": true\n \"link\": \"!\"\n \"linkMatcher\": /^!\\[(.+)\\]\\((.+)\\)/\n \"name\": \"markdown\"\n \"section\": \"#\"\n \"sectionMatcher\": /^#\\s?/\n \"symbol\": \"\"\n }\n \"others\": {\n \"README.html\": \"README.html\"\n \"fake_coffee.html\": \"fake_coffee.html\"\n \"fake_litcoffee.html\": \"fake_litcoffee.html\"\n \"fluffybunny1.jpg\": \"images/fluffybunny1.jpg\"\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\": \"README.html\"\n \"fake_coffee.html\": \"fake_coffee.html\"\n \"fake_litcoffee.html\": \"fake_litcoffee.html\"\n \"fluffybunny1.jpg\": \"images/fluffybunny1.jpg\"\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 \"name\": \"coffeescript\"\n \"symbol\": \"#\"\n }\n \"others\": {\n \"README.html\": \"README.html\"\n \"fake_coffee.html\": \"fake_coffee.html\"\n \"fake_litcoffee.html\": \"fake_litcoffee.html\"\n \"fluffybunny1.jpg\": \"images/fluffybunny1.jpg\"\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\": \"README.html\"\n \"fake_coffee.html\": \"fake_coffee.html\"\n \"fake_litcoffee.html\": \"fake_litcoffee.html\"\n \"fluffybunny1.jpg\": \"images/fluffybunny1.jpg\"\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/informationOnFilesUnFlattened.js b/test/unit-tests/fakes/informationOnFilesUnFlattened.js new file mode 100644 index 00000000..56a0ebbb --- /dev/null +++ b/test/unit-tests/fakes/informationOnFilesUnFlattened.js @@ -0,0 +1,154 @@ +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": { + "commentFilter": /(^#![\/]|^\s*#\{)/, + "commentMatcher": /^\s*\s?/, + "html": true, + "link": "!", + "linkMatcher": /^!\[(.+)\]\((.+)\)/, + "name": "markdown", + "section": "#", + "sectionMatcher": /^#\s?/, + "symbol": "" + }, + "others": { + "README.html": "README.html", + "fake_coffee.html": "src/fake_coffee.html", + "fake_litcoffee.html": "src/lib/fake_litcoffee.html", + "fluffybunny1.jpg": "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": "../README.html", + "fake_coffee.html": "../src/fake_coffee.html", + "fake_litcoffee.html": "../src/lib/fake_litcoffee.html", + "fluffybunny1.jpg": "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?/, + "name": "coffeescript", + "symbol": "#" + }, + "others": { + "README.html": "../README.html", + "fake_coffee.html": "fake_coffee.html", + "fake_litcoffee.html": "lib/fake_litcoffee.html", + "fluffybunny1.jpg": "../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": "../../README.html", + "fake_coffee.html": "../fake_coffee.html", + "fake_litcoffee.html": "fake_litcoffee.html", + "fluffybunny1.jpg": "../../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..b2fd43d4 --- /dev/null +++ b/test/unit-tests/fakes/informationOnFilesUnFlattened.js.map @@ -0,0 +1 @@ +{"version":3,"file":"informationOnFilesUnFlattened.js","sources":["fakes/informationOnFilesUnFlattened.litcoffee"],"names":[],"mappings":"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","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 \"commentFilter\": /(^#![\\/]|^\\s*#\\{)/\n \"commentMatcher\": /^\\s*\\s?/\n \"html\": true\n \"link\": \"!\"\n \"linkMatcher\": /^!\\[(.+)\\]\\((.+)\\)/\n \"name\": \"markdown\"\n \"section\": \"#\"\n \"sectionMatcher\": /^#\\s?/\n \"symbol\": \"\"\n }\n \"others\": {\n \"README.html\": \"README.html\"\n \"fake_coffee.html\": \"src/fake_coffee.html\"\n \"fake_litcoffee.html\": \"src/lib/fake_litcoffee.html\"\n \"fluffybunny1.jpg\": \"images/fluffybunny1.jpg\"\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\": \"../README.html\"\n \"fake_coffee.html\": \"../src/fake_coffee.html\"\n \"fake_litcoffee.html\": \"../src/lib/fake_litcoffee.html\"\n \"fluffybunny1.jpg\": \"fluffybunny1.jpg\"\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 \"name\": \"coffeescript\"\n \"symbol\": \"#\"\n }\n \"others\": {\n \"README.html\": \"../README.html\"\n \"fake_coffee.html\": \"fake_coffee.html\"\n \"fake_litcoffee.html\": \"lib/fake_litcoffee.html\"\n \"fluffybunny1.jpg\": \"../images/fluffybunny1.jpg\"\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\": \"../../README.html\"\n \"fake_coffee.html\": \"../fake_coffee.html\"\n \"fake_litcoffee.html\": \"fake_litcoffee.html\"\n \"fluffybunny1.jpg\": \"../../images/fluffybunny1.jpg\"\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/unit-test-buildMatchers.js b/test/unit-tests/unit-test-buildMatchers.js new file mode 100644 index 00000000..1753a3a0 --- /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, RegExp("^" + l.link + "\\[(.+)\\]\\((.+)\\)")); + } + 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..1d00f564 --- /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,MAAA,CAAA,GAAA,GAAM,CAAC,CAAC,IAAR,GAAa,sBAAb,CAA/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,///^#{l.link}\\[(.+)\\]\\((.+)\\)///)\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-configure.js b/test/unit-tests/unit-test-configure.js new file mode 100644 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-document.js b/test/unit-tests/unit-test-document.js new file mode 100644 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": "

      x=3

      \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":"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","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\": \"

      x=3

      \\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-fixForMatch.js b/test/unit-tests/unit-test-fixForMatch.js new file mode 100644 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-format.js b/test/unit-tests/unit-test-format.js new file mode 100644 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("
      number   = 42\nopposite = true
      "); + sections[0].docsHtml.should.be.equal("

      Assignment:

      \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("
      number = -42 if opposite
      "); + sections[1].docsHtml.should.be.equal("

      Conditions:

      \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("
      square = (x) -> x * x
      "); + sections[2].docsHtml.should.be.equal("

      Functions:

      \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(\"
      number   = 42\\nopposite = true
      \")\n sections[0].docsHtml.should.be.equal(\"

      Assignment:

      \\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(\"
      number = -42 if opposite
      \")\n sections[1].docsHtml.should.be.equal(\"

      Conditions:

      \\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(\"
      square = (x) -> x * x
      \")\n sections[2].docsHtml.should.be.equal(\"

      Functions:

      \\n\")\n\n return\n return\n\n"]} \ No newline at end of file diff --git a/test/unit-tests/unit-test-getCSSPath.js b/test/unit-tests/unit-test-getCSSPath.js new file mode 100644 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-getDestinationInformation.js b/test/unit-tests/unit-test-getDestinationInformation.js new file mode 100644 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":"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","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-getInformationOnFiles.js b/test/unit-tests/unit-test-getInformationOnFiles.js new file mode 100644 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-getLanguage.js b/test/unit-tests/unit-test-getLanguage.js new file mode 100644 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-getOthers.js b/test/unit-tests/unit-test-getOthers.js new file mode 100644 index 00000000..d98403e0 --- /dev/null +++ b/test/unit-tests/unit-test-getOthers.js @@ -0,0 +1,64 @@ +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": "README.html", + "fake_coffee.html": "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": "../README.html", + "fake_coffee.html": "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": "README.html", + "fake_coffee.html": "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', 'src/fake_coffee.coffee'], + flatten: true + }; + others = getOthers('src/fake_coffee.coffee', informationOnFiles, config); + assert.deepEqual(others, { + "README.html": "README.html", + "fake_coffee.html": "fake_coffee.html" + }); + }); +}); + +//# 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..cb399a56 --- /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,aADQ;MAEvB,kBAAA,EAAoB,sBAFG;KAAzB;EAVmE,CAArE;EAgBA,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,gBADQ;MAEvB,kBAAA,EAAoB,kBAFG;KAAzB;EAVsE,CAAxE;EAgBA,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,aADQ;MAEvB,kBAAA,EAAoB,kBAFG;KAAzB;EAViE,CAAnE;EAgBA,EAAA,CAAG,iEAAH,EAAsE,SAAA;AACpE,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,wBAAV,EAAoC,kBAApC,EAAwD,MAAxD;IACT,MAAM,CAAC,SAAP,CAAiB,MAAjB,EAAyB;MACvB,aAAA,EAAe,aADQ;MAEvB,kBAAA,EAAoB,kBAFG;KAAzB;EAVoE,CAAtE;AAlD0B,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\": \"README.html\"\n \"fake_coffee.html\": \"src/fake_coffee.html\"\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\": \"../README.html\"\n \"fake_coffee.html\": \"fake_coffee.html\"\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\": \"README.html\"\n \"fake_coffee.html\": \"fake_coffee.html\"\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 'src/fake_coffee.coffee'\n ]\n flatten: true\n }\n others = getOthers('src/fake_coffee.coffee', informationOnFiles, config)\n assert.deepEqual(others, {\n \"README.html\": \"README.html\"\n \"fake_coffee.html\": \"fake_coffee.html\"\n })\n return\n 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 100644 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-parse.js b/test/unit-tests/unit-test-parse.js new file mode 100644 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-run.js b/test/unit-tests/unit-test-run.js new file mode 100644 index 00000000..ade2c2c5 --- /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": "parallel", + "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('-L, --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..89ff1f89 --- /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":"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","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\": \"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 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('-L, --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-typeIsArray.js b/test/unit-tests/unit-test-typeIsArray.js new file mode 100644 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-write.js b/test/unit-tests/unit-test-write.js new file mode 100644 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": "
      code=here;
      ", + "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": "
      code=here;
      ", + "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\":\"
      code=here;
      \",\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\":\"
      code=here;
      \",\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/utils/fixForMatch.js b/test/unit-tests/utils/fixForMatch.js new file mode 100644 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/typeIsArray.js b/test/unit-tests/utils/typeIsArray.js new file mode 100644 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/typeIsObject.js b/test/unit-tests/utils/typeIsObject.js new file mode 100644 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 From 2a19bc5b89ec53df463e2ca6f069dca71c276091 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 10 Jul 2017 10:47:11 -0700 Subject: [PATCH 66/95] remove print --- docco.js | 141 ++++++++++++++++++++++++------------------------ docco.js.map | 11 +++- docco.litcoffee | 1 - 3 files changed, 82 insertions(+), 71 deletions(-) diff --git a/docco.js b/docco.js index de30c15f..714eb40a 100644 --- a/docco.js +++ b/docco.js @@ -1,92 +1,95 @@ -var Docco, _, commander, configure, defaults, document, format, fs, getInformationOnFiles, glob, highlightjs, languages, marked, parse, path, run, version; +// Generated by CoffeeScript 1.12.6 +(function() { + var Docco, _, commander, configure, defaults, document, format, fs, getInformationOnFiles, glob, highlightjs, languages, marked, parse, path, run, version; -document = require('./src/document'); + document = require('./src/document'); -parse = require('./src/parse'); + parse = require('./src/parse'); -format = require('./src/format'); + format = require('./src/format'); -configure = require('./src/configure'); + configure = require('./src/configure'); -getInformationOnFiles = require('./src/getInformationOnFiles'); + getInformationOnFiles = require('./src/getInformationOnFiles'); -_ = 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'); + path = require('path'); -glob = require('glob'); + glob = require('glob'); -languages = JSON.parse(fs.readFileSync(path.join(__dirname, 'resources', 'languages.json'))); + languages = JSON.parse(fs.readFileSync(path.join(__dirname, 'resources', 'languages.json'))); -version = JSON.parse(fs.readFileSync(path.join(__dirname, 'package.json'))).version; + version = JSON.parse(fs.readFileSync(path.join(__dirname, 'package.json'))).version; -console.log("Version: " + version); + console.log("Version: " + version); -defaults = { - layout: 'parallel', - output: 'docs', - template: null, - css: null, - extension: null, - languages: {}, - marked: null, - setup: '.docco.json', - help: false, - flatten: false -}; + defaults = { + layout: 'parallel', + output: 'docs', + template: null, + css: null, + extension: null, + languages: {}, + marked: null, + setup: '.docco.json', + help: false, + flatten: false + }; -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('-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, languages); - console.log("" + (JSON.stringify(config, null, 2))); - setup = path.resolve(config.setup); - if (fs.existsSync(setup)) { - if (setup) { - config = _.extend(config, JSON.parse(fs.readFileSync(setup))); + run = function(args) { + var config, file, files, globName, i, j, len, len1, ref, setup; + if (args == null) { + args = process.argv; } - } - 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)))); + 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('-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, languages); + setup = path.resolve(config.setup); + if (fs.existsSync(setup)) { + if (setup) { + config = _.extend(config, JSON.parse(fs.readFileSync(setup))); + } } - config.sources = []; - for (j = 0, len1 = files.length; j < len1; j++) { - file = files[j]; - config.sources.push(path.relative(config.root, file)); + 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)))); + } + 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()); } - 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 -}; + }; + + module.exports = Docco = { + run: run, + document: document, + parse: parse, + format: format, + languages: languages, + version: version + }; + +}).call(this); //# sourceMappingURL=docco.js.map diff --git a/docco.js.map b/docco.js.map index 0dc493ad..3055387f 100644 --- a/docco.js.map +++ b/docco.js.map @@ -1 +1,10 @@ -{"version":3,"file":"docco.js","sources":["docco.litcoffee"],"names":[],"mappings":"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","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 console.log(\"Version: \"+version)\n\nDefault configuration **options**. All of these may be extended by\nuser-specified options.\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\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('-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, languages\n\n console.log(\"#{JSON.stringify(config,null,2)}\")\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 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}"]} \ No newline at end of file +{ + "version": 3, + "file": "docco.js", + "sourceRoot": "", + "sources": [ + "docco.litcoffee" + ], + "names": [], + "mappings": ";AA+EI;AAAA,MAAA;;EAAA,QAAA,GAAW,OAAA,CAAQ,gBAAR;;EAOX,KAAA,GAAQ,OAAA,CAAQ,aAAR;;EAMR,MAAA,GAAS,OAAA,CAAQ,cAAR;;EAST,SAAA,GAAY,OAAA,CAAQ,iBAAR;;EAEZ,qBAAA,GAAwB,OAAA,CAAQ,6BAAR;;EAOxB,CAAA,GAAc,OAAA,CAAQ,YAAR;;EACd,EAAA,GAAc,OAAA,CAAQ,UAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EACd,MAAA,GAAc,OAAA,CAAQ,QAAR;;EACd,SAAA,GAAc,OAAA,CAAQ,WAAR;;EACd,WAAA,GAAc,OAAA,CAAQ,cAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EAOd,SAAA,GAAY,IAAI,CAAC,KAAL,CAAW,EAAE,CAAC,YAAH,CAAgB,IAAI,CAAC,IAAL,CAAU,SAAV,EAAqB,WAArB,EAAkC,gBAAlC,CAAhB,CAAX;;EAIZ,OAAA,GAAU,IAAI,CAAC,KAAL,CAAW,EAAE,CAAC,YAAH,CAAgB,IAAI,CAAC,IAAL,CAAU,SAAV,EAAqB,cAArB,CAAhB,CAAX,CAAiE,CAAC;;EAC5E,OAAO,CAAC,GAAR,CAAY,WAAA,GAAY,OAAxB;;EAKA,QAAA,GACE;IAAA,MAAA,EAAY,UAAZ;IACA,MAAA,EAAY,MADZ;IAEA,QAAA,EAAY,IAFZ;IAGA,GAAA,EAAY,IAHZ;IAIA,SAAA,EAAY,IAJZ;IAKA,SAAA,EAAY,EALZ;IAMA,MAAA,EAAY,IANZ;IAOA,KAAA,EAAY,aAPZ;IAQA,IAAA,EAAW,KARX;IASA,OAAA,EAAS,KATT;;;EAiBF,GAAA,GAAM,SAAC,IAAD;AACJ,QAAA;;MADK,OAAO,OAAO,CAAC;;IACpB,MAAA,GAAS;IAET,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,EAA+B,SAA/B;IAET,KAAA,GAAQ,IAAI,CAAC,OAAL,CAAa,MAAM,CAAC,KAApB;IACR,IAAG,EAAE,CAAC,UAAH,CAAc,KAAd,CAAH;MACE,IAA+D,KAA/D;QAAA,MAAA,GAAS,CAAC,CAAC,MAAF,CAAS,MAAT,EAAiB,IAAI,CAAC,KAAL,CAAW,EAAE,CAAC,YAAH,CAAgB,KAAhB,CAAX,CAAjB,EAAT;OADF;;IAGA,MAAM,CAAC,IAAP,GAAc,OAAO,CAAC,GAAR,CAAA;IACd,IAAG,MAAM,CAAC,OAAO,CAAC,MAAf,KAA2B,CAA9B;MACE,KAAA,GAAO;AACP;AAAA,WAAA,qCAAA;;QACE,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;AADV;MAEA,MAAM,CAAC,OAAP,GAAiB;AACjB,WAAA,yCAAA;;QACE,MAAM,CAAC,OAAO,CAAC,IAAf,CAAoB,IAAI,CAAC,QAAL,CAAc,MAAM,CAAC,IAArB,EAA2B,IAA3B,CAApB;AADF;MAGA,MAAM,CAAC,kBAAP,GAA4B,qBAAA,CAAsB,MAAtB;MAE5B,QAAA,CAAS,MAAT,EAVF;KAAA,MAAA;MAYE,OAAO,CAAC,GAAR,CAAY,SAAS,CAAC,eAAV,CAAA,CAAZ,EAZF;;EAxBI;;EA0CN,MAAM,CAAC,OAAP,GAAiB,KAAA,GAAQ;IAAC,KAAA,GAAD;IAAM,UAAA,QAAN;IAAgB,OAAA,KAAhB;IAAuB,QAAA,MAAvB;IAA+B,WAAA,SAA/B;IAA0C,SAAA,OAA1C;;AAnHzB" +} \ No newline at end of file diff --git a/docco.litcoffee b/docco.litcoffee index f10b172c..c30f37f4 100644 --- a/docco.litcoffee +++ b/docco.litcoffee @@ -169,7 +169,6 @@ Parse options using [Commander](https://github.com/visionmedia/commander.js). config = configure commander, defaults, languages - console.log("#{JSON.stringify(config,null,2)}") setup = path.resolve config.setup if fs.existsSync(setup) config = _.extend(config, JSON.parse fs.readFileSync setup) if setup From 076b6acbd883301f2ac8923593dcc84965fc84cb Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 10 Jul 2017 11:10:50 -0700 Subject: [PATCH 67/95] some tests for context. --- docco.js | 6 ++++++ docco.js.map | 2 +- docco.litcoffee | 5 +++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/docco.js b/docco.js index 714eb40a..3ad63228 100644 --- a/docco.js +++ b/docco.js @@ -28,6 +28,12 @@ glob = require('glob'); + console.log("Dirname: " + __dirname); + + console.log("Path to self:" + path.join(path.dirname(fs.realpathSync(__filename)), '../')); + + console.log("Path to parent:" + path.dirname(fs.realpathSync(__filename))); + languages = JSON.parse(fs.readFileSync(path.join(__dirname, 'resources', 'languages.json'))); version = JSON.parse(fs.readFileSync(path.join(__dirname, 'package.json'))).version; diff --git a/docco.js.map b/docco.js.map index 3055387f..3bb6a37f 100644 --- a/docco.js.map +++ b/docco.js.map @@ -6,5 +6,5 @@ "docco.litcoffee" ], "names": [], - "mappings": "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" + "mappings": "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" } \ No newline at end of file diff --git a/docco.litcoffee b/docco.litcoffee index c30f37f4..21bf1ff9 100644 --- a/docco.litcoffee +++ b/docco.litcoffee @@ -122,6 +122,11 @@ Each item maps the file extension to the name of the language and the `symbol` that indicates a line comment. To add support for a new programming language to Docco, just add it to the file. + console.log("Dirname: "+__dirname) + + console.log("Path to self:"+path.join(path.dirname(fs.realpathSync(__filename)), '../')) + console.log("Path to parent:"+path.dirname(fs.realpathSync(__filename))) + languages = JSON.parse fs.readFileSync(path.join(__dirname, 'resources', 'languages.json')) Keep it DRY. Extract the docco **version** from `package.json` From cfffe129b383ae9a3c0ecb4781e86081faaad3a2 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 10 Jul 2017 13:08:21 -0700 Subject: [PATCH 68/95] if language not supported, then set some default for the symbol --- resources/languages.json | 1 + src/getInformationOnFiles.js | 7 ++++++- src/getInformationOnFiles.js.map | 11 ++++++++++- src/getInformationOnFiles.litcoffee | 2 ++ 4 files changed, 19 insertions(+), 2 deletions(-) diff --git a/resources/languages.json b/resources/languages.json index 6f62d087..ad9fe849 100644 --- a/resources/languages.json +++ b/resources/languages.json @@ -16,6 +16,7 @@ ".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": "!"}, diff --git a/src/getInformationOnFiles.js b/src/getInformationOnFiles.js index 8298af37..2f629d87 100644 --- a/src/getInformationOnFiles.js +++ b/src/getInformationOnFiles.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.12.6 +// Generated by CoffeeScript 2.0.0-beta3 (function() { var _, commander, fs, getCSSPath, getDestinationInformation, getInformationOnFiles, getLanguage, getOthers, getRelativePath, getSourceInformation, glob, highlightjs, marked, path; @@ -40,6 +40,9 @@ 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); @@ -58,3 +61,5 @@ }; }).call(this); + +//# sourceMappingURL=getInformationOnFiles.js.map diff --git a/src/getInformationOnFiles.js.map b/src/getInformationOnFiles.js.map index 3683500d..c8830f9b 100644 --- a/src/getInformationOnFiles.js.map +++ b/src/getInformationOnFiles.js.map @@ -1 +1,10 @@ -{"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;IAIX,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;AAnBtC;AAuBA;AAAA,OAAA,wCAAA;;IACE,kBAAmB,CAAA,IAAA,CAAK,CAAC,MAAzB,GAAkC,SAAA,CAAU,IAAV,EAAgB,kBAAhB,EAAoC,MAApC;AADpC;AAGA,SAAO;AArCgC","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\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 informationOnFiles[file].others = getOthers(file, informationOnFiles, config)\n\n return informationOnFiles\n"]} \ No newline at end of file +{ + "version": 3, + "file": "getInformationOnFiles.js", + "sourceRoot": "", + "sources": [ + "getInformationOnFiles.litcoffee" + ], + "names": [], + "mappings": ";AAAI;AAAA,MAAA;;EAAA,CAAA,GAAc,OAAA,CAAQ,YAAR;;EACd,EAAA,GAAc,OAAA,CAAQ,UAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EACd,MAAA,GAAc,OAAA,CAAQ,QAAR;;EACd,SAAA,GAAc,OAAA,CAAQ,WAAR;;EACd,WAAA,GAAc,OAAA,CAAQ,cAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EAEd,oBAAA,GAAuB,OAAA,CAAQ,wBAAR;;EAEvB,yBAAA,GAA4B,OAAA,CAAQ,6BAAR;;EAE5B,eAAA,GAAkB,OAAA,CAAQ,mBAAR;;EAElB,UAAA,GAAa,OAAA,CAAQ,cAAR;;EAEb,SAAA,GAAY,OAAA,CAAQ,aAAR;;EAEZ,WAAA,GAAc,OAAA,CAAQ,eAAR;;EAEd,MAAM,CAAC,OAAP,GAAiB,qBAAA,GAAwB,QAAA,CAAC,MAAD,CAAA;AACvC,QAAA;IAAA,eAAA,GAAkB,MAAM,CAAC;IACzB,eAAA,GAAkB,MAAM,CAAC;IACzB,aAAA,GAAgB,MAAM,CAAC;IAOvB,kBAAA,GAAqB,CAAA;AACrB;AAAA,SAAA,qCAAA;;MACE,QAAA,GAAW,WAAA,CAAY,IAAZ,EAAkB,MAAM,CAAC,SAAzB,EAAoC,MAAM,CAAC,SAA3C;MACX,IAAI,gBAAJ;QACE,QAAA,GAAW,WAAA,CAAY,eAAZ,EAA6B,MAAM,CAAC,SAApC,EADb;;MAKA,MAAA,GAAS,oBAAA,CAAqB,IAArB,EAA2B,aAA3B,EAA0C,MAAM,CAAC,OAAjD;MAIT,YAAA,GAAe,CAAA;MACf,WAAA,GAAc,yBAAA,CAA0B,QAA1B,EAAoC,MAApC,EAA4C,aAA5C,EAA2D,eAA3D,EAA4E,MAAM,CAAC,OAAnF;MAId,WAAW,CAAC,GAAZ,GAAkB,UAAA,CAAW,MAAM,CAAC,GAAlB,EAAuB,eAAvB,EAAwC,WAAW,CAAC,IAApD;MAElB,kBAAmB,CAAA,IAAA,CAAnB,GAA2B,CAAA;MAC3B,kBAAmB,CAAA,IAAA,CAAK,CAAC,WAAzB,GAAuC;MACvC,kBAAmB,CAAA,IAAA,CAAK,CAAC,MAAzB,GAAkC;MAClC,kBAAmB,CAAA,IAAA,CAAK,CAAC,QAAzB,GAAoC;AArBtC;AAyBA;AAAA,SAAA,wCAAA;;MACE,kBAAmB,CAAA,IAAA,CAAK,CAAC,MAAzB,GAAkC,SAAA,CAAU,IAAV,EAAgB,kBAAhB,EAAoC,MAApC;AADpC;AAGA,WAAO;EAvCgC;AArBzC" +} \ No newline at end of file diff --git a/src/getInformationOnFiles.litcoffee b/src/getInformationOnFiles.litcoffee index 53411452..4c23da5d 100644 --- a/src/getInformationOnFiles.litcoffee +++ b/src/getInformationOnFiles.litcoffee @@ -32,6 +32,8 @@ 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: From 6209c99c81a14a544ab000ea878cfb095526eb49 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 10 Jul 2017 13:13:59 -0700 Subject: [PATCH 69/95] some error checking. --- docco.js | 5 ++++- docco.js.map | 2 +- docco.litcoffee | 3 ++- src/getInformationOnFiles.js | 3 +++ src/getInformationOnFiles.js.map | 2 +- src/getInformationOnFiles.litcoffee | 4 ++++ 6 files changed, 15 insertions(+), 4 deletions(-) diff --git a/docco.js b/docco.js index 3ad63228..489ef267 100644 --- a/docco.js +++ b/docco.js @@ -68,6 +68,7 @@ } } config.root = process.cwd(); + console.log("Files to process: " + config.sources.length); if (config.sources.length !== 0) { files = []; ref = config.sources; @@ -75,7 +76,9 @@ globName = ref[i]; files = _.flatten(_.union(files, glob.sync(path.resolve(config.root, globName)))); } - config.sources = []; + if (config.sources == null) { + config.sources = []; + } for (j = 0, len1 = files.length; j < len1; j++) { file = files[j]; config.sources.push(path.relative(config.root, file)); diff --git a/docco.js.map b/docco.js.map index 3bb6a37f..648f328f 100644 --- a/docco.js.map +++ b/docco.js.map @@ -6,5 +6,5 @@ "docco.litcoffee" ], "names": [], - "mappings": "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" + "mappings": "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" } \ No newline at end of file diff --git a/docco.litcoffee b/docco.litcoffee index 21bf1ff9..f0f245a3 100644 --- a/docco.litcoffee +++ b/docco.litcoffee @@ -179,11 +179,12 @@ Parse options using [Commander](https://github.com/visionmedia/commander.js). config = _.extend(config, JSON.parse fs.readFileSync setup) if setup config.root = process.cwd() + console.log("Files to process: "+config.sources.length) if config.sources.length isnt 0 files =[] for globName in config.sources files = _.flatten _.union files, glob.sync path.resolve config.root, globName - config.sources = [] + config.sources = [] if !config.sources? for file in files config.sources.push path.relative(config.root, file) diff --git a/src/getInformationOnFiles.js b/src/getInformationOnFiles.js index 2f629d87..b296d1d4 100644 --- a/src/getInformationOnFiles.js +++ b/src/getInformationOnFiles.js @@ -35,14 +35,17 @@ targetDirectory = config.output; sourceDirectory = config.root; rootDirectory = config.root; + console.log("Looking through files: " + config.sources.length); informationOnFiles = {}; ref = config.sources; for (i = 0, len = ref.length; i < len; i++) { file = ref[i]; + console.log("File: " + file); language = getLanguage(file, config.languages, config.extension); if (language == null) { language = getLanguage('not-supported', config.languages); } + console.log("language:" + JSON.stringify(language)); source = getSourceInformation(file, rootDirectory, config.flatten); destinations = {}; destination = getDestinationInformation(language, source, rootDirectory, targetDirectory, config.flatten); diff --git a/src/getInformationOnFiles.js.map b/src/getInformationOnFiles.js.map index c8830f9b..7e63eab8 100644 --- a/src/getInformationOnFiles.js.map +++ b/src/getInformationOnFiles.js.map @@ -6,5 +6,5 @@ "getInformationOnFiles.litcoffee" ], "names": [], - "mappings": ";AAAI;AAAA,MAAA;;EAAA,CAAA,GAAc,OAAA,CAAQ,YAAR;;EACd,EAAA,GAAc,OAAA,CAAQ,UAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EACd,MAAA,GAAc,OAAA,CAAQ,QAAR;;EACd,SAAA,GAAc,OAAA,CAAQ,WAAR;;EACd,WAAA,GAAc,OAAA,CAAQ,cAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EAEd,oBAAA,GAAuB,OAAA,CAAQ,wBAAR;;EAEvB,yBAAA,GAA4B,OAAA,CAAQ,6BAAR;;EAE5B,eAAA,GAAkB,OAAA,CAAQ,mBAAR;;EAElB,UAAA,GAAa,OAAA,CAAQ,cAAR;;EAEb,SAAA,GAAY,OAAA,CAAQ,aAAR;;EAEZ,WAAA,GAAc,OAAA,CAAQ,eAAR;;EAEd,MAAM,CAAC,OAAP,GAAiB,qBAAA,GAAwB,QAAA,CAAC,MAAD,CAAA;AACvC,QAAA;IAAA,eAAA,GAAkB,MAAM,CAAC;IACzB,eAAA,GAAkB,MAAM,CAAC;IACzB,aAAA,GAAgB,MAAM,CAAC;IAOvB,kBAAA,GAAqB,CAAA;AACrB;AAAA,SAAA,qCAAA;;MACE,QAAA,GAAW,WAAA,CAAY,IAAZ,EAAkB,MAAM,CAAC,SAAzB,EAAoC,MAAM,CAAC,SAA3C;MACX,IAAI,gBAAJ;QACE,QAAA,GAAW,WAAA,CAAY,eAAZ,EAA6B,MAAM,CAAC,SAApC,EADb;;MAKA,MAAA,GAAS,oBAAA,CAAqB,IAArB,EAA2B,aAA3B,EAA0C,MAAM,CAAC,OAAjD;MAIT,YAAA,GAAe,CAAA;MACf,WAAA,GAAc,yBAAA,CAA0B,QAA1B,EAAoC,MAApC,EAA4C,aAA5C,EAA2D,eAA3D,EAA4E,MAAM,CAAC,OAAnF;MAId,WAAW,CAAC,GAAZ,GAAkB,UAAA,CAAW,MAAM,CAAC,GAAlB,EAAuB,eAAvB,EAAwC,WAAW,CAAC,IAApD;MAElB,kBAAmB,CAAA,IAAA,CAAnB,GAA2B,CAAA;MAC3B,kBAAmB,CAAA,IAAA,CAAK,CAAC,WAAzB,GAAuC;MACvC,kBAAmB,CAAA,IAAA,CAAK,CAAC,MAAzB,GAAkC;MAClC,kBAAmB,CAAA,IAAA,CAAK,CAAC,QAAzB,GAAoC;AArBtC;AAyBA;AAAA,SAAA,wCAAA;;MACE,kBAAmB,CAAA,IAAA,CAAK,CAAC,MAAzB,GAAkC,SAAA,CAAU,IAAV,EAAgB,kBAAhB,EAAoC,MAApC;AADpC;AAGA,WAAO;EAvCgC;AArBzC" + "mappings": ";AAAI;AAAA,MAAA;;EAAA,CAAA,GAAc,OAAA,CAAQ,YAAR;;EACd,EAAA,GAAc,OAAA,CAAQ,UAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EACd,MAAA,GAAc,OAAA,CAAQ,QAAR;;EACd,SAAA,GAAc,OAAA,CAAQ,WAAR;;EACd,WAAA,GAAc,OAAA,CAAQ,cAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EAEd,oBAAA,GAAuB,OAAA,CAAQ,wBAAR;;EAEvB,yBAAA,GAA4B,OAAA,CAAQ,6BAAR;;EAE5B,eAAA,GAAkB,OAAA,CAAQ,mBAAR;;EAElB,UAAA,GAAa,OAAA,CAAQ,cAAR;;EAEb,SAAA,GAAY,OAAA,CAAQ,aAAR;;EAEZ,WAAA,GAAc,OAAA,CAAQ,eAAR;;EAEd,MAAM,CAAC,OAAP,GAAiB,qBAAA,GAAwB,QAAA,CAAC,MAAD,CAAA;AACvC,QAAA;IAAA,eAAA,GAAkB,MAAM,CAAC;IACzB,eAAA,GAAkB,MAAM,CAAC;IACzB,aAAA,GAAgB,MAAM,CAAC;IAOvB,OAAO,CAAC,GAAR,CAAY,yBAAA,GAA0B,MAAM,CAAC,OAAO,CAAC,MAArD;IACA,kBAAA,GAAqB,CAAA;AACrB;AAAA,SAAA,qCAAA;;MACE,OAAO,CAAC,GAAR,CAAY,QAAA,GAAS,IAArB;MACA,QAAA,GAAW,WAAA,CAAY,IAAZ,EAAkB,MAAM,CAAC,SAAzB,EAAoC,MAAM,CAAC,SAA3C;MACX,IAAI,gBAAJ;QACE,QAAA,GAAW,WAAA,CAAY,eAAZ,EAA6B,MAAM,CAAC,SAApC,EADb;;MAGA,OAAO,CAAC,GAAR,CAAY,WAAA,GAAY,IAAI,CAAC,SAAL,CAAe,QAAf,CAAxB;MAIA,MAAA,GAAS,oBAAA,CAAqB,IAArB,EAA2B,aAA3B,EAA0C,MAAM,CAAC,OAAjD;MAIT,YAAA,GAAe,CAAA;MACf,WAAA,GAAc,yBAAA,CAA0B,QAA1B,EAAoC,MAApC,EAA4C,aAA5C,EAA2D,eAA3D,EAA4E,MAAM,CAAC,OAAnF;MAId,WAAW,CAAC,GAAZ,GAAkB,UAAA,CAAW,MAAM,CAAC,GAAlB,EAAuB,eAAvB,EAAwC,WAAW,CAAC,IAApD;MAElB,kBAAmB,CAAA,IAAA,CAAnB,GAA2B,CAAA;MAC3B,kBAAmB,CAAA,IAAA,CAAK,CAAC,WAAzB,GAAuC;MACvC,kBAAmB,CAAA,IAAA,CAAK,CAAC,MAAzB,GAAkC;MAClC,kBAAmB,CAAA,IAAA,CAAK,CAAC,QAAzB,GAAoC;AAxBtC;AA4BA;AAAA,SAAA,wCAAA;;MACE,kBAAmB,CAAA,IAAA,CAAK,CAAC,MAAzB,GAAkC,SAAA,CAAU,IAAV,EAAgB,kBAAhB,EAAoC,MAApC;AADpC;AAGA,WAAO;EA3CgC;AArBzC" } \ No newline at end of file diff --git a/src/getInformationOnFiles.litcoffee b/src/getInformationOnFiles.litcoffee index 4c23da5d..4d287c39 100644 --- a/src/getInformationOnFiles.litcoffee +++ b/src/getInformationOnFiles.litcoffee @@ -29,12 +29,16 @@ 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. + console.log("Looking through files: "+config.sources.length) informationOnFiles = {} for file in config.sources + console.log("File: "+file) language = getLanguage file, config.languages, config.extension if !language? language = getLanguage 'not-supported', config.languages + console.log("language:"+JSON.stringify(language)) + First the source name: source = getSourceInformation(file, rootDirectory, config.flatten) From 72e820b43a7148740f897f474ca8e1b43733537a Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 10 Jul 2017 13:31:15 -0700 Subject: [PATCH 70/95] mixed glob and file specs issue fixed. --- docco.js | 8 ++++---- docco.js.map | 2 +- docco.litcoffee | 6 ++++-- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/docco.js b/docco.js index 489ef267..8509bba9 100644 --- a/docco.js +++ b/docco.js @@ -68,17 +68,17 @@ } } config.root = process.cwd(); - console.log("Files to process: " + config.sources.length); 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); + } } - if (config.sources == null) { - config.sources = []; - } + config.sources = []; for (j = 0, len1 = files.length; j < len1; j++) { file = files[j]; config.sources.push(path.relative(config.root, file)); diff --git a/docco.js.map b/docco.js.map index 648f328f..77bc85df 100644 --- a/docco.js.map +++ b/docco.js.map @@ -6,5 +6,5 @@ "docco.litcoffee" ], "names": [], - "mappings": "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" + "mappings": "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" } \ No newline at end of file diff --git a/docco.litcoffee b/docco.litcoffee index f0f245a3..71fd3d9e 100644 --- a/docco.litcoffee +++ b/docco.litcoffee @@ -179,12 +179,14 @@ Parse options using [Commander](https://github.com/visionmedia/commander.js). config = _.extend(config, JSON.parse fs.readFileSync setup) if setup config.root = process.cwd() - console.log("Files to process: "+config.sources.length) if config.sources.length isnt 0 files =[] for globName in config.sources files = _.flatten _.union files, glob.sync path.resolve config.root, globName - config.sources = [] if !config.sources? + 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) From a94a57ed78d59ca181e2f8fd10c44830ac6beae8 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 10 Jul 2017 13:57:41 -0700 Subject: [PATCH 71/95] fix of image links, added tag possibility to markdown file, added {style} to markdown images. --- docco.js | 150 ++++++++++++------------- docco.js.map | 11 +- src/buildMatchers.js | 34 +++--- src/configure.js | 76 ++++++------- src/document.js | 168 ++++++++++++++-------------- src/format.js | 84 +++++++------- src/getCSSPath.js | 26 ++--- src/getDestinationInformation.js | 62 +++++----- src/getInformationOnFiles.js | 2 - src/getInformationOnFiles.js.map | 2 +- src/getInformationOnFiles.litcoffee | 3 - src/getLanguage.js | 36 +++--- src/getOthers.js | 38 +++---- src/getRelativePath.js | 30 +++-- src/getSourceInformation.js | 36 +++--- src/parse.js | 29 +++-- src/parse.js.map | 11 +- src/parse.litcoffee | 11 +- test/sim/README.md | 5 +- 19 files changed, 400 insertions(+), 414 deletions(-) diff --git a/docco.js b/docco.js index 8509bba9..ee81b30c 100644 --- a/docco.js +++ b/docco.js @@ -1,104 +1,100 @@ -// Generated by CoffeeScript 1.12.6 -(function() { - var Docco, _, commander, configure, defaults, document, format, fs, getInformationOnFiles, glob, highlightjs, languages, marked, parse, path, run, version; +var Docco, _, commander, configure, defaults, document, format, fs, getInformationOnFiles, glob, highlightjs, languages, marked, parse, path, run, version; - document = require('./src/document'); +document = require('./src/document'); - parse = require('./src/parse'); +parse = require('./src/parse'); - format = require('./src/format'); +format = require('./src/format'); - configure = require('./src/configure'); +configure = require('./src/configure'); - getInformationOnFiles = require('./src/getInformationOnFiles'); +getInformationOnFiles = require('./src/getInformationOnFiles'); - _ = 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'); +path = require('path'); - glob = require('glob'); +glob = require('glob'); - console.log("Dirname: " + __dirname); +console.log("Dirname: " + __dirname); - console.log("Path to self:" + path.join(path.dirname(fs.realpathSync(__filename)), '../')); +console.log("Path to self:" + path.join(path.dirname(fs.realpathSync(__filename)), '../')); - console.log("Path to parent:" + path.dirname(fs.realpathSync(__filename))); +console.log("Path to parent:" + path.dirname(fs.realpathSync(__filename))); - languages = JSON.parse(fs.readFileSync(path.join(__dirname, 'resources', 'languages.json'))); +languages = JSON.parse(fs.readFileSync(path.join(__dirname, 'resources', 'languages.json'))); - version = JSON.parse(fs.readFileSync(path.join(__dirname, 'package.json'))).version; +version = JSON.parse(fs.readFileSync(path.join(__dirname, 'package.json'))).version; - console.log("Version: " + version); +console.log("Version: " + version); - defaults = { - layout: 'parallel', - output: 'docs', - template: null, - css: null, - extension: null, - languages: {}, - marked: null, - setup: '.docco.json', - help: false, - flatten: false - }; +defaults = { + layout: 'parallel', + output: 'docs', + template: null, + css: null, + extension: null, + languages: {}, + marked: null, + setup: '.docco.json', + help: false, + flatten: false +}; - run = function(args) { - var config, file, files, globName, i, j, len, len1, ref, setup; - 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('-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, languages); + setup = path.resolve(config.setup); + if (fs.existsSync(setup)) { + if (setup) { + config = _.extend(config, JSON.parse(fs.readFileSync(setup))); } - 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('-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, languages); - setup = path.resolve(config.setup); - if (fs.existsSync(setup)) { - if (setup) { - config = _.extend(config, JSON.parse(fs.readFileSync(setup))); + } + 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); } } - 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); - } - } - 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()); + config.sources = []; + for (j = 0, len1 = files.length; j < len1; j++) { + file = files[j]; + config.sources.push(path.relative(config.root, file)); } - }; - - module.exports = Docco = { - run: run, - document: document, - parse: parse, - format: format, - languages: languages, - version: version - }; - -}).call(this); + 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 index 77bc85df..89a5800a 100644 --- a/docco.js.map +++ b/docco.js.map @@ -1,10 +1 @@ -{ - "version": 3, - "file": "docco.js", - "sourceRoot": "", - "sources": [ - "docco.litcoffee" - ], - "names": [], - "mappings": "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" -} \ No newline at end of file +{"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,OAAO,CAAC,GAAR,CAAY,WAAA,GAAY,SAAxB;;AAEA,OAAO,CAAC,GAAR,CAAY,eAAA,GAAgB,IAAI,CAAC,IAAL,CAAU,IAAI,CAAC,OAAL,CAAa,EAAE,CAAC,YAAH,CAAgB,UAAhB,CAAb,CAAV,EAAqD,KAArD,CAA5B;;AACA,OAAO,CAAC,GAAR,CAAY,iBAAA,GAAkB,IAAI,CAAC,OAAL,CAAa,EAAE,CAAC,YAAH,CAAgB,UAAhB,CAAb,CAA9B;;AAEA,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;;AAC5E,OAAO,CAAC,GAAR,CAAY,WAAA,GAAY,OAAxB;;AAKA,QAAA,GACE;EAAA,MAAA,EAAY,UAAZ;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 console.log(\"Dirname: \"+__dirname)\n\n console.log(\"Path to self:\"+path.join(path.dirname(fs.realpathSync(__filename)), '../'))\n console.log(\"Path to parent:\"+path.dirname(fs.realpathSync(__filename)))\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 console.log(\"Version: \"+version)\n\nDefault configuration **options**. All of these may be extended by\nuser-specified options.\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\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('-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, 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}"]} \ No newline at end of file diff --git a/src/buildMatchers.js b/src/buildMatchers.js index fd53ded9..10bf4f32 100644 --- a/src/buildMatchers.js +++ b/src/buildMatchers.js @@ -1,21 +1,19 @@ -// Generated by CoffeeScript 1.12.6 -(function() { - var buildMatchers; +var buildMatchers; - module.exports = buildMatchers = function(languages) { - var ext, l; - for (ext in languages) { - l = languages[ext]; - l.commentMatcher = RegExp("^\\s*" + l.symbol + "\\s?"); - l.commentFilter = /(^#![\/]|^\s*#\{)/; - if (l.link) { - l.linkMatcher = RegExp("^" + l.link + "\\[(.+)\\]\\((.+)\\)"); - } - if (l.section) { - l.sectionMatcher = RegExp("^" + l.section + "\\s?"); - } +module.exports = buildMatchers = function(languages) { + var ext, l; + for (ext in languages) { + l = languages[ext]; + l.commentMatcher = RegExp("^\\s*" + l.symbol + "\\s?"); + l.commentFilter = /(^#![\/]|^\s*#\{)/; + if (l.link) { + l.linkMatcher = RegExp("^" + l.link + "\\[(.+)\\]\\((.+)\\)"); } - return languages; - }; + if (l.section) { + l.sectionMatcher = RegExp("^" + l.section + "\\s?"); + } + } + return languages; +}; -}).call(this); +//# sourceMappingURL=buildMatchers.js.map diff --git a/src/configure.js b/src/configure.js index 1659dd83..6b3ce94f 100644 --- a/src/configure.js +++ b/src/configure.js @@ -1,48 +1,46 @@ -// Generated by CoffeeScript 1.12.6 -(function() { - var _, buildMatchers, configure, fs, getLanguage, path, - slice = [].slice; +var _, buildMatchers, configure, fs, getLanguage, path, + slice = [].slice; - _ = require('underscore'); +_ = require('underscore'); - fs = require('fs-extra'); +fs = require('fs-extra'); - path = require('path'); +path = require('path'); - getLanguage = require('./getLanguage'); +getLanguage = require('./getLanguage'); - buildMatchers = require('./buildMatchers'); +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'); +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.template = _.template(fs.readFileSync(config.template).toString()); - if (options.marked) { - config.marked = JSON.parse(fs.readFileSync(options.marked)); + 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.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; - }; + 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; +}; -}).call(this); +//# sourceMappingURL=configure.js.map diff --git a/src/document.js b/src/document.js index 15a46cfe..c0e40727 100644 --- a/src/document.js +++ b/src/document.js @@ -1,108 +1,106 @@ -// Generated by CoffeeScript 1.12.6 -(function() { - var _, commander, document, format, fs, getLanguage, glob, highlightjs, marked, parse, path, write; +var _, commander, document, format, fs, getLanguage, glob, highlightjs, marked, parse, path, write; - _ = 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'); +path = require('path'); - glob = require('glob'); +glob = require('glob'); - getLanguage = require('./getLanguage'); +getLanguage = require('./getLanguage'); - parse = require('./parse'); +parse = require('./parse'); - format = require('./format'); +format = require('./format'); - write = require('./write'); +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) { +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) { - throw error; + return callback(error); } - }); - copyAsset = function(file, callback) { - if (!fs.existsSync(file)) { - return callback(); + if (fs.existsSync(config["public"])) { + return copyAsset(config["public"], callback); } - return fs.copy(file, path.join(config.output, path.basename(file)), callback); - }; - complete = function() { - return copyAsset(config.css, function(error) { + 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 (fs.existsSync(config["public"])) { - return copyAsset(config["public"], callback); + if (files.length) { + return nextFile(); + } else { + return complete(); } - 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(); - }); - }; + } 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; +module.exports = document; -}).call(this); +//# sourceMappingURL=document.js.map diff --git a/src/format.js b/src/format.js index 5ed7946b..8f3c9860 100644 --- a/src/format.js +++ b/src/format.js @@ -1,56 +1,54 @@ -// Generated by CoffeeScript 1.12.6 -(function() { - var _, commander, format, fs, glob, highlightjs, marked, path; +var _, commander, format, fs, glob, highlightjs, marked, path; - _ = 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'); +path = require('path'); - glob = require('glob'); +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; +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 { - code = highlightjs.highlight(language.name, section.codeText).value; - code = code.replace(/\s+$/, ''); - section.codeHtml = "
      " + code + "
      "; + console.warn("docco: couldn't highlight code block with unknown language '" + lang + "' in " + source); + return code; } - results.push(section.docsHtml = marked(section.docsText)); } - return results; - }; + }); + 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 = "
      " + code + "
      "; + } + results.push(section.docsHtml = marked(section.docsText)); + } + return results; +}; -}).call(this); +//# sourceMappingURL=format.js.map diff --git a/src/getCSSPath.js b/src/getCSSPath.js index 2d5c68fe..4bf32d61 100644 --- a/src/getCSSPath.js +++ b/src/getCSSPath.js @@ -1,18 +1,16 @@ -// Generated by CoffeeScript 1.12.6 -(function() { - var getCSSPath, path; +var getCSSPath, path; - path = require('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; - }; +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; +module.exports = getCSSPath; -}).call(this); +//# sourceMappingURL=getCSSPath.js.map diff --git a/src/getDestinationInformation.js b/src/getDestinationInformation.js index b30d9c78..eb2d652a 100644 --- a/src/getDestinationInformation.js +++ b/src/getDestinationInformation.js @@ -1,36 +1,34 @@ -// Generated by CoffeeScript 1.12.6 -(function() { - var getDestinationInformation, path; +var getDestinationInformation, path; - path = require('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; - }; +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; +module.exports = getDestinationInformation; -}).call(this); +//# sourceMappingURL=getDestinationInformation.js.map diff --git a/src/getInformationOnFiles.js b/src/getInformationOnFiles.js index b296d1d4..a69e8ddf 100644 --- a/src/getInformationOnFiles.js +++ b/src/getInformationOnFiles.js @@ -35,7 +35,6 @@ targetDirectory = config.output; sourceDirectory = config.root; rootDirectory = config.root; - console.log("Looking through files: " + config.sources.length); informationOnFiles = {}; ref = config.sources; for (i = 0, len = ref.length; i < len; i++) { @@ -45,7 +44,6 @@ if (language == null) { language = getLanguage('not-supported', config.languages); } - console.log("language:" + JSON.stringify(language)); source = getSourceInformation(file, rootDirectory, config.flatten); destinations = {}; destination = getDestinationInformation(language, source, rootDirectory, targetDirectory, config.flatten); diff --git a/src/getInformationOnFiles.js.map b/src/getInformationOnFiles.js.map index 7e63eab8..6d5f4d60 100644 --- a/src/getInformationOnFiles.js.map +++ b/src/getInformationOnFiles.js.map @@ -6,5 +6,5 @@ "getInformationOnFiles.litcoffee" ], "names": [], - "mappings": ";AAAI;AAAA,MAAA;;EAAA,CAAA,GAAc,OAAA,CAAQ,YAAR;;EACd,EAAA,GAAc,OAAA,CAAQ,UAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EACd,MAAA,GAAc,OAAA,CAAQ,QAAR;;EACd,SAAA,GAAc,OAAA,CAAQ,WAAR;;EACd,WAAA,GAAc,OAAA,CAAQ,cAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EAEd,oBAAA,GAAuB,OAAA,CAAQ,wBAAR;;EAEvB,yBAAA,GAA4B,OAAA,CAAQ,6BAAR;;EAE5B,eAAA,GAAkB,OAAA,CAAQ,mBAAR;;EAElB,UAAA,GAAa,OAAA,CAAQ,cAAR;;EAEb,SAAA,GAAY,OAAA,CAAQ,aAAR;;EAEZ,WAAA,GAAc,OAAA,CAAQ,eAAR;;EAEd,MAAM,CAAC,OAAP,GAAiB,qBAAA,GAAwB,QAAA,CAAC,MAAD,CAAA;AACvC,QAAA;IAAA,eAAA,GAAkB,MAAM,CAAC;IACzB,eAAA,GAAkB,MAAM,CAAC;IACzB,aAAA,GAAgB,MAAM,CAAC;IAOvB,OAAO,CAAC,GAAR,CAAY,yBAAA,GAA0B,MAAM,CAAC,OAAO,CAAC,MAArD;IACA,kBAAA,GAAqB,CAAA;AACrB;AAAA,SAAA,qCAAA;;MACE,OAAO,CAAC,GAAR,CAAY,QAAA,GAAS,IAArB;MACA,QAAA,GAAW,WAAA,CAAY,IAAZ,EAAkB,MAAM,CAAC,SAAzB,EAAoC,MAAM,CAAC,SAA3C;MACX,IAAI,gBAAJ;QACE,QAAA,GAAW,WAAA,CAAY,eAAZ,EAA6B,MAAM,CAAC,SAApC,EADb;;MAGA,OAAO,CAAC,GAAR,CAAY,WAAA,GAAY,IAAI,CAAC,SAAL,CAAe,QAAf,CAAxB;MAIA,MAAA,GAAS,oBAAA,CAAqB,IAArB,EAA2B,aAA3B,EAA0C,MAAM,CAAC,OAAjD;MAIT,YAAA,GAAe,CAAA;MACf,WAAA,GAAc,yBAAA,CAA0B,QAA1B,EAAoC,MAApC,EAA4C,aAA5C,EAA2D,eAA3D,EAA4E,MAAM,CAAC,OAAnF;MAId,WAAW,CAAC,GAAZ,GAAkB,UAAA,CAAW,MAAM,CAAC,GAAlB,EAAuB,eAAvB,EAAwC,WAAW,CAAC,IAApD;MAElB,kBAAmB,CAAA,IAAA,CAAnB,GAA2B,CAAA;MAC3B,kBAAmB,CAAA,IAAA,CAAK,CAAC,WAAzB,GAAuC;MACvC,kBAAmB,CAAA,IAAA,CAAK,CAAC,MAAzB,GAAkC;MAClC,kBAAmB,CAAA,IAAA,CAAK,CAAC,QAAzB,GAAoC;AAxBtC;AA4BA;AAAA,SAAA,wCAAA;;MACE,kBAAmB,CAAA,IAAA,CAAK,CAAC,MAAzB,GAAkC,SAAA,CAAU,IAAV,EAAgB,kBAAhB,EAAoC,MAApC;AADpC;AAGA,WAAO;EA3CgC;AArBzC" + "mappings": ";AAAI;AAAA,MAAA;;EAAA,CAAA,GAAc,OAAA,CAAQ,YAAR;;EACd,EAAA,GAAc,OAAA,CAAQ,UAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EACd,MAAA,GAAc,OAAA,CAAQ,QAAR;;EACd,SAAA,GAAc,OAAA,CAAQ,WAAR;;EACd,WAAA,GAAc,OAAA,CAAQ,cAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EAEd,oBAAA,GAAuB,OAAA,CAAQ,wBAAR;;EAEvB,yBAAA,GAA4B,OAAA,CAAQ,6BAAR;;EAE5B,eAAA,GAAkB,OAAA,CAAQ,mBAAR;;EAElB,UAAA,GAAa,OAAA,CAAQ,cAAR;;EAEb,SAAA,GAAY,OAAA,CAAQ,aAAR;;EAEZ,WAAA,GAAc,OAAA,CAAQ,eAAR;;EAEd,MAAM,CAAC,OAAP,GAAiB,qBAAA,GAAwB,QAAA,CAAC,MAAD,CAAA;AACvC,QAAA;IAAA,eAAA,GAAkB,MAAM,CAAC;IACzB,eAAA,GAAkB,MAAM,CAAC;IACzB,aAAA,GAAgB,MAAM,CAAC;IAOvB,kBAAA,GAAqB,CAAA;AACrB;AAAA,SAAA,qCAAA;;MACE,OAAO,CAAC,GAAR,CAAY,QAAA,GAAS,IAArB;MACA,QAAA,GAAW,WAAA,CAAY,IAAZ,EAAkB,MAAM,CAAC,SAAzB,EAAoC,MAAM,CAAC,SAA3C;MACX,IAAI,gBAAJ;QACE,QAAA,GAAW,WAAA,CAAY,eAAZ,EAA6B,MAAM,CAAC,SAApC,EADb;;MAKA,MAAA,GAAS,oBAAA,CAAqB,IAArB,EAA2B,aAA3B,EAA0C,MAAM,CAAC,OAAjD;MAIT,YAAA,GAAe,CAAA;MACf,WAAA,GAAc,yBAAA,CAA0B,QAA1B,EAAoC,MAApC,EAA4C,aAA5C,EAA2D,eAA3D,EAA4E,MAAM,CAAC,OAAnF;MAId,WAAW,CAAC,GAAZ,GAAkB,UAAA,CAAW,MAAM,CAAC,GAAlB,EAAuB,eAAvB,EAAwC,WAAW,CAAC,IAApD;MAElB,kBAAmB,CAAA,IAAA,CAAnB,GAA2B,CAAA;MAC3B,kBAAmB,CAAA,IAAA,CAAK,CAAC,WAAzB,GAAuC;MACvC,kBAAmB,CAAA,IAAA,CAAK,CAAC,MAAzB,GAAkC;MAClC,kBAAmB,CAAA,IAAA,CAAK,CAAC,QAAzB,GAAoC;AAtBtC;AA0BA;AAAA,SAAA,wCAAA;;MACE,kBAAmB,CAAA,IAAA,CAAK,CAAC,MAAzB,GAAkC,SAAA,CAAU,IAAV,EAAgB,kBAAhB,EAAoC,MAApC;AADpC;AAGA,WAAO;EAxCgC;AArBzC" } \ No newline at end of file diff --git a/src/getInformationOnFiles.litcoffee b/src/getInformationOnFiles.litcoffee index 4d287c39..59b3a722 100644 --- a/src/getInformationOnFiles.litcoffee +++ b/src/getInformationOnFiles.litcoffee @@ -29,7 +29,6 @@ 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. - console.log("Looking through files: "+config.sources.length) informationOnFiles = {} for file in config.sources console.log("File: "+file) @@ -37,8 +36,6 @@ the two. if !language? language = getLanguage 'not-supported', config.languages - console.log("language:"+JSON.stringify(language)) - First the source name: source = getSourceInformation(file, rootDirectory, config.flatten) diff --git a/src/getLanguage.js b/src/getLanguage.js index 1e545e8b..58746775 100644 --- a/src/getLanguage.js +++ b/src/getLanguage.js @@ -1,24 +1,22 @@ -// Generated by CoffeeScript 1.12.6 -(function() { - var getLanguage, path; +var getLanguage, path; - path = require('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 - }); - } +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; - }; + } + return lang; +}; - module.exports = getLanguage; +module.exports = getLanguage; -}).call(this); +//# sourceMappingURL=getLanguage.js.map diff --git a/src/getOthers.js b/src/getOthers.js index f82f4dc0..2cd17d3e 100644 --- a/src/getOthers.js +++ b/src/getOthers.js @@ -1,24 +1,22 @@ -// Generated by CoffeeScript 1.12.6 -(function() { - var getOthers, getRelativePath; +var getOthers, getRelativePath; - getRelativePath = require('./getRelativePath'); +getRelativePath = require('./getRelativePath'); - getOthers = function(file, informationOnFiles, config) { - var destinationFileInformation, i, 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; - others[target.base] = getRelativePath(source.relativefile, target.relativefile, target.base); - } - return others; - }; +getOthers = function(file, informationOnFiles, config) { + var destinationFileInformation, i, 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; + others[target.base] = getRelativePath(source.relativefile, target.relativefile, target.base); + } + return others; +}; - module.exports = getOthers; +module.exports = getOthers; -}).call(this); +//# sourceMappingURL=getOthers.js.map diff --git a/src/getRelativePath.js b/src/getRelativePath.js index c7cc8816..e67561f9 100644 --- a/src/getRelativePath.js +++ b/src/getRelativePath.js @@ -1,20 +1,18 @@ -// Generated by CoffeeScript 1.12.6 -(function() { - var getRelativePath, path; +var getRelativePath, path; - path = require('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; - }; +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; +module.exports = getRelativePath; -}).call(this); +//# sourceMappingURL=getRelativePath.js.map diff --git a/src/getSourceInformation.js b/src/getSourceInformation.js index eed424e3..b7fbce31 100644 --- a/src/getSourceInformation.js +++ b/src/getSourceInformation.js @@ -1,23 +1,21 @@ -// Generated by CoffeeScript 1.12.6 -(function() { - var getSourceInformation, path; +var getSourceInformation, path; - path = require('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; - }; +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; +module.exports = getSourceInformation; -}).call(this); +//# sourceMappingURL=getSourceInformation.js.map diff --git a/src/parse.js b/src/parse.js index 5ed03eaa..b664ab41 100644 --- a/src/parse.js +++ b/src/parse.js @@ -1,6 +1,6 @@ -// Generated by CoffeeScript 1.12.6 +// Generated by CoffeeScript 2.0.0-beta3 (function() { - var _, commander, fs, glob, highlightjs, marked, parse, path; + var _, commander, fs, glob, highlightjs, htmlImageMatcher, marked, parse, path; _ = require('underscore'); @@ -18,19 +18,15 @@ glob = require('glob'); - module.exports = parse = function(source, language, code, config) { - var LINK_REGEX, TEXT_REGEX, codeText, docsText, hasCode, i, isText, j, k, len, len1, line, lines, link, links, match, maybeCode, save, sections, text, texts; - if (config == null) { - config = {}; - } + htmlImageMatcher = /^/; + + module.exports = parse = function(source, language, code, config = {}) { + var LINK_REGEX, STYLE_REGEX, TEXT_REGEX, codeText, docsText, hasCode, i, isText, j, k, len, len1, line, lines, link, links, match, maybeCode, save, sections, style, text, texts; lines = code.split('\n'); sections = []; hasCode = docsText = codeText = ''; save = function() { - sections.push({ - docsText: docsText, - codeText: codeText - }); + sections.push({docsText, codeText}); hasCode = docsText = codeText = ''; }; if (language.literate) { @@ -45,14 +41,21 @@ if (language.linkMatcher && line.match(language.linkMatcher)) { LINK_REGEX = /\((.+)\)/; TEXT_REGEX = /\[(.+)\]/; + STYLE_REGEX = /\{(.+)\}/; links = LINK_REGEX.exec(line); texts = TEXT_REGEX.exec(line); + style = STYLE_REGEX.exec(line); if ((links != null) && links.length > 1 && (texts != null) && texts.length > 1) { link = links[1]; text = texts[1]; - codeText += '

      ' + text + '

      ' + '\n'; + style = style[1]; + console.log("STYLE:" + JSON.stringify(style)); + codeText += '

      ' + text + '

      ' + '\n'; } hasCode = true; + } else if (line.match(htmlImageMatcher)) { + codeText += line; + hasCode = true; } else if (language.sectionMatcher && line.match(language.sectionMatcher)) { if (hasCode) { save(); @@ -77,3 +80,5 @@ }; }).call(this); + +//# sourceMappingURL=parse.js.map diff --git a/src/parse.js.map b/src/parse.js.map index f088ce04..b3f37cb3 100644 --- a/src/parse.js.map +++ b/src/parse.js.map @@ -1 +1,10 @@ -{"version":3,"file":"parse.js","sources":["parse.litcoffee"],"names":[],"mappings":"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","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\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 for line in lines\n if language.linkMatcher and line.match(language.linkMatcher)\n LINK_REGEX = /\\((.+)\\)/\n TEXT_REGEX = /\\[(.+)\\]/\n links = LINK_REGEX.exec(line)\n texts = TEXT_REGEX.exec(line)\n if links? and links.length > 1 and texts? and texts.length > 1\n link = links[1]\n text = texts[1]\n codeText += '

      '+text+'

      ' + '\\n'\n hasCode = yes\n else if language.sectionMatcher and line.match(language.sectionMatcher)\n save() if hasCode\n docsText += (line = line.replace(language.commentMatcher, '')) + '\\n'\n save() # if /^(---+|===+)$/.test line\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 +{ + "version": 3, + "file": "parse.js", + "sourceRoot": "", + "sources": [ + "parse.litcoffee" + ], + "names": [], + "mappings": "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" +} \ No newline at end of file diff --git a/src/parse.litcoffee b/src/parse.litcoffee index 5edd9d30..354ccf7e 100644 --- a/src/parse.litcoffee +++ b/src/parse.litcoffee @@ -6,6 +6,7 @@ highlightjs = require 'highlight.js' path = require 'path' glob = require 'glob' + htmlImageMatcher = /^/ 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 @@ -41,14 +42,22 @@ normal below. for line in lines if language.linkMatcher and line.match(language.linkMatcher) + LINK_REGEX = /\((.+)\)/ TEXT_REGEX = /\[(.+)\]/ + STYLE_REGEX = /\{(.+)\}/ links = LINK_REGEX.exec(line) texts = TEXT_REGEX.exec(line) + style = STYLE_REGEX.exec(line) if links? and links.length > 1 and texts? and texts.length > 1 link = links[1] text = texts[1] - codeText += '

      '+text+'

      ' + '\n' + style = style[1] + console.log("STYLE:"+JSON.stringify(style)) + codeText += '

      '+text+'

      ' + '\n' + hasCode = yes + else if line.match(htmlImageMatcher) + codeText += line hasCode = yes else if language.sectionMatcher and line.match(language.sectionMatcher) save() if hasCode diff --git a/test/sim/README.md b/test/sim/README.md index cbbdc891..39a48ac0 100644 --- a/test/sim/README.md +++ b/test/sim/README.md @@ -13,7 +13,7 @@ My little bunny nose Squinches to and fro. ``` -![Readme.md](images/fluffybunny1.jpg) +![Readme.md](images/fluffybunny1.jpg){width:300px} ### Stanza 2 @@ -27,7 +27,8 @@ My little bunny legs Leap to and fro. ``` -![Readme.md](images/fluffybunny2.jpg) +Drawing + ### Stanza 3 From a525fc8c47cca8e3fae64a920ef726a106efeecd Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 10 Jul 2017 14:00:54 -0700 Subject: [PATCH 72/95] readme style for images --- test/sim/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/sim/README.md b/test/sim/README.md index 39a48ac0..dda5e6a6 100644 --- a/test/sim/README.md +++ b/test/sim/README.md @@ -13,7 +13,7 @@ My little bunny nose Squinches to and fro. ``` -![Readme.md](images/fluffybunny1.jpg){width:300px} +![Readme.md](images/fluffybunny1.jpg){:width=300px} ### Stanza 2 From 0c519e44d4f29c8f463e189818f6512c99bbe3e1 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 10 Jul 2017 14:14:42 -0700 Subject: [PATCH 73/95] fixed image in readme. --- test/sim/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/sim/README.md b/test/sim/README.md index dda5e6a6..1f0bc323 100644 --- a/test/sim/README.md +++ b/test/sim/README.md @@ -13,7 +13,7 @@ My little bunny nose Squinches to and fro. ``` -![Readme.md](images/fluffybunny1.jpg){:width=300px} +![Readme.md](images/fluffybunny1.jpg) ### Stanza 2 From 8671ce5bc4e0e31c72426f5c08b7cb71b7fb912b Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 10 Jul 2017 14:21:24 -0700 Subject: [PATCH 74/95] tweak to the parallel jst theme --- resources/parallel/docco.jst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/parallel/docco.jst b/resources/parallel/docco.jst index fdede511..022e26db 100644 --- a/resources/parallel/docco.jst +++ b/resources/parallel/docco.jst @@ -3,8 +3,8 @@ <%= title %> - - + + From fa0454d6cf4614f493a44d779463d7461907811d Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 10 Jul 2017 14:22:53 -0700 Subject: [PATCH 75/95] tweak to jst --- resources/parallel/docco.jst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/parallel/docco.jst b/resources/parallel/docco.jst index 022e26db..cb14bd69 100644 --- a/resources/parallel/docco.jst +++ b/resources/parallel/docco.jst @@ -4,7 +4,7 @@ <%= title %> - + From a6591512f72c48f68b3c4183f58130a6996a68df Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 10 Jul 2017 14:23:38 -0700 Subject: [PATCH 76/95] removed deprecated target-density --- resources/parallel/docco.jst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/parallel/docco.jst b/resources/parallel/docco.jst index cb14bd69..54d6f634 100644 --- a/resources/parallel/docco.jst +++ b/resources/parallel/docco.jst @@ -4,7 +4,7 @@ <%= title %> - + From 78ad47ab2616092ae4e66aeca0ab63da49249170 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 10 Jul 2017 14:36:25 -0700 Subject: [PATCH 77/95] make quieter. --- docco.js | 151 ++++++++++++++-------------- docco.js.map | 11 +- docco.litcoffee | 6 +- src/getInformationOnFiles.js | 1 - src/getInformationOnFiles.js.map | 2 +- src/getInformationOnFiles.litcoffee | 1 - 6 files changed, 87 insertions(+), 85 deletions(-) diff --git a/docco.js b/docco.js index ee81b30c..7854ba65 100644 --- a/docco.js +++ b/docco.js @@ -1,100 +1,99 @@ -var Docco, _, commander, configure, defaults, document, format, fs, getInformationOnFiles, glob, highlightjs, languages, marked, parse, path, run, version; +// Generated by CoffeeScript 1.12.6 +(function() { + var Docco, _, commander, configure, defaults, document, format, fs, getInformationOnFiles, glob, highlightjs, languages, marked, parse, path, run, version; -document = require('./src/document'); + document = require('./src/document'); -parse = require('./src/parse'); + parse = require('./src/parse'); -format = require('./src/format'); + format = require('./src/format'); -configure = require('./src/configure'); + configure = require('./src/configure'); -getInformationOnFiles = require('./src/getInformationOnFiles'); + getInformationOnFiles = require('./src/getInformationOnFiles'); -_ = 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'); + path = require('path'); -glob = require('glob'); + glob = require('glob'); -console.log("Dirname: " + __dirname); + languages = JSON.parse(fs.readFileSync(path.join(__dirname, 'resources', 'languages.json'))); -console.log("Path to self:" + path.join(path.dirname(fs.realpathSync(__filename)), '../')); + version = JSON.parse(fs.readFileSync(path.join(__dirname, 'package.json'))).version; -console.log("Path to parent:" + path.dirname(fs.realpathSync(__filename))); + console.log("Version: " + version); -languages = JSON.parse(fs.readFileSync(path.join(__dirname, 'resources', 'languages.json'))); + defaults = { + layout: 'parallel', + 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; - -console.log("Version: " + version); - -defaults = { - layout: 'parallel', - output: 'docs', - template: null, - css: null, - extension: null, - languages: {}, - marked: null, - setup: '.docco.json', - help: false, - flatten: false -}; - -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('-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, languages); - setup = path.resolve(config.setup); - if (fs.existsSync(setup)) { - if (setup) { - config = _.extend(config, JSON.parse(fs.readFileSync(setup))); + run = function(args) { + var config, file, files, globName, i, j, len, len1, ref, setup; + if (args == null) { + args = process.argv; } - } - 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); + console.log("Args:" + JSON.stringify(args, null, 2)); + 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('-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, languages); + setup = path.resolve(config.setup); + if (fs.existsSync(setup)) { + if (setup) { + config = _.extend(config, JSON.parse(fs.readFileSync(setup))); } } - config.sources = []; - for (j = 0, len1 = files.length; j < len1; j++) { - file = files[j]; - config.sources.push(path.relative(config.root, file)); + 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); + } + } + 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()); } - 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 -}; + }; + + module.exports = Docco = { + run: run, + document: document, + parse: parse, + format: format, + languages: languages, + version: version + }; + +}).call(this); //# sourceMappingURL=docco.js.map diff --git a/docco.js.map b/docco.js.map index 89a5800a..11d7345a 100644 --- a/docco.js.map +++ b/docco.js.map @@ -1 +1,10 @@ -{"version":3,"file":"docco.js","sources":["docco.litcoffee"],"names":[],"mappings":"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","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 console.log(\"Dirname: \"+__dirname)\n\n console.log(\"Path to self:\"+path.join(path.dirname(fs.realpathSync(__filename)), '../'))\n console.log(\"Path to parent:\"+path.dirname(fs.realpathSync(__filename)))\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 console.log(\"Version: \"+version)\n\nDefault configuration **options**. All of these may be extended by\nuser-specified options.\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\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('-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, 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}"]} \ No newline at end of file +{ + "version": 3, + "file": "docco.js", + "sourceRoot": "", + "sources": [ + "docco.litcoffee" + ], + "names": [], + "mappings": "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" +} \ No newline at end of file diff --git a/docco.litcoffee b/docco.litcoffee index 71fd3d9e..5c250ada 100644 --- a/docco.litcoffee +++ b/docco.litcoffee @@ -122,11 +122,6 @@ Each item maps the file extension to the name of the language and the `symbol` that indicates a line comment. To add support for a new programming language to Docco, just add it to the file. - console.log("Dirname: "+__dirname) - - console.log("Path to self:"+path.join(path.dirname(fs.realpathSync(__filename)), '../')) - console.log("Path to parent:"+path.dirname(fs.realpathSync(__filename))) - languages = JSON.parse fs.readFileSync(path.join(__dirname, 'resources', 'languages.json')) Keep it DRY. Extract the docco **version** from `package.json` @@ -156,6 +151,7 @@ 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) -> + console.log("Args:"+JSON.stringify(args,null,2)) config = defaults commander.version(version) diff --git a/src/getInformationOnFiles.js b/src/getInformationOnFiles.js index a69e8ddf..2f629d87 100644 --- a/src/getInformationOnFiles.js +++ b/src/getInformationOnFiles.js @@ -39,7 +39,6 @@ ref = config.sources; for (i = 0, len = ref.length; i < len; i++) { file = ref[i]; - console.log("File: " + file); language = getLanguage(file, config.languages, config.extension); if (language == null) { language = getLanguage('not-supported', config.languages); diff --git a/src/getInformationOnFiles.js.map b/src/getInformationOnFiles.js.map index 6d5f4d60..c8830f9b 100644 --- a/src/getInformationOnFiles.js.map +++ b/src/getInformationOnFiles.js.map @@ -6,5 +6,5 @@ "getInformationOnFiles.litcoffee" ], "names": [], - "mappings": ";AAAI;AAAA,MAAA;;EAAA,CAAA,GAAc,OAAA,CAAQ,YAAR;;EACd,EAAA,GAAc,OAAA,CAAQ,UAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EACd,MAAA,GAAc,OAAA,CAAQ,QAAR;;EACd,SAAA,GAAc,OAAA,CAAQ,WAAR;;EACd,WAAA,GAAc,OAAA,CAAQ,cAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EAEd,oBAAA,GAAuB,OAAA,CAAQ,wBAAR;;EAEvB,yBAAA,GAA4B,OAAA,CAAQ,6BAAR;;EAE5B,eAAA,GAAkB,OAAA,CAAQ,mBAAR;;EAElB,UAAA,GAAa,OAAA,CAAQ,cAAR;;EAEb,SAAA,GAAY,OAAA,CAAQ,aAAR;;EAEZ,WAAA,GAAc,OAAA,CAAQ,eAAR;;EAEd,MAAM,CAAC,OAAP,GAAiB,qBAAA,GAAwB,QAAA,CAAC,MAAD,CAAA;AACvC,QAAA;IAAA,eAAA,GAAkB,MAAM,CAAC;IACzB,eAAA,GAAkB,MAAM,CAAC;IACzB,aAAA,GAAgB,MAAM,CAAC;IAOvB,kBAAA,GAAqB,CAAA;AACrB;AAAA,SAAA,qCAAA;;MACE,OAAO,CAAC,GAAR,CAAY,QAAA,GAAS,IAArB;MACA,QAAA,GAAW,WAAA,CAAY,IAAZ,EAAkB,MAAM,CAAC,SAAzB,EAAoC,MAAM,CAAC,SAA3C;MACX,IAAI,gBAAJ;QACE,QAAA,GAAW,WAAA,CAAY,eAAZ,EAA6B,MAAM,CAAC,SAApC,EADb;;MAKA,MAAA,GAAS,oBAAA,CAAqB,IAArB,EAA2B,aAA3B,EAA0C,MAAM,CAAC,OAAjD;MAIT,YAAA,GAAe,CAAA;MACf,WAAA,GAAc,yBAAA,CAA0B,QAA1B,EAAoC,MAApC,EAA4C,aAA5C,EAA2D,eAA3D,EAA4E,MAAM,CAAC,OAAnF;MAId,WAAW,CAAC,GAAZ,GAAkB,UAAA,CAAW,MAAM,CAAC,GAAlB,EAAuB,eAAvB,EAAwC,WAAW,CAAC,IAApD;MAElB,kBAAmB,CAAA,IAAA,CAAnB,GAA2B,CAAA;MAC3B,kBAAmB,CAAA,IAAA,CAAK,CAAC,WAAzB,GAAuC;MACvC,kBAAmB,CAAA,IAAA,CAAK,CAAC,MAAzB,GAAkC;MAClC,kBAAmB,CAAA,IAAA,CAAK,CAAC,QAAzB,GAAoC;AAtBtC;AA0BA;AAAA,SAAA,wCAAA;;MACE,kBAAmB,CAAA,IAAA,CAAK,CAAC,MAAzB,GAAkC,SAAA,CAAU,IAAV,EAAgB,kBAAhB,EAAoC,MAApC;AADpC;AAGA,WAAO;EAxCgC;AArBzC" + "mappings": ";AAAI;AAAA,MAAA;;EAAA,CAAA,GAAc,OAAA,CAAQ,YAAR;;EACd,EAAA,GAAc,OAAA,CAAQ,UAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EACd,MAAA,GAAc,OAAA,CAAQ,QAAR;;EACd,SAAA,GAAc,OAAA,CAAQ,WAAR;;EACd,WAAA,GAAc,OAAA,CAAQ,cAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EAEd,oBAAA,GAAuB,OAAA,CAAQ,wBAAR;;EAEvB,yBAAA,GAA4B,OAAA,CAAQ,6BAAR;;EAE5B,eAAA,GAAkB,OAAA,CAAQ,mBAAR;;EAElB,UAAA,GAAa,OAAA,CAAQ,cAAR;;EAEb,SAAA,GAAY,OAAA,CAAQ,aAAR;;EAEZ,WAAA,GAAc,OAAA,CAAQ,eAAR;;EAEd,MAAM,CAAC,OAAP,GAAiB,qBAAA,GAAwB,QAAA,CAAC,MAAD,CAAA;AACvC,QAAA;IAAA,eAAA,GAAkB,MAAM,CAAC;IACzB,eAAA,GAAkB,MAAM,CAAC;IACzB,aAAA,GAAgB,MAAM,CAAC;IAOvB,kBAAA,GAAqB,CAAA;AACrB;AAAA,SAAA,qCAAA;;MACE,QAAA,GAAW,WAAA,CAAY,IAAZ,EAAkB,MAAM,CAAC,SAAzB,EAAoC,MAAM,CAAC,SAA3C;MACX,IAAI,gBAAJ;QACE,QAAA,GAAW,WAAA,CAAY,eAAZ,EAA6B,MAAM,CAAC,SAApC,EADb;;MAKA,MAAA,GAAS,oBAAA,CAAqB,IAArB,EAA2B,aAA3B,EAA0C,MAAM,CAAC,OAAjD;MAIT,YAAA,GAAe,CAAA;MACf,WAAA,GAAc,yBAAA,CAA0B,QAA1B,EAAoC,MAApC,EAA4C,aAA5C,EAA2D,eAA3D,EAA4E,MAAM,CAAC,OAAnF;MAId,WAAW,CAAC,GAAZ,GAAkB,UAAA,CAAW,MAAM,CAAC,GAAlB,EAAuB,eAAvB,EAAwC,WAAW,CAAC,IAApD;MAElB,kBAAmB,CAAA,IAAA,CAAnB,GAA2B,CAAA;MAC3B,kBAAmB,CAAA,IAAA,CAAK,CAAC,WAAzB,GAAuC;MACvC,kBAAmB,CAAA,IAAA,CAAK,CAAC,MAAzB,GAAkC;MAClC,kBAAmB,CAAA,IAAA,CAAK,CAAC,QAAzB,GAAoC;AArBtC;AAyBA;AAAA,SAAA,wCAAA;;MACE,kBAAmB,CAAA,IAAA,CAAK,CAAC,MAAzB,GAAkC,SAAA,CAAU,IAAV,EAAgB,kBAAhB,EAAoC,MAApC;AADpC;AAGA,WAAO;EAvCgC;AArBzC" } \ No newline at end of file diff --git a/src/getInformationOnFiles.litcoffee b/src/getInformationOnFiles.litcoffee index 59b3a722..4c23da5d 100644 --- a/src/getInformationOnFiles.litcoffee +++ b/src/getInformationOnFiles.litcoffee @@ -31,7 +31,6 @@ the two. informationOnFiles = {} for file in config.sources - console.log("File: "+file) language = getLanguage file, config.languages, config.extension if !language? language = getLanguage 'not-supported', config.languages From beb8424b7f9bba953fc3e4a10cccc642695d729a Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 10 Jul 2017 19:21:39 -0700 Subject: [PATCH 78/95] Multiline comments for coffee, java, and javascript files. --- README.md | 4 +- docco.litcoffee | 2 +- resources/languages.json | 10 ++--- src/buildMatchers.js | 40 ++++++++++++------- src/buildMatchers.js.map | 11 ++++- src/buildMatchers.litcoffee | 11 +++++ src/parse.js | 29 +++++++++++--- src/parse.js.map | 2 +- src/parse.litcoffee | 22 ++++++---- test/sim/src/fake_coffee.coffee | 4 +- test/sim/src/fake_coffee2.coffee | 37 +++++++++-------- .../{fake_litcoffee.js => fake_javascript.js} | 5 +++ 12 files changed, 120 insertions(+), 57 deletions(-) rename test/sim/src/{fake_litcoffee.js => fake_javascript.js} (82%) diff --git a/README.md b/README.md index 02ee660d..ae79aaf2 100644 --- a/README.md +++ b/README.md @@ -81,12 +81,12 @@ npm run build * --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 #### Refactors: * Code refactored into smaller chuncks * Unit testing framework added and unit tests written to %85 coverage (more work needed here) - * All built javascript is ignored in .gitignore * 'npm build' builds all javascript with gulp * 'npm test' runs all unit tests * travis ci build and badge @@ -110,8 +110,8 @@ npm run build ### TODO: - * Multiline comments * 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.litcoffee b/docco.litcoffee index 5c250ada..b4ead3af 100644 --- a/docco.litcoffee +++ b/docco.litcoffee @@ -196,4 +196,4 @@ Parse options using [Commander](https://github.com/visionmedia/commander.js). Public API ---------- - module.exports = Docco = {run, document, parse, format, languages, version} \ No newline at end of file + module.exports = Docco = {run, document, parse, format, languages, version} diff --git a/resources/languages.json b/resources/languages.json index ad9fe849..b00378db 100644 --- a/resources/languages.json +++ b/resources/languages.json @@ -11,7 +11,7 @@ ".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": "#"}, @@ -32,14 +32,14 @@ ".jade": {"name": "jade", "symbol": "//-"}, ".jpeg": {"name": "image", "copy": true}, ".jpg": {"name": "image", "copy": true}, - ".js": {"name": "javascript", "symbol": "//"}, + ".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": "//"}, diff --git a/src/buildMatchers.js b/src/buildMatchers.js index 10bf4f32..7a115ae0 100644 --- a/src/buildMatchers.js +++ b/src/buildMatchers.js @@ -1,19 +1,29 @@ -var buildMatchers; +// Generated by CoffeeScript 2.0.0-beta3 +(function() { + var buildMatchers; -module.exports = buildMatchers = function(languages) { - var ext, l; - for (ext in languages) { - l = languages[ext]; - l.commentMatcher = RegExp("^\\s*" + l.symbol + "\\s?"); - l.commentFilter = /(^#![\/]|^\s*#\{)/; - if (l.link) { - l.linkMatcher = RegExp("^" + l.link + "\\[(.+)\\]\\((.+)\\)"); + 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.linkMatcher = RegExp(`^${l.link}\\[(.+)\\]\\((.+)\\)`); + } + 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.section) { - l.sectionMatcher = RegExp("^" + l.section + "\\s?"); - } - } - return languages; -}; + return languages; + }; + +}).call(this); //# sourceMappingURL=buildMatchers.js.map diff --git a/src/buildMatchers.js.map b/src/buildMatchers.js.map index e63f4abc..1f0b793c 100644 --- a/src/buildMatchers.js.map +++ b/src/buildMatchers.js.map @@ -1 +1,10 @@ -{"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,WAAF,GAAgB,MAAA,CAAA,GAAA,GAAM,CAAC,CAAC,IAAR,GAAa,sBAAb,EADlB;;IAKA,IAAG,CAAC,CAAC,OAAL;MACE,CAAC,CAAC,cAAF,GAAmB,MAAA,CAAA,GAAA,GAAM,CAAC,CAAC,OAAR,GAAgB,MAAhB,EADrB;;AAjBF;SAoBA;AArB+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.linkMatcher = ///^#{l.link}\\[(.+)\\]\\((.+)\\)///\n\nLook for explict section breaks\n\n if l.section\n l.sectionMatcher = ///^#{l.section}\\s?///\n\n languages\n"]} \ No newline at end of file +{ + "version": 3, + "file": "buildMatchers.js", + "sourceRoot": "", + "sources": [ + "buildMatchers.litcoffee" + ], + "names": [], + "mappings": ";AAEI;AAAA,MAAA;;EAAA,MAAM,CAAC,OAAP,GAAiB,aAAA,GAAgB,QAAA,CAAC,SAAD,CAAA;AAC/B,QAAA;AAAA,SAAA,gBAAA;;MAIE,CAAC,CAAC,cAAF,GAAmB,MAAA,CAAA,CAAA,KAAA,CAAA,CAAS,CAAC,CAAC,MAAX,CAAA,IAAA,CAAA;MAInB,CAAC,CAAC,aAAF,GAAkB;MAIlB,IAAG,CAAC,CAAC,IAAL;QACE,CAAC,CAAC,WAAF,GAAgB,MAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAC,IAAR,CAAA,oBAAA,CAAA,EADlB;;MAKA,IAAG,CAAC,CAAC,OAAL;QACE,CAAC,CAAC,cAAF,GAAmB,MAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAC,OAAR,CAAA,IAAA,CAAA,EADrB;;MAMA,IAAG,CAAC,CAAC,SAAL;QAEE,KAAA,GAAQ,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,OAAlB,CAA0B,SAA1B,EAAoC,MAApC;QACR,IAAA,GAAO,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,OAAjB,CAAyB,SAAzB,EAAmC,MAAnC;QAEP,CAAC,CAAC,YAAF,GAAiB,MAAA,CAAA,CAAA,KAAA,CAAA,CAAS,KAAT,CAAA,CAAA;QACjB,CAAC,CAAC,WAAF,GAAgB,MAAA,CAAA,CAAA,KAAA,CAAA,CAAS,IAAT,CAAA,CAAA,EANlB;;AAvBF;WA+BA;EAhC+B;AAAjC" +} \ No newline at end of file diff --git a/src/buildMatchers.litcoffee b/src/buildMatchers.litcoffee index 8e59f23f..6ab6bf8a 100644 --- a/src/buildMatchers.litcoffee +++ b/src/buildMatchers.litcoffee @@ -21,4 +21,15 @@ 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}/// + languages diff --git a/src/parse.js b/src/parse.js index b664ab41..64bb8e5a 100644 --- a/src/parse.js +++ b/src/parse.js @@ -21,7 +21,7 @@ htmlImageMatcher = /^/; module.exports = parse = function(source, language, code, config = {}) { - var LINK_REGEX, STYLE_REGEX, TEXT_REGEX, codeText, docsText, hasCode, i, isText, j, k, len, len1, line, lines, link, links, match, maybeCode, save, sections, style, text, texts; + var LINK_REGEX, STYLE_REGEX, TEXT_REGEX, codeText, docsText, hasCode, i, isText, j, k, len, len1, line, lines, link, links, match, maybeCode, multilineComment, save, sections, style, styles, text, texts; lines = code.split('\n'); sections = []; hasCode = docsText = codeText = ''; @@ -44,18 +44,35 @@ STYLE_REGEX = /\{(.+)\}/; links = LINK_REGEX.exec(line); texts = TEXT_REGEX.exec(line); - style = STYLE_REGEX.exec(line); - if ((links != null) && links.length > 1 && (texts != null) && texts.length > 1) { + styles = STYLE_REGEX.exec(line); + if ((links != null) && links.length > 0 && (texts != null) && texts.length > 1) { link = links[1]; - text = texts[1]; - style = style[1]; - console.log("STYLE:" + JSON.stringify(style)); + if (texts && texts.length > 0) { + text = texts[1]; + } else { + text = ''; + } + if (styles && styles.length > 0) { + style = styles[1]; + } else { + style = ''; + } codeText += '

      ' + text + '

      ' + '\n'; } hasCode = true; } else if (line.match(htmlImageMatcher)) { codeText += line; hasCode = true; + } else if (multilineComment && language.stopMatcher && line.match(language.stopMatcher)) { + multilineComment = false; + docsText += (line = line.replace(language.stopMatcher, '')) + '\n'; + save(); + } else if (multilineComment || (language.startMatcher && line.match(language.startMatcher))) { + multilineComment = true; + if (hasCode) { + save(); + } + docsText += (line = line.replace(language.startMatcher, '')) + '\n'; } else if (language.sectionMatcher && line.match(language.sectionMatcher)) { if (hasCode) { save(); diff --git a/src/parse.js.map b/src/parse.js.map index b3f37cb3..7d1ca4a7 100644 --- a/src/parse.js.map +++ b/src/parse.js.map @@ -6,5 +6,5 @@ "parse.litcoffee" ], "names": [], - "mappings": "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" + "mappings": "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" } \ No newline at end of file diff --git a/src/parse.litcoffee b/src/parse.litcoffee index 354ccf7e..486c5c09 100644 --- a/src/parse.litcoffee +++ b/src/parse.litcoffee @@ -42,27 +42,33 @@ normal below. for line in lines if language.linkMatcher and line.match(language.linkMatcher) - LINK_REGEX = /\((.+)\)/ TEXT_REGEX = /\[(.+)\]/ STYLE_REGEX = /\{(.+)\}/ links = LINK_REGEX.exec(line) texts = TEXT_REGEX.exec(line) - style = STYLE_REGEX.exec(line) - if links? and links.length > 1 and texts? and texts.length > 1 + styles = STYLE_REGEX.exec(line) + if links? and links.length > 0 and texts? and texts.length > 1 link = links[1] - text = texts[1] - style = style[1] - console.log("STYLE:"+JSON.stringify(style)) + if texts and texts.length > 0 then text = texts[1] else text = '' + if styles and styles.length > 0 then style = styles[1] else style = '' codeText += '

      '+text+'

      ' + '\n' hasCode = yes - else if line.match(htmlImageMatcher) + else if line.match(htmlImageMatcher) # only one per line! codeText += line hasCode = yes + else if multilineComment and language.stopMatcher and line.match(language.stopMatcher) + multilineComment = false + docsText += (line = line.replace(language.stopMatcher, '')) + '\n' + save() + else if multilineComment or (language.startMatcher and line.match(language.startMatcher)) + multilineComment = true + save() if hasCode + docsText += (line = line.replace(language.startMatcher, '')) + '\n' else if language.sectionMatcher and line.match(language.sectionMatcher) save() if hasCode docsText += (line = line.replace(language.commentMatcher, '')) + '\n' - save() # if /^(---+|===+)$/.test line + save() else if line.match(language.commentMatcher) and not line.match(language.commentFilter) save() if hasCode docsText += (line = line.replace(language.commentMatcher, '')) + '\n' diff --git a/test/sim/src/fake_coffee.coffee b/test/sim/src/fake_coffee.coffee index 48e4ff33..8c8eb5ca 100644 --- a/test/sim/src/fake_coffee.coffee +++ b/test/sim/src/fake_coffee.coffee @@ -1,4 +1,6 @@ -# CoffeeScript. +### + CoffeeScript. +### # Assignment: number = 42 diff --git a/test/sim/src/fake_coffee2.coffee b/test/sim/src/fake_coffee2.coffee index 02cca2ae..94503db5 100644 --- a/test/sim/src/fake_coffee2.coffee +++ b/test/sim/src/fake_coffee2.coffee @@ -1,29 +1,32 @@ #! /usr/bin/env coffee -# fizzbuzz.litcoffee +### + fizzbuzz.litcoffee -# This is the fizzbuzz test in literate CoffeeScript. + This is the fizzbuzz test in literate CoffeeScript. -## What should FizzBuzz do? +# 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. + The FizzBuzz test should print: -## Fun Facts + - '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. -# 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. +# Fun Facts -## FizzBuzz in CoffeeScript + 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 could look like this: +# FizzBuzz in CoffeeScript + + FizzBuzz in CoffeeScript could look like this: + +### fizzbuzz = (number) -> return 'fizzbuzz' if 0 == number % 15 return 'buzz' if 0 == number % 5 diff --git a/test/sim/src/fake_litcoffee.js b/test/sim/src/fake_javascript.js similarity index 82% rename from test/sim/src/fake_litcoffee.js rename to test/sim/src/fake_javascript.js index 162f813c..ecc5c475 100644 --- a/test/sim/src/fake_litcoffee.js +++ b/test/sim/src/fake_javascript.js @@ -1,7 +1,12 @@ +/* + 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'; } From 3190a0ad068feff51cc4a28bdeb835fb69a115c9 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 10 Jul 2017 19:28:46 -0700 Subject: [PATCH 79/95] modified parallel jst to show path to source. --- resources/parallel/docco.jst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/parallel/docco.jst b/resources/parallel/docco.jst index 54d6f634..70eb8b57 100644 --- a/resources/parallel/docco.jst +++ b/resources/parallel/docco.jst @@ -21,7 +21,7 @@ <% for (var i=0, l=sources.length; i <% var source = sources[i]; %> - <%= path.basename(source) %> + <%= source %> <% } %>
      From 71a59adbe66d737fe4a178ce24d692616b170b5b Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 10 Jul 2017 19:31:03 -0700 Subject: [PATCH 80/95] put back base name only for link text --- resources/parallel/docco.jst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/parallel/docco.jst b/resources/parallel/docco.jst index 70eb8b57..54d6f634 100644 --- a/resources/parallel/docco.jst +++ b/resources/parallel/docco.jst @@ -21,7 +21,7 @@ <% for (var i=0, l=sources.length; i <% var source = sources[i]; %> - <%= source %> + <%= path.basename(source) %> <% } %>
      From 3f3a19e85734765645d6419d7abd03106f0d5461 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 10 Jul 2017 20:02:08 -0700 Subject: [PATCH 81/95] Hierarchical links in the options menu. --- docco.js | 3 - docco.js.map | 2 +- docco.litcoffee | 2 - resources/linear/docco.jst | 10 +- resources/parallel/docco.jst | 7 +- src/getOthers.js | 41 +- src/getOthers.js.map | 11 +- src/getOthers.litcoffee | 5 +- src/write.js | 29 +- src/write.js.map | 11 +- src/write.litcoffee | 16 +- test/unit-tests/fakes/fake-config.js | 127 ++++--- test/unit-tests/fakes/fake-config.js.map | 11 +- test/unit-tests/fakes/fake-config.litcoffee | 27 +- .../fakes/informationOnFilesFlattened.js | 354 ++++++++++-------- .../fakes/informationOnFilesFlattened.js.map | 11 +- .../informationOnFilesFlattened.litcoffee | 86 ++++- .../fakes/informationOnFilesUnFlattened.js | 354 ++++++++++-------- .../informationOnFilesUnFlattened.js.map | 11 +- .../informationOnFilesUnFlattened.litcoffee | 86 ++++- test/unit-tests/unit-test-getOthers.js | 134 ++++--- test/unit-tests/unit-test-getOthers.js.map | 11 +- test/unit-tests/unit-test-getOthers.litcoffee | 40 +- 23 files changed, 880 insertions(+), 509 deletions(-) diff --git a/docco.js b/docco.js index 7854ba65..b84d9952 100644 --- a/docco.js +++ b/docco.js @@ -32,8 +32,6 @@ version = JSON.parse(fs.readFileSync(path.join(__dirname, 'package.json'))).version; - console.log("Version: " + version); - defaults = { layout: 'parallel', output: 'docs', @@ -52,7 +50,6 @@ if (args == null) { args = process.argv; } - console.log("Args:" + JSON.stringify(args, null, 2)); 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('-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, languages); diff --git a/docco.js.map b/docco.js.map index 11d7345a..129face4 100644 --- a/docco.js.map +++ b/docco.js.map @@ -6,5 +6,5 @@ "docco.litcoffee" ], "names": [], - "mappings": "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" + "mappings": ";AA+EI;AAAA,MAAA;;EAAA,QAAA,GAAW,OAAA,CAAQ,gBAAR;;EAOX,KAAA,GAAQ,OAAA,CAAQ,aAAR;;EAMR,MAAA,GAAS,OAAA,CAAQ,cAAR;;EAST,SAAA,GAAY,OAAA,CAAQ,iBAAR;;EAEZ,qBAAA,GAAwB,OAAA,CAAQ,6BAAR;;EAOxB,CAAA,GAAc,OAAA,CAAQ,YAAR;;EACd,EAAA,GAAc,OAAA,CAAQ,UAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EACd,MAAA,GAAc,OAAA,CAAQ,QAAR;;EACd,SAAA,GAAc,OAAA,CAAQ,WAAR;;EACd,WAAA,GAAc,OAAA,CAAQ,cAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EAOd,SAAA,GAAY,IAAI,CAAC,KAAL,CAAW,EAAE,CAAC,YAAH,CAAgB,IAAI,CAAC,IAAL,CAAU,SAAV,EAAqB,WAArB,EAAkC,gBAAlC,CAAhB,CAAX;;EAIZ,OAAA,GAAU,IAAI,CAAC,KAAL,CAAW,EAAE,CAAC,YAAH,CAAgB,IAAI,CAAC,IAAL,CAAU,SAAV,EAAqB,cAArB,CAAhB,CAAX,CAAiE,CAAC;;EAK5E,QAAA,GACE;IAAA,MAAA,EAAY,UAAZ;IACA,MAAA,EAAY,MADZ;IAEA,QAAA,EAAY,IAFZ;IAGA,GAAA,EAAY,IAHZ;IAIA,SAAA,EAAY,IAJZ;IAKA,SAAA,EAAY,EALZ;IAMA,MAAA,EAAY,IANZ;IAOA,KAAA,EAAY,aAPZ;IAQA,IAAA,EAAW,KARX;IASA,OAAA,EAAS,KATT;;;EAiBF,GAAA,GAAM,SAAC,IAAD;AACJ,QAAA;;MADK,OAAO,OAAO,CAAC;;IACpB,MAAA,GAAS;IAET,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,EAA+B,SAA/B;IAET,KAAA,GAAQ,IAAI,CAAC,OAAL,CAAa,MAAM,CAAC,KAApB;IACR,IAAG,EAAE,CAAC,UAAH,CAAc,KAAd,CAAH;MACE,IAA+D,KAA/D;QAAA,MAAA,GAAS,CAAC,CAAC,MAAF,CAAS,MAAT,EAAiB,IAAI,CAAC,KAAL,CAAW,EAAE,CAAC,YAAH,CAAgB,KAAhB,CAAX,CAAjB,EAAT;OADF;;IAGA,MAAM,CAAC,IAAP,GAAc,OAAO,CAAC,GAAR,CAAA;IACd,IAAG,MAAM,CAAC,OAAO,CAAC,MAAf,KAA2B,CAA9B;MACE,KAAA,GAAO;AACP;AAAA,WAAA,qCAAA;;QACE,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;QACR,IAAG,KAAK,CAAC,MAAN,KAAgB,CAAnB;UACE,KAAK,CAAC,IAAN,CAAW,QAAX,EADF;;AAFF;MAKA,MAAM,CAAC,OAAP,GAAiB;AACjB,WAAA,yCAAA;;QACE,MAAM,CAAC,OAAO,CAAC,IAAf,CAAoB,IAAI,CAAC,QAAL,CAAc,MAAM,CAAC,IAArB,EAA2B,IAA3B,CAApB;AADF;MAGA,MAAM,CAAC,kBAAP,GAA4B,qBAAA,CAAsB,MAAtB;MAE5B,QAAA,CAAS,MAAT,EAbF;KAAA,MAAA;MAeE,OAAO,CAAC,GAAR,CAAY,SAAS,CAAC,eAAV,CAAA,CAAZ,EAfF;;EAxBI;;EA6CN,MAAM,CAAC,OAAP,GAAiB,KAAA,GAAQ;IAAC,KAAA,GAAD;IAAM,UAAA,QAAN;IAAgB,OAAA,KAAhB;IAAuB,QAAA,MAAvB;IAA+B,WAAA,SAA/B;IAA0C,SAAA,OAA1C;;AArHzB" } \ No newline at end of file diff --git a/docco.litcoffee b/docco.litcoffee index b4ead3af..2feb6c2c 100644 --- a/docco.litcoffee +++ b/docco.litcoffee @@ -127,7 +127,6 @@ language to Docco, just add it to the file. Keep it DRY. Extract the docco **version** from `package.json` version = JSON.parse(fs.readFileSync(path.join(__dirname, 'package.json'))).version - console.log("Version: "+version) Default configuration **options**. All of these may be extended by user-specified options. @@ -151,7 +150,6 @@ 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) -> - console.log("Args:"+JSON.stringify(args,null,2)) config = defaults commander.version(version) diff --git a/resources/linear/docco.jst b/resources/linear/docco.jst index a73b03cd..41ae3352 100644 --- a/resources/linear/docco.jst +++ b/resources/linear/docco.jst @@ -26,11 +26,13 @@

      Table of Contents

        - <% for (var i=0, l = sources.length; i < l; i++) { %> - <% var source = sources[i]; %> + <% for (var i=0, l = links.length; i < l; i++) { %>
      1. - - <%= path.basename(source) %> + + <% if (flatten) %> + <%= path.basename(links[i].file) %> + <% else %> + <%= links[i].file %>
      2. <% } %> diff --git a/resources/parallel/docco.jst b/resources/parallel/docco.jst index 54d6f634..22675734 100644 --- a/resources/parallel/docco.jst +++ b/resources/parallel/docco.jst @@ -18,10 +18,9 @@
        - <% for (var i=0, l=sources.length; i - <% var source = sources[i]; %> - - <%= path.basename(source) %> + <% for (var i=0, l=links.length; i + + <%= links[i].file %> <% } %>
        diff --git a/src/getOthers.js b/src/getOthers.js index 2cd17d3e..15d83d6c 100644 --- a/src/getOthers.js +++ b/src/getOthers.js @@ -1,22 +1,29 @@ -var getOthers, getRelativePath; +// Generated by CoffeeScript 2.0.0-beta3 +(function() { + var getOthers, getRelativePath; -getRelativePath = require('./getRelativePath'); + getRelativePath = require('./getRelativePath'); -getOthers = function(file, informationOnFiles, config) { - var destinationFileInformation, i, 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; - others[target.base] = getRelativePath(source.relativefile, target.relativefile, target.base); - } - return others; -}; + getOthers = function(file, informationOnFiles, config) { + var destinationFileInformation, i, 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; + others[target.base] = { + link: getRelativePath(source.relativefile, target.relativefile, target.base), + file: other + }; + } + return others; + }; -module.exports = getOthers; + module.exports = getOthers; + +}).call(this); //# sourceMappingURL=getOthers.js.map diff --git a/src/getOthers.js.map b/src/getOthers.js.map index 5016f00d..34ec3a96 100644 --- a/src/getOthers.js.map +++ b/src/getOthers.js.map @@ -1 +1,10 @@ -{"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;IAEpC,MAAO,CAAA,MAAM,CAAC,IAAP,CAAP,GAAsB,eAAA,CAAgB,MAAM,CAAC,YAAvB,EAAqC,MAAM,CAAC,YAA5C,EAA0D,MAAM,CAAC,IAAjE;AAJxB;SAMA;AAVU;;AAYZ,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\n others[target.base] = getRelativePath source.relativefile, target.relativefile, target.base\n\n others\n\n module.exports = getOthers\n"]} \ No newline at end of file +{ + "version": 3, + "file": "getOthers.js", + "sourceRoot": "", + "sources": [ + "getOthers.litcoffee" + ], + "names": [], + "mappings": ";AAAI;AAAA,MAAA;;EAAA,eAAA,GAAkB,OAAA,CAAQ,mBAAR;;EAElB,SAAA,GAAY,QAAA,CAAC,IAAD,EAAO,kBAAP,EAA2B,MAA3B,CAAA;AACV,QAAA;IAAA,qBAAA,GAAwB,kBAAmB,CAAA,IAAA;IAC3C,MAAA,GAAS,qBAAqB,CAAC;IAC/B,MAAA,GAAS,CAAA;AACT;AAAA,SAAA,qCAAA;;MACE,0BAAA,GAA6B,kBAAmB,CAAA,KAAA;MAChD,MAAA,GAAS,0BAA0B,CAAC;MAEpC,MAAO,CAAA,MAAM,CAAC,IAAP,CAAP,GAAsB;QACpB,IAAA,EAAM,eAAA,CAAgB,MAAM,CAAC,YAAvB,EAAqC,MAAM,CAAC,YAA5C,EAA0D,MAAM,CAAC,IAAjE,CADc;QAEpB,IAAA,EAAM;MAFc;AAJxB;WASA;EAbU;;EAeZ,MAAM,CAAC,OAAP,GAAiB;AAjBjB" +} \ No newline at end of file diff --git a/src/getOthers.litcoffee b/src/getOthers.litcoffee index 8749090a..75716128 100644 --- a/src/getOthers.litcoffee +++ b/src/getOthers.litcoffee @@ -8,7 +8,10 @@ destinationFileInformation = informationOnFiles[other] target = destinationFileInformation.destination - others[target.base] = getRelativePath source.relativefile, target.relativefile, target.base + others[target.base] = { + link: getRelativePath source.relativefile, target.relativefile, target.base + file: other + } others diff --git a/src/write.js b/src/write.js index 391f3970..43e4c941 100644 --- a/src/write.js +++ b/src/write.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.12.6 +// Generated by CoffeeScript 2.0.0-beta3 (function() { var _, commander, fs, glob, highlightjs, marked, path, write; @@ -19,7 +19,7 @@ glob = require('glob'); module.exports = write = function(source, sections, config) { - var destination, fileInfo, first, firstSection, hasTitle, html, objectValues, others, title; + var destination, fileInfo, files, first, firstSection, hasTitle, html, links, objectValues, others, title; destination = function(file) { return file; }; @@ -38,17 +38,28 @@ 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: others, + sources: links, + files: files, + links: others, css: fileInfo.destination.css, - title: title, - hasTitle: hasTitle, - sections: sections, - path: path, - destination: destination + title, + hasTitle, + sections, + path, + destination, + flatten: config.flatten }); - console.log("docco: " + source + " -> " + (destination(fileInfo.destination.path))); + console.log(`docco: ${source} -> ${destination(fileInfo.destination.path)}`); fs.writeFileSync(destination(fileInfo.destination.path), html); }; }).call(this); + +//# sourceMappingURL=write.js.map diff --git a/src/write.js.map b/src/write.js.map index a0429881..2361ed01 100644 --- a/src/write.js.map +++ b/src/write.js.map @@ -1 +1,10 @@ -{"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,IAAA,GAAO,MAAM,CAAC,QAAP,CAAgB;IAAE,OAAA,EAAS,MAAX;IAAmB,GAAA,EAAK,QAAQ,CAAC,WAAW,CAAC,GAA7C;IACrB,OAAA,KADqB;IACd,UAAA,QADc;IACJ,UAAA,QADI;IACM,MAAA,IADN;IACY,aAAA,WADZ;GAAhB;EAGP,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;AAxBuB","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 html = config.template { sources: others, css: fileInfo.destination.css,\n title, hasTitle, sections, path, destination }\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 +{ + "version": 3, + "file": "write.js", + "sourceRoot": "", + "sources": [ + "write.litcoffee" + ], + "names": [], + "mappings": ";AAAI;AAAA,MAAA;;EAAA,CAAA,GAAc,OAAA,CAAQ,YAAR;;EACd,EAAA,GAAc,OAAA,CAAQ,UAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EACd,MAAA,GAAc,OAAA,CAAQ,QAAR;;EACd,SAAA,GAAc,OAAA,CAAQ,WAAR;;EACd,WAAA,GAAc,OAAA,CAAQ,cAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EAOd,MAAM,CAAC,OAAP,GAAiB,KAAA,GAAQ,QAAA,CAAC,MAAD,EAAS,QAAT,EAAmB,MAAnB,CAAA;AAIvB,QAAA;IAAA,WAAA,GAAc,QAAA,CAAC,IAAD,CAAA;aACZ;IADY;IAGd,YAAA,GAAe,QAAA,CAAC,GAAD,CAAA;aACb,MAAM,CAAC,IAAP,CAAY,GAAZ,CAAgB,CAAC,GAAjB,CAAqB,QAAA,CAAC,GAAD,CAAA;eACnB,GAAI,CAAA,GAAA;MADe,CAArB;IADa;IAKf,YAAA,GAAe,CAAC,CAAC,IAAF,CAAO,QAAP,EAAiB,QAAA,CAAC,OAAD,CAAA;aAC9B,OAAO,CAAC,QAAQ,CAAC,MAAjB,GAA0B;IADI,CAAjB;IAEf,IAAkD,YAAlD;MAAA,KAAA,GAAQ,MAAM,CAAC,KAAP,CAAa,YAAY,CAAC,QAA1B,CAAoC,CAAA,CAAA,EAA5C;;IACA,QAAA,GAAW,KAAA,IAAU,KAAK,CAAC,IAAN,KAAc,SAAxB,IAAsC,KAAK,CAAC,KAAN,KAAe;IAChE,KAAA,GAAW,QAAH,GAAiB,KAAK,CAAC,IAAvB,GAAiC,IAAI,CAAC,QAAL,CAAc,MAAd;IAEzC,QAAA,GAAW,MAAM,CAAC,kBAAmB,CAAA,MAAA;IACrC,MAAA,GAAS,YAAA,CAAa,QAAQ,CAAC,MAAtB;IACT,KAAA,GAAQ,MAAM,CAAC,GAAP,CAAW,QAAA,CAAC,CAAD,CAAA;AAAM,aAAO,CAAC,CAAC;IAAf,CAAX;IACR,KAAA,GAAQ,MAAM,CAAC,GAAP,CAAW,QAAA,CAAC,CAAD,CAAA;AAAM,aAAO,CAAC,CAAC;IAAf,CAAX;IACR,IAAA,GAAO,MAAM,CAAC,QAAP,CAAgB;MACrB,OAAA,EAAS,KADY;MAErB,KAAA,EAAO,KAFc;MAGrB,KAAA,EAAO,MAHc;MAIrB,GAAA,EAAK,QAAQ,CAAC,WAAW,CAAC,GAJL;MAKrB,KALqB;MAMrB,QANqB;MAOrB,QAPqB;MAQrB,IARqB;MASrB,WATqB;MAUrB,OAAA,EAAS,MAAM,CAAC;IAVK,CAAhB;IAaP,OAAO,CAAC,GAAR,CAAY,CAAA,OAAA,CAAA,CAAU,MAAV,CAAA,IAAA,CAAA,CAAuB,WAAA,CAAY,QAAQ,CAAC,WAAW,CAAC,IAAjC,CAAvB,CAAA,CAAZ;IACA,EAAE,CAAC,aAAH,CAAiB,WAAA,CAAY,QAAQ,CAAC,WAAW,CAAC,IAAjC,CAAjB,EAAyD,IAAzD;EApCuB;AAdzB" +} \ No newline at end of file diff --git a/src/write.litcoffee b/src/write.litcoffee index 123b1308..0e6e25ab 100644 --- a/src/write.litcoffee +++ b/src/write.litcoffee @@ -32,8 +32,20 @@ and rendering it to the specified output path. fileInfo = config.informationOnFiles[source] others = objectValues(fileInfo.others) - html = config.template { sources: others, css: fileInfo.destination.css, - title, hasTitle, sections, path, destination } + 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 diff --git a/test/unit-tests/fakes/fake-config.js b/test/unit-tests/fakes/fake-config.js index 50e66229..29b19618 100644 --- a/test/unit-tests/fakes/fake-config.js +++ b/test/unit-tests/fakes/fake-config.js @@ -1,71 +1,80 @@ -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": "/Users/rolov/Code/docco/docs/README.html", - "pathdir": "/Users/rolov/Code/docco/docs", - "relativefile": "README.html", - "root": "/Users/rolov/Code/docco" - }, - "language": { +// Generated by CoffeeScript 2.0.0-beta3 +(function() { + 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", + "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": "" }, - "others": { - "README.html": "README.html" + ".md": { + "html": true, + "link": "!", + "name": "markdown", + "section": "#", + "symbol": "" }, - "source": { - "base": "README.md", - "dir": "", - "ext": ".md", - "file": "README.md", - "name": "README", - "path": "/Users/rolov/Code/docco/README.md", - "relativefile": "README.md", - "root": "/Users/rolov/Code/docco" + "coffeescript": { + "name": "coffeescript", + "symbol": "#" } - } - }, - "languages": { - ".markdown": { - "html": true, - "link": "!", - "name": "markdown", - "section": "#", - "symbol": "" }, - ".md": { - "html": true, - "link": "!", - "name": "markdown", - "section": "#", - "symbol": "" + "layout": "parallel", + "marked": {}, + "output": "docs", + "root": "force matched", + "setup": ".docco.json", + "sources": { + "0": "README.md" }, - "coffeescript": { - "name": "coffeescript", - "symbol": "#" - } - }, - "layout": "parallel", - "marked": null, - "output": "docs", - "root": "/Users/rolov/Code/docco", - "setup": ".docco.json", - "sources": ["README.md"], - "template": null -}; + "template": {} + }; + +}).call(this); //# 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 index 0358faa1..d2a0df07 100644 --- a/test/unit-tests/fakes/fake-config.js.map +++ b/test/unit-tests/fakes/fake-config.js.map @@ -1 +1,10 @@ -{"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,0CAPK;QAQb,SAAA,EAAW,8BARE;QASb,cAAA,EAAgB,aATH;QAUb,MAAA,EAAQ,yBAVK;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,aADP;OApBC;MAuBX,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,mCANA;QAOR,cAAA,EAAgB,WAPR;QAQR,MAAA,EAAQ,yBARA;OAvBC;KADO;GALP;EAyCf,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;GAzCE;EA6Df,QAAA,EAAU,UA7DK;EA8Df,QAAA,EAAU,IA9DK;EA+Df,QAAA,EAAU,MA/DK;EAgEf,MAAA,EAAQ,yBAhEO;EAiEf,OAAA,EAAS,aAjEM;EAkEf,SAAA,EAAW,CACT,WADS,CAlEI;EAqEf,UAAA,EAAY,IArEG","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\": \"/Users/rolov/Code/docco/docs/README.html\"\n \"pathdir\": \"/Users/rolov/Code/docco/docs\"\n \"relativefile\": \"README.html\"\n \"root\": \"/Users/rolov/Code/docco\"\n }\n \"language\": {\n \"html\": true\n \"link\": \"!\"\n \"name\": \"markdown\"\n \"section\": \"#\"\n \"symbol\": \"\"\n }\n \"others\": {\n \"README.html\": \"README.html\"\n }\n \"source\": {\n \"base\": \"README.md\"\n \"dir\": \"\"\n \"ext\": \".md\"\n \"file\": \"README.md\"\n \"name\": \"README\"\n \"path\": \"/Users/rolov/Code/docco/README.md\"\n \"relativefile\": \"README.md\"\n \"root\": \"/Users/rolov/Code/docco\"\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\": \"parallel\"\n \"marked\": null\n \"output\": \"docs\"\n \"root\": \"/Users/rolov/Code/docco\"\n \"setup\": \".docco.json\"\n \"sources\": [\n \"README.md\"\n ]\n \"template\": null\n }"]} \ No newline at end of file +{ + "version": 3, + "file": "fake-config.js", + "sourceRoot": "", + "sources": [ + "fake-config.litcoffee" + ], + "names": [], + "mappings": ";AAEI;EAAA,MAAM,CAAC,OAAP,GAAiB;IACf,KAAA,EAAO,WADQ;IAEf,WAAA,EAAa,KAFE;IAGf,SAAA,EAAW,KAHI;IAIf,MAAA,EAAQ,KAJO;IAKf,oBAAA,EAAsB;MACpB,WAAA,EAAa;QACX,aAAA,EAAe;UACb,MAAA,EAAQ,aADK;UAEb,KAAA,EAAO,WAFM;UAGb,KAAA,EAAO,MAHM;UAIb,KAAA,EAAO,OAJM;UAKb,MAAA,EAAQ,kBALK;UAMb,MAAA,EAAQ,QANK;UAOb,MAAA,EAAQ,eAPK;UAQb,SAAA,EAAW,eARE;UASb,cAAA,EAAgB,aATH;UAUb,MAAA,EAAQ;QAVK,CADJ;QAaX,UAAA,EAAY;UACV,MAAA,EAAQ,IADE;UAEV,MAAA,EAAQ,GAFE;UAGV,MAAA,EAAQ,UAHE;UAIV,SAAA,EAAW,GAJD;UAKV,QAAA,EAAU;QALA,CAbD;QAoBX,QAAA,EAAU;UACR,aAAA,EAAe;YACb,MAAA,EAAQ,WADK;YAEb,MAAA,EAAQ;UAFK;QADP,CApBC;QA0BX,QAAA,EAAU;UACR,MAAA,EAAQ,WADA;UAER,KAAA,EAAO,EAFC;UAGR,KAAA,EAAO,KAHC;UAIR,MAAA,EAAQ,WAJA;UAKR,MAAA,EAAQ,QALA;UAMR,MAAA,EAAQ,eANA;UAOR,cAAA,EAAgB,WAPR;UAQR,MAAA,EAAQ;QARA;MA1BC;IADO,CALP;IA4Cf,WAAA,EAAa;MACX,WAAA,EAAa;QACX,MAAA,EAAQ,IADG;QAEX,MAAA,EAAQ,GAFG;QAGX,MAAA,EAAQ,UAHG;QAIX,SAAA,EAAW,GAJA;QAKX,QAAA,EAAU;MALC,CADF;MAQX,KAAA,EAAO;QACL,MAAA,EAAQ,IADH;QAEL,MAAA,EAAQ,GAFH;QAGL,MAAA,EAAQ,UAHH;QAIL,SAAA,EAAW,GAJN;QAKL,QAAA,EAAU;MALL,CARI;MAeX,cAAA,EAAgB;QACd,MAAA,EAAQ,cADM;QAEd,QAAA,EAAU;MAFI;IAfL,CA5CE;IAgEf,QAAA,EAAU,UAhEK;IAiEf,QAAA,EAAU,CAAA,CAjEK;IAkEf,QAAA,EAAU,MAlEK;IAmEf,MAAA,EAAQ,eAnEO;IAoEf,OAAA,EAAS,aApEM;IAqEf,SAAA,EAAW;MACT,GAAA,EAAK;IADI,CArEI;IAwEf,UAAA,EAAY,CAAA;EAxEG;AAAjB" +} \ No newline at end of file diff --git a/test/unit-tests/fakes/fake-config.litcoffee b/test/unit-tests/fakes/fake-config.litcoffee index 37a55e4c..3d2406ad 100644 --- a/test/unit-tests/fakes/fake-config.litcoffee +++ b/test/unit-tests/fakes/fake-config.litcoffee @@ -14,10 +14,10 @@ "ext": ".html" "file": "docs/README.html" "name": "README" - "path": "/Users/rolov/Code/docco/docs/README.html" - "pathdir": "/Users/rolov/Code/docco/docs" + "path": "force matched" + "pathdir": "force matched" "relativefile": "README.html" - "root": "/Users/rolov/Code/docco" + "root": "force matched" } "language": { "html": true @@ -27,7 +27,10 @@ "symbol": "" } "others": { - "README.html": "README.html" + "README.html": { + "file": "README.md" + "link": "README.html" + } } "source": { "base": "README.md" @@ -35,9 +38,9 @@ "ext": ".md" "file": "README.md" "name": "README" - "path": "/Users/rolov/Code/docco/README.md" + "path": "force matched" "relativefile": "README.md" - "root": "/Users/rolov/Code/docco" + "root": "force matched" } } } @@ -62,12 +65,12 @@ } } "layout": "parallel" - "marked": null + "marked": {} "output": "docs" - "root": "/Users/rolov/Code/docco" + "root": "force matched" "setup": ".docco.json" - "sources": [ - "README.md" - ] - "template": null + "sources": { + "0": "README.md" + } + "template": {} } \ No newline at end of file diff --git a/test/unit-tests/fakes/informationOnFilesFlattened.js b/test/unit-tests/fakes/informationOnFilesFlattened.js index 7760f01e..d0f8f334 100644 --- a/test/unit-tests/fakes/informationOnFilesFlattened.js +++ b/test/unit-tests/fakes/informationOnFilesFlattened.js @@ -1,154 +1,212 @@ -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" +// Generated by CoffeeScript 2.0.0-beta3 +(function() { + 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": { + "commentFilter": /(^#![\/]|^\s*#\{)/, + "commentMatcher": /^\s*\s?/, + "html": true, + "link": "!", + "linkMatcher": /^!\[(.+)\]\((.+)\)/, + "name": "markdown", + "section": "#", + "sectionMatcher": /^#\s?/, + "symbol": "" + }, + "others": { + "README.html": { + "file": "README.md", + "link": "README.html" + }, + "fake_coffee.html": { + "file": "src/fake_coffee.coffee", + "link": "fake_coffee.html" + }, + "fake_litcoffee.html": { + "file": "src/lib/fake_litcoffee.litcoffee", + "link": "fake_litcoffee.html" + }, + "fluffybunny1.jpg": { + "file": "images/fluffybunny1.jpg", + "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" + } }, - "language": { - "commentFilter": /(^#![\/]|^\s*#\{)/, - "commentMatcher": /^\s*\s?/, - "html": true, - "link": "!", - "linkMatcher": /^!\[(.+)\]\((.+)\)/, - "name": "markdown", - "section": "#", - "sectionMatcher": /^#\s?/, - "symbol": "" + "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", + "link": "README.html" + }, + "fake_coffee.html": { + "file": "src/fake_coffee.coffee", + "link": "fake_coffee.html" + }, + "fake_litcoffee.html": { + "file": "src/lib/fake_litcoffee.litcoffee", + "link": "fake_litcoffee.html" + }, + "fluffybunny1.jpg": { + "file": "images/fluffybunny1.jpg", + "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" + } }, - "others": { - "README.html": "README.html", - "fake_coffee.html": "fake_coffee.html", - "fake_litcoffee.html": "fake_litcoffee.html", - "fluffybunny1.jpg": "images/fluffybunny1.jpg" + "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", + "link": "README.html" + }, + "fake_coffee.html": { + "file": "src/fake_coffee.coffee", + "link": "fake_coffee.html" + }, + "fake_litcoffee.html": { + "file": "src/lib/fake_litcoffee.litcoffee", + "link": "fake_litcoffee.html" + }, + "fluffybunny1.jpg": { + "file": "images/fluffybunny1.jpg", + "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" + } }, - "source": { - "base": "README.md", - "dir": "", - "ext": ".md", - "file": "README.md", - "name": "README", - "path": "/Project/README.md", - "relativefile": "README.md", - "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", + "link": "README.html" + }, + "fake_coffee.html": { + "file": "src/fake_coffee.coffee", + "link": "fake_coffee.html" + }, + "fake_litcoffee.html": { + "file": "src/lib/fake_litcoffee.litcoffee", + "link": "fake_litcoffee.html" + }, + "fluffybunny1.jpg": { + "file": "images/fluffybunny1.jpg", + "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" + } } - }, - "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": "README.html", - "fake_coffee.html": "fake_coffee.html", - "fake_litcoffee.html": "fake_litcoffee.html", - "fluffybunny1.jpg": "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?/, - "name": "coffeescript", - "symbol": "#" - }, - "others": { - "README.html": "README.html", - "fake_coffee.html": "fake_coffee.html", - "fake_litcoffee.html": "fake_litcoffee.html", - "fluffybunny1.jpg": "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": "README.html", - "fake_coffee.html": "fake_coffee.html", - "fake_litcoffee.html": "fake_litcoffee.html", - "fluffybunny1.jpg": "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" - } - } -}; + }; + +}).call(this); //# sourceMappingURL=informationOnFilesFlattened.js.map diff --git a/test/unit-tests/fakes/informationOnFilesFlattened.js.map b/test/unit-tests/fakes/informationOnFilesFlattened.js.map index 83ffc062..009d2959 100644 --- a/test/unit-tests/fakes/informationOnFilesFlattened.js.map +++ b/test/unit-tests/fakes/informationOnFilesFlattened.js.map @@ -1 +1,10 @@ -{"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,eAAA,EAAiB,mBADP;MAEV,gBAAA,EAAkB,SAFR;MAGV,MAAA,EAAQ,IAHE;MAIV,MAAA,EAAQ,GAJE;MAKV,aAAA,EAAe,oBALL;MAMV,MAAA,EAAQ,UANE;MAOV,SAAA,EAAW,GAPD;MAQV,gBAAA,EAAkB,OARR;MASV,QAAA,EAAU,EATA;KAbD;IAwBX,QAAA,EAAU;MACR,aAAA,EAAe,aADP;MAER,kBAAA,EAAoB,kBAFZ;MAGR,qBAAA,EAAuB,qBAHf;MAIR,kBAAA,EAAoB,yBAJZ;KAxBC;IA8BX,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;KA9BC;GADE;EA0Cf,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,aADP;MAER,kBAAA,EAAoB,kBAFZ;MAGR,qBAAA,EAAuB,qBAHf;MAIR,kBAAA,EAAoB,yBAJZ;KAnBe;IAyBzB,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;KAzBe;GA1CZ;EA8Ef,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,MAAA,EAAQ,cAHE;MAIV,QAAA,EAAU,GAJA;KAbY;IAmBxB,QAAA,EAAU;MACR,aAAA,EAAe,aADP;MAER,kBAAA,EAAoB,kBAFZ;MAGR,qBAAA,EAAuB,qBAHf;MAIR,kBAAA,EAAoB,yBAJZ;KAnBc;IAyBxB,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;KAzBc;GA9EX;EAkHf,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,aADP;MAER,kBAAA,EAAoB,kBAFZ;MAGR,qBAAA,EAAuB,qBAHf;MAIR,kBAAA,EAAoB,yBAJZ;KApBwB;IA0BlC,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;KA1BwB;GAlHrB","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 \"commentFilter\": /(^#![\\/]|^\\s*#\\{)/\n \"commentMatcher\": /^\\s*\\s?/\n \"html\": true\n \"link\": \"!\"\n \"linkMatcher\": /^!\\[(.+)\\]\\((.+)\\)/\n \"name\": \"markdown\"\n \"section\": \"#\"\n \"sectionMatcher\": /^#\\s?/\n \"symbol\": \"\"\n }\n \"others\": {\n \"README.html\": \"README.html\"\n \"fake_coffee.html\": \"fake_coffee.html\"\n \"fake_litcoffee.html\": \"fake_litcoffee.html\"\n \"fluffybunny1.jpg\": \"images/fluffybunny1.jpg\"\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\": \"README.html\"\n \"fake_coffee.html\": \"fake_coffee.html\"\n \"fake_litcoffee.html\": \"fake_litcoffee.html\"\n \"fluffybunny1.jpg\": \"images/fluffybunny1.jpg\"\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 \"name\": \"coffeescript\"\n \"symbol\": \"#\"\n }\n \"others\": {\n \"README.html\": \"README.html\"\n \"fake_coffee.html\": \"fake_coffee.html\"\n \"fake_litcoffee.html\": \"fake_litcoffee.html\"\n \"fluffybunny1.jpg\": \"images/fluffybunny1.jpg\"\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\": \"README.html\"\n \"fake_coffee.html\": \"fake_coffee.html\"\n \"fake_litcoffee.html\": \"fake_litcoffee.html\"\n \"fluffybunny1.jpg\": \"images/fluffybunny1.jpg\"\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 +{ + "version": 3, + "file": "informationOnFilesFlattened.js", + "sourceRoot": "", + "sources": [ + "informationOnFilesFlattened.litcoffee" + ], + "names": [], + "mappings": "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" +} \ No newline at end of file diff --git a/test/unit-tests/fakes/informationOnFilesFlattened.litcoffee b/test/unit-tests/fakes/informationOnFilesFlattened.litcoffee index 9627717d..e595fb41 100644 --- a/test/unit-tests/fakes/informationOnFilesFlattened.litcoffee +++ b/test/unit-tests/fakes/informationOnFilesFlattened.litcoffee @@ -26,10 +26,22 @@ A fake for the flattended getInformationOnFiles test. "symbol": "" } "others": { - "README.html": "README.html" - "fake_coffee.html": "fake_coffee.html" - "fake_litcoffee.html": "fake_litcoffee.html" - "fluffybunny1.jpg": "images/fluffybunny1.jpg" + "README.html": { + "file": "README.md" + "link": "README.html" + } + "fake_coffee.html": { + "file": "src/fake_coffee.coffee" + "link": "fake_coffee.html" + } + "fake_litcoffee.html": { + "file": "src/lib/fake_litcoffee.litcoffee" + "link": "fake_litcoffee.html" + } + "fluffybunny1.jpg": { + "file": "images/fluffybunny1.jpg" + "link": "images/fluffybunny1.jpg" + } } "source": { "base": "README.md" @@ -62,10 +74,22 @@ A fake for the flattended getInformationOnFiles test. "name": "image" } "others": { - "README.html": "README.html" - "fake_coffee.html": "fake_coffee.html" - "fake_litcoffee.html": "fake_litcoffee.html" - "fluffybunny1.jpg": "images/fluffybunny1.jpg" + "README.html": { + "file": "README.md" + "link": "README.html" + } + "fake_coffee.html": { + "file": "src/fake_coffee.coffee" + "link": "fake_coffee.html" + } + "fake_litcoffee.html": { + "file": "src/lib/fake_litcoffee.litcoffee" + "link": "fake_litcoffee.html" + } + "fluffybunny1.jpg": { + "file": "images/fluffybunny1.jpg" + "link": "images/fluffybunny1.jpg" + } } "source": { "base": "fluffybunny1.jpg" @@ -94,14 +118,32 @@ A fake for the flattended getInformationOnFiles test. "language": { "commentFilter": /(^#![\/]|^\s*#\{)/ "commentMatcher": /^\s*#\s?/ + "multiline": { + "start": "###" + "stop": "###" + } "name": "coffeescript" + "startMatcher": /^\s*\#\#\#/ + "stopMatcher": /^\s*\#\#\#/ "symbol": "#" } "others": { - "README.html": "README.html" - "fake_coffee.html": "fake_coffee.html" - "fake_litcoffee.html": "fake_litcoffee.html" - "fluffybunny1.jpg": "images/fluffybunny1.jpg" + "README.html": { + "file": "README.md" + "link": "README.html" + } + "fake_coffee.html": { + "file": "src/fake_coffee.coffee" + "link": "fake_coffee.html" + } + "fake_litcoffee.html": { + "file": "src/lib/fake_litcoffee.litcoffee" + "link": "fake_litcoffee.html" + } + "fluffybunny1.jpg": { + "file": "images/fluffybunny1.jpg" + "link": "images/fluffybunny1.jpg" + } } "source": { "base": "fake_coffee.coffee" @@ -135,10 +177,22 @@ A fake for the flattended getInformationOnFiles test. "symbol": "#" } "others": { - "README.html": "README.html" - "fake_coffee.html": "fake_coffee.html" - "fake_litcoffee.html": "fake_litcoffee.html" - "fluffybunny1.jpg": "images/fluffybunny1.jpg" + "README.html": { + "file": "README.md" + "link": "README.html" + } + "fake_coffee.html": { + "file": "src/fake_coffee.coffee" + "link": "fake_coffee.html" + } + "fake_litcoffee.html": { + "file": "src/lib/fake_litcoffee.litcoffee" + "link": "fake_litcoffee.html" + } + "fluffybunny1.jpg": { + "file": "images/fluffybunny1.jpg" + "link": "images/fluffybunny1.jpg" + } } "source": { "base": "fake_litcoffee.litcoffee" diff --git a/test/unit-tests/fakes/informationOnFilesUnFlattened.js b/test/unit-tests/fakes/informationOnFilesUnFlattened.js index 56a0ebbb..92477e22 100644 --- a/test/unit-tests/fakes/informationOnFilesUnFlattened.js +++ b/test/unit-tests/fakes/informationOnFilesUnFlattened.js @@ -1,154 +1,212 @@ -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" +// Generated by CoffeeScript 2.0.0-beta3 +(function() { + 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": { + "commentFilter": /(^#![\/]|^\s*#\{)/, + "commentMatcher": /^\s*\s?/, + "html": true, + "link": "!", + "linkMatcher": /^!\[(.+)\]\((.+)\)/, + "name": "markdown", + "section": "#", + "sectionMatcher": /^#\s?/, + "symbol": "" + }, + "others": { + "README.html": { + "file": "README.md", + "link": "README.html" + }, + "fake_coffee.html": { + "file": "src/fake_coffee.coffee", + "link": "src/fake_coffee.html" + }, + "fake_litcoffee.html": { + "file": "src/lib/fake_litcoffee.litcoffee", + "link": "src/lib/fake_litcoffee.html" + }, + "fluffybunny1.jpg": { + "file": "images/fluffybunny1.jpg", + "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" + } }, - "language": { - "commentFilter": /(^#![\/]|^\s*#\{)/, - "commentMatcher": /^\s*\s?/, - "html": true, - "link": "!", - "linkMatcher": /^!\[(.+)\]\((.+)\)/, - "name": "markdown", - "section": "#", - "sectionMatcher": /^#\s?/, - "symbol": "" + "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", + "link": "../README.html" + }, + "fake_coffee.html": { + "file": "src/fake_coffee.coffee", + "link": "../src/fake_coffee.html" + }, + "fake_litcoffee.html": { + "file": "src/lib/fake_litcoffee.litcoffee", + "link": "../src/lib/fake_litcoffee.html" + }, + "fluffybunny1.jpg": { + "file": "images/fluffybunny1.jpg", + "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" + } }, - "others": { - "README.html": "README.html", - "fake_coffee.html": "src/fake_coffee.html", - "fake_litcoffee.html": "src/lib/fake_litcoffee.html", - "fluffybunny1.jpg": "images/fluffybunny1.jpg" + "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", + "link": "../README.html" + }, + "fake_coffee.html": { + "file": "src/fake_coffee.coffee", + "link": "fake_coffee.html" + }, + "fake_litcoffee.html": { + "file": "src/lib/fake_litcoffee.litcoffee", + "link": "lib/fake_litcoffee.html" + }, + "fluffybunny1.jpg": { + "file": "images/fluffybunny1.jpg", + "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" + } }, - "source": { - "base": "README.md", - "dir": "", - "ext": ".md", - "file": "README.md", - "name": "README", - "path": "/Project/README.md", - "relativefile": "README.md", - "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", + "link": "../../README.html" + }, + "fake_coffee.html": { + "file": "src/fake_coffee.coffee", + "link": "../fake_coffee.html" + }, + "fake_litcoffee.html": { + "file": "src/lib/fake_litcoffee.litcoffee", + "link": "fake_litcoffee.html" + }, + "fluffybunny1.jpg": { + "file": "images/fluffybunny1.jpg", + "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" + } } - }, - "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": "../README.html", - "fake_coffee.html": "../src/fake_coffee.html", - "fake_litcoffee.html": "../src/lib/fake_litcoffee.html", - "fluffybunny1.jpg": "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?/, - "name": "coffeescript", - "symbol": "#" - }, - "others": { - "README.html": "../README.html", - "fake_coffee.html": "fake_coffee.html", - "fake_litcoffee.html": "lib/fake_litcoffee.html", - "fluffybunny1.jpg": "../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": "../../README.html", - "fake_coffee.html": "../fake_coffee.html", - "fake_litcoffee.html": "fake_litcoffee.html", - "fluffybunny1.jpg": "../../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" - } - } -}; + }; + +}).call(this); //# sourceMappingURL=informationOnFilesUnFlattened.js.map diff --git a/test/unit-tests/fakes/informationOnFilesUnFlattened.js.map b/test/unit-tests/fakes/informationOnFilesUnFlattened.js.map index b2fd43d4..5157629d 100644 --- a/test/unit-tests/fakes/informationOnFilesUnFlattened.js.map +++ b/test/unit-tests/fakes/informationOnFilesUnFlattened.js.map @@ -1 +1,10 @@ -{"version":3,"file":"informationOnFilesUnFlattened.js","sources":["fakes/informationOnFilesUnFlattened.litcoffee"],"names":[],"mappings":"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","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 \"commentFilter\": /(^#![\\/]|^\\s*#\\{)/\n \"commentMatcher\": /^\\s*\\s?/\n \"html\": true\n \"link\": \"!\"\n \"linkMatcher\": /^!\\[(.+)\\]\\((.+)\\)/\n \"name\": \"markdown\"\n \"section\": \"#\"\n \"sectionMatcher\": /^#\\s?/\n \"symbol\": \"\"\n }\n \"others\": {\n \"README.html\": \"README.html\"\n \"fake_coffee.html\": \"src/fake_coffee.html\"\n \"fake_litcoffee.html\": \"src/lib/fake_litcoffee.html\"\n \"fluffybunny1.jpg\": \"images/fluffybunny1.jpg\"\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\": \"../README.html\"\n \"fake_coffee.html\": \"../src/fake_coffee.html\"\n \"fake_litcoffee.html\": \"../src/lib/fake_litcoffee.html\"\n \"fluffybunny1.jpg\": \"fluffybunny1.jpg\"\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 \"name\": \"coffeescript\"\n \"symbol\": \"#\"\n }\n \"others\": {\n \"README.html\": \"../README.html\"\n \"fake_coffee.html\": \"fake_coffee.html\"\n \"fake_litcoffee.html\": \"lib/fake_litcoffee.html\"\n \"fluffybunny1.jpg\": \"../images/fluffybunny1.jpg\"\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\": \"../../README.html\"\n \"fake_coffee.html\": \"../fake_coffee.html\"\n \"fake_litcoffee.html\": \"fake_litcoffee.html\"\n \"fluffybunny1.jpg\": \"../../images/fluffybunny1.jpg\"\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 +{ + "version": 3, + "file": "informationOnFilesUnFlattened.js", + "sourceRoot": "", + "sources": [ + "informationOnFilesUnFlattened.litcoffee" + ], + "names": [], + "mappings": "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" +} \ No newline at end of file diff --git a/test/unit-tests/fakes/informationOnFilesUnFlattened.litcoffee b/test/unit-tests/fakes/informationOnFilesUnFlattened.litcoffee index 19e4b83d..9852b303 100644 --- a/test/unit-tests/fakes/informationOnFilesUnFlattened.litcoffee +++ b/test/unit-tests/fakes/informationOnFilesUnFlattened.litcoffee @@ -26,10 +26,22 @@ A fake for the unflattended getInformationOnFiles test. "symbol": "" } "others": { - "README.html": "README.html" - "fake_coffee.html": "src/fake_coffee.html" - "fake_litcoffee.html": "src/lib/fake_litcoffee.html" - "fluffybunny1.jpg": "images/fluffybunny1.jpg" + "README.html": { + "file": "README.md" + "link": "README.html" + } + "fake_coffee.html": { + "file": "src/fake_coffee.coffee" + "link": "src/fake_coffee.html" + } + "fake_litcoffee.html": { + "file": "src/lib/fake_litcoffee.litcoffee" + "link": "src/lib/fake_litcoffee.html" + } + "fluffybunny1.jpg": { + "file": "images/fluffybunny1.jpg" + "link": "images/fluffybunny1.jpg" + } } "source": { "base": "README.md" @@ -62,10 +74,22 @@ A fake for the unflattended getInformationOnFiles test. "name": "image" } "others": { - "README.html": "../README.html" - "fake_coffee.html": "../src/fake_coffee.html" - "fake_litcoffee.html": "../src/lib/fake_litcoffee.html" - "fluffybunny1.jpg": "fluffybunny1.jpg" + "README.html": { + "file": "README.md" + "link": "../README.html" + } + "fake_coffee.html": { + "file": "src/fake_coffee.coffee" + "link": "../src/fake_coffee.html" + } + "fake_litcoffee.html": { + "file": "src/lib/fake_litcoffee.litcoffee" + "link": "../src/lib/fake_litcoffee.html" + } + "fluffybunny1.jpg": { + "file": "images/fluffybunny1.jpg" + "link": "fluffybunny1.jpg" + } } "source": { "base": "fluffybunny1.jpg" @@ -94,14 +118,32 @@ A fake for the unflattended getInformationOnFiles test. "language": { "commentFilter": /(^#![\/]|^\s*#\{)/ "commentMatcher": /^\s*#\s?/ + "multiline": { + "start": "###" + "stop": "###" + } "name": "coffeescript" + "startMatcher": /^\s*\#\#\#/ + "stopMatcher": /^\s*\#\#\#/ "symbol": "#" } "others": { - "README.html": "../README.html" - "fake_coffee.html": "fake_coffee.html" - "fake_litcoffee.html": "lib/fake_litcoffee.html" - "fluffybunny1.jpg": "../images/fluffybunny1.jpg" + "README.html": { + "file": "README.md" + "link": "../README.html" + } + "fake_coffee.html": { + "file": "src/fake_coffee.coffee" + "link": "fake_coffee.html" + } + "fake_litcoffee.html": { + "file": "src/lib/fake_litcoffee.litcoffee" + "link": "lib/fake_litcoffee.html" + } + "fluffybunny1.jpg": { + "file": "images/fluffybunny1.jpg" + "link": "../images/fluffybunny1.jpg" + } } "source": { "base": "fake_coffee.coffee" @@ -135,10 +177,22 @@ A fake for the unflattended getInformationOnFiles test. "symbol": "#" } "others": { - "README.html": "../../README.html" - "fake_coffee.html": "../fake_coffee.html" - "fake_litcoffee.html": "fake_litcoffee.html" - "fluffybunny1.jpg": "../../images/fluffybunny1.jpg" + "README.html": { + "file": "README.md" + "link": "../../README.html" + } + "fake_coffee.html": { + "file": "src/fake_coffee.coffee" + "link": "../fake_coffee.html" + } + "fake_litcoffee.html": { + "file": "src/lib/fake_litcoffee.litcoffee" + "link": "fake_litcoffee.html" + } + "fluffybunny1.jpg": { + "file": "images/fluffybunny1.jpg" + "link": "../../images/fluffybunny1.jpg" + } } "source": { "base": "fake_litcoffee.litcoffee" diff --git a/test/unit-tests/unit-test-getOthers.js b/test/unit-tests/unit-test-getOthers.js index d98403e0..75b85333 100644 --- a/test/unit-tests/unit-test-getOthers.js +++ b/test/unit-tests/unit-test-getOthers.js @@ -1,64 +1,92 @@ -var assert, getOthers, ref, should; +// Generated by CoffeeScript 2.0.0-beta3 +(function() { + var assert, getOthers, should; -ref = require('chai'), assert = ref.assert, should = ref.should; + ({assert, should} = require('chai')); -should(); + should(); -getOthers = require('../../src/getOthers'); + 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": "README.html", - "fake_coffee.html": "src/fake_coffee.html" + 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", + "link": "README.html" + }, + "fake_coffee.html": { + "file": "src/fake_coffee.coffee", + "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": "../README.html", - "fake_coffee.html": "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", + "link": "../README.html" + }, + "fake_coffee.html": { + "file": "src/fake_coffee.coffee", + "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": "README.html", - "fake_coffee.html": "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", + "link": "README.html" + }, + "fake_coffee.html": { + "file": "src/fake_coffee.coffee", + "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', 'src/fake_coffee.coffee'], - flatten: true - }; - others = getOthers('src/fake_coffee.coffee', informationOnFiles, config); - assert.deepEqual(others, { - "README.html": "README.html", - "fake_coffee.html": "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', 'src/fake_coffee.coffee'], + flatten: true + }; + others = getOthers('src/fake_coffee.coffee', informationOnFiles, config); + assert.deepEqual(others, { + "README.html": { + "file": "README.md", + "link": "README.html" + }, + "fake_coffee.html": { + "file": "src/fake_coffee.coffee", + "link": "fake_coffee.html" + } + }); }); }); -}); + +}).call(this); //# 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 index cb399a56..0a62d1ee 100644 --- a/test/unit-tests/unit-test-getOthers.js.map +++ b/test/unit-tests/unit-test-getOthers.js.map @@ -1 +1,10 @@ -{"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,aADQ;MAEvB,kBAAA,EAAoB,sBAFG;KAAzB;EAVmE,CAArE;EAgBA,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,gBADQ;MAEvB,kBAAA,EAAoB,kBAFG;KAAzB;EAVsE,CAAxE;EAgBA,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,aADQ;MAEvB,kBAAA,EAAoB,kBAFG;KAAzB;EAViE,CAAnE;EAgBA,EAAA,CAAG,iEAAH,EAAsE,SAAA;AACpE,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,wBAAV,EAAoC,kBAApC,EAAwD,MAAxD;IACT,MAAM,CAAC,SAAP,CAAiB,MAAjB,EAAyB;MACvB,aAAA,EAAe,aADQ;MAEvB,kBAAA,EAAoB,kBAFG;KAAzB;EAVoE,CAAtE;AAlD0B,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\": \"README.html\"\n \"fake_coffee.html\": \"src/fake_coffee.html\"\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\": \"../README.html\"\n \"fake_coffee.html\": \"fake_coffee.html\"\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\": \"README.html\"\n \"fake_coffee.html\": \"fake_coffee.html\"\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 'src/fake_coffee.coffee'\n ]\n flatten: true\n }\n others = getOthers('src/fake_coffee.coffee', informationOnFiles, config)\n assert.deepEqual(others, {\n \"README.html\": \"README.html\"\n \"fake_coffee.html\": \"fake_coffee.html\"\n })\n return\n return"]} \ No newline at end of file +{ + "version": 3, + "file": "unit-test-getOthers.js", + "sourceRoot": "", + "sources": [ + "unit-test-getOthers.litcoffee" + ], + "names": [], + "mappings": ";AAEI;AAAA,MAAA;;EAAA,CAAA,CAAE,MAAF,EAAU,MAAV,CAAA,GAAqB,OAAA,CAAQ,MAAR,CAArB;;EAAsC,MAAA,CAAA;;EAEtC,SAAA,GAAY,OAAA,CAAQ,qBAAR;;EAEZ,QAAA,CAAS,iBAAT,EAA4B,QAAA,CAAA,CAAA;IAE1B,EAAA,CAAG,gEAAH,EAAqE,QAAA,CAAA,CAAA;AACnE,UAAA;MAAA,kBAAA,GAAqB,OAAA,CAAQ,uCAAR;MACrB,MAAA,GAAS;QACP,OAAA,EAAS,CACP,WADO,EAEP,wBAFO,CADF;QAKP,OAAA,EAAS;MALF;MAOT,MAAA,GAAS,SAAA,CAAU,WAAV,EAAuB,kBAAvB,EAA2C,MAA3C;MACT,MAAM,CAAC,SAAP,CAAiB,MAAjB,EAAyB;QACvB,aAAA,EAAe;UACb,MAAA,EAAQ,WADK;UAEb,MAAA,EAAQ;QAFK,CADQ;QAKvB,kBAAA,EAAoB;UAClB,MAAA,EAAQ,wBADU;UAElB,MAAA,EAAQ;QAFU;MALG,CAAzB;IAVmE,CAArE;IAsBA,EAAA,CAAG,mEAAH,EAAwE,QAAA,CAAA,CAAA;AACtE,UAAA;MAAA,kBAAA,GAAqB,OAAA,CAAQ,uCAAR;MACrB,MAAA,GAAS;QACP,OAAA,EAAS,CACP,WADO,EAEP,wBAFO,CADF;QAKP,OAAA,EAAS;MALF;MAOT,MAAA,GAAS,SAAA,CAAU,wBAAV,EAAoC,kBAApC,EAAwD,MAAxD;MACT,MAAM,CAAC,SAAP,CAAiB,MAAjB,EAAyB;QACvB,aAAA,EAAe;UACb,MAAA,EAAQ,WADK;UAEb,MAAA,EAAQ;QAFK,CADQ;QAKvB,kBAAA,EAAoB;UAClB,MAAA,EAAQ,wBADU;UAElB,MAAA,EAAQ;QAFU;MALG,CAAzB;IAVsE,CAAxE;IAsBA,EAAA,CAAG,8DAAH,EAAmE,QAAA,CAAA,CAAA;AACjE,UAAA;MAAA,kBAAA,GAAqB,OAAA,CAAQ,qCAAR;MACrB,MAAA,GAAS;QACP,OAAA,EAAS,CACP,WADO,EAEP,wBAFO,CADF;QAKP,OAAA,EAAS;MALF;MAOT,MAAA,GAAS,SAAA,CAAU,WAAV,EAAuB,kBAAvB,EAA2C,MAA3C;MACT,MAAM,CAAC,SAAP,CAAiB,MAAjB,EAAyB;QACvB,aAAA,EAAe;UACb,MAAA,EAAQ,WADK;UAEb,MAAA,EAAQ;QAFK,CADQ;QAKvB,kBAAA,EAAoB;UAClB,MAAA,EAAQ,wBADU;UAElB,MAAA,EAAQ;QAFU;MALG,CAAzB;IAViE,CAAnE;IAsBA,EAAA,CAAG,iEAAH,EAAsE,QAAA,CAAA,CAAA;AACpE,UAAA;MAAA,kBAAA,GAAqB,OAAA,CAAQ,qCAAR;MACrB,MAAA,GAAS;QACP,OAAA,EAAS,CACP,WADO,EAEP,wBAFO,CADF;QAKP,OAAA,EAAS;MALF;MAOT,MAAA,GAAS,SAAA,CAAU,wBAAV,EAAoC,kBAApC,EAAwD,MAAxD;MACT,MAAM,CAAC,SAAP,CAAiB,MAAjB,EAAyB;QACvB,aAAA,EAAe;UACb,MAAA,EAAQ,WADK;UAEb,MAAA,EAAQ;QAFK,CADQ;QAKvB,kBAAA,EAAoB;UAClB,MAAA,EAAQ,wBADU;UAElB,MAAA,EAAQ;QAFU;MALG,CAAzB;IAVoE,CAAtE;EApE0B,CAA5B;AAJA" +} \ No newline at end of file diff --git a/test/unit-tests/unit-test-getOthers.litcoffee b/test/unit-tests/unit-test-getOthers.litcoffee index 5d21c509..5ec61567 100644 --- a/test/unit-tests/unit-test-getOthers.litcoffee +++ b/test/unit-tests/unit-test-getOthers.litcoffee @@ -17,8 +17,14 @@ } others = getOthers('README.md', informationOnFiles, config) assert.deepEqual(others, { - "README.html": "README.html" - "fake_coffee.html": "src/fake_coffee.html" + "README.html": { + "file": "README.md" + "link": "README.html" + } + "fake_coffee.html": { + "file": "src/fake_coffee.coffee" + "link": "src/fake_coffee.html" + } }) return @@ -33,8 +39,14 @@ } others = getOthers('src/fake_coffee.coffee', informationOnFiles, config) assert.deepEqual(others, { - "README.html": "../README.html" - "fake_coffee.html": "fake_coffee.html" + "README.html": { + "file": "README.md" + "link": "../README.html" + } + "fake_coffee.html": { + "file": "src/fake_coffee.coffee" + "link": "fake_coffee.html" + } }) return @@ -49,8 +61,14 @@ } others = getOthers('README.md', informationOnFiles, config) assert.deepEqual(others, { - "README.html": "README.html" - "fake_coffee.html": "fake_coffee.html" + "README.html": { + "file": "README.md" + "link": "README.html" + } + "fake_coffee.html": { + "file": "src/fake_coffee.coffee" + "link": "fake_coffee.html" + } }) return @@ -65,8 +83,14 @@ } others = getOthers('src/fake_coffee.coffee', informationOnFiles, config) assert.deepEqual(others, { - "README.html": "README.html" - "fake_coffee.html": "fake_coffee.html" + "README.html": { + "file": "README.md" + "link": "README.html" + } + "fake_coffee.html": { + "file": "src/fake_coffee.coffee" + "link": "fake_coffee.html" + } }) return return \ No newline at end of file From aac38ff6901d47cfb28faf1d0c4c7e583623fa1b Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 10 Jul 2017 20:49:25 -0700 Subject: [PATCH 82/95] side by side style --- resources/sidebyside/docco.css | 518 ++++++++++++++++++ resources/sidebyside/docco.jst | 70 +++ .../sidebyside/public/fonts/aller-bold.eot | Bin 0 -> 29804 bytes .../sidebyside/public/fonts/aller-bold.ttf | Bin 0 -> 66836 bytes .../sidebyside/public/fonts/aller-bold.woff | Bin 0 -> 33244 bytes .../sidebyside/public/fonts/aller-light.eot | Bin 0 -> 29509 bytes .../sidebyside/public/fonts/aller-light.ttf | Bin 0 -> 68620 bytes .../sidebyside/public/fonts/aller-light.woff | Bin 0 -> 33124 bytes .../sidebyside/public/fonts/roboto-black.eot | Bin 0 -> 20702 bytes .../sidebyside/public/fonts/roboto-black.ttf | Bin 0 -> 44828 bytes .../sidebyside/public/fonts/roboto-black.woff | Bin 0 -> 24536 bytes .../public/stylesheets/normalize.css | 375 +++++++++++++ test/sim/.adocco.json | 2 +- 13 files changed, 964 insertions(+), 1 deletion(-) create mode 100644 resources/sidebyside/docco.css create mode 100644 resources/sidebyside/docco.jst create mode 100644 resources/sidebyside/public/fonts/aller-bold.eot create mode 100644 resources/sidebyside/public/fonts/aller-bold.ttf create mode 100644 resources/sidebyside/public/fonts/aller-bold.woff create mode 100644 resources/sidebyside/public/fonts/aller-light.eot create mode 100644 resources/sidebyside/public/fonts/aller-light.ttf create mode 100644 resources/sidebyside/public/fonts/aller-light.woff create mode 100755 resources/sidebyside/public/fonts/roboto-black.eot create mode 100755 resources/sidebyside/public/fonts/roboto-black.ttf create mode 100755 resources/sidebyside/public/fonts/roboto-black.woff create mode 100644 resources/sidebyside/public/stylesheets/normalize.css diff --git a/resources/sidebyside/docco.css b/resources/sidebyside/docco.css new file mode 100644 index 00000000..21225e2e --- /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: block; + 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 + +*/ + +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 100644 index 00000000..7d8e4a40 --- /dev/null +++ b/resources/sidebyside/docco.jst @@ -0,0 +1,70 @@ + + + + + <%= title %> + + + + + +
        +
        + <% if (sources.length > 1) { %> + + <% } %> +
          + <% if (!hasTitle) { %> +
        • +
          +

          <%= title %>

          +
          +
        • + <% } %> + <% for (var i=0, l=sections.length; i + + <% var section = sections[i]; %> +
        • +
          + <% heading = section.docsHtml.match(/^\s*<(h\d)>/) %> +
          + +
          + <%= section.docsHtml %> +
          + <% if (section.codeText.replace(/\s/gm, '') != '') { %> +
          <%= section.codeHtml %>
          + <% } %> +
        • + <% } %> +
        +
        + + diff --git a/resources/sidebyside/public/fonts/aller-bold.eot b/resources/sidebyside/public/fonts/aller-bold.eot new file mode 100644 index 0000000000000000000000000000000000000000..1b32532a8e40e483069482c3650c3ef22ef16bdd GIT binary patch literal 29804 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 F>VRGqwvGS* literal 0 HcmV?d00001 diff --git a/resources/sidebyside/public/fonts/aller-bold.ttf b/resources/sidebyside/public/fonts/aller-bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..dc4cc9c27a59ab14fbb7444c6ab35c5b33a034f6 GIT binary patch literal 66836 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%0AAIIsziQtyhPht7#*LdNqb{-ye3^( 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ⅆA*wV|2E?UgaO-298Xthc^!eoT=hLnT61q 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 literal 0 HcmV?d00001 diff --git a/resources/sidebyside/public/fonts/aller-bold.woff b/resources/sidebyside/public/fonts/aller-bold.woff new file mode 100644 index 0000000000000000000000000000000000000000..fa16fd0aba81582de121d833c7bc50e8f1b1b981 GIT binary patch literal 33244 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 q6yXA@F-u0Z~1!1poleYR}~W literal 0 HcmV?d00001 diff --git a/resources/sidebyside/public/fonts/aller-light.eot b/resources/sidebyside/public/fonts/aller-light.eot new file mode 100644 index 0000000000000000000000000000000000000000..40bd654b5fe63501ae64d5673b5aa45051a69e65 GIT binary patch literal 29509 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�y6>nTFX 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 literal 0 HcmV?d00001 diff --git a/resources/sidebyside/public/fonts/roboto-black.eot b/resources/sidebyside/public/fonts/roboto-black.eot new file mode 100755 index 0000000000000000000000000000000000000000..571ed49125910cd6b6b5a9259134dd2e8d37766e GIT binary patch literal 20702 zcmZ^~WlSY(%q_aHjl28C-QC^Y-JQYRb>r^t?#^Jt;O_2&I}8p3%y8cG<(%By+}t)R z?X$Ylr2m>G&z>p(aIFFWK>p{@fd3u;uR#F7P=Nn9Mb$4zz`g+ppbGjwr6LHxe<_5@ zoGIY<|5g7#5f7jaa0ZzF2ao>%0*C_~0A>ISz_%pq`mk&#ZAx z8?5SW*Q#lS@~Yn|a_(^od0>LrjCOU|btOM0TkJ2|0Ye3Y2-VVwvr}!b6qNA@OEo*! z8LT-4Q*2)u1c!?w8dqYj6POzA<~$OiHoR8EvuEW@-UN}Yeq>1%oB?aCee%zUR7A%t z!D&TL2(-AMLD&@nF7koSZ)KFuCx04gesD!vuC&iJQj1%oLzl39mA^uQ-gJX#=RHYr zV#nsAe3F{36|LP{JGc*ThOWUobG%6T31fSo9c82@1l%Q~|y3l`R0UKdy_5+6y!938l-;H3zJ(qP<4DUbI zPN@}@Y?aEb!^I>s?M(Ig+S|AHsA6Jg92HwSJkaFKW03zq$h;y|uJAbH33fQN0lwk& z6CakRKnO{Sxe^#eZ^-{f(dU$XF_XiG$;CnQn?^Yf{1dehM0RjTc`ArlMyf``mUxK& z>7pxec&)lacnkAmIGP)ikS5w&*o>@IfE4lJ*iz(qhVUp_*ssJbwC@DsaSGvG)g^2N zGHl63b`cKSdP;31I3||jQ>Vpfl1Fmoy8a9#(Tt?PLL z8mH{c;<)9xPohU-cOob6#_vcsa$yzLA5a6h)jr}Ty91s(>2o9YTqUg8l$MqYIYLpCO4HAmjonS8KI_eg`jl-YRh%X@LR@2E}_*ZH8 zs66+ZTqAx9AmVB?>;g=NrI{S958}?eXGvR%TKi3y`1l}`H0Ep?{TN6$+-wN)0crhd zZw;Cnc%;86^{+?5n*ocxL2b|VxhBNe8 zjBb!{9W& zt5diJ;_Iq@AuJnV49G~|g8KQHo};~;&%mAh=LyoTB2UqOWGq`exD`6I@%7$lLK5~C zUZnvz&K@ghi=j`)Ii4!`-2|5HC1Z{XLLDd6ul9~W3fcHAoDQA2vkyzH+x1^K3G12> z%gp;%@glFgwrISUM&FXtcba_(fIh{l^lwvw9=K^6!5HjwO+E6aKv_*J+0%4rx?h}r zBlDvjB$=35abYn^S_-=wT$Vo>4eId*Nj-5+x{N4$h|88zuaS3H35M$0rY)gX50rff zT9^{7=uBUIib89s?Yc1&^m5{48a35p5L!T}k*!c12+ea^aG|eA=_>)nR2ZCQ2zPp= zd)1JwDYno`!z;06FJvk2VhG8k&a z_w|q};=^-N|8}IbMeRk9e8JJ4D&r(&G|)zHyA9~yQq9h>DYK&?7(?6`{oe+)1(ze% zBz5)HBLzR%7ltQDf{^Bu`0e8W@Hy8*JIQW|>S+@=E_Vwff+d?i_ISrdU8--&{bn?s z6F|zRby5s7Yya|<@I^tf8lVyfH1HzP4GQp0Q?;=`mz+q5b8a-Td#33X}nBQrSFMBS`X#x!Q7+g7U zT{$R@6z1SgM6<6P%Nh`nsg##fs$o0vW#f)U9~ptesfzRD*Ny+|+<~LPNZM*D zZis%nfmOgx_838b6uoCNmnNZ+(BunrQ%4f8q{p+cQXTzWn*|f)giVhu$Zanm=p-rV zlsYuc787}{JrQ3x8LYxs%+x2|=17)i`H;&`Lg5i={dyfjSRy^XKWOLnUVf;eI+V1M z1AHbL^oxG{tMPcF`m?ddgGqeR6HYwg?!<@h1pUp|P>fYwBsY1`lobeX6<(WjR*ORS ztQ%&eH7QpT_HPkc2a_?M4?prdYQ~pB`dAw69b?%-6x4AOyX4!+Pr3<;V!V3nw|v$G zSm{jFb9p*h4a%~5$urK8#3iR#AhkPdWC%RUm+VhK@gH-}mik>r6$BGqICyE%NJb1x zs4N%Kz!WQZ9os%CLw7$Di(V-W)f#pe4>%nUG(6_*ci-0oo=GsN%MR0bvX?(*ewh7i z%eG76f9qq``36#r=Nvp=*rw*W3l)#!);bP!gAQXt=eOZ{nY?LJrLvnz5UZdpNF;o! ztDJ`DIblVD-L&}3Dh+KY`L^E04C)$WD&P|)y(Ekeb<+{IB4ims`ML_#YZcKWDgIRt z$noly&=8)oJDr6v-;~9BD3!2rYhu0>Wqq?iuR96OTP{q;q;^c{K@eWyv1#1ig6U@N z*XQ6QY!lUsz#>(o_-BScf^L%kMyR&epRvg@==ui(9~z`h!_)z2(y|SaWxW&xjB5sC zU-rE_CdWqfh(dHh{a}q`P|svDhYpF@k_jHof&_)bANUOZD)z~w3b`A;%VriuU@9hT znL@eS4I7P8wqieqIvSFF5HL=HpxgQFFMFtGbonIXn*TmhY5}{_rm$hLcJ|fJ%o*L)_ihtkST-wKxR1)3yVYaxM+y`k#q9U>t~j zsCTMeqGNx~U)yu(qM^LjC-~*(^B7zor5)(3iXo&_eTM@{a&OtjQ?&3)+%yz$$)b>s zXvM*Y?`UNUN$x-YSue%gmdvnh;z~<4sWCXz)v_uT3uCH?u!jb@C{o2B{}^laxC_HZ zKE`e{dq&%TLa-k!7Y&w0PL`*kmMmG>Jrv)v$I?O&?Dl)gYKj2-_af z1*hXl$>GOMOKMo=M~lV$9W*g-xTSU+xC)NmQfK2sR6Vb)m*^vZs9#P)N}NYUs81D~ z#7>nK{(_!sD!{huuQg-q_zmUia+{&usDzk9zu#$?hHXd=HL;C)YS03$tG^|pu7e@; zK|;PC0BBP7lrXu>%p^>{$RYsipYXy}fMqGfWCjWp6#j_&yia-{{~CZFmNgc?RH$_x zId+hZjKT;X?dcb7@$o90cRgw_C1yo7MZh7Mq5Mq0P*o@T#Vc;blgr%rooIEg<`6}@ z7m6vFmT$Lod%6v1juc~_{X9a@q{*EtFFVRA+Ago{CJ2AOI>^LEUK4;a*a#8M=5+Tv z$P_Lr_{YPpP|aKvOzE4qm&3Mj_nc%W$(hkSFbWQEJ~Cj`8u>ax&ts1xrwUAi9fm$Z zcUY&83+}o6p;EHo)>Cg&+mFzMoNa2&ic?WL!u>;&j5WJcD^}~{$nv78{D%Mbi{=VA zy++8Kj;l%bTeNY87U`)(bB-*n7)c_q_wsw6{({Ca{k{S3uoBWj!b{m{$o)e3lbcl4 z(G+Wko|ocg>E#7w{($MH`naiTf|}|nkt-}$0B$Vg>U6_YG5p$qIWiMMdAuZ`7qOUv zrlSW2X*j8Bh2jMBnG{O6T#$%h0F_mHeVn;DL!(=?A{Lhp!UJ6%p6}?@&sVxJJ&oM5L8Z9VyAUL zhmpbwh#qjH0&ORZ@Fwv0ift10Fzry`Rxk|s0g7u=@QUDg2ZM{{Gru~iq{$^Peo=kT z;ti}7A5jK##ykoAy^BVE``Z<8>HSf@XpDnd>ueV!zf1Eu(u+YfX;1U{?Jju<9>Srz zal;h8Cm`LP;M+8pLw<=Q>kLg;Cuj00aiiM2skb1SU5wU^E+75=4hhAc968P~L>BY@?@1(Vvc+ka_NCHs zB^3v=gOehv&)=PFxpTaU1P9-AsBce|Zi;xK-|r-SQzP7LsaRy}@crpd1nkP-M%=T8 z0wy>>LimcF`;wWCkwlU)=L2+q&J|3}I)_-m3r!MXgHM$lWZczLuT!&U$DUJylD?Xk~M+eIC(#H1@o< z9*VuWlhMfj%OOD75Z38oRTH2(;LaPQNb<$DlitcZG$*Xm7=4$%( z2)1!?awyOK>(w?DXY`IJ?kWJaPGRgXUZhmI#}AU8n`GsHHK?z8d<~8alCgKJPMxPy z`MA@5i0|Q-(Yr+`#pe@jMk?K5X+2*KuI>b#SKnxLS-aU=J>%alzV>{U(Td|RyO|HT z!2Q?aJZ1BTlfF0+%Oj_c2rTiH&J=Jo3%^XbkN(n<#$FZH}jfCZ(;6=}JD6 z(J9!C7buaX46IoO^V5N4J0p;mnltVxZ)t{qyRF>utF$ndr)fEyx!z_tx+K;9h`cdF zoL~v}JWwlxON1B0IC0XE&TkQ!r9b!}mxrd{%&N?OMbT>siMC9l?) zA0+bhV${?~u4ph-RWv#wpZgV>MYB%ULzx*BUur0YhnIk_sn)484ydUJ)5MfvP;7)P znU&;{8H$MygjL!Nln+POkfExPc=wv7*m4Ajppu+~ioEvZ3h9tPzbr+fqHhzggd*}xIt)~OJT;3JC4WN#&`r<&t$4!V)d#rw zB{n?sm2g;_>ukb8hBuxhF0NeITP%#)LZd_9!IT$UmPY^~ zzQIc`V|GRwIU2AjTMm1z%$of}G&4q#THF1rfGc-5cg_Y@X}yII!tu6{;g|NCFQpGN zezX>)yKcM^TR?FB112cm=NBC?HHz4q+V>k?@(y zLff=0B2;(s0jfHJO8zXS%uMN3`yuCh3_g7Sg>T~Jzc%2iO<4g;n--_RwB^Rd#*>GU zcEnGrW6}y+A{3yCHgB`d-xVueF`kXb8WR2p|Lmx2*?C{8qV8}&qQ?sOS>fNm?F?T* zS^XBGnVh9g*UDv=lQ2TrYT6GKNi5&W1O+z7kg~Ux;T7=UU~`3K^qwA+V*@D=7fJC- zAGHlq28WsqWrsbdbw`2qS?nm}_88fRO4Jb@LjD-qVoNM`P!DFXBfSRzJ=rrIdC~L# z8T`;nB;qnX3km&0Dbs@$Y4^> zw@D^PBIjK~$HSt^&;^F8vMU)oy#I)85yCU2LX+EC+1UlJrCrlRwy@T$;T22Zk2@pS5T#a6spv z#OQH|jXM`oEkf;zV|Yk0K0Ag{vKXS=-;A697MvOjcOpaUF0T|eV)SL%8cew&x@Yf3 zY zM@kqCuv?#a zdmadt9&(eJE!@yv-f@~p>MbJvdmoZ3Ts`VQy7WhDY}3cMHB}-kv^Y=_xO@XS(r0xo{XPt^y%S}Jbb9DC z=8f|ud|*M^LU-#@r#~3*<}4V*DAT~UUp?W7nG2F1d3LdTDPq^e38PazlMQ+KQ>>5kWf^!m1!|-?+*~kf4eW|!#6Q3GT4)ayJ$#lIi9#g zZIFZ3mzEw|RytjAV@x^Tdd#MXTJX6#EUO`r%QS)N-#Ss`1;UN1vb&UZBsVSD8*KN%?261o4w21c4n3NmkL9w9;F!})~EAT7+vPVbkF39pNs_e0Np zLO_@63E=0D5s&EneKwuQzPVzWD_F$ga}E!)IF8U>JFP_!xreP&ojz@Ul-%BIQSbhp zI6Xf>chklOtGIfMxZC>lIIu2|939bB?*rqW0zLZEM)%G38 znkBi)*n!<+R5q85e|GK6V?t{8AVl{kQ1QxqW@r9TYOMBph8Lx*z(dkcY_Y=q<1V*^6{j~Z`W`vgS%<{F-7#PMu`~6$mon+dO!@RnNl^
        ~sO?6glRGZi8n^KyFR=i1erVaJp>l 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

        diff --git a/src/getInformationOnFiles.js b/src/getInformationOnFiles.js index 2f629d87..b9af3f40 100644 --- a/src/getInformationOnFiles.js +++ b/src/getInformationOnFiles.js @@ -31,7 +31,7 @@ getLanguage = require('./getLanguage'); module.exports = getInformationOnFiles = function(config) { - var destination, destinations, file, i, informationOnFiles, j, language, len, len1, ref, ref1, rootDirectory, source, sourceDirectory, targetDirectory; + 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; @@ -55,7 +55,8 @@ ref1 = config.sources; for (j = 0, len1 = ref1.length; j < len1; j++) { file = ref1[j]; - informationOnFiles[file].others = getOthers(file, informationOnFiles, config); + others = getOthers(file, informationOnFiles, config); + informationOnFiles[file].others = others; } return informationOnFiles; }; diff --git a/src/getInformationOnFiles.js.map b/src/getInformationOnFiles.js.map index c8830f9b..14ea17e5 100644 --- a/src/getInformationOnFiles.js.map +++ b/src/getInformationOnFiles.js.map @@ -6,5 +6,5 @@ "getInformationOnFiles.litcoffee" ], "names": [], - "mappings": ";AAAI;AAAA,MAAA;;EAAA,CAAA,GAAc,OAAA,CAAQ,YAAR;;EACd,EAAA,GAAc,OAAA,CAAQ,UAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EACd,MAAA,GAAc,OAAA,CAAQ,QAAR;;EACd,SAAA,GAAc,OAAA,CAAQ,WAAR;;EACd,WAAA,GAAc,OAAA,CAAQ,cAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EAEd,oBAAA,GAAuB,OAAA,CAAQ,wBAAR;;EAEvB,yBAAA,GAA4B,OAAA,CAAQ,6BAAR;;EAE5B,eAAA,GAAkB,OAAA,CAAQ,mBAAR;;EAElB,UAAA,GAAa,OAAA,CAAQ,cAAR;;EAEb,SAAA,GAAY,OAAA,CAAQ,aAAR;;EAEZ,WAAA,GAAc,OAAA,CAAQ,eAAR;;EAEd,MAAM,CAAC,OAAP,GAAiB,qBAAA,GAAwB,QAAA,CAAC,MAAD,CAAA;AACvC,QAAA;IAAA,eAAA,GAAkB,MAAM,CAAC;IACzB,eAAA,GAAkB,MAAM,CAAC;IACzB,aAAA,GAAgB,MAAM,CAAC;IAOvB,kBAAA,GAAqB,CAAA;AACrB;AAAA,SAAA,qCAAA;;MACE,QAAA,GAAW,WAAA,CAAY,IAAZ,EAAkB,MAAM,CAAC,SAAzB,EAAoC,MAAM,CAAC,SAA3C;MACX,IAAI,gBAAJ;QACE,QAAA,GAAW,WAAA,CAAY,eAAZ,EAA6B,MAAM,CAAC,SAApC,EADb;;MAKA,MAAA,GAAS,oBAAA,CAAqB,IAArB,EAA2B,aAA3B,EAA0C,MAAM,CAAC,OAAjD;MAIT,YAAA,GAAe,CAAA;MACf,WAAA,GAAc,yBAAA,CAA0B,QAA1B,EAAoC,MAApC,EAA4C,aAA5C,EAA2D,eAA3D,EAA4E,MAAM,CAAC,OAAnF;MAId,WAAW,CAAC,GAAZ,GAAkB,UAAA,CAAW,MAAM,CAAC,GAAlB,EAAuB,eAAvB,EAAwC,WAAW,CAAC,IAApD;MAElB,kBAAmB,CAAA,IAAA,CAAnB,GAA2B,CAAA;MAC3B,kBAAmB,CAAA,IAAA,CAAK,CAAC,WAAzB,GAAuC;MACvC,kBAAmB,CAAA,IAAA,CAAK,CAAC,MAAzB,GAAkC;MAClC,kBAAmB,CAAA,IAAA,CAAK,CAAC,QAAzB,GAAoC;AArBtC;AAyBA;AAAA,SAAA,wCAAA;;MACE,kBAAmB,CAAA,IAAA,CAAK,CAAC,MAAzB,GAAkC,SAAA,CAAU,IAAV,EAAgB,kBAAhB,EAAoC,MAApC;AADpC;AAGA,WAAO;EAvCgC;AArBzC" + "mappings": ";AAAI;AAAA,MAAA;;EAAA,CAAA,GAAc,OAAA,CAAQ,YAAR;;EACd,EAAA,GAAc,OAAA,CAAQ,UAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EACd,MAAA,GAAc,OAAA,CAAQ,QAAR;;EACd,SAAA,GAAc,OAAA,CAAQ,WAAR;;EACd,WAAA,GAAc,OAAA,CAAQ,cAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EAEd,oBAAA,GAAuB,OAAA,CAAQ,wBAAR;;EAEvB,yBAAA,GAA4B,OAAA,CAAQ,6BAAR;;EAE5B,eAAA,GAAkB,OAAA,CAAQ,mBAAR;;EAElB,UAAA,GAAa,OAAA,CAAQ,cAAR;;EAEb,SAAA,GAAY,OAAA,CAAQ,aAAR;;EAEZ,WAAA,GAAc,OAAA,CAAQ,eAAR;;EAEd,MAAM,CAAC,OAAP,GAAiB,qBAAA,GAAwB,QAAA,CAAC,MAAD,CAAA;AACvC,QAAA;IAAA,eAAA,GAAkB,MAAM,CAAC;IACzB,eAAA,GAAkB,MAAM,CAAC;IACzB,aAAA,GAAgB,MAAM,CAAC;IAOvB,kBAAA,GAAqB,CAAA;AACrB;AAAA,SAAA,qCAAA;;MACE,QAAA,GAAW,WAAA,CAAY,IAAZ,EAAkB,MAAM,CAAC,SAAzB,EAAoC,MAAM,CAAC,SAA3C;MACX,IAAI,gBAAJ;QACE,QAAA,GAAW,WAAA,CAAY,eAAZ,EAA6B,MAAM,CAAC,SAApC,EADb;;MAKA,MAAA,GAAS,oBAAA,CAAqB,IAArB,EAA2B,aAA3B,EAA0C,MAAM,CAAC,OAAjD;MAIT,YAAA,GAAe,CAAA;MACf,WAAA,GAAc,yBAAA,CAA0B,QAA1B,EAAoC,MAApC,EAA4C,aAA5C,EAA2D,eAA3D,EAA4E,MAAM,CAAC,OAAnF;MAId,WAAW,CAAC,GAAZ,GAAkB,UAAA,CAAW,MAAM,CAAC,GAAlB,EAAuB,eAAvB,EAAwC,WAAW,CAAC,IAApD;MAElB,kBAAmB,CAAA,IAAA,CAAnB,GAA2B,CAAA;MAC3B,kBAAmB,CAAA,IAAA,CAAK,CAAC,WAAzB,GAAuC;MACvC,kBAAmB,CAAA,IAAA,CAAK,CAAC,MAAzB,GAAkC;MAClC,kBAAmB,CAAA,IAAA,CAAK,CAAC,QAAzB,GAAoC;AArBtC;AAyBA;AAAA,SAAA,wCAAA;;MACE,MAAA,GAAS,SAAA,CAAU,IAAV,EAAgB,kBAAhB,EAAoC,MAApC;MAET,kBAAmB,CAAA,IAAA,CAAK,CAAC,MAAzB,GAAkC;AAHpC;AAKA,WAAO;EAzCgC;AArBzC" } \ No newline at end of file diff --git a/src/getInformationOnFiles.litcoffee b/src/getInformationOnFiles.litcoffee index 4c23da5d..f2aa8c0f 100644 --- a/src/getInformationOnFiles.litcoffee +++ b/src/getInformationOnFiles.litcoffee @@ -56,6 +56,8 @@ Now, figure out the relative paths the css: Now, figure out the relative paths to the other source files: for file in config.sources - informationOnFiles[file].others = getOthers(file, informationOnFiles, config) + others = getOthers(file, informationOnFiles, config) + + informationOnFiles[file].others = others return informationOnFiles diff --git a/src/getOthers.js b/src/getOthers.js index 15d83d6c..db7c06e1 100644 --- a/src/getOthers.js +++ b/src/getOthers.js @@ -5,7 +5,7 @@ getRelativePath = require('./getRelativePath'); getOthers = function(file, informationOnFiles, config) { - var destinationFileInformation, i, len, other, others, ref, source, sourceFileInformation, target; + var destinationFileInformation, i, image, len, other, others, ref, source, sourceFileInformation, target; sourceFileInformation = informationOnFiles[file]; source = sourceFileInformation.source; others = {}; @@ -14,9 +14,11 @@ 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 + file: other, + image: image }; } return others; diff --git a/src/getOthers.js.map b/src/getOthers.js.map index 34ec3a96..009ebba0 100644 --- a/src/getOthers.js.map +++ b/src/getOthers.js.map @@ -6,5 +6,5 @@ "getOthers.litcoffee" ], "names": [], - "mappings": ";AAAI;AAAA,MAAA;;EAAA,eAAA,GAAkB,OAAA,CAAQ,mBAAR;;EAElB,SAAA,GAAY,QAAA,CAAC,IAAD,EAAO,kBAAP,EAA2B,MAA3B,CAAA;AACV,QAAA;IAAA,qBAAA,GAAwB,kBAAmB,CAAA,IAAA;IAC3C,MAAA,GAAS,qBAAqB,CAAC;IAC/B,MAAA,GAAS,CAAA;AACT;AAAA,SAAA,qCAAA;;MACE,0BAAA,GAA6B,kBAAmB,CAAA,KAAA;MAChD,MAAA,GAAS,0BAA0B,CAAC;MAEpC,MAAO,CAAA,MAAM,CAAC,IAAP,CAAP,GAAsB;QACpB,IAAA,EAAM,eAAA,CAAgB,MAAM,CAAC,YAAvB,EAAqC,MAAM,CAAC,YAA5C,EAA0D,MAAM,CAAC,IAAjE,CADc;QAEpB,IAAA,EAAM;MAFc;AAJxB;WASA;EAbU;;EAeZ,MAAM,CAAC,OAAP,GAAiB;AAjBjB" + "mappings": ";AAAI;AAAA,MAAA;;EAAA,eAAA,GAAkB,OAAA,CAAQ,mBAAR;;EAElB,SAAA,GAAY,QAAA,CAAC,IAAD,EAAO,kBAAP,EAA2B,MAA3B,CAAA;AACV,QAAA;IAAA,qBAAA,GAAwB,kBAAmB,CAAA,IAAA;IAC3C,MAAA,GAAS,qBAAqB,CAAC;IAC/B,MAAA,GAAS,CAAA;AACT;AAAA,SAAA,qCAAA;;MACE,0BAAA,GAA6B,kBAAmB,CAAA,KAAA;MAChD,MAAA,GAAS,0BAA0B,CAAC;MACpC,KAAA,GAAQ,0BAA0B,CAAC,QAAQ,CAAC,IAApC,KAA4C;MAEpD,MAAO,CAAA,MAAM,CAAC,IAAP,CAAP,GAAsB;QACpB,IAAA,EAAM,eAAA,CAAgB,MAAM,CAAC,YAAvB,EAAqC,MAAM,CAAC,YAA5C,EAA0D,MAAM,CAAC,IAAjE,CADc;QAEpB,IAAA,EAAM,KAFc;QAGpB,KAAA,EAAO;MAHa;AALxB;WAWA;EAfU;;EAiBZ,MAAM,CAAC,OAAP,GAAiB;AAnBjB" } \ No newline at end of file diff --git a/src/getOthers.litcoffee b/src/getOthers.litcoffee index 75716128..28b4b14d 100644 --- a/src/getOthers.litcoffee +++ b/src/getOthers.litcoffee @@ -7,10 +7,12 @@ 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 diff --git a/test/unit-tests/fakes/fake-config.js b/test/unit-tests/fakes/fake-config.js index 29b19618..9eb3d2fd 100644 --- a/test/unit-tests/fakes/fake-config.js +++ b/test/unit-tests/fakes/fake-config.js @@ -29,6 +29,7 @@ "others": { "README.html": { "file": "README.md", + "image": false, "link": "README.html" } }, diff --git a/test/unit-tests/fakes/fake-config.js.map b/test/unit-tests/fakes/fake-config.js.map index d2a0df07..e36796d8 100644 --- a/test/unit-tests/fakes/fake-config.js.map +++ b/test/unit-tests/fakes/fake-config.js.map @@ -6,5 +6,5 @@ "fake-config.litcoffee" ], "names": [], - "mappings": ";AAEI;EAAA,MAAM,CAAC,OAAP,GAAiB;IACf,KAAA,EAAO,WADQ;IAEf,WAAA,EAAa,KAFE;IAGf,SAAA,EAAW,KAHI;IAIf,MAAA,EAAQ,KAJO;IAKf,oBAAA,EAAsB;MACpB,WAAA,EAAa;QACX,aAAA,EAAe;UACb,MAAA,EAAQ,aADK;UAEb,KAAA,EAAO,WAFM;UAGb,KAAA,EAAO,MAHM;UAIb,KAAA,EAAO,OAJM;UAKb,MAAA,EAAQ,kBALK;UAMb,MAAA,EAAQ,QANK;UAOb,MAAA,EAAQ,eAPK;UAQb,SAAA,EAAW,eARE;UASb,cAAA,EAAgB,aATH;UAUb,MAAA,EAAQ;QAVK,CADJ;QAaX,UAAA,EAAY;UACV,MAAA,EAAQ,IADE;UAEV,MAAA,EAAQ,GAFE;UAGV,MAAA,EAAQ,UAHE;UAIV,SAAA,EAAW,GAJD;UAKV,QAAA,EAAU;QALA,CAbD;QAoBX,QAAA,EAAU;UACR,aAAA,EAAe;YACb,MAAA,EAAQ,WADK;YAEb,MAAA,EAAQ;UAFK;QADP,CApBC;QA0BX,QAAA,EAAU;UACR,MAAA,EAAQ,WADA;UAER,KAAA,EAAO,EAFC;UAGR,KAAA,EAAO,KAHC;UAIR,MAAA,EAAQ,WAJA;UAKR,MAAA,EAAQ,QALA;UAMR,MAAA,EAAQ,eANA;UAOR,cAAA,EAAgB,WAPR;UAQR,MAAA,EAAQ;QARA;MA1BC;IADO,CALP;IA4Cf,WAAA,EAAa;MACX,WAAA,EAAa;QACX,MAAA,EAAQ,IADG;QAEX,MAAA,EAAQ,GAFG;QAGX,MAAA,EAAQ,UAHG;QAIX,SAAA,EAAW,GAJA;QAKX,QAAA,EAAU;MALC,CADF;MAQX,KAAA,EAAO;QACL,MAAA,EAAQ,IADH;QAEL,MAAA,EAAQ,GAFH;QAGL,MAAA,EAAQ,UAHH;QAIL,SAAA,EAAW,GAJN;QAKL,QAAA,EAAU;MALL,CARI;MAeX,cAAA,EAAgB;QACd,MAAA,EAAQ,cADM;QAEd,QAAA,EAAU;MAFI;IAfL,CA5CE;IAgEf,QAAA,EAAU,UAhEK;IAiEf,QAAA,EAAU,CAAA,CAjEK;IAkEf,QAAA,EAAU,MAlEK;IAmEf,MAAA,EAAQ,eAnEO;IAoEf,OAAA,EAAS,aApEM;IAqEf,SAAA,EAAW;MACT,GAAA,EAAK;IADI,CArEI;IAwEf,UAAA,EAAY,CAAA;EAxEG;AAAjB" + "mappings": ";AAEI;EAAA,MAAM,CAAC,OAAP,GAAiB;IACf,KAAA,EAAO,WADQ;IAEf,WAAA,EAAa,KAFE;IAGf,SAAA,EAAW,KAHI;IAIf,MAAA,EAAQ,KAJO;IAKf,oBAAA,EAAsB;MACpB,WAAA,EAAa;QACX,aAAA,EAAe;UACb,MAAA,EAAQ,aADK;UAEb,KAAA,EAAO,WAFM;UAGb,KAAA,EAAO,MAHM;UAIb,KAAA,EAAO,OAJM;UAKb,MAAA,EAAQ,kBALK;UAMb,MAAA,EAAQ,QANK;UAOb,MAAA,EAAQ,eAPK;UAQb,SAAA,EAAW,eARE;UASb,cAAA,EAAgB,aATH;UAUb,MAAA,EAAQ;QAVK,CADJ;QAaX,UAAA,EAAY;UACV,MAAA,EAAQ,IADE;UAEV,MAAA,EAAQ,GAFE;UAGV,MAAA,EAAQ,UAHE;UAIV,SAAA,EAAW,GAJD;UAKV,QAAA,EAAU;QALA,CAbD;QAoBX,QAAA,EAAU;UACR,aAAA,EAAe;YACb,MAAA,EAAQ,WADK;YAEb,OAAA,EAAS,KAFI;YAGb,MAAA,EAAQ;UAHK;QADP,CApBC;QA2BX,QAAA,EAAU;UACR,MAAA,EAAQ,WADA;UAER,KAAA,EAAO,EAFC;UAGR,KAAA,EAAO,KAHC;UAIR,MAAA,EAAQ,WAJA;UAKR,MAAA,EAAQ,QALA;UAMR,MAAA,EAAQ,eANA;UAOR,cAAA,EAAgB,WAPR;UAQR,MAAA,EAAQ;QARA;MA3BC;IADO,CALP;IA6Cf,WAAA,EAAa;MACX,WAAA,EAAa;QACX,MAAA,EAAQ,IADG;QAEX,MAAA,EAAQ,GAFG;QAGX,MAAA,EAAQ,UAHG;QAIX,SAAA,EAAW,GAJA;QAKX,QAAA,EAAU;MALC,CADF;MAQX,KAAA,EAAO;QACL,MAAA,EAAQ,IADH;QAEL,MAAA,EAAQ,GAFH;QAGL,MAAA,EAAQ,UAHH;QAIL,SAAA,EAAW,GAJN;QAKL,QAAA,EAAU;MALL,CARI;MAeX,cAAA,EAAgB;QACd,MAAA,EAAQ,cADM;QAEd,QAAA,EAAU;MAFI;IAfL,CA7CE;IAiEf,QAAA,EAAU,UAjEK;IAkEf,QAAA,EAAU,CAAA,CAlEK;IAmEf,QAAA,EAAU,MAnEK;IAoEf,MAAA,EAAQ,eApEO;IAqEf,OAAA,EAAS,aArEM;IAsEf,SAAA,EAAW;MACT,GAAA,EAAK;IADI,CAtEI;IAyEf,UAAA,EAAY,CAAA;EAzEG;AAAjB" } \ No newline at end of file diff --git a/test/unit-tests/fakes/fake-config.litcoffee b/test/unit-tests/fakes/fake-config.litcoffee index 3d2406ad..1a2cd343 100644 --- a/test/unit-tests/fakes/fake-config.litcoffee +++ b/test/unit-tests/fakes/fake-config.litcoffee @@ -29,6 +29,7 @@ "others": { "README.html": { "file": "README.md" + "image": false "link": "README.html" } } diff --git a/test/unit-tests/fakes/informationOnFilesFlattened.js b/test/unit-tests/fakes/informationOnFilesFlattened.js index d0f8f334..a6837435 100644 --- a/test/unit-tests/fakes/informationOnFilesFlattened.js +++ b/test/unit-tests/fakes/informationOnFilesFlattened.js @@ -28,18 +28,22 @@ "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" } }, @@ -76,18 +80,22 @@ "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" } }, @@ -130,18 +138,22 @@ "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" } }, @@ -179,18 +191,22 @@ "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" } }, diff --git a/test/unit-tests/fakes/informationOnFilesFlattened.js.map b/test/unit-tests/fakes/informationOnFilesFlattened.js.map index 009d2959..214eb1f5 100644 --- a/test/unit-tests/fakes/informationOnFilesFlattened.js.map +++ b/test/unit-tests/fakes/informationOnFilesFlattened.js.map @@ -6,5 +6,5 @@ "informationOnFilesFlattened.litcoffee" ], "names": [], - "mappings": "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" + "mappings": "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" } \ No newline at end of file diff --git a/test/unit-tests/fakes/informationOnFilesFlattened.litcoffee b/test/unit-tests/fakes/informationOnFilesFlattened.litcoffee index e595fb41..93390d6c 100644 --- a/test/unit-tests/fakes/informationOnFilesFlattened.litcoffee +++ b/test/unit-tests/fakes/informationOnFilesFlattened.litcoffee @@ -28,18 +28,22 @@ A fake for the flattended getInformationOnFiles test. "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" } } @@ -76,18 +80,22 @@ A fake for the flattended getInformationOnFiles test. "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" } } @@ -130,18 +138,22 @@ A fake for the flattended getInformationOnFiles test. "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" } } @@ -179,18 +191,22 @@ A fake for the flattended getInformationOnFiles test. "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" } } diff --git a/test/unit-tests/fakes/informationOnFilesUnFlattened.js b/test/unit-tests/fakes/informationOnFilesUnFlattened.js index 92477e22..3d416152 100644 --- a/test/unit-tests/fakes/informationOnFilesUnFlattened.js +++ b/test/unit-tests/fakes/informationOnFilesUnFlattened.js @@ -28,18 +28,22 @@ "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" } }, @@ -76,18 +80,22 @@ "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" } }, @@ -130,18 +138,22 @@ "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" } }, @@ -179,18 +191,22 @@ "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" } }, diff --git a/test/unit-tests/fakes/informationOnFilesUnFlattened.js.map b/test/unit-tests/fakes/informationOnFilesUnFlattened.js.map index 5157629d..7948155d 100644 --- a/test/unit-tests/fakes/informationOnFilesUnFlattened.js.map +++ b/test/unit-tests/fakes/informationOnFilesUnFlattened.js.map @@ -6,5 +6,5 @@ "informationOnFilesUnFlattened.litcoffee" ], "names": [], - "mappings": "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" + "mappings": "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" } \ No newline at end of file diff --git a/test/unit-tests/fakes/informationOnFilesUnFlattened.litcoffee b/test/unit-tests/fakes/informationOnFilesUnFlattened.litcoffee index 9852b303..2f13e5a4 100644 --- a/test/unit-tests/fakes/informationOnFilesUnFlattened.litcoffee +++ b/test/unit-tests/fakes/informationOnFilesUnFlattened.litcoffee @@ -28,18 +28,22 @@ A fake for the unflattended getInformationOnFiles test. "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" } } @@ -76,18 +80,22 @@ A fake for the unflattended getInformationOnFiles test. "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" } } @@ -130,18 +138,22 @@ A fake for the unflattended getInformationOnFiles test. "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" } } @@ -179,18 +191,22 @@ A fake for the unflattended getInformationOnFiles test. "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" } } diff --git a/test/unit-tests/unit-test-getOthers.js b/test/unit-tests/unit-test-getOthers.js index 75b85333..23158f68 100644 --- a/test/unit-tests/unit-test-getOthers.js +++ b/test/unit-tests/unit-test-getOthers.js @@ -20,10 +20,12 @@ 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" } }); @@ -39,10 +41,12 @@ 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" } }); @@ -58,10 +62,12 @@ 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" } }); @@ -70,18 +76,20 @@ var config, informationOnFiles, others; informationOnFiles = require('./fakes/informationOnFilesFlattened'); config = { - sources: ['README.md', 'src/fake_coffee.coffee'], + sources: ['README.md', 'images/fluffybunny1.jpg'], flatten: true }; - others = getOthers('src/fake_coffee.coffee', informationOnFiles, config); + others = getOthers('images/fluffybunny1.jpg', informationOnFiles, config); assert.deepEqual(others, { "README.html": { "file": "README.md", + "image": false, "link": "README.html" }, - "fake_coffee.html": { - "file": "src/fake_coffee.coffee", - "link": "fake_coffee.html" + "fluffybunny1.jpg": { + "file": "images/fluffybunny1.jpg", + "image": true, + "link": "images/fluffybunny1.jpg" } }); }); diff --git a/test/unit-tests/unit-test-getOthers.js.map b/test/unit-tests/unit-test-getOthers.js.map index 0a62d1ee..cf09e717 100644 --- a/test/unit-tests/unit-test-getOthers.js.map +++ b/test/unit-tests/unit-test-getOthers.js.map @@ -6,5 +6,5 @@ "unit-test-getOthers.litcoffee" ], "names": [], - "mappings": ";AAEI;AAAA,MAAA;;EAAA,CAAA,CAAE,MAAF,EAAU,MAAV,CAAA,GAAqB,OAAA,CAAQ,MAAR,CAArB;;EAAsC,MAAA,CAAA;;EAEtC,SAAA,GAAY,OAAA,CAAQ,qBAAR;;EAEZ,QAAA,CAAS,iBAAT,EAA4B,QAAA,CAAA,CAAA;IAE1B,EAAA,CAAG,gEAAH,EAAqE,QAAA,CAAA,CAAA;AACnE,UAAA;MAAA,kBAAA,GAAqB,OAAA,CAAQ,uCAAR;MACrB,MAAA,GAAS;QACP,OAAA,EAAS,CACP,WADO,EAEP,wBAFO,CADF;QAKP,OAAA,EAAS;MALF;MAOT,MAAA,GAAS,SAAA,CAAU,WAAV,EAAuB,kBAAvB,EAA2C,MAA3C;MACT,MAAM,CAAC,SAAP,CAAiB,MAAjB,EAAyB;QACvB,aAAA,EAAe;UACb,MAAA,EAAQ,WADK;UAEb,MAAA,EAAQ;QAFK,CADQ;QAKvB,kBAAA,EAAoB;UAClB,MAAA,EAAQ,wBADU;UAElB,MAAA,EAAQ;QAFU;MALG,CAAzB;IAVmE,CAArE;IAsBA,EAAA,CAAG,mEAAH,EAAwE,QAAA,CAAA,CAAA;AACtE,UAAA;MAAA,kBAAA,GAAqB,OAAA,CAAQ,uCAAR;MACrB,MAAA,GAAS;QACP,OAAA,EAAS,CACP,WADO,EAEP,wBAFO,CADF;QAKP,OAAA,EAAS;MALF;MAOT,MAAA,GAAS,SAAA,CAAU,wBAAV,EAAoC,kBAApC,EAAwD,MAAxD;MACT,MAAM,CAAC,SAAP,CAAiB,MAAjB,EAAyB;QACvB,aAAA,EAAe;UACb,MAAA,EAAQ,WADK;UAEb,MAAA,EAAQ;QAFK,CADQ;QAKvB,kBAAA,EAAoB;UAClB,MAAA,EAAQ,wBADU;UAElB,MAAA,EAAQ;QAFU;MALG,CAAzB;IAVsE,CAAxE;IAsBA,EAAA,CAAG,8DAAH,EAAmE,QAAA,CAAA,CAAA;AACjE,UAAA;MAAA,kBAAA,GAAqB,OAAA,CAAQ,qCAAR;MACrB,MAAA,GAAS;QACP,OAAA,EAAS,CACP,WADO,EAEP,wBAFO,CADF;QAKP,OAAA,EAAS;MALF;MAOT,MAAA,GAAS,SAAA,CAAU,WAAV,EAAuB,kBAAvB,EAA2C,MAA3C;MACT,MAAM,CAAC,SAAP,CAAiB,MAAjB,EAAyB;QACvB,aAAA,EAAe;UACb,MAAA,EAAQ,WADK;UAEb,MAAA,EAAQ;QAFK,CADQ;QAKvB,kBAAA,EAAoB;UAClB,MAAA,EAAQ,wBADU;UAElB,MAAA,EAAQ;QAFU;MALG,CAAzB;IAViE,CAAnE;IAsBA,EAAA,CAAG,iEAAH,EAAsE,QAAA,CAAA,CAAA;AACpE,UAAA;MAAA,kBAAA,GAAqB,OAAA,CAAQ,qCAAR;MACrB,MAAA,GAAS;QACP,OAAA,EAAS,CACP,WADO,EAEP,wBAFO,CADF;QAKP,OAAA,EAAS;MALF;MAOT,MAAA,GAAS,SAAA,CAAU,wBAAV,EAAoC,kBAApC,EAAwD,MAAxD;MACT,MAAM,CAAC,SAAP,CAAiB,MAAjB,EAAyB;QACvB,aAAA,EAAe;UACb,MAAA,EAAQ,WADK;UAEb,MAAA,EAAQ;QAFK,CADQ;QAKvB,kBAAA,EAAoB;UAClB,MAAA,EAAQ,wBADU;UAElB,MAAA,EAAQ;QAFU;MALG,CAAzB;IAVoE,CAAtE;EApE0B,CAA5B;AAJA" + "mappings": ";AAEI;AAAA,MAAA;;EAAA,CAAA,CAAE,MAAF,EAAU,MAAV,CAAA,GAAqB,OAAA,CAAQ,MAAR,CAArB;;EAAsC,MAAA,CAAA;;EAEtC,SAAA,GAAY,OAAA,CAAQ,qBAAR;;EAEZ,QAAA,CAAS,iBAAT,EAA4B,QAAA,CAAA,CAAA;IAE1B,EAAA,CAAG,gEAAH,EAAqE,QAAA,CAAA,CAAA;AACnE,UAAA;MAAA,kBAAA,GAAqB,OAAA,CAAQ,uCAAR;MACrB,MAAA,GAAS;QACP,OAAA,EAAS,CACP,WADO,EAEP,wBAFO,CADF;QAKP,OAAA,EAAS;MALF;MAOT,MAAA,GAAS,SAAA,CAAU,WAAV,EAAuB,kBAAvB,EAA2C,MAA3C;MACT,MAAM,CAAC,SAAP,CAAiB,MAAjB,EAAyB;QACvB,aAAA,EAAe;UACb,MAAA,EAAQ,WADK;UAEb,OAAA,EAAS,KAFI;UAGb,MAAA,EAAQ;QAHK,CADQ;QAMvB,kBAAA,EAAoB;UAClB,MAAA,EAAQ,wBADU;UAElB,OAAA,EAAS,KAFS;UAGlB,MAAA,EAAQ;QAHU;MANG,CAAzB;IAVmE,CAArE;IAwBA,EAAA,CAAG,mEAAH,EAAwE,QAAA,CAAA,CAAA;AACtE,UAAA;MAAA,kBAAA,GAAqB,OAAA,CAAQ,uCAAR;MACrB,MAAA,GAAS;QACP,OAAA,EAAS,CACP,WADO,EAEP,wBAFO,CADF;QAKP,OAAA,EAAS;MALF;MAOT,MAAA,GAAS,SAAA,CAAU,wBAAV,EAAoC,kBAApC,EAAwD,MAAxD;MACT,MAAM,CAAC,SAAP,CAAiB,MAAjB,EAAyB;QACvB,aAAA,EAAe;UACb,MAAA,EAAQ,WADK;UAEb,OAAA,EAAS,KAFI;UAGb,MAAA,EAAQ;QAHK,CADQ;QAMvB,kBAAA,EAAoB;UAClB,MAAA,EAAQ,wBADU;UAElB,OAAA,EAAS,KAFS;UAGlB,MAAA,EAAQ;QAHU;MANG,CAAzB;IAVsE,CAAxE;IAwBA,EAAA,CAAG,8DAAH,EAAmE,QAAA,CAAA,CAAA;AACjE,UAAA;MAAA,kBAAA,GAAqB,OAAA,CAAQ,qCAAR;MACrB,MAAA,GAAS;QACP,OAAA,EAAS,CACP,WADO,EAEP,wBAFO,CADF;QAKP,OAAA,EAAS;MALF;MAOT,MAAA,GAAS,SAAA,CAAU,WAAV,EAAuB,kBAAvB,EAA2C,MAA3C;MACT,MAAM,CAAC,SAAP,CAAiB,MAAjB,EAAyB;QACvB,aAAA,EAAe;UACb,MAAA,EAAQ,WADK;UAEb,OAAA,EAAS,KAFI;UAGb,MAAA,EAAQ;QAHK,CADQ;QAMvB,kBAAA,EAAoB;UAClB,MAAA,EAAQ,wBADU;UAElB,OAAA,EAAS,KAFS;UAGlB,MAAA,EAAQ;QAHU;MANG,CAAzB;IAViE,CAAnE;IAwBA,EAAA,CAAG,iEAAH,EAAsE,QAAA,CAAA,CAAA;AACpE,UAAA;MAAA,kBAAA,GAAqB,OAAA,CAAQ,qCAAR;MACrB,MAAA,GAAS;QACP,OAAA,EAAS,CACP,WADO,EAEP,yBAFO,CADF;QAKP,OAAA,EAAS;MALF;MAOT,MAAA,GAAS,SAAA,CAAU,yBAAV,EAAqC,kBAArC,EAAyD,MAAzD;MACT,MAAM,CAAC,SAAP,CAAiB,MAAjB,EAAyB;QACvB,aAAA,EAAe;UACb,MAAA,EAAQ,WADK;UAEb,OAAA,EAAS,KAFI;UAGb,MAAA,EAAQ;QAHK,CADQ;QAMvB,kBAAA,EAAoB;UAClB,MAAA,EAAQ,yBADU;UAElB,OAAA,EAAS,IAFS;UAGlB,MAAA,EAAQ;QAHU;MANG,CAAzB;IAVoE,CAAtE;EA1E0B,CAA5B;AAJA" } \ No newline at end of file diff --git a/test/unit-tests/unit-test-getOthers.litcoffee b/test/unit-tests/unit-test-getOthers.litcoffee index 5ec61567..ad598358 100644 --- a/test/unit-tests/unit-test-getOthers.litcoffee +++ b/test/unit-tests/unit-test-getOthers.litcoffee @@ -19,10 +19,12 @@ 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" } }) @@ -41,10 +43,12 @@ 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" } }) @@ -63,10 +67,12 @@ 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" } }) @@ -77,19 +83,21 @@ config = { sources: [ 'README.md' - 'src/fake_coffee.coffee' + 'images/fluffybunny1.jpg' ] flatten: true } - others = getOthers('src/fake_coffee.coffee', informationOnFiles, config) + others = getOthers('images/fluffybunny1.jpg', informationOnFiles, config) assert.deepEqual(others, { "README.html": { "file": "README.md" + "image": false "link": "README.html" } - "fake_coffee.html": { - "file": "src/fake_coffee.coffee" - "link": "fake_coffee.html" + "fluffybunny1.jpg": { + "file": "images/fluffybunny1.jpg" + "image": true + "link": "images/fluffybunny1.jpg" } }) return From 21750a0d3a979c74e7c83a53c5d7bc43651418a0 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 10 Jul 2017 21:12:53 -0700 Subject: [PATCH 84/95] updated release notes --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index ae79aaf2..fba2500a 100644 --- a/README.md +++ b/README.md @@ -82,6 +82,8 @@ npm run build * 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: From 7d37fc88ce7791f21e7f591875fa991de3212a31 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 10 Jul 2017 21:49:02 -0700 Subject: [PATCH 85/95] allow for ``` identified code in md files to move to the right. --- resources/languages.json | 4 ++-- src/buildMatchers.js | 4 ++++ src/buildMatchers.js.map | 2 +- src/buildMatchers.litcoffee | 4 ++++ src/parse.js | 11 ++++++++-- src/parse.js.map | 2 +- src/parse.litcoffee | 20 ++++++++++++++++--- test/sim/README.md | 16 +++++++++------ .../fakes/informationOnFilesFlattened.js | 2 ++ .../fakes/informationOnFilesFlattened.js.map | 2 +- .../informationOnFilesFlattened.litcoffee | 2 ++ .../fakes/informationOnFilesUnFlattened.js | 2 ++ .../informationOnFilesUnFlattened.js.map | 2 +- .../informationOnFilesUnFlattened.litcoffee | 2 ++ 14 files changed, 58 insertions(+), 17 deletions(-) diff --git a/resources/languages.json b/resources/languages.json index b00378db..27f155e9 100644 --- a/resources/languages.json +++ b/resources/languages.json @@ -45,8 +45,8 @@ ".n": {"name": "nemerle", "symbol": "//"}, ".m": {"name": "objectivec", "symbol": "//"}, ".mel": {"name": "mel", "symbol": "//"}, - ".markdown": {"name": "markdown", "symbol": "", "section": "#", "link": "!", "html": true}, - ".md": {"name": "markdown", "symbol": "", "section": "#", "link": "!", "html": true}, + ".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": "//"}, diff --git a/src/buildMatchers.js b/src/buildMatchers.js index 7a115ae0..63d0126d 100644 --- a/src/buildMatchers.js +++ b/src/buildMatchers.js @@ -20,6 +20,10 @@ 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; }; diff --git a/src/buildMatchers.js.map b/src/buildMatchers.js.map index 1f0b793c..7ec12c96 100644 --- a/src/buildMatchers.js.map +++ b/src/buildMatchers.js.map @@ -6,5 +6,5 @@ "buildMatchers.litcoffee" ], "names": [], - "mappings": ";AAEI;AAAA,MAAA;;EAAA,MAAM,CAAC,OAAP,GAAiB,aAAA,GAAgB,QAAA,CAAC,SAAD,CAAA;AAC/B,QAAA;AAAA,SAAA,gBAAA;;MAIE,CAAC,CAAC,cAAF,GAAmB,MAAA,CAAA,CAAA,KAAA,CAAA,CAAS,CAAC,CAAC,MAAX,CAAA,IAAA,CAAA;MAInB,CAAC,CAAC,aAAF,GAAkB;MAIlB,IAAG,CAAC,CAAC,IAAL;QACE,CAAC,CAAC,WAAF,GAAgB,MAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAC,IAAR,CAAA,oBAAA,CAAA,EADlB;;MAKA,IAAG,CAAC,CAAC,OAAL;QACE,CAAC,CAAC,cAAF,GAAmB,MAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAC,OAAR,CAAA,IAAA,CAAA,EADrB;;MAMA,IAAG,CAAC,CAAC,SAAL;QAEE,KAAA,GAAQ,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,OAAlB,CAA0B,SAA1B,EAAoC,MAApC;QACR,IAAA,GAAO,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,OAAjB,CAAyB,SAAzB,EAAmC,MAAnC;QAEP,CAAC,CAAC,YAAF,GAAiB,MAAA,CAAA,CAAA,KAAA,CAAA,CAAS,KAAT,CAAA,CAAA;QACjB,CAAC,CAAC,WAAF,GAAgB,MAAA,CAAA,CAAA,KAAA,CAAA,CAAS,IAAT,CAAA,CAAA,EANlB;;AAvBF;WA+BA;EAhC+B;AAAjC" + "mappings": ";AAEI;AAAA,MAAA;;EAAA,MAAM,CAAC,OAAP,GAAiB,aAAA,GAAgB,QAAA,CAAC,SAAD,CAAA;AAC/B,QAAA;AAAA,SAAA,gBAAA;;MAIE,CAAC,CAAC,cAAF,GAAmB,MAAA,CAAA,CAAA,KAAA,CAAA,CAAS,CAAC,CAAC,MAAX,CAAA,IAAA,CAAA;MAInB,CAAC,CAAC,aAAF,GAAkB;MAIlB,IAAG,CAAC,CAAC,IAAL;QACE,CAAC,CAAC,WAAF,GAAgB,MAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAC,IAAR,CAAA,oBAAA,CAAA,EADlB;;MAKA,IAAG,CAAC,CAAC,OAAL;QACE,CAAC,CAAC,cAAF,GAAmB,MAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAC,OAAR,CAAA,IAAA,CAAA,EADrB;;MAMA,IAAG,CAAC,CAAC,SAAL;QAEE,KAAA,GAAQ,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,OAAlB,CAA0B,SAA1B,EAAoC,MAApC;QACR,IAAA,GAAO,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,OAAjB,CAAyB,SAAzB,EAAmC,MAAnC;QAEP,CAAC,CAAC,YAAF,GAAiB,MAAA,CAAA,CAAA,KAAA,CAAA,CAAS,KAAT,CAAA,CAAA;QACjB,CAAC,CAAC,WAAF,GAAgB,MAAA,CAAA,CAAA,KAAA,CAAA,CAAS,IAAT,CAAA,CAAA,EANlB;;MAQA,IAAG,CAAC,CAAC,IAAL;QACE,CAAC,CAAC,IAAF,GAAS,CAAC,CAAC,IAAI,CAAC,OAAP,CAAe,SAAf,EAAyB,MAAzB;QACT,CAAC,CAAC,WAAF,GAAgB,MAAA,CAAA,CAAA,KAAA,CAAA,CAAS,CAAC,CAAC,IAAX,CAAA,CAAA,EAFlB;;AA/BF;WAmCA;EApC+B;AAAjC" } \ No newline at end of file diff --git a/src/buildMatchers.litcoffee b/src/buildMatchers.litcoffee index 6ab6bf8a..c5e3d37b 100644 --- a/src/buildMatchers.litcoffee +++ b/src/buildMatchers.litcoffee @@ -32,4 +32,8 @@ Look for multiline comments. The tricky part here is that the characters need t 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/parse.js b/src/parse.js index 64bb8e5a..47f157c7 100644 --- a/src/parse.js +++ b/src/parse.js @@ -21,7 +21,7 @@ htmlImageMatcher = /^/; module.exports = parse = function(source, language, code, config = {}) { - var LINK_REGEX, STYLE_REGEX, TEXT_REGEX, codeText, docsText, hasCode, i, isText, j, k, len, len1, line, lines, link, links, match, maybeCode, multilineComment, save, sections, style, styles, text, texts; + var LINK_REGEX, STYLE_REGEX, TEXT_REGEX, codeText, docsText, hasCode, i, isText, j, k, len, len1, line, lines, link, links, match, maybeCode, multilineComment, save, sections, style, styles, text, textToCode, texts; lines = code.split('\n'); sections = []; hasCode = docsText = codeText = ''; @@ -63,7 +63,7 @@ } else if (line.match(htmlImageMatcher)) { codeText += line; hasCode = true; - } else if (multilineComment && language.stopMatcher && line.match(language.stopMatcher)) { + } else if (multilineComment && (language.stopMatcher && line.match(language.stopMatcher))) { multilineComment = false; docsText += (line = line.replace(language.stopMatcher, '')) + '\n'; save(); @@ -73,6 +73,13 @@ save(); } docsText += (line = line.replace(language.startMatcher, '')) + '\n'; + } else if (textToCode && (language.codeMatcher && line.match(language.codeMatcher))) { + textToCode = false; + codeText += (line = line.replace(language.codeMatcher, '')) + '\n'; + } else if (textToCode || (language.codeMatcher && line.match(language.codeMatcher))) { + textToCode = true; + hasCode = true; + codeText += (line = line.replace(language.codeMatcher, '')) + '\n'; } else if (language.sectionMatcher && line.match(language.sectionMatcher)) { if (hasCode) { save(); diff --git a/src/parse.js.map b/src/parse.js.map index 7d1ca4a7..aaaefdb5 100644 --- a/src/parse.js.map +++ b/src/parse.js.map @@ -6,5 +6,5 @@ "parse.litcoffee" ], "names": [], - "mappings": "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" + "mappings": "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" } \ No newline at end of file diff --git a/src/parse.litcoffee b/src/parse.litcoffee index 486c5c09..d7e0bf15 100644 --- a/src/parse.litcoffee +++ b/src/parse.litcoffee @@ -54,17 +54,31 @@ normal below. if styles and styles.length > 0 then style = styles[1] else style = '' codeText += '

        '+text+'

        ' + '\n' hasCode = yes - else if line.match(htmlImageMatcher) # only one per line! + else if line.match(htmlImageMatcher) # only one per line! codeText += line hasCode = yes - else if multilineComment and language.stopMatcher and line.match(language.stopMatcher) + + else if multilineComment and + (language.stopMatcher and line.match(language.stopMatcher)) multilineComment = false docsText += (line = line.replace(language.stopMatcher, '')) + '\n' save() - else if multilineComment or (language.startMatcher and line.match(language.startMatcher)) + else if multilineComment or + (language.startMatcher and line.match(language.startMatcher)) multilineComment = true save() if hasCode docsText += (line = line.replace(language.startMatcher, '')) + '\n' + + else if textToCode and + (language.codeMatcher and line.match(language.codeMatcher)) + textToCode = false + codeText += (line = line.replace(language.codeMatcher, '')) + '\n' + else if textToCode or + (language.codeMatcher and line.match(language.codeMatcher)) + textToCode = true + hasCode = yes + codeText += (line = line.replace(language.codeMatcher, '')) + '\n' + else if language.sectionMatcher and line.match(language.sectionMatcher) save() if hasCode docsText += (line = line.replace(language.commentMatcher, '')) + '\n' diff --git a/test/sim/README.md b/test/sim/README.md index 1f0bc323..c3098cfa 100644 --- a/test/sim/README.md +++ b/test/sim/README.md @@ -4,20 +4,20 @@ With Fluffy Bunnies! ## The Happy Bunny - Poem by Robb Lovell -``` +
         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.
        -```
        +
        ![Readme.md](images/fluffybunny1.jpg) ### Stanza 2 -``` +
         I am the happy bunny.
         I hop high and low,  
         I am very happy, and full of glee, 
        @@ -25,16 +25,20 @@ 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.
        +
        +Drawing
        +
        +```
        +Here's some code
         ```
         
        -Drawing
         
         
         
         ### Stanza 3
         
         
        -```
        +
         I am a happy bunny.
         I hop high and low, 
         I see my friends, as they look at my home
        @@ -42,7 +46,7 @@ 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.
        -```
        +
        ![Readme.md](images/fluffybunny3.jpg) diff --git a/test/unit-tests/fakes/informationOnFilesFlattened.js b/test/unit-tests/fakes/informationOnFilesFlattened.js index a6837435..e2217fb7 100644 --- a/test/unit-tests/fakes/informationOnFilesFlattened.js +++ b/test/unit-tests/fakes/informationOnFilesFlattened.js @@ -15,6 +15,8 @@ "root": "/Project" }, "language": { + "code": "\\`\\`\\`", + "codeMatcher": /^\s*\`\`\`/, "commentFilter": /(^#![\/]|^\s*#\{)/, "commentMatcher": /^\s*\s?/, "html": true, diff --git a/test/unit-tests/fakes/informationOnFilesFlattened.js.map b/test/unit-tests/fakes/informationOnFilesFlattened.js.map index 214eb1f5..47db15a8 100644 --- a/test/unit-tests/fakes/informationOnFilesFlattened.js.map +++ b/test/unit-tests/fakes/informationOnFilesFlattened.js.map @@ -6,5 +6,5 @@ "informationOnFilesFlattened.litcoffee" ], "names": [], - "mappings": ";AAEI;EAAA,MAAM,CAAC,OAAP,GAAiB;IACf,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,2BAPK;QAQb,SAAA,EAAW,eARE;QASb,cAAA,EAAgB,aATH;QAUb,MAAA,EAAQ;MAVK,CADJ;MAaX,UAAA,EAAY;QACV,eAAA,EAAiB,mBADP;QAEV,gBAAA,EAAkB,SAFR;QAGV,MAAA,EAAQ,IAHE;QAIV,MAAA,EAAQ,GAJE;QAKV,aAAA,EAAe,oBALL;QAMV,MAAA,EAAQ,UANE;QAOV,SAAA,EAAW,GAPD;QAQV,gBAAA,EAAkB,OARR;QASV,QAAA,EAAU;MATA,CAbD;MAwBX,QAAA,EAAU;QACR,aAAA,EAAe;UACb,MAAA,EAAQ,WADK;UAEb,OAAA,EAAS,KAFI;UAGb,MAAA,EAAQ;QAHK,CADP;QAMR,kBAAA,EAAoB;UAClB,MAAA,EAAQ,wBADU;UAElB,OAAA,EAAS,KAFS;UAGlB,MAAA,EAAQ;QAHU,CANZ;QAWR,qBAAA,EAAuB;UACrB,MAAA,EAAQ,kCADa;UAErB,OAAA,EAAS,KAFY;UAGrB,MAAA,EAAQ;QAHa,CAXf;QAgBR,kBAAA,EAAoB;UAClB,MAAA,EAAQ,yBADU;UAElB,OAAA,EAAS,IAFS;UAGlB,MAAA,EAAQ;QAHU;MAhBZ,CAxBC;MA8CX,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,oBANA;QAOR,cAAA,EAAgB,WAPR;QAQR,MAAA,EAAQ;MARA;IA9CC,CADE;IA0Df,yBAAA,EAA2B;MACzB,aAAA,EAAe;QACb,MAAA,EAAQ,kBADK;QAEb,KAAA,EAAO,cAFM;QAGb,KAAA,EAAO,aAHM;QAIb,KAAA,EAAO,MAJM;QAKb,MAAA,EAAQ,8BALK;QAMb,MAAA,EAAQ,cANK;QAOb,MAAA,EAAQ,uCAPK;QAQb,SAAA,EAAW,sBARE;QASb,cAAA,EAAgB,yBATH;QAUb,MAAA,EAAQ;MAVK,CADU;MAazB,UAAA,EAAY;QACV,eAAA,EAAiB,mBADP;QAEV,gBAAA,EAAkB,kBAFR;QAGV,MAAA,EAAQ,IAHE;QAIV,MAAA,EAAQ;MAJE,CAba;MAmBzB,QAAA,EAAU;QACR,aAAA,EAAe;UACb,MAAA,EAAQ,WADK;UAEb,OAAA,EAAS,KAFI;UAGb,MAAA,EAAQ;QAHK,CADP;QAMR,kBAAA,EAAoB;UAClB,MAAA,EAAQ,wBADU;UAElB,OAAA,EAAS,KAFS;UAGlB,MAAA,EAAQ;QAHU,CANZ;QAWR,qBAAA,EAAuB;UACrB,MAAA,EAAQ,kCADa;UAErB,OAAA,EAAS,KAFY;UAGrB,MAAA,EAAQ;QAHa,CAXf;QAgBR,kBAAA,EAAoB;UAClB,MAAA,EAAQ,yBADU;UAElB,OAAA,EAAS,IAFS;UAGlB,MAAA,EAAQ;QAHU;MAhBZ,CAnBe;MAyCzB,QAAA,EAAU;QACR,MAAA,EAAQ,kBADA;QAER,KAAA,EAAO,QAFC;QAGR,KAAA,EAAO,MAHC;QAIR,MAAA,EAAQ,yBAJA;QAKR,MAAA,EAAQ,cALA;QAMR,MAAA,EAAQ,kCANA;QAOR,cAAA,EAAgB,kBAPR;QAQR,MAAA,EAAQ;MARA;IAzCe,CA1DZ;IA8Gf,wBAAA,EAA0B;MACxB,aAAA,EAAe;QACb,MAAA,EAAQ,kBADK;QAEb,KAAA,EAAO,WAFM;QAGb,KAAA,EAAO,MAHM;QAIb,KAAA,EAAO,OAJM;QAKb,MAAA,EAAQ,uBALK;QAMb,MAAA,EAAQ,aANK;QAOb,MAAA,EAAQ,gCAPK;QAQb,SAAA,EAAW,eARE;QASb,cAAA,EAAgB,kBATH;QAUb,MAAA,EAAQ;MAVK,CADS;MAaxB,UAAA,EAAY;QACV,eAAA,EAAiB,mBADP;QAEV,gBAAA,EAAkB,UAFR;QAGV,WAAA,EAAa;UACX,OAAA,EAAS,KADE;UAEX,MAAA,EAAQ;QAFG,CAHH;QAOV,MAAA,EAAQ,cAPE;QAQV,cAAA,EAAgB,YARN;QASV,aAAA,EAAe,YATL;QAUV,QAAA,EAAU;MAVA,CAbY;MAyBxB,QAAA,EAAU;QACR,aAAA,EAAe;UACb,MAAA,EAAQ,WADK;UAEb,OAAA,EAAS,KAFI;UAGb,MAAA,EAAQ;QAHK,CADP;QAMR,kBAAA,EAAoB;UAClB,MAAA,EAAQ,wBADU;UAElB,OAAA,EAAS,KAFS;UAGlB,MAAA,EAAQ;QAHU,CANZ;QAWR,qBAAA,EAAuB;UACrB,MAAA,EAAQ,kCADa;UAErB,OAAA,EAAS,KAFY;UAGrB,MAAA,EAAQ;QAHa,CAXf;QAgBR,kBAAA,EAAoB;UAClB,MAAA,EAAQ,yBADU;UAElB,OAAA,EAAS,IAFS;UAGlB,MAAA,EAAQ;QAHU;MAhBZ,CAzBc;MA+CxB,QAAA,EAAU;QACR,MAAA,EAAQ,oBADA;QAER,KAAA,EAAO,KAFC;QAGR,KAAA,EAAO,SAHC;QAIR,MAAA,EAAQ,wBAJA;QAKR,MAAA,EAAQ,aALA;QAMR,MAAA,EAAQ,iCANA;QAOR,cAAA,EAAgB,oBAPR;QAQR,MAAA,EAAQ;MARA;IA/Cc,CA9GX;IAwKf,kCAAA,EAAoC;MAClC,aAAA,EAAe;QACb,MAAA,EAAQ,qBADK;QAEb,KAAA,EAAO,WAFM;QAGb,KAAA,EAAO,MAHM;QAIb,KAAA,EAAO,OAJM;QAKb,MAAA,EAAQ,0BALK;QAMb,MAAA,EAAQ,gBANK;QAOb,MAAA,EAAQ,mCAPK;QAQb,SAAA,EAAW,eARE;QASb,cAAA,EAAgB,qBATH;QAUb,MAAA,EAAQ;MAVK,CADmB;MAalC,UAAA,EAAY;QACV,eAAA,EAAiB,mBADP;QAEV,gBAAA,EAAkB,UAFR;QAGV,UAAA,EAAY,IAHF;QAIV,MAAA,EAAQ,cAJE;QAKV,QAAA,EAAU;MALA,CAbsB;MAoBlC,QAAA,EAAU;QACR,aAAA,EAAe;UACb,MAAA,EAAQ,WADK;UAEb,OAAA,EAAS,KAFI;UAGb,MAAA,EAAQ;QAHK,CADP;QAMR,kBAAA,EAAoB;UAClB,MAAA,EAAQ,wBADU;UAElB,OAAA,EAAS,KAFS;UAGlB,MAAA,EAAQ;QAHU,CANZ;QAWR,qBAAA,EAAuB;UACrB,MAAA,EAAQ,kCADa;UAErB,OAAA,EAAS,KAFY;UAGrB,MAAA,EAAQ;QAHa,CAXf;QAgBR,kBAAA,EAAoB;UAClB,MAAA,EAAQ,yBADU;UAElB,OAAA,EAAS,IAFS;UAGlB,MAAA,EAAQ;QAHU;MAhBZ,CApBwB;MA0ClC,QAAA,EAAU;QACR,MAAA,EAAQ,0BADA;QAER,KAAA,EAAO,SAFC;QAGR,KAAA,EAAO,YAHC;QAIR,MAAA,EAAQ,kCAJA;QAKR,MAAA,EAAQ,gBALA;QAMR,MAAA,EAAQ,2CANA;QAOR,cAAA,EAAgB,0BAPR;QAQR,MAAA,EAAQ;MARA;IA1CwB;EAxKrB;AAAjB" + "mappings": "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" } \ No newline at end of file diff --git a/test/unit-tests/fakes/informationOnFilesFlattened.litcoffee b/test/unit-tests/fakes/informationOnFilesFlattened.litcoffee index 93390d6c..b608ba1c 100644 --- a/test/unit-tests/fakes/informationOnFilesFlattened.litcoffee +++ b/test/unit-tests/fakes/informationOnFilesFlattened.litcoffee @@ -15,6 +15,8 @@ A fake for the flattended getInformationOnFiles test. "root": "/Project" } "language": { + "code": "\\`\\`\\`" + "codeMatcher": /^\s*\`\`\`/ "commentFilter": /(^#![\/]|^\s*#\{)/ "commentMatcher": /^\s*\s?/ "html": true diff --git a/test/unit-tests/fakes/informationOnFilesUnFlattened.js b/test/unit-tests/fakes/informationOnFilesUnFlattened.js index 3d416152..c05cbaec 100644 --- a/test/unit-tests/fakes/informationOnFilesUnFlattened.js +++ b/test/unit-tests/fakes/informationOnFilesUnFlattened.js @@ -15,6 +15,8 @@ "root": "/Project" }, "language": { + "code": "\\`\\`\\`", + "codeMatcher": /^\s*\`\`\`/, "commentFilter": /(^#![\/]|^\s*#\{)/, "commentMatcher": /^\s*\s?/, "html": true, diff --git a/test/unit-tests/fakes/informationOnFilesUnFlattened.js.map b/test/unit-tests/fakes/informationOnFilesUnFlattened.js.map index 7948155d..d5130807 100644 --- a/test/unit-tests/fakes/informationOnFilesUnFlattened.js.map +++ b/test/unit-tests/fakes/informationOnFilesUnFlattened.js.map @@ -6,5 +6,5 @@ "informationOnFilesUnFlattened.litcoffee" ], "names": [], - "mappings": "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" + "mappings": "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" } \ No newline at end of file diff --git a/test/unit-tests/fakes/informationOnFilesUnFlattened.litcoffee b/test/unit-tests/fakes/informationOnFilesUnFlattened.litcoffee index 2f13e5a4..dd77db6e 100644 --- a/test/unit-tests/fakes/informationOnFilesUnFlattened.litcoffee +++ b/test/unit-tests/fakes/informationOnFilesUnFlattened.litcoffee @@ -15,6 +15,8 @@ A fake for the unflattended getInformationOnFiles test. "root": "/Project" } "language": { + "code": "\\`\\`\\`" + "codeMatcher": /^\s*\`\`\`/ "commentFilter": /(^#![\/]|^\s*#\{)/ "commentMatcher": /^\s*\s?/ "html": true From 569644cbf3cbd1ec655363386ec4b26bc5333aa0 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 10 Jul 2017 22:03:27 -0700 Subject: [PATCH 86/95] correct pre formatting of code pushed right in md files. --- src/format.js | 84 ++++++++++++++++++++++++--------------------- src/format.js.map | 11 +++++- src/parse.js | 16 +++++++-- src/parse.js.map | 2 +- src/parse.litcoffee | 11 +++--- test/sim/README.md | 20 +++++++---- 6 files changed, 89 insertions(+), 55 deletions(-) diff --git a/src/format.js b/src/format.js index 8f3c9860..d26e900e 100644 --- a/src/format.js +++ b/src/format.js @@ -1,54 +1,58 @@ -var _, commander, format, fs, glob, highlightjs, marked, path; +// Generated by CoffeeScript 2.0.0-beta3 +(function() { + var _, commander, format, fs, glob, highlightjs, marked, path; -_ = 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'); + path = require('path'); -glob = require('glob'); + 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; + 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 { - console.warn("docco: couldn't highlight code block with unknown language '" + lang + "' in " + source); - return code; + code = highlightjs.highlight(language.name, section.codeText).value; + code = code.replace(/\s+$/, ''); + section.codeHtml = `
        ${code}
        `; } + results.push(section.docsHtml = marked(section.docsText)); } - }); - 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 = "
        " + code + "
        "; - } - results.push(section.docsHtml = marked(section.docsText)); - } - return results; -}; + return results; + }; + +}).call(this); //# sourceMappingURL=format.js.map diff --git a/src/format.js.map b/src/format.js.map index 8dd398f0..c84e0893 100644 --- a/src/format.js.map +++ b/src/format.js.map @@ -1 +1,10 @@ -{"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 = \"
        #{code}
        \"\n section.docsHtml = marked(section.docsText)\n\n"]} \ No newline at end of file +{ + "version": 3, + "file": "format.js", + "sourceRoot": "", + "sources": [ + "format.litcoffee" + ], + "names": [], + "mappings": ";AAAI;AAAA,MAAA;;EAAA,CAAA,GAAc,OAAA,CAAQ,YAAR;;EACd,EAAA,GAAc,OAAA,CAAQ,UAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EACd,MAAA,GAAc,OAAA,CAAQ,QAAR;;EACd,SAAA,GAAc,OAAA,CAAQ,WAAR;;EACd,WAAA,GAAc,OAAA,CAAQ,cAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EAMd,MAAM,CAAC,OAAP,GAAiB,MAAA,GAAS,QAAA,CAAC,MAAD,EAAS,QAAT,EAAmB,QAAnB,EAA6B,MAA7B,CAAA;AAIxB,QAAA;IAAA,aAAA,GACE;MAAA,WAAA,EAAa;IAAb;IAEF,IAAG,MAAM,CAAC,MAAV;MACE,aAAA,GAAgB,MAAM,CAAC,OADzB;;IAGA,MAAM,CAAC,UAAP,CAAkB,aAAlB;IAMA,MAAM,CAAC,UAAP,CAAkB;MAChB,SAAA,EAAW,QAAA,CAAC,IAAD,EAAO,IAAP,CAAA;QACT,SAAA,OAAS,QAAQ,CAAC;QAElB,IAAG,WAAW,CAAC,WAAZ,CAAwB,IAAxB,CAAH;iBACE,WAAW,CAAC,SAAZ,CAAsB,IAAtB,EAA4B,IAA5B,CAAiC,CAAC,MADpC;SAAA,MAAA;UAGE,OAAO,CAAC,IAAR,CAAa,CAAA,4DAAA,CAAA,CAA+D,IAA/D,CAAA,KAAA,CAAA,CAA2E,MAA3E,CAAA,CAAb;iBACA,KAJF;;MAHS;IADK,CAAlB;AAWA;SAAA,kDAAA;;MACE,IAAG,QAAQ,CAAC,IAAZ;QACE,OAAO,CAAC,QAAR,GAAmB,OAAO,CAAC,SAD7B;OAAA,MAAA;QAGE,IAAA,GAAO,WAAW,CAAC,SAAZ,CAAsB,QAAQ,CAAC,IAA/B,EAAqC,OAAO,CAAC,QAA7C,CAAsD,CAAC;QAC9D,IAAA,GAAO,IAAI,CAAC,OAAL,CAAa,MAAb,EAAqB,EAArB;QACP,OAAO,CAAC,QAAR,GAAmB,CAAA,4BAAA,CAAA,CAA+B,IAA/B,CAAA,YAAA,EALrB;;mBAMA,OAAO,CAAC,QAAR,GAAmB,MAAA,CAAO,OAAO,CAAC,QAAf;AAPrB;;EA3BwB;AAb1B" +} \ No newline at end of file diff --git a/src/parse.js b/src/parse.js index 47f157c7..3ebdc0d5 100644 --- a/src/parse.js +++ b/src/parse.js @@ -61,7 +61,7 @@ } hasCode = true; } else if (line.match(htmlImageMatcher)) { - codeText += line; + codeText += line + '\n'; hasCode = true; } else if (multilineComment && (language.stopMatcher && line.match(language.stopMatcher))) { multilineComment = false; @@ -75,11 +75,21 @@ docsText += (line = line.replace(language.startMatcher, '')) + '\n'; } else if (textToCode && (language.codeMatcher && line.match(language.codeMatcher))) { textToCode = false; - codeText += (line = line.replace(language.codeMatcher, '')) + '\n'; + text = (line = line.replace(language.codeMatcher, '')) + '\n'; + if (language.html) { + text += "
        "; + } + codeText += text; } else if (textToCode || (language.codeMatcher && line.match(language.codeMatcher))) { textToCode = true; hasCode = true; - codeText += (line = line.replace(language.codeMatcher, '')) + '\n'; + if (language.html) { + text = "
        ";
        +        } else {
        +          text = "";
        +        }
        +        text += (line = line.replace(language.codeMatcher, '')) + '\n';
        +        codeText += text;
               } else if (language.sectionMatcher && line.match(language.sectionMatcher)) {
                 if (hasCode) {
                   save();
        diff --git a/src/parse.js.map b/src/parse.js.map
        index aaaefdb5..ae62d1ca 100644
        --- a/src/parse.js.map
        +++ b/src/parse.js.map
        @@ -6,5 +6,5 @@
             "parse.litcoffee"
           ],
           "names": [],
        -  "mappings": ";AAAI;AAAA,MAAA;;EAAA,CAAA,GAAc,OAAA,CAAQ,YAAR;;EACd,EAAA,GAAc,OAAA,CAAQ,UAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EACd,MAAA,GAAc,OAAA,CAAQ,QAAR;;EACd,SAAA,GAAc,OAAA,CAAQ,WAAR;;EACd,WAAA,GAAc,OAAA,CAAQ,cAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EACd,gBAAA,GAAmB;;EAOnB,MAAM,CAAC,OAAP,GAAiB,KAAA,GAAQ,QAAA,CAAC,MAAD,EAAS,QAAT,EAAmB,IAAnB,EAAyB,SAAS,CAAA,CAAlC,CAAA;AACvB,QAAA;IAAA,KAAA,GAAW,IAAI,CAAC,KAAL,CAAW,IAAX;IACX,QAAA,GAAW;IAEX,OAAA,GAAW,QAAA,GAAW,QAAA,GAAW;IAEjC,IAAA,GAAO,QAAA,CAAA,CAAA;MACL,QAAQ,CAAC,IAAT,CAAc,CAAC,QAAD,EAAW,QAAX,CAAd;MACA,OAAA,GAAU,QAAA,GAAW,QAAA,GAAW;IAF3B;IASP,IAAG,QAAQ,CAAC,QAAZ;MACE,MAAA,GAAS,SAAA,GAAY;AACrB,WAAA,+CAAA;;QACE,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,OAFF;;AAYA,SAAA,yCAAA;;MACE,IAAG,QAAQ,CAAC,WAAT,IAAyB,IAAI,CAAC,KAAL,CAAW,QAAQ,CAAC,WAApB,CAA5B;QACE,UAAA,GAAa;QACb,UAAA,GAAa;QACb,WAAA,GAAc;QACd,KAAA,GAAQ,UAAU,CAAC,IAAX,CAAgB,IAAhB;QACR,KAAA,GAAQ,UAAU,CAAC,IAAX,CAAgB,IAAhB;QACR,MAAA,GAAS,WAAW,CAAC,IAAZ,CAAiB,IAAjB;QACT,IAAG,eAAA,IAAW,KAAK,CAAC,MAAN,GAAe,CAA1B,IAAgC,eAAhC,IAA2C,KAAK,CAAC,MAAN,GAAe,CAA7D;UACE,IAAA,GAAO,KAAM,CAAA,CAAA;UACb,IAAG,KAAA,IAAU,KAAK,CAAC,MAAN,GAAe,CAA5B;YAAmC,IAAA,GAAO,KAAM,CAAA,CAAA,EAAhD;WAAA,MAAA;YAAwD,IAAA,GAAO,GAA/D;;UACA,IAAG,MAAA,IAAW,MAAM,CAAC,MAAP,GAAgB,CAA9B;YAAqC,KAAA,GAAQ,MAAO,CAAA,CAAA,EAApD;WAAA,MAAA;YAA4D,KAAA,GAAQ,GAApE;;UACA,QAAA,IAAY,iBAAA,GAAkB,IAAlB,GAAuB,WAAvB,GAAmC,KAAnC,GAAyC,aAAzC,GAAuD,IAAvD,GAA4D,YAA5D,GAA2E,KAJzF;;QAKA,OAAA,GAAU,KAZZ;OAAA,MAaK,IAAG,IAAI,CAAC,KAAL,CAAW,gBAAX,CAAH;QACH,QAAA,IAAY;QACZ,OAAA,GAAU,KAFP;OAAA,MAIA,IAAG,gBAAA,IACR,CAAC,QAAQ,CAAC,WAAT,IAAyB,IAAI,CAAC,KAAL,CAAW,QAAQ,CAAC,WAApB,CAA1B,CADK;QAEH,gBAAA,GAAmB;QACnB,QAAA,IAAY,CAAC,IAAA,GAAO,IAAI,CAAC,OAAL,CAAa,QAAQ,CAAC,WAAtB,EAAmC,EAAnC,CAAR,CAAA,GAAkD;QAC9D,IAAA,CAAA,EAJG;OAAA,MAKA,IAAG,gBAAA,IACR,CAAC,QAAQ,CAAC,YAAT,IAA0B,IAAI,CAAC,KAAL,CAAW,QAAQ,CAAC,YAApB,CAA3B,CADK;QAEH,gBAAA,GAAmB;QACnB,IAAU,OAAV;UAAA,IAAA,CAAA,EAAA;;QACA,QAAA,IAAY,CAAC,IAAA,GAAO,IAAI,CAAC,OAAL,CAAa,QAAQ,CAAC,YAAtB,EAAoC,EAApC,CAAR,CAAA,GAAmD,KAJ5D;OAAA,MAMA,IAAG,UAAA,IACR,CAAC,QAAQ,CAAC,WAAT,IAAyB,IAAI,CAAC,KAAL,CAAW,QAAQ,CAAC,WAApB,CAA1B,CADK;QAEH,UAAA,GAAa;QACb,QAAA,IAAY,CAAC,IAAA,GAAO,IAAI,CAAC,OAAL,CAAa,QAAQ,CAAC,WAAtB,EAAmC,EAAnC,CAAR,CAAA,GAAkD,KAH3D;OAAA,MAIA,IAAG,UAAA,IACR,CAAC,QAAQ,CAAC,WAAT,IAAyB,IAAI,CAAC,KAAL,CAAW,QAAQ,CAAC,WAApB,CAA1B,CADK;QAEH,UAAA,GAAa;QACb,OAAA,GAAU;QACV,QAAA,IAAY,CAAC,IAAA,GAAO,IAAI,CAAC,OAAL,CAAa,QAAQ,CAAC,WAAtB,EAAmC,EAAnC,CAAR,CAAA,GAAkD,KAJ3D;OAAA,MAMA,IAAG,QAAQ,CAAC,cAAT,IAA4B,IAAI,CAAC,KAAL,CAAW,QAAQ,CAAC,cAApB,CAA/B;QACH,IAAU,OAAV;UAAA,IAAA,CAAA,EAAA;;QACA,QAAA,IAAY,CAAC,IAAA,GAAO,IAAI,CAAC,OAAL,CAAa,QAAQ,CAAC,cAAtB,EAAsC,EAAtC,CAAR,CAAA,GAAqD;QACjE,IAAA,CAAA,EAHG;OAAA,MAIA,IAAG,IAAI,CAAC,KAAL,CAAW,QAAQ,CAAC,cAApB,CAAA,IAAwC,CAAI,IAAI,CAAC,KAAL,CAAW,QAAQ,CAAC,aAApB,CAA/C;QACH,IAAU,OAAV;UAAA,IAAA,CAAA,EAAA;;QACA,QAAA,IAAY,CAAC,IAAA,GAAO,IAAI,CAAC,OAAL,CAAa,QAAQ,CAAC,cAAtB,EAAsC,EAAtC,CAAR,CAAA,GAAqD;QACjE,IAAU,eAAe,CAAC,IAAhB,CAAqB,IAArB,CAAV;UAAA,IAAA,CAAA,EAAA;SAHG;OAAA,MAAA;QAKH,OAAA,GAAU;QACV,QAAA,IAAY,IAAA,GAAO,KANhB;;AA3CP;IAkDA,IAAA,CAAA;WAEA;EA/EuB;AAfzB"
        +  "mappings": "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"
         }
        \ No newline at end of file
        diff --git a/src/parse.litcoffee b/src/parse.litcoffee
        index d7e0bf15..e63b3045 100644
        --- a/src/parse.litcoffee
        +++ b/src/parse.litcoffee
        @@ -55,7 +55,7 @@ normal below.
                     codeText += '

        '+text+'

        ' + '\n' hasCode = yes else if line.match(htmlImageMatcher) # only one per line! - codeText += line + codeText += line + '\n' hasCode = yes else if multilineComment and @@ -72,13 +72,16 @@ normal below. else if textToCode and (language.codeMatcher and line.match(language.codeMatcher)) textToCode = false - codeText += (line = line.replace(language.codeMatcher, '')) + '\n' + text = (line = line.replace(language.codeMatcher, '')) + '\n' + text += "
        " if language.html + codeText += text else if textToCode or (language.codeMatcher and line.match(language.codeMatcher)) textToCode = true hasCode = yes - codeText += (line = line.replace(language.codeMatcher, '')) + '\n' - + if language.html then text = "
        " 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'
        diff --git a/test/sim/README.md b/test/sim/README.md
        index c3098cfa..bc7db6d5 100644
        --- a/test/sim/README.md
        +++ b/test/sim/README.md
        @@ -28,11 +28,18 @@ Leap to and fro.
         
         Drawing
         
        +``` 
        + # here is some code.
        + {
        +   "context": {
        +     "name": "promotion10"
        +   },
        +   "fact": {
        +     "product": {},
        +     "cart": {"total": 500}
        +   }
        + }
         ```
        -Here's some code
        -```
        -
        -
         
         
         ### Stanza 3
        @@ -52,11 +59,12 @@ Wriggle to and fro.
         
         
         ### Stanza 4
        -```
        +
        +
         I love them, they love me, 
         that makes me the most happy 
         bunny I can be.
        -```
        +
        ## Author From 75990199cc1525932fc56fb8623b418f6c9a9a08 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Tue, 11 Jul 2017 08:45:58 -0700 Subject: [PATCH 87/95] back to dropdown for menu --- resources/sidebyside/docco.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/sidebyside/docco.css b/resources/sidebyside/docco.css index 21225e2e..b60f6fa3 100644 --- a/resources/sidebyside/docco.css +++ b/resources/sidebyside/docco.css @@ -175,7 +175,7 @@ ul.sections > li > div { } #jump_wrapper { - display: block; + display: none; padding:0; } From 01f87765739a0c99f27f2e71669fa750b90f88ef Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Tue, 11 Jul 2017 16:51:00 -0700 Subject: [PATCH 88/95] Readme update --- README.md | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index fba2500a..713087e8 100644 --- a/README.md +++ b/README.md @@ -76,7 +76,7 @@ npm run build * 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 doccumentation directory + * 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 @@ -87,7 +87,7 @@ npm run build #### Refactors: - * Code refactored into smaller chuncks + * 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 @@ -95,20 +95,31 @@ npm run build #### Breaking Changes: - * .jst template files need to remove call to 'path.basename()' - to modify the destination source file for links to other files + * .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: +This: - `` + `` - Needs to be changed to +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++) { %> +
      3. + + <% if (flatten) %> + <%= path.basename(links[i].file) %> + <% else %> + <%= links[i].file %> + +
      4. + <% } %> +``` * hierarchical directory structure of source is kept by default. - Use --flatten to get the old behavior - + Use --flatten to get the old behaviour + Should this flag be changed to something else with a default behaviour being flatten? ### TODO: @@ -116,4 +127,3 @@ npm run build * publish to github * index.html documentation update * All built javascript is ignored in .gitignore (npm packaging is the problem here). - From 8b41941b5add5d4e78d467f1477bb80d24b680ee Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Tue, 11 Jul 2017 19:13:28 -0700 Subject: [PATCH 89/95] Working toward a more general implementation. --- package.json | 1 + src/buildMatchers.js | 3 +- src/buildMatchers.js.map | 2 +- src/buildMatchers.litcoffee | 4 +- src/parse.js | 74 +++++++++++++------ src/parse.js.map | 2 +- src/parse.litcoffee | 59 ++++++++++----- .../fakes/informationOnFilesFlattened.js | 3 +- .../fakes/informationOnFilesFlattened.js.map | 2 +- .../informationOnFilesFlattened.litcoffee | 5 +- .../fakes/informationOnFilesUnFlattened.js | 3 +- .../informationOnFilesUnFlattened.js.map | 2 +- .../informationOnFilesUnFlattened.litcoffee | 1 + test/unit-tests/unit-test-buildMatchers.js | 3 +- 14 files changed, 112 insertions(+), 52 deletions(-) diff --git a/package.json b/package.json index 5c159f22..deff7bb3 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "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", diff --git a/src/buildMatchers.js b/src/buildMatchers.js index 63d0126d..1f512e96 100644 --- a/src/buildMatchers.js +++ b/src/buildMatchers.js @@ -9,7 +9,8 @@ l.commentMatcher = RegExp(`^\\s*${l.symbol}\\s?`); l.commentFilter = /(^#![\/]|^\s*#\{)/; if (l.link) { - l.linkMatcher = RegExp(`^${l.link}\\[(.+)\\]\\((.+)\\)`); + l.imageMatcher = RegExp(`^${l.link}\\[(.+)\\]\\((.+)\\)`); + l.linkMatcher = /^\[(.+)\]\((.+)\)/; } if (l.section) { l.sectionMatcher = RegExp(`^${l.section}\\s?`); diff --git a/src/buildMatchers.js.map b/src/buildMatchers.js.map index 7ec12c96..669a0e46 100644 --- a/src/buildMatchers.js.map +++ b/src/buildMatchers.js.map @@ -6,5 +6,5 @@ "buildMatchers.litcoffee" ], "names": [], - "mappings": ";AAEI;AAAA,MAAA;;EAAA,MAAM,CAAC,OAAP,GAAiB,aAAA,GAAgB,QAAA,CAAC,SAAD,CAAA;AAC/B,QAAA;AAAA,SAAA,gBAAA;;MAIE,CAAC,CAAC,cAAF,GAAmB,MAAA,CAAA,CAAA,KAAA,CAAA,CAAS,CAAC,CAAC,MAAX,CAAA,IAAA,CAAA;MAInB,CAAC,CAAC,aAAF,GAAkB;MAIlB,IAAG,CAAC,CAAC,IAAL;QACE,CAAC,CAAC,WAAF,GAAgB,MAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAC,IAAR,CAAA,oBAAA,CAAA,EADlB;;MAKA,IAAG,CAAC,CAAC,OAAL;QACE,CAAC,CAAC,cAAF,GAAmB,MAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAC,OAAR,CAAA,IAAA,CAAA,EADrB;;MAMA,IAAG,CAAC,CAAC,SAAL;QAEE,KAAA,GAAQ,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,OAAlB,CAA0B,SAA1B,EAAoC,MAApC;QACR,IAAA,GAAO,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,OAAjB,CAAyB,SAAzB,EAAmC,MAAnC;QAEP,CAAC,CAAC,YAAF,GAAiB,MAAA,CAAA,CAAA,KAAA,CAAA,CAAS,KAAT,CAAA,CAAA;QACjB,CAAC,CAAC,WAAF,GAAgB,MAAA,CAAA,CAAA,KAAA,CAAA,CAAS,IAAT,CAAA,CAAA,EANlB;;MAQA,IAAG,CAAC,CAAC,IAAL;QACE,CAAC,CAAC,IAAF,GAAS,CAAC,CAAC,IAAI,CAAC,OAAP,CAAe,SAAf,EAAyB,MAAzB;QACT,CAAC,CAAC,WAAF,GAAgB,MAAA,CAAA,CAAA,KAAA,CAAA,CAAS,CAAC,CAAC,IAAX,CAAA,CAAA,EAFlB;;AA/BF;WAmCA;EApC+B;AAAjC" + "mappings": ";AAEI;AAAA,MAAA;;EAAA,MAAM,CAAC,OAAP,GAAiB,aAAA,GAAgB,QAAA,CAAC,SAAD,CAAA;AAC/B,QAAA;AAAA,SAAA,gBAAA;;MAIE,CAAC,CAAC,cAAF,GAAmB,MAAA,CAAA,CAAA,KAAA,CAAA,CAAS,CAAC,CAAC,MAAX,CAAA,IAAA,CAAA;MAInB,CAAC,CAAC,aAAF,GAAkB;MAIlB,IAAG,CAAC,CAAC,IAAL;QACE,CAAC,CAAC,YAAF,GAAiB,MAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAC,IAAR,CAAA,oBAAA,CAAA;QACjB,CAAC,CAAC,WAAF,GAAgB,oBAFlB;;MAKA,IAAG,CAAC,CAAC,OAAL;QACE,CAAC,CAAC,cAAF,GAAmB,MAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAC,OAAR,CAAA,IAAA,CAAA,EADrB;;MAMA,IAAG,CAAC,CAAC,SAAL;QAEE,KAAA,GAAQ,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,OAAlB,CAA0B,SAA1B,EAAoC,MAApC;QACR,IAAA,GAAO,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,OAAjB,CAAyB,SAAzB,EAAmC,MAAnC;QAEP,CAAC,CAAC,YAAF,GAAiB,MAAA,CAAA,CAAA,KAAA,CAAA,CAAS,KAAT,CAAA,CAAA;QACjB,CAAC,CAAC,WAAF,GAAgB,MAAA,CAAA,CAAA,KAAA,CAAA,CAAS,IAAT,CAAA,CAAA,EANlB;;MAQA,IAAG,CAAC,CAAC,IAAL;QACE,CAAC,CAAC,IAAF,GAAS,CAAC,CAAC,IAAI,CAAC,OAAP,CAAe,SAAf,EAAyB,MAAzB;QACT,CAAC,CAAC,WAAF,GAAgB,MAAA,CAAA,CAAA,KAAA,CAAA,CAAS,CAAC,CAAC,IAAX,CAAA,CAAA,EAFlB;;AA/BF;WAmCA;EApC+B;AAAjC" } \ No newline at end of file diff --git a/src/buildMatchers.litcoffee b/src/buildMatchers.litcoffee index c5e3d37b..cee09aa0 100644 --- a/src/buildMatchers.litcoffee +++ b/src/buildMatchers.litcoffee @@ -14,8 +14,8 @@ Ignore [hashbangs](http://en.wikipedia.org/wiki/Shebang_%28Unix%29) and interpol Look for links if necessary. if l.link - l.linkMatcher = ///^#{l.link}\[(.+)\]\((.+)\)/// - + l.imageMatcher = ///^#{l.link}\[(.+)\]\((.+)\)/// + l.linkMatcher = ///^\[(.+)\]\((.+)\)/// Look for explict section breaks if l.section diff --git a/src/parse.js b/src/parse.js index 3ebdc0d5..757ecd38 100644 --- a/src/parse.js +++ b/src/parse.js @@ -1,6 +1,6 @@ // Generated by CoffeeScript 2.0.0-beta3 (function() { - var _, commander, fs, glob, highlightjs, htmlImageMatcher, marked, parse, path; + var Handlebars, _, commander, fs, glob, highlightjs, hrefLinkTemplate, htmlImageMatcher, imageLinkTemplate, marked, parse, path; _ = require('underscore'); @@ -12,6 +12,8 @@ commander = require('commander'); + Handlebars = require('handlebars'); + highlightjs = require('highlight.js'); path = require('path'); @@ -20,8 +22,12 @@ htmlImageMatcher = /^/; + imageLinkTemplate = Handlebars.compile('

        {{text}}

        \n'); + + hrefLinkTemplate = Handlebars.compile('\n'); + module.exports = parse = function(source, language, code, config = {}) { - var LINK_REGEX, STYLE_REGEX, TEXT_REGEX, codeText, docsText, hasCode, i, isText, j, k, len, len1, line, lines, link, links, match, maybeCode, multilineComment, save, sections, style, styles, text, textToCode, texts; + var codeText, docsText, getLinkComponents, hasCode, i, isText, j, k, len, len1, line, lines, makeLink, match, maybeCode, multilineComment, parts, save, sections, text, textToCode; lines = code.split('\n'); sections = []; hasCode = docsText = codeText = ''; @@ -36,28 +42,47 @@ 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); + console.log("LINKS ----> " + JSON.stringify(links, null, 2)); + 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, text, 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.linkMatcher && line.match(language.linkMatcher)) { - 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 = ''; - } - codeText += '

        ' + text + '

        ' + '\n'; + 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)) { @@ -66,7 +91,7 @@ } else if (multilineComment && (language.stopMatcher && line.match(language.stopMatcher))) { multilineComment = false; docsText += (line = line.replace(language.stopMatcher, '')) + '\n'; - save(); + hasCode = true; } else if (multilineComment || (language.startMatcher && line.match(language.startMatcher))) { multilineComment = true; if (hasCode) { @@ -79,6 +104,9 @@ if (language.html) { text += "
        "; } + if (hasCode) { + save(); + } codeText += text; } else if (textToCode || (language.codeMatcher && line.match(language.codeMatcher))) { textToCode = true; diff --git a/src/parse.js.map b/src/parse.js.map index ae62d1ca..5708155e 100644 --- a/src/parse.js.map +++ b/src/parse.js.map @@ -6,5 +6,5 @@ "parse.litcoffee" ], "names": [], - "mappings": "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" + "mappings": "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" } \ No newline at end of file diff --git a/src/parse.litcoffee b/src/parse.litcoffee index e63b3045..1c837679 100644 --- a/src/parse.litcoffee +++ b/src/parse.litcoffee @@ -3,11 +3,15 @@ path = require 'path' marked = require 'marked' commander = require 'commander' + Handlebars = require 'handlebars' highlightjs = require 'highlight.js' path = require 'path' glob = require 'glob' htmlImageMatcher = /^/ + imageLinkTemplate = Handlebars.compile('

        {{text}}

        \n') + hrefLinkTemplate = Handlebars.compile('\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 @@ -40,42 +44,63 @@ normal below. 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) + + console.log("LINKS ----> "+JSON.stringify(links, null, 2)) + + 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.linkMatcher and line.match(language.linkMatcher) - 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] - if texts and texts.length > 0 then text = texts[1] else text = '' - if styles and styles.length > 0 then style = styles[1] else style = '' - codeText += '

        '+text+'

        ' + '\n' + 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 + else if multilineComment and # stop (language.stopMatcher and line.match(language.stopMatcher)) multilineComment = false docsText += (line = line.replace(language.stopMatcher, '')) + '\n' - save() - else if multilineComment or + 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 + else if textToCode and # start (language.codeMatcher and line.match(language.codeMatcher)) textToCode = false text = (line = line.replace(language.codeMatcher, '')) + '\n' text += "" if language.html + save() if hasCode codeText += text - else if textToCode or + else if textToCode or # stop (language.codeMatcher and line.match(language.codeMatcher)) textToCode = true hasCode = yes diff --git a/test/unit-tests/fakes/informationOnFilesFlattened.js b/test/unit-tests/fakes/informationOnFilesFlattened.js index e2217fb7..830ccb33 100644 --- a/test/unit-tests/fakes/informationOnFilesFlattened.js +++ b/test/unit-tests/fakes/informationOnFilesFlattened.js @@ -20,8 +20,9 @@ "commentFilter": /(^#![\/]|^\s*#\{)/, "commentMatcher": /^\s*\s?/, "html": true, + "imageMatcher": /^!\[(.+)\]\((.+)\)/, "link": "!", - "linkMatcher": /^!\[(.+)\]\((.+)\)/, + "linkMatcher": /^\[(.+)\]\((.+)\)/, "name": "markdown", "section": "#", "sectionMatcher": /^#\s?/, diff --git a/test/unit-tests/fakes/informationOnFilesFlattened.js.map b/test/unit-tests/fakes/informationOnFilesFlattened.js.map index 47db15a8..eef66a8a 100644 --- a/test/unit-tests/fakes/informationOnFilesFlattened.js.map +++ b/test/unit-tests/fakes/informationOnFilesFlattened.js.map @@ -6,5 +6,5 @@ "informationOnFilesFlattened.litcoffee" ], "names": [], - "mappings": "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" + "mappings": "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" } \ No newline at end of file diff --git a/test/unit-tests/fakes/informationOnFilesFlattened.litcoffee b/test/unit-tests/fakes/informationOnFilesFlattened.litcoffee index b608ba1c..8b5f1623 100644 --- a/test/unit-tests/fakes/informationOnFilesFlattened.litcoffee +++ b/test/unit-tests/fakes/informationOnFilesFlattened.litcoffee @@ -20,8 +20,9 @@ A fake for the flattended getInformationOnFiles test. "commentFilter": /(^#![\/]|^\s*#\{)/ "commentMatcher": /^\s*\s?/ "html": true - "link": "!" - "linkMatcher": /^!\[(.+)\]\((.+)\)/ + "imageMatcher": /^!\[(.+)\]\((.+)\)/, + "link": "!", + "linkMatcher": /^\[(.+)\]\((.+)\)/, "name": "markdown" "section": "#" "sectionMatcher": /^#\s?/ diff --git a/test/unit-tests/fakes/informationOnFilesUnFlattened.js b/test/unit-tests/fakes/informationOnFilesUnFlattened.js index c05cbaec..6b151967 100644 --- a/test/unit-tests/fakes/informationOnFilesUnFlattened.js +++ b/test/unit-tests/fakes/informationOnFilesUnFlattened.js @@ -20,8 +20,9 @@ "commentFilter": /(^#![\/]|^\s*#\{)/, "commentMatcher": /^\s*\s?/, "html": true, + "imageMatcher": /^!\[(.+)\]\((.+)\)/, "link": "!", - "linkMatcher": /^!\[(.+)\]\((.+)\)/, + "linkMatcher": /^\[(.+)\]\((.+)\)/, "name": "markdown", "section": "#", "sectionMatcher": /^#\s?/, diff --git a/test/unit-tests/fakes/informationOnFilesUnFlattened.js.map b/test/unit-tests/fakes/informationOnFilesUnFlattened.js.map index d5130807..9ebc7cda 100644 --- a/test/unit-tests/fakes/informationOnFilesUnFlattened.js.map +++ b/test/unit-tests/fakes/informationOnFilesUnFlattened.js.map @@ -6,5 +6,5 @@ "informationOnFilesUnFlattened.litcoffee" ], "names": [], - "mappings": "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" + "mappings": "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" } \ No newline at end of file diff --git a/test/unit-tests/fakes/informationOnFilesUnFlattened.litcoffee b/test/unit-tests/fakes/informationOnFilesUnFlattened.litcoffee index dd77db6e..23f31e3d 100644 --- a/test/unit-tests/fakes/informationOnFilesUnFlattened.litcoffee +++ b/test/unit-tests/fakes/informationOnFilesUnFlattened.litcoffee @@ -20,6 +20,7 @@ A fake for the unflattended getInformationOnFiles test. "commentFilter": /(^#![\/]|^\s*#\{)/ "commentMatcher": /^\s*\s?/ "html": true + "imageMatcher": /^!\[(.+)\]\((.+)\)/ "link": "!" "linkMatcher": /^!\[(.+)\]\((.+)\)/ "name": "markdown" diff --git a/test/unit-tests/unit-test-buildMatchers.js b/test/unit-tests/unit-test-buildMatchers.js index 1753a3a0..92e72e64 100644 --- a/test/unit-tests/unit-test-buildMatchers.js +++ b/test/unit-tests/unit-test-buildMatchers.js @@ -18,7 +18,8 @@ describe('docco buildMatchers', function() { assert.deepEqual(l.commentMatcher, RegExp("^\\s*" + l.symbol + "\\s?")); assert.deepEqual(l.commentFilter, /(^#![\/]|^\s*#\{)/); if (l.link) { - assert.deepEqual(l.linkMatcher, RegExp("^" + l.link + "\\[(.+)\\]\\((.+)\\)")); + assert.deepEqual(l.imageMatcher, RegExp("^" + l.link + "\\[(.+)\\]\\((.+)\\)")); + assert.deepEqual(l.linkMatcher, RegExp("^\\[(.+)\\]\\((.+)\\)")); } if (l.section) { results.push(assert.deepEqual(l.sectionMatcher, RegExp("^" + l.section + "\\s?"))); From 8445750d221dbf462b8aa4dccf72a89f9ea0cfe4 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Tue, 11 Jul 2017 19:14:20 -0700 Subject: [PATCH 90/95] removed console.logs --- src/parse.js | 1 - src/parse.js.map | 2 +- src/parse.litcoffee | 3 --- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/parse.js b/src/parse.js index 757ecd38..2a5f7094 100644 --- a/src/parse.js +++ b/src/parse.js @@ -50,7 +50,6 @@ links = LINK_REGEX.exec(line); texts = TEXT_REGEX.exec(line); styles = STYLE_REGEX.exec(line); - console.log("LINKS ----> " + JSON.stringify(links, null, 2)); if ((links != null) && links.length > 0 && (texts != null) && texts.length > 1) { link = links[1]; if (texts && texts.length > 0) { diff --git a/src/parse.js.map b/src/parse.js.map index 5708155e..ab2a527f 100644 --- a/src/parse.js.map +++ b/src/parse.js.map @@ -6,5 +6,5 @@ "parse.litcoffee" ], "names": [], - "mappings": "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" + "mappings": "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" } \ No newline at end of file diff --git a/src/parse.litcoffee b/src/parse.litcoffee index 1c837679..aad40487 100644 --- a/src/parse.litcoffee +++ b/src/parse.litcoffee @@ -52,9 +52,6 @@ normal below. links = LINK_REGEX.exec(line) texts = TEXT_REGEX.exec(line) styles = STYLE_REGEX.exec(line) - - console.log("LINKS ----> "+JSON.stringify(links, null, 2)) - 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 = '' From cae9809c04f03ec87ef2711c0e04d9dcda2864e0 Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Tue, 11 Jul 2017 19:20:47 -0700 Subject: [PATCH 91/95] svg support --- resources/languages.json | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/languages.json b/resources/languages.json index 27f155e9..9ad66b13 100644 --- a/resources/languages.json +++ b/resources/languages.json @@ -67,6 +67,7 @@ ".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}, From 9e77806b8f7aa33f46e7e1bcf9a0367c7ef328c6 Mon Sep 17 00:00:00 2001 From: "Lovell, Robb" Date: Mon, 9 Jul 2018 16:29:46 -0700 Subject: [PATCH 92/95] unit test update, reformatting. --- docco.js | 142 +- docco.js.map | 11 +- package-lock.json | 5194 +++++++++++++++++ src/buildMatchers.js | 56 +- src/buildMatchers.js.map | 11 +- src/format.js | 84 +- src/format.js.map | 11 +- src/getInformationOnFiles.js | 92 +- src/getInformationOnFiles.js.map | 11 +- src/getOthers.js | 48 +- src/getOthers.js.map | 11 +- src/parse.js | 250 +- src/parse.js.map | 11 +- src/write.js | 100 +- src/write.js.map | 11 +- test/unit-tests/fakes/fake-config.js | 134 +- test/unit-tests/fakes/fake-config.js.map | 11 +- .../fakes/informationOnFilesFlattened.js | 412 +- .../fakes/informationOnFilesFlattened.js.map | 11 +- .../fakes/informationOnFilesUnFlattened.js | 412 +- .../informationOnFilesUnFlattened.js.map | 11 +- test/unit-tests/unit-test-buildMatchers.js | 3 +- test/unit-tests/unit-test-getOthers.js | 174 +- test/unit-tests/unit-test-getOthers.js.map | 11 +- 24 files changed, 6141 insertions(+), 1081 deletions(-) create mode 100644 package-lock.json diff --git a/docco.js b/docco.js index b84d9952..ec1e926d 100644 --- a/docco.js +++ b/docco.js @@ -1,96 +1,92 @@ -// Generated by CoffeeScript 1.12.6 -(function() { - var Docco, _, commander, configure, defaults, document, format, fs, getInformationOnFiles, glob, highlightjs, languages, marked, parse, path, run, version; +var Docco, _, commander, configure, defaults, document, format, fs, getInformationOnFiles, glob, highlightjs, languages, marked, parse, path, run, version; - document = require('./src/document'); +document = require('./src/document'); - parse = require('./src/parse'); +parse = require('./src/parse'); - format = require('./src/format'); +format = require('./src/format'); - configure = require('./src/configure'); +configure = require('./src/configure'); - getInformationOnFiles = require('./src/getInformationOnFiles'); +getInformationOnFiles = require('./src/getInformationOnFiles'); - _ = 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'); +path = require('path'); - glob = require('glob'); +glob = require('glob'); - languages = JSON.parse(fs.readFileSync(path.join(__dirname, 'resources', 'languages.json'))); +languages = JSON.parse(fs.readFileSync(path.join(__dirname, 'resources', 'languages.json'))); - version = JSON.parse(fs.readFileSync(path.join(__dirname, 'package.json'))).version; +version = JSON.parse(fs.readFileSync(path.join(__dirname, 'package.json'))).version; - defaults = { - layout: 'parallel', - output: 'docs', - template: null, - css: null, - extension: null, - languages: {}, - marked: null, - setup: '.docco.json', - help: false, - flatten: false - }; +defaults = { + layout: 'parallel', + output: 'docs', + template: null, + css: null, + extension: null, + languages: {}, + marked: null, + setup: '.docco.json', + help: false, + flatten: false +}; - run = function(args) { - var config, file, files, globName, i, j, len, len1, ref, setup; - 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('-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, languages); + setup = path.resolve(config.setup); + if (fs.existsSync(setup)) { + if (setup) { + config = _.extend(config, JSON.parse(fs.readFileSync(setup))); } - 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('-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, languages); - setup = path.resolve(config.setup); - if (fs.existsSync(setup)) { - if (setup) { - config = _.extend(config, JSON.parse(fs.readFileSync(setup))); + } + 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); } } - 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); - } - } - 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()); + config.sources = []; + for (j = 0, len1 = files.length; j < len1; j++) { + file = files[j]; + config.sources.push(path.relative(config.root, file)); } - }; - - module.exports = Docco = { - run: run, - document: document, - parse: parse, - format: format, - languages: languages, - version: version - }; - -}).call(this); + 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 index 129face4..9a5a9329 100644 --- a/docco.js.map +++ b/docco.js.map @@ -1,10 +1 @@ -{ - "version": 3, - "file": "docco.js", - "sourceRoot": "", - "sources": [ - "docco.litcoffee" - ], - "names": [], - "mappings": "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" -} \ No newline at end of file +{"version":3,"file":"docco.js","sources":["docco.litcoffee"],"names":[],"mappings":"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","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: '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\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('-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, 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/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/src/buildMatchers.js b/src/buildMatchers.js index 1f512e96..b554446a 100644 --- a/src/buildMatchers.js +++ b/src/buildMatchers.js @@ -1,34 +1,30 @@ -// Generated by CoffeeScript 2.0.0-beta3 -(function() { - var buildMatchers; +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}`); - } +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 = /^\[(.+)\]\((.+)\)/; } - return languages; - }; - -}).call(this); + 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 index 669a0e46..f7625b18 100644 --- a/src/buildMatchers.js.map +++ b/src/buildMatchers.js.map @@ -1,10 +1 @@ -{ - "version": 3, - "file": "buildMatchers.js", - "sourceRoot": "", - "sources": [ - "buildMatchers.litcoffee" - ], - "names": [], - "mappings": ";AAEI;AAAA,MAAA;;EAAA,MAAM,CAAC,OAAP,GAAiB,aAAA,GAAgB,QAAA,CAAC,SAAD,CAAA;AAC/B,QAAA;AAAA,SAAA,gBAAA;;MAIE,CAAC,CAAC,cAAF,GAAmB,MAAA,CAAA,CAAA,KAAA,CAAA,CAAS,CAAC,CAAC,MAAX,CAAA,IAAA,CAAA;MAInB,CAAC,CAAC,aAAF,GAAkB;MAIlB,IAAG,CAAC,CAAC,IAAL;QACE,CAAC,CAAC,YAAF,GAAiB,MAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAC,IAAR,CAAA,oBAAA,CAAA;QACjB,CAAC,CAAC,WAAF,GAAgB,oBAFlB;;MAKA,IAAG,CAAC,CAAC,OAAL;QACE,CAAC,CAAC,cAAF,GAAmB,MAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAC,OAAR,CAAA,IAAA,CAAA,EADrB;;MAMA,IAAG,CAAC,CAAC,SAAL;QAEE,KAAA,GAAQ,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,OAAlB,CAA0B,SAA1B,EAAoC,MAApC;QACR,IAAA,GAAO,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,OAAjB,CAAyB,SAAzB,EAAmC,MAAnC;QAEP,CAAC,CAAC,YAAF,GAAiB,MAAA,CAAA,CAAA,KAAA,CAAA,CAAS,KAAT,CAAA,CAAA;QACjB,CAAC,CAAC,WAAF,GAAgB,MAAA,CAAA,CAAA,KAAA,CAAA,CAAS,IAAT,CAAA,CAAA,EANlB;;MAQA,IAAG,CAAC,CAAC,IAAL;QACE,CAAC,CAAC,IAAF,GAAS,CAAC,CAAC,IAAI,CAAC,OAAP,CAAe,SAAf,EAAyB,MAAzB;QACT,CAAC,CAAC,WAAF,GAAgB,MAAA,CAAA,CAAA,KAAA,CAAA,CAAS,CAAC,CAAC,IAAX,CAAA,CAAA,EAFlB;;AA/BF;WAmCA;EApC+B;AAAjC" -} \ No newline at end of file +{"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/format.js b/src/format.js index d26e900e..8f3c9860 100644 --- a/src/format.js +++ b/src/format.js @@ -1,58 +1,54 @@ -// Generated by CoffeeScript 2.0.0-beta3 -(function() { - var _, commander, format, fs, glob, highlightjs, marked, path; +var _, commander, format, fs, glob, highlightjs, marked, path; - _ = 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'); +path = require('path'); - glob = require('glob'); +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; +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 { - code = highlightjs.highlight(language.name, section.codeText).value; - code = code.replace(/\s+$/, ''); - section.codeHtml = `
        ${code}
        `; + console.warn("docco: couldn't highlight code block with unknown language '" + lang + "' in " + source); + return code; } - results.push(section.docsHtml = marked(section.docsText)); } - return results; - }; - -}).call(this); + }); + 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 = "
        " + code + "
        "; + } + 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 index c84e0893..8dd398f0 100644 --- a/src/format.js.map +++ b/src/format.js.map @@ -1,10 +1 @@ -{ - "version": 3, - "file": "format.js", - "sourceRoot": "", - "sources": [ - "format.litcoffee" - ], - "names": [], - "mappings": ";AAAI;AAAA,MAAA;;EAAA,CAAA,GAAc,OAAA,CAAQ,YAAR;;EACd,EAAA,GAAc,OAAA,CAAQ,UAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EACd,MAAA,GAAc,OAAA,CAAQ,QAAR;;EACd,SAAA,GAAc,OAAA,CAAQ,WAAR;;EACd,WAAA,GAAc,OAAA,CAAQ,cAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EAMd,MAAM,CAAC,OAAP,GAAiB,MAAA,GAAS,QAAA,CAAC,MAAD,EAAS,QAAT,EAAmB,QAAnB,EAA6B,MAA7B,CAAA;AAIxB,QAAA;IAAA,aAAA,GACE;MAAA,WAAA,EAAa;IAAb;IAEF,IAAG,MAAM,CAAC,MAAV;MACE,aAAA,GAAgB,MAAM,CAAC,OADzB;;IAGA,MAAM,CAAC,UAAP,CAAkB,aAAlB;IAMA,MAAM,CAAC,UAAP,CAAkB;MAChB,SAAA,EAAW,QAAA,CAAC,IAAD,EAAO,IAAP,CAAA;QACT,SAAA,OAAS,QAAQ,CAAC;QAElB,IAAG,WAAW,CAAC,WAAZ,CAAwB,IAAxB,CAAH;iBACE,WAAW,CAAC,SAAZ,CAAsB,IAAtB,EAA4B,IAA5B,CAAiC,CAAC,MADpC;SAAA,MAAA;UAGE,OAAO,CAAC,IAAR,CAAa,CAAA,4DAAA,CAAA,CAA+D,IAA/D,CAAA,KAAA,CAAA,CAA2E,MAA3E,CAAA,CAAb;iBACA,KAJF;;MAHS;IADK,CAAlB;AAWA;SAAA,kDAAA;;MACE,IAAG,QAAQ,CAAC,IAAZ;QACE,OAAO,CAAC,QAAR,GAAmB,OAAO,CAAC,SAD7B;OAAA,MAAA;QAGE,IAAA,GAAO,WAAW,CAAC,SAAZ,CAAsB,QAAQ,CAAC,IAA/B,EAAqC,OAAO,CAAC,QAA7C,CAAsD,CAAC;QAC9D,IAAA,GAAO,IAAI,CAAC,OAAL,CAAa,MAAb,EAAqB,EAArB;QACP,OAAO,CAAC,QAAR,GAAmB,CAAA,4BAAA,CAAA,CAA+B,IAA/B,CAAA,YAAA,EALrB;;mBAMA,OAAO,CAAC,QAAR,GAAmB,MAAA,CAAO,OAAO,CAAC,QAAf;AAPrB;;EA3BwB;AAb1B" -} \ No newline at end of file +{"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 = \"
        #{code}
        \"\n section.docsHtml = marked(section.docsText)\n\n"]} \ No newline at end of file diff --git a/src/getInformationOnFiles.js b/src/getInformationOnFiles.js index b9af3f40..ce535fb3 100644 --- a/src/getInformationOnFiles.js +++ b/src/getInformationOnFiles.js @@ -1,66 +1,62 @@ -// Generated by CoffeeScript 2.0.0-beta3 -(function() { - var _, commander, fs, getCSSPath, getDestinationInformation, getInformationOnFiles, getLanguage, getOthers, getRelativePath, getSourceInformation, glob, highlightjs, marked, path; +var _, commander, fs, getCSSPath, getDestinationInformation, getInformationOnFiles, getLanguage, getOthers, getRelativePath, getSourceInformation, glob, highlightjs, marked, path; - _ = 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'); +path = require('path'); - glob = require('glob'); +glob = require('glob'); - getSourceInformation = require('./getSourceInformation'); +getSourceInformation = require('./getSourceInformation'); - getDestinationInformation = require('./getDestinationInformation'); +getDestinationInformation = require('./getDestinationInformation'); - getRelativePath = require('./getRelativePath'); +getRelativePath = require('./getRelativePath'); - getCSSPath = require('./getCSSPath'); +getCSSPath = require('./getCSSPath'); - getOthers = require('./getOthers'); +getOthers = require('./getOthers'); - getLanguage = require('./getLanguage'); +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; +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); } - 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; - }; - -}).call(this); + 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 index 14ea17e5..0964cc90 100644 --- a/src/getInformationOnFiles.js.map +++ b/src/getInformationOnFiles.js.map @@ -1,10 +1 @@ -{ - "version": 3, - "file": "getInformationOnFiles.js", - "sourceRoot": "", - "sources": [ - "getInformationOnFiles.litcoffee" - ], - "names": [], - "mappings": ";AAAI;AAAA,MAAA;;EAAA,CAAA,GAAc,OAAA,CAAQ,YAAR;;EACd,EAAA,GAAc,OAAA,CAAQ,UAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EACd,MAAA,GAAc,OAAA,CAAQ,QAAR;;EACd,SAAA,GAAc,OAAA,CAAQ,WAAR;;EACd,WAAA,GAAc,OAAA,CAAQ,cAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EAEd,oBAAA,GAAuB,OAAA,CAAQ,wBAAR;;EAEvB,yBAAA,GAA4B,OAAA,CAAQ,6BAAR;;EAE5B,eAAA,GAAkB,OAAA,CAAQ,mBAAR;;EAElB,UAAA,GAAa,OAAA,CAAQ,cAAR;;EAEb,SAAA,GAAY,OAAA,CAAQ,aAAR;;EAEZ,WAAA,GAAc,OAAA,CAAQ,eAAR;;EAEd,MAAM,CAAC,OAAP,GAAiB,qBAAA,GAAwB,QAAA,CAAC,MAAD,CAAA;AACvC,QAAA;IAAA,eAAA,GAAkB,MAAM,CAAC;IACzB,eAAA,GAAkB,MAAM,CAAC;IACzB,aAAA,GAAgB,MAAM,CAAC;IAOvB,kBAAA,GAAqB,CAAA;AACrB;AAAA,SAAA,qCAAA;;MACE,QAAA,GAAW,WAAA,CAAY,IAAZ,EAAkB,MAAM,CAAC,SAAzB,EAAoC,MAAM,CAAC,SAA3C;MACX,IAAI,gBAAJ;QACE,QAAA,GAAW,WAAA,CAAY,eAAZ,EAA6B,MAAM,CAAC,SAApC,EADb;;MAKA,MAAA,GAAS,oBAAA,CAAqB,IAArB,EAA2B,aAA3B,EAA0C,MAAM,CAAC,OAAjD;MAIT,YAAA,GAAe,CAAA;MACf,WAAA,GAAc,yBAAA,CAA0B,QAA1B,EAAoC,MAApC,EAA4C,aAA5C,EAA2D,eAA3D,EAA4E,MAAM,CAAC,OAAnF;MAId,WAAW,CAAC,GAAZ,GAAkB,UAAA,CAAW,MAAM,CAAC,GAAlB,EAAuB,eAAvB,EAAwC,WAAW,CAAC,IAApD;MAElB,kBAAmB,CAAA,IAAA,CAAnB,GAA2B,CAAA;MAC3B,kBAAmB,CAAA,IAAA,CAAK,CAAC,WAAzB,GAAuC;MACvC,kBAAmB,CAAA,IAAA,CAAK,CAAC,MAAzB,GAAkC;MAClC,kBAAmB,CAAA,IAAA,CAAK,CAAC,QAAzB,GAAoC;AArBtC;AAyBA;AAAA,SAAA,wCAAA;;MACE,MAAA,GAAS,SAAA,CAAU,IAAV,EAAgB,kBAAhB,EAAoC,MAApC;MAET,kBAAmB,CAAA,IAAA,CAAK,CAAC,MAAzB,GAAkC;AAHpC;AAKA,WAAO;EAzCgC;AArBzC" -} \ No newline at end of file +{"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/getOthers.js b/src/getOthers.js index db7c06e1..87f0f59e 100644 --- a/src/getOthers.js +++ b/src/getOthers.js @@ -1,31 +1,27 @@ -// Generated by CoffeeScript 2.0.0-beta3 -(function() { - var getOthers, getRelativePath; +var getOthers, getRelativePath; - getRelativePath = require('./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; - }; +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; - -}).call(this); +module.exports = getOthers; //# sourceMappingURL=getOthers.js.map diff --git a/src/getOthers.js.map b/src/getOthers.js.map index 009ebba0..5326014e 100644 --- a/src/getOthers.js.map +++ b/src/getOthers.js.map @@ -1,10 +1 @@ -{ - "version": 3, - "file": "getOthers.js", - "sourceRoot": "", - "sources": [ - "getOthers.litcoffee" - ], - "names": [], - "mappings": ";AAAI;AAAA,MAAA;;EAAA,eAAA,GAAkB,OAAA,CAAQ,mBAAR;;EAElB,SAAA,GAAY,QAAA,CAAC,IAAD,EAAO,kBAAP,EAA2B,MAA3B,CAAA;AACV,QAAA;IAAA,qBAAA,GAAwB,kBAAmB,CAAA,IAAA;IAC3C,MAAA,GAAS,qBAAqB,CAAC;IAC/B,MAAA,GAAS,CAAA;AACT;AAAA,SAAA,qCAAA;;MACE,0BAAA,GAA6B,kBAAmB,CAAA,KAAA;MAChD,MAAA,GAAS,0BAA0B,CAAC;MACpC,KAAA,GAAQ,0BAA0B,CAAC,QAAQ,CAAC,IAApC,KAA4C;MAEpD,MAAO,CAAA,MAAM,CAAC,IAAP,CAAP,GAAsB;QACpB,IAAA,EAAM,eAAA,CAAgB,MAAM,CAAC,YAAvB,EAAqC,MAAM,CAAC,YAA5C,EAA0D,MAAM,CAAC,IAAjE,CADc;QAEpB,IAAA,EAAM,KAFc;QAGpB,KAAA,EAAO;MAHa;AALxB;WAWA;EAfU;;EAiBZ,MAAM,CAAC,OAAP,GAAiB;AAnBjB" -} \ No newline at end of file +{"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/parse.js b/src/parse.js index 2a5f7094..f83a17ae 100644 --- a/src/parse.js +++ b/src/parse.js @@ -1,145 +1,151 @@ -// Generated by CoffeeScript 2.0.0-beta3 -(function() { - var Handlebars, _, commander, fs, glob, highlightjs, hrefLinkTemplate, htmlImageMatcher, imageLinkTemplate, marked, parse, path; +var Handlebars, _, commander, fs, glob, highlightjs, hrefLinkTemplate, htmlImageMatcher, imageLinkTemplate, marked, parse, path; - _ = 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'); - Handlebars = require('handlebars'); +Handlebars = require('handlebars'); - highlightjs = require('highlight.js'); +highlightjs = require('highlight.js'); - path = require('path'); +path = require('path'); - glob = require('glob'); +glob = require('glob'); - htmlImageMatcher = /^/; +htmlImageMatcher = /^/; - imageLinkTemplate = Handlebars.compile('

        {{text}}

        \n'); +imageLinkTemplate = Handlebars.compile('

        {{text}}

        \n'); - hrefLinkTemplate = Handlebars.compile('\n'); +hrefLinkTemplate = Handlebars.compile('\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; - lines = code.split('\n'); - sections = []; +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 = ''; - save = function() { - sections.push({docsText, 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); - } + }; + 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, text, style}; + } + 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 { - return null; + text = ''; } - }; - 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 += ""; - } - if (hasCode) { - save(); - } - codeText += text; - } else if (textToCode || (language.codeMatcher && line.match(language.codeMatcher))) { - textToCode = true; - hasCode = true; - if (language.html) { - text = "
        ";
        -        } 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();
        -        }
        +      if (styles && styles.length > 0) {
        +        style = styles[1];
               } else {
        -        hasCode = true;
        -        codeText += line + '\n';
        +        style = '';
               }
        +      return {
        +        link: link,
        +        text: text,
        +        style: style
        +      };
        +    } else {
        +      return null;
             }
        -    save();
        -    return sections;
           };
        -
        -}).call(this);
        +  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 += "
        "; + } + if (hasCode) { + save(); + } + codeText += text; + } else if (textToCode || (language.codeMatcher && line.match(language.codeMatcher))) { + textToCode = true; + hasCode = true; + if (language.html) { + text = "
        ";
        +      } 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
        index ab2a527f..a5db11b2 100644
        --- a/src/parse.js.map
        +++ b/src/parse.js.map
        @@ -1,10 +1 @@
        -{
        -  "version": 3,
        -  "file": "parse.js",
        -  "sourceRoot": "",
        -  "sources": [
        -    "parse.litcoffee"
        -  ],
        -  "names": [],
        -  "mappings": "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"
        -}
        \ No newline at end of file
        +{"version":3,"file":"parse.js","sources":["parse.litcoffee"],"names":[],"mappings":"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","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 = /^/\n\n    imageLinkTemplate = Handlebars.compile('

        {{text}}

        \\n')\n hrefLinkTemplate = Handlebars.compile('\\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 += \"
        \" 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 = \"
        \" 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/write.js b/src/write.js
        index 43e4c941..5800b641 100644
        --- a/src/write.js
        +++ b/src/write.js
        @@ -1,65 +1,61 @@
        -// Generated by CoffeeScript 2.0.0-beta3
        -(function() {
        -  var _, commander, fs, glob, highlightjs, marked, path, write;
        +var _, commander, fs, glob, highlightjs, marked, path, write;
         
        -  _ = 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');
        +path = require('path');
         
        -  glob = require('glob');
        +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,
        -      hasTitle,
        -      sections,
        -      path,
        -      destination,
        -      flatten: config.flatten
        +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];
             });
        -    console.log(`docco: ${source} -> ${destination(fileInfo.destination.path)}`);
        -    fs.writeFileSync(destination(fileInfo.destination.path), html);
           };
        -
        -}).call(this);
        +  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
        index 2361ed01..417c5ee5 100644
        --- a/src/write.js.map
        +++ b/src/write.js.map
        @@ -1,10 +1 @@
        -{
        -  "version": 3,
        -  "file": "write.js",
        -  "sourceRoot": "",
        -  "sources": [
        -    "write.litcoffee"
        -  ],
        -  "names": [],
        -  "mappings": ";AAAI;AAAA,MAAA;;EAAA,CAAA,GAAc,OAAA,CAAQ,YAAR;;EACd,EAAA,GAAc,OAAA,CAAQ,UAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EACd,MAAA,GAAc,OAAA,CAAQ,QAAR;;EACd,SAAA,GAAc,OAAA,CAAQ,WAAR;;EACd,WAAA,GAAc,OAAA,CAAQ,cAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EACd,IAAA,GAAc,OAAA,CAAQ,MAAR;;EAOd,MAAM,CAAC,OAAP,GAAiB,KAAA,GAAQ,QAAA,CAAC,MAAD,EAAS,QAAT,EAAmB,MAAnB,CAAA;AAIvB,QAAA;IAAA,WAAA,GAAc,QAAA,CAAC,IAAD,CAAA;aACZ;IADY;IAGd,YAAA,GAAe,QAAA,CAAC,GAAD,CAAA;aACb,MAAM,CAAC,IAAP,CAAY,GAAZ,CAAgB,CAAC,GAAjB,CAAqB,QAAA,CAAC,GAAD,CAAA;eACnB,GAAI,CAAA,GAAA;MADe,CAArB;IADa;IAKf,YAAA,GAAe,CAAC,CAAC,IAAF,CAAO,QAAP,EAAiB,QAAA,CAAC,OAAD,CAAA;aAC9B,OAAO,CAAC,QAAQ,CAAC,MAAjB,GAA0B;IADI,CAAjB;IAEf,IAAkD,YAAlD;MAAA,KAAA,GAAQ,MAAM,CAAC,KAAP,CAAa,YAAY,CAAC,QAA1B,CAAoC,CAAA,CAAA,EAA5C;;IACA,QAAA,GAAW,KAAA,IAAU,KAAK,CAAC,IAAN,KAAc,SAAxB,IAAsC,KAAK,CAAC,KAAN,KAAe;IAChE,KAAA,GAAW,QAAH,GAAiB,KAAK,CAAC,IAAvB,GAAiC,IAAI,CAAC,QAAL,CAAc,MAAd;IAEzC,QAAA,GAAW,MAAM,CAAC,kBAAmB,CAAA,MAAA;IACrC,MAAA,GAAS,YAAA,CAAa,QAAQ,CAAC,MAAtB;IACT,KAAA,GAAQ,MAAM,CAAC,GAAP,CAAW,QAAA,CAAC,CAAD,CAAA;AAAM,aAAO,CAAC,CAAC;IAAf,CAAX;IACR,KAAA,GAAQ,MAAM,CAAC,GAAP,CAAW,QAAA,CAAC,CAAD,CAAA;AAAM,aAAO,CAAC,CAAC;IAAf,CAAX;IACR,IAAA,GAAO,MAAM,CAAC,QAAP,CAAgB;MACrB,OAAA,EAAS,KADY;MAErB,KAAA,EAAO,KAFc;MAGrB,KAAA,EAAO,MAHc;MAIrB,GAAA,EAAK,QAAQ,CAAC,WAAW,CAAC,GAJL;MAKrB,KALqB;MAMrB,QANqB;MAOrB,QAPqB;MAQrB,IARqB;MASrB,WATqB;MAUrB,OAAA,EAAS,MAAM,CAAC;IAVK,CAAhB;IAaP,OAAO,CAAC,GAAR,CAAY,CAAA,OAAA,CAAA,CAAU,MAAV,CAAA,IAAA,CAAA,CAAuB,WAAA,CAAY,QAAQ,CAAC,WAAW,CAAC,IAAjC,CAAvB,CAAA,CAAZ;IACA,EAAE,CAAC,aAAH,CAAiB,WAAA,CAAY,QAAQ,CAAC,WAAW,CAAC,IAAjC,CAAjB,EAAyD,IAAzD;EApCuB;AAdzB"
        -}
        \ No newline at end of file
        +{"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/test/unit-tests/fakes/fake-config.js b/test/unit-tests/fakes/fake-config.js
        index 9eb3d2fd..40f2f0ad 100644
        --- a/test/unit-tests/fakes/fake-config.js
        +++ b/test/unit-tests/fakes/fake-config.js
        @@ -1,81 +1,77 @@
        -// Generated by CoffeeScript 2.0.0-beta3
        -(function() {
        -  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": ""
        +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"
               },
        -      ".md": {
        +      "language": {
                 "html": true,
                 "link": "!",
                 "name": "markdown",
                 "section": "#",
                 "symbol": ""
               },
        -      "coffeescript": {
        -        "name": "coffeescript",
        -        "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": ""
             },
        -    "layout": "parallel",
        -    "marked": {},
        -    "output": "docs",
        -    "root": "force matched",
        -    "setup": ".docco.json",
        -    "sources": {
        -      "0": "README.md"
        +    ".md": {
        +      "html": true,
        +      "link": "!",
        +      "name": "markdown",
        +      "section": "#",
        +      "symbol": ""
             },
        -    "template": {}
        -  };
        -
        -}).call(this);
        +    "coffeescript": {
        +      "name": "coffeescript",
        +      "symbol": "#"
        +    }
        +  },
        +  "layout": "parallel",
        +  "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
        index e36796d8..01f67957 100644
        --- a/test/unit-tests/fakes/fake-config.js.map
        +++ b/test/unit-tests/fakes/fake-config.js.map
        @@ -1,10 +1 @@
        -{
        -  "version": 3,
        -  "file": "fake-config.js",
        -  "sourceRoot": "",
        -  "sources": [
        -    "fake-config.litcoffee"
        -  ],
        -  "names": [],
        -  "mappings": ";AAEI;EAAA,MAAM,CAAC,OAAP,GAAiB;IACf,KAAA,EAAO,WADQ;IAEf,WAAA,EAAa,KAFE;IAGf,SAAA,EAAW,KAHI;IAIf,MAAA,EAAQ,KAJO;IAKf,oBAAA,EAAsB;MACpB,WAAA,EAAa;QACX,aAAA,EAAe;UACb,MAAA,EAAQ,aADK;UAEb,KAAA,EAAO,WAFM;UAGb,KAAA,EAAO,MAHM;UAIb,KAAA,EAAO,OAJM;UAKb,MAAA,EAAQ,kBALK;UAMb,MAAA,EAAQ,QANK;UAOb,MAAA,EAAQ,eAPK;UAQb,SAAA,EAAW,eARE;UASb,cAAA,EAAgB,aATH;UAUb,MAAA,EAAQ;QAVK,CADJ;QAaX,UAAA,EAAY;UACV,MAAA,EAAQ,IADE;UAEV,MAAA,EAAQ,GAFE;UAGV,MAAA,EAAQ,UAHE;UAIV,SAAA,EAAW,GAJD;UAKV,QAAA,EAAU;QALA,CAbD;QAoBX,QAAA,EAAU;UACR,aAAA,EAAe;YACb,MAAA,EAAQ,WADK;YAEb,OAAA,EAAS,KAFI;YAGb,MAAA,EAAQ;UAHK;QADP,CApBC;QA2BX,QAAA,EAAU;UACR,MAAA,EAAQ,WADA;UAER,KAAA,EAAO,EAFC;UAGR,KAAA,EAAO,KAHC;UAIR,MAAA,EAAQ,WAJA;UAKR,MAAA,EAAQ,QALA;UAMR,MAAA,EAAQ,eANA;UAOR,cAAA,EAAgB,WAPR;UAQR,MAAA,EAAQ;QARA;MA3BC;IADO,CALP;IA6Cf,WAAA,EAAa;MACX,WAAA,EAAa;QACX,MAAA,EAAQ,IADG;QAEX,MAAA,EAAQ,GAFG;QAGX,MAAA,EAAQ,UAHG;QAIX,SAAA,EAAW,GAJA;QAKX,QAAA,EAAU;MALC,CADF;MAQX,KAAA,EAAO;QACL,MAAA,EAAQ,IADH;QAEL,MAAA,EAAQ,GAFH;QAGL,MAAA,EAAQ,UAHH;QAIL,SAAA,EAAW,GAJN;QAKL,QAAA,EAAU;MALL,CARI;MAeX,cAAA,EAAgB;QACd,MAAA,EAAQ,cADM;QAEd,QAAA,EAAU;MAFI;IAfL,CA7CE;IAiEf,QAAA,EAAU,UAjEK;IAkEf,QAAA,EAAU,CAAA,CAlEK;IAmEf,QAAA,EAAU,MAnEK;IAoEf,MAAA,EAAQ,eApEO;IAqEf,OAAA,EAAS,aArEM;IAsEf,SAAA,EAAW;MACT,GAAA,EAAK;IADI,CAtEI;IAyEf,UAAA,EAAY,CAAA;EAzEG;AAAjB"
        -}
        \ No newline at end of file
        +{"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,UAjEK;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\": \"parallel\"\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/informationOnFilesFlattened.js b/test/unit-tests/fakes/informationOnFilesFlattened.js
        index 830ccb33..bb83c7f6 100644
        --- a/test/unit-tests/fakes/informationOnFilesFlattened.js
        +++ b/test/unit-tests/fakes/informationOnFilesFlattened.js
        @@ -1,231 +1,227 @@
        -// Generated by CoffeeScript 2.0.0-beta3
        -(function() {
        -  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"
        +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"
               },
        -      "language": {
        -        "code": "\\`\\`\\`",
        -        "codeMatcher": /^\s*\`\`\`/,
        -        "commentFilter": /(^#![\/]|^\s*#\{)/,
        -        "commentMatcher": /^\s*\s?/,
        -        "html": true,
        -        "imageMatcher": /^!\[(.+)\]\((.+)\)/,
        -        "link": "!",
        -        "linkMatcher": /^\[(.+)\]\((.+)\)/,
        -        "name": "markdown",
        -        "section": "#",
        -        "sectionMatcher": /^#\s?/,
        -        "symbol": ""
        +      "fake_coffee.html": {
        +        "file": "src/fake_coffee.coffee",
        +        "image": false,
        +        "link": "fake_coffee.html"
               },
        -      "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"
        -        }
        +      "fake_litcoffee.html": {
        +        "file": "src/lib/fake_litcoffee.litcoffee",
        +        "image": false,
        +        "link": "fake_litcoffee.html"
               },
        -      "source": {
        -        "base": "README.md",
        -        "dir": "",
        -        "ext": ".md",
        -        "file": "README.md",
        -        "name": "README",
        -        "path": "/Project/README.md",
        -        "relativefile": "README.md",
        -        "root": "/Project"
        +      "fluffybunny1.jpg": {
        +        "file": "images/fluffybunny1.jpg",
        +        "image": true,
        +        "link": "images/fluffybunny1.jpg"
               }
             },
        -    "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"
        +    "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"
               },
        -      "language": {
        -        "commentFilter": /(^#![\/]|^\s*#\{)/,
        -        "commentMatcher": /^\s*undefined\s?/,
        -        "copy": true,
        -        "name": "image"
        +      "fake_coffee.html": {
        +        "file": "src/fake_coffee.coffee",
        +        "image": false,
        +        "link": "fake_coffee.html"
               },
        -      "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"
        -        }
        +      "fake_litcoffee.html": {
        +        "file": "src/lib/fake_litcoffee.litcoffee",
        +        "image": false,
        +        "link": "fake_litcoffee.html"
               },
        -      "source": {
        -        "base": "fluffybunny1.jpg",
        -        "dir": "images",
        -        "ext": ".jpg",
        +      "fluffybunny1.jpg": {
                 "file": "images/fluffybunny1.jpg",
        -        "name": "fluffybunny1",
        -        "path": "/Project/images/fluffybunny1.jpg",
        -        "relativefile": "fluffybunny1.jpg",
        -        "root": "/Project"
        +        "image": true,
        +        "link": "images/fluffybunny1.jpg"
               }
             },
        -    "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": "#"
        +    "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": "###"
               },
        -      "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"
        -        }
        +      "name": "coffeescript",
        +      "startMatcher": /^\s*\#\#\#/,
        +      "stopMatcher": /^\s*\#\#\#/,
        +      "symbol": "#"
        +    },
        +    "others": {
        +      "README.html": {
        +        "file": "README.md",
        +        "image": false,
        +        "link": "README.html"
               },
        -      "source": {
        -        "base": "fake_coffee.coffee",
        -        "dir": "src",
        -        "ext": ".coffee",
        +      "fake_coffee.html": {
                 "file": "src/fake_coffee.coffee",
        -        "name": "fake_coffee",
        -        "path": "/Project/src/fake_coffee.coffee",
        -        "relativefile": "fake_coffee.coffee",
        -        "root": "/Project"
        +        "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"
               }
             },
        -    "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": "#"
        +    "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"
               },
        -      "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"
        -        }
        +      "fake_coffee.html": {
        +        "file": "src/fake_coffee.coffee",
        +        "image": false,
        +        "link": "fake_coffee.html"
               },
        -      "source": {
        -        "base": "fake_litcoffee.litcoffee",
        -        "dir": "src/lib",
        -        "ext": ".litcoffee",
        +      "fake_litcoffee.html": {
                 "file": "src/lib/fake_litcoffee.litcoffee",
        -        "name": "fake_litcoffee",
        -        "path": "/Project/src/lib/fake_litcoffee.litcoffee",
        -        "relativefile": "fake_litcoffee.litcoffee",
        -        "root": "/Project"
        +        "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"
             }
        -  };
        -
        -}).call(this);
        +  }
        +};
         
         //# sourceMappingURL=informationOnFilesFlattened.js.map
        diff --git a/test/unit-tests/fakes/informationOnFilesFlattened.js.map b/test/unit-tests/fakes/informationOnFilesFlattened.js.map
        index eef66a8a..dd5852c6 100644
        --- a/test/unit-tests/fakes/informationOnFilesFlattened.js.map
        +++ b/test/unit-tests/fakes/informationOnFilesFlattened.js.map
        @@ -1,10 +1 @@
        -{
        -  "version": 3,
        -  "file": "informationOnFilesFlattened.js",
        -  "sourceRoot": "",
        -  "sources": [
        -    "informationOnFilesFlattened.litcoffee"
        -  ],
        -  "names": [],
        -  "mappings": "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"
        -}
        \ No newline at end of file
        +{"version":3,"file":"informationOnFilesFlattened.js","sources":["fakes/informationOnFilesFlattened.litcoffee"],"names":[],"mappings":"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","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/informationOnFilesUnFlattened.js b/test/unit-tests/fakes/informationOnFilesUnFlattened.js
        index 6b151967..2c3e35e0 100644
        --- a/test/unit-tests/fakes/informationOnFilesUnFlattened.js
        +++ b/test/unit-tests/fakes/informationOnFilesUnFlattened.js
        @@ -1,231 +1,227 @@
        -// Generated by CoffeeScript 2.0.0-beta3
        -(function() {
        -  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"
        +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"
               },
        -      "language": {
        -        "code": "\\`\\`\\`",
        -        "codeMatcher": /^\s*\`\`\`/,
        -        "commentFilter": /(^#![\/]|^\s*#\{)/,
        -        "commentMatcher": /^\s*\s?/,
        -        "html": true,
        -        "imageMatcher": /^!\[(.+)\]\((.+)\)/,
        -        "link": "!",
        -        "linkMatcher": /^\[(.+)\]\((.+)\)/,
        -        "name": "markdown",
        -        "section": "#",
        -        "sectionMatcher": /^#\s?/,
        -        "symbol": ""
        +      "fake_coffee.html": {
        +        "file": "src/fake_coffee.coffee",
        +        "image": false,
        +        "link": "src/fake_coffee.html"
               },
        -      "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"
        -        }
        +      "fake_litcoffee.html": {
        +        "file": "src/lib/fake_litcoffee.litcoffee",
        +        "image": false,
        +        "link": "src/lib/fake_litcoffee.html"
               },
        -      "source": {
        -        "base": "README.md",
        -        "dir": "",
        -        "ext": ".md",
        -        "file": "README.md",
        -        "name": "README",
        -        "path": "/Project/README.md",
        -        "relativefile": "README.md",
        -        "root": "/Project"
        +      "fluffybunny1.jpg": {
        +        "file": "images/fluffybunny1.jpg",
        +        "image": true,
        +        "link": "images/fluffybunny1.jpg"
               }
             },
        -    "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"
        +    "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"
               },
        -      "language": {
        -        "commentFilter": /(^#![\/]|^\s*#\{)/,
        -        "commentMatcher": /^\s*undefined\s?/,
        -        "copy": true,
        -        "name": "image"
        +      "fake_coffee.html": {
        +        "file": "src/fake_coffee.coffee",
        +        "image": false,
        +        "link": "../src/fake_coffee.html"
               },
        -      "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"
        -        }
        +      "fake_litcoffee.html": {
        +        "file": "src/lib/fake_litcoffee.litcoffee",
        +        "image": false,
        +        "link": "../src/lib/fake_litcoffee.html"
               },
        -      "source": {
        -        "base": "fluffybunny1.jpg",
        -        "dir": "images",
        -        "ext": ".jpg",
        +      "fluffybunny1.jpg": {
                 "file": "images/fluffybunny1.jpg",
        -        "name": "fluffybunny1",
        -        "path": "/Project/images/fluffybunny1.jpg",
        -        "relativefile": "images/fluffybunny1.jpg",
        -        "root": "/Project"
        +        "image": true,
        +        "link": "fluffybunny1.jpg"
               }
             },
        -    "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": "#"
        +    "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": "###"
               },
        -      "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"
        -        }
        +      "name": "coffeescript",
        +      "startMatcher": /^\s*\#\#\#/,
        +      "stopMatcher": /^\s*\#\#\#/,
        +      "symbol": "#"
        +    },
        +    "others": {
        +      "README.html": {
        +        "file": "README.md",
        +        "image": false,
        +        "link": "../README.html"
               },
        -      "source": {
        -        "base": "fake_coffee.coffee",
        -        "dir": "src",
        -        "ext": ".coffee",
        +      "fake_coffee.html": {
                 "file": "src/fake_coffee.coffee",
        -        "name": "fake_coffee",
        -        "path": "/Project/src/fake_coffee.coffee",
        -        "relativefile": "src/fake_coffee.coffee",
        -        "root": "/Project"
        +        "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"
               }
             },
        -    "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": "#"
        +    "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"
               },
        -      "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"
        -        }
        +      "fake_coffee.html": {
        +        "file": "src/fake_coffee.coffee",
        +        "image": false,
        +        "link": "../fake_coffee.html"
               },
        -      "source": {
        -        "base": "fake_litcoffee.litcoffee",
        -        "dir": "src/lib",
        -        "ext": ".litcoffee",
        +      "fake_litcoffee.html": {
                 "file": "src/lib/fake_litcoffee.litcoffee",
        -        "name": "fake_litcoffee",
        -        "path": "/Project/src/lib/fake_litcoffee.litcoffee",
        -        "relativefile": "src/lib/fake_litcoffee.litcoffee",
        -        "root": "/Project"
        +        "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"
             }
        -  };
        -
        -}).call(this);
        +  }
        +};
         
         //# sourceMappingURL=informationOnFilesUnFlattened.js.map
        diff --git a/test/unit-tests/fakes/informationOnFilesUnFlattened.js.map b/test/unit-tests/fakes/informationOnFilesUnFlattened.js.map
        index 9ebc7cda..ae5be76e 100644
        --- a/test/unit-tests/fakes/informationOnFilesUnFlattened.js.map
        +++ b/test/unit-tests/fakes/informationOnFilesUnFlattened.js.map
        @@ -1,10 +1 @@
        -{
        -  "version": 3,
        -  "file": "informationOnFilesUnFlattened.js",
        -  "sourceRoot": "",
        -  "sources": [
        -    "informationOnFilesUnFlattened.litcoffee"
        -  ],
        -  "names": [],
        -  "mappings": ";AAEI;EAAA,MAAM,CAAC,OAAP,GAAiB;IACf,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,2BAPK;QAQb,SAAA,EAAW,eARE;QASb,cAAA,EAAgB,aATH;QAUb,MAAA,EAAQ;MAVK,CADJ;MAaX,UAAA,EAAY;QACV,MAAA,EAAQ,WADE;QAEV,aAAA,EAAe,YAFL;QAGV,eAAA,EAAiB,mBAHP;QAIV,gBAAA,EAAkB,SAJR;QAKV,MAAA,EAAQ,IALE;QAMV,cAAA,EAAgB,oBANN;QAOV,MAAA,EAAQ,GAPE;QAQV,aAAA,EAAe,oBARL;QASV,MAAA,EAAQ,UATE;QAUV,SAAA,EAAW,GAVD;QAWV,gBAAA,EAAkB,OAXR;QAYV,QAAA,EAAU;MAZA,CAbD;MA2BX,QAAA,EAAU;QACR,aAAA,EAAe;UACb,MAAA,EAAQ,WADK;UAEb,OAAA,EAAS,KAFI;UAGb,MAAA,EAAQ;QAHK,CADP;QAMR,kBAAA,EAAoB;UAClB,MAAA,EAAQ,wBADU;UAElB,OAAA,EAAS,KAFS;UAGlB,MAAA,EAAQ;QAHU,CANZ;QAWR,qBAAA,EAAuB;UACrB,MAAA,EAAQ,kCADa;UAErB,OAAA,EAAS,KAFY;UAGrB,MAAA,EAAQ;QAHa,CAXf;QAgBR,kBAAA,EAAoB;UAClB,MAAA,EAAQ,yBADU;UAElB,OAAA,EAAS,IAFS;UAGlB,MAAA,EAAQ;QAHU;MAhBZ,CA3BC;MAiDX,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,oBANA;QAOR,cAAA,EAAgB,WAPR;QAQR,MAAA,EAAQ;MARA;IAjDC,CADE;IA6Df,yBAAA,EAA2B;MACzB,aAAA,EAAe;QACb,MAAA,EAAQ,kBADK;QAEb,KAAA,EAAO,cAFM;QAGb,KAAA,EAAO,aAHM;QAIb,KAAA,EAAO,MAJM;QAKb,MAAA,EAAQ,8BALK;QAMb,MAAA,EAAQ,cANK;QAOb,MAAA,EAAQ,uCAPK;QAQb,SAAA,EAAW,sBARE;QASb,cAAA,EAAgB,yBATH;QAUb,MAAA,EAAQ;MAVK,CADU;MAazB,UAAA,EAAY;QACV,eAAA,EAAiB,mBADP;QAEV,gBAAA,EAAkB,kBAFR;QAGV,MAAA,EAAQ,IAHE;QAIV,MAAA,EAAQ;MAJE,CAba;MAmBzB,QAAA,EAAU;QACR,aAAA,EAAe;UACb,MAAA,EAAQ,WADK;UAEb,OAAA,EAAS,KAFI;UAGb,MAAA,EAAQ;QAHK,CADP;QAMR,kBAAA,EAAoB;UAClB,MAAA,EAAQ,wBADU;UAElB,OAAA,EAAS,KAFS;UAGlB,MAAA,EAAQ;QAHU,CANZ;QAWR,qBAAA,EAAuB;UACrB,MAAA,EAAQ,kCADa;UAErB,OAAA,EAAS,KAFY;UAGrB,MAAA,EAAQ;QAHa,CAXf;QAgBR,kBAAA,EAAoB;UAClB,MAAA,EAAQ,yBADU;UAElB,OAAA,EAAS,IAFS;UAGlB,MAAA,EAAQ;QAHU;MAhBZ,CAnBe;MAyCzB,QAAA,EAAU;QACR,MAAA,EAAQ,kBADA;QAER,KAAA,EAAO,QAFC;QAGR,KAAA,EAAO,MAHC;QAIR,MAAA,EAAQ,yBAJA;QAKR,MAAA,EAAQ,cALA;QAMR,MAAA,EAAQ,kCANA;QAOR,cAAA,EAAgB,yBAPR;QAQR,MAAA,EAAQ;MARA;IAzCe,CA7DZ;IAiHf,wBAAA,EAA0B;MACxB,aAAA,EAAe;QACb,MAAA,EAAQ,kBADK;QAEb,KAAA,EAAO,cAFM;QAGb,KAAA,EAAO,UAHM;QAIb,KAAA,EAAO,OAJM;QAKb,MAAA,EAAQ,2BALK;QAMb,MAAA,EAAQ,aANK;QAOb,MAAA,EAAQ,oCAPK;QAQb,SAAA,EAAW,mBARE;QASb,cAAA,EAAgB,sBATH;QAUb,MAAA,EAAQ;MAVK,CADS;MAaxB,UAAA,EAAY;QACV,eAAA,EAAiB,mBADP;QAEV,gBAAA,EAAkB,UAFR;QAGV,WAAA,EAAa;UACX,OAAA,EAAS,KADE;UAEX,MAAA,EAAQ;QAFG,CAHH;QAOV,MAAA,EAAQ,cAPE;QAQV,cAAA,EAAgB,YARN;QASV,aAAA,EAAe,YATL;QAUV,QAAA,EAAU;MAVA,CAbY;MAyBxB,QAAA,EAAU;QACR,aAAA,EAAe;UACb,MAAA,EAAQ,WADK;UAEb,OAAA,EAAS,KAFI;UAGb,MAAA,EAAQ;QAHK,CADP;QAMR,kBAAA,EAAoB;UAClB,MAAA,EAAQ,wBADU;UAElB,OAAA,EAAS,KAFS;UAGlB,MAAA,EAAQ;QAHU,CANZ;QAWR,qBAAA,EAAuB;UACrB,MAAA,EAAQ,kCADa;UAErB,OAAA,EAAS,KAFY;UAGrB,MAAA,EAAQ;QAHa,CAXf;QAgBR,kBAAA,EAAoB;UAClB,MAAA,EAAQ,yBADU;UAElB,OAAA,EAAS,IAFS;UAGlB,MAAA,EAAQ;QAHU;MAhBZ,CAzBc;MA+CxB,QAAA,EAAU;QACR,MAAA,EAAQ,oBADA;QAER,KAAA,EAAO,KAFC;QAGR,KAAA,EAAO,SAHC;QAIR,MAAA,EAAQ,wBAJA;QAKR,MAAA,EAAQ,aALA;QAMR,MAAA,EAAQ,iCANA;QAOR,cAAA,EAAgB,wBAPR;QAQR,MAAA,EAAQ;MARA;IA/Cc,CAjHX;IA2Kf,kCAAA,EAAoC;MAClC,aAAA,EAAe;QACb,MAAA,EAAQ,qBADK;QAEb,KAAA,EAAO,iBAFM;QAGb,KAAA,EAAO,cAHM;QAIb,KAAA,EAAO,OAJM;QAKb,MAAA,EAAQ,kCALK;QAMb,MAAA,EAAQ,gBANK;QAOb,MAAA,EAAQ,2CAPK;QAQb,SAAA,EAAW,uBARE;QASb,cAAA,EAAgB,6BATH;QAUb,MAAA,EAAQ;MAVK,CADmB;MAalC,UAAA,EAAY;QACV,eAAA,EAAiB,mBADP;QAEV,gBAAA,EAAkB,UAFR;QAGV,UAAA,EAAY,IAHF;QAIV,MAAA,EAAQ,cAJE;QAKV,QAAA,EAAU;MALA,CAbsB;MAoBlC,QAAA,EAAU;QACR,aAAA,EAAe;UACb,MAAA,EAAQ,WADK;UAEb,OAAA,EAAS,KAFI;UAGb,MAAA,EAAQ;QAHK,CADP;QAMR,kBAAA,EAAoB;UAClB,MAAA,EAAQ,wBADU;UAElB,OAAA,EAAS,KAFS;UAGlB,MAAA,EAAQ;QAHU,CANZ;QAWR,qBAAA,EAAuB;UACrB,MAAA,EAAQ,kCADa;UAErB,OAAA,EAAS,KAFY;UAGrB,MAAA,EAAQ;QAHa,CAXf;QAgBR,kBAAA,EAAoB;UAClB,MAAA,EAAQ,yBADU;UAElB,OAAA,EAAS,IAFS;UAGlB,MAAA,EAAQ;QAHU;MAhBZ,CApBwB;MA0ClC,QAAA,EAAU;QACR,MAAA,EAAQ,0BADA;QAER,KAAA,EAAO,SAFC;QAGR,KAAA,EAAO,YAHC;QAIR,MAAA,EAAQ,kCAJA;QAKR,MAAA,EAAQ,gBALA;QAMR,MAAA,EAAQ,2CANA;QAOR,cAAA,EAAgB,kCAPR;QAQR,MAAA,EAAQ;MARA;IA1CwB;EA3KrB;AAAjB"
        -}
        \ No newline at end of file
        +{"version":3,"file":"informationOnFilesUnFlattened.js","sources":["fakes/informationOnFilesUnFlattened.litcoffee"],"names":[],"mappings":"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","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/unit-test-buildMatchers.js b/test/unit-tests/unit-test-buildMatchers.js
        index 92e72e64..5aa9b7da 100644
        --- a/test/unit-tests/unit-test-buildMatchers.js
        +++ b/test/unit-tests/unit-test-buildMatchers.js
        @@ -16,9 +16,8 @@ describe('docco buildMatchers', function() {
             for (ext in languages) {
               l = languages[ext];
               assert.deepEqual(l.commentMatcher, RegExp("^\\s*" + l.symbol + "\\s?"));
        -      assert.deepEqual(l.commentFilter, /(^#![\/]|^\s*#\{)/);
        +      assert.deepEqual(l.commentFilter, /(^#![\/]|^\s*#\{)/); // /(^#![\/]|^\s*#\{)/);
               if (l.link) {
        -        assert.deepEqual(l.imageMatcher, RegExp("^" + l.link + "\\[(.+)\\]\\((.+)\\)"));
                 assert.deepEqual(l.linkMatcher, RegExp("^\\[(.+)\\]\\((.+)\\)"));
               }
               if (l.section) {
        diff --git a/test/unit-tests/unit-test-getOthers.js b/test/unit-tests/unit-test-getOthers.js
        index 23158f68..9f724357 100644
        --- a/test/unit-tests/unit-test-getOthers.js
        +++ b/test/unit-tests/unit-test-getOthers.js
        @@ -1,100 +1,96 @@
        -// Generated by CoffeeScript 2.0.0-beta3
        -(function() {
        -  var assert, getOthers, should;
        +var assert, getOthers, ref, should;
         
        -  ({assert, should} = require('chai'));
        +ref = require('chai'), assert = ref.assert, should = ref.should;
         
        -  should();
        +should();
         
        -  getOthers = require('../../src/getOthers');
        +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"
        -        }
        -      });
        +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: 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: 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"
        -        }
        -      });
        +  });
        +  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"
        +      }
             });
           });
        -
        -}).call(this);
        +});
         
         //# 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
        index cf09e717..885d5ec0 100644
        --- a/test/unit-tests/unit-test-getOthers.js.map
        +++ b/test/unit-tests/unit-test-getOthers.js.map
        @@ -1,10 +1 @@
        -{
        -  "version": 3,
        -  "file": "unit-test-getOthers.js",
        -  "sourceRoot": "",
        -  "sources": [
        -    "unit-test-getOthers.litcoffee"
        -  ],
        -  "names": [],
        -  "mappings": ";AAEI;AAAA,MAAA;;EAAA,CAAA,CAAE,MAAF,EAAU,MAAV,CAAA,GAAqB,OAAA,CAAQ,MAAR,CAArB;;EAAsC,MAAA,CAAA;;EAEtC,SAAA,GAAY,OAAA,CAAQ,qBAAR;;EAEZ,QAAA,CAAS,iBAAT,EAA4B,QAAA,CAAA,CAAA;IAE1B,EAAA,CAAG,gEAAH,EAAqE,QAAA,CAAA,CAAA;AACnE,UAAA;MAAA,kBAAA,GAAqB,OAAA,CAAQ,uCAAR;MACrB,MAAA,GAAS;QACP,OAAA,EAAS,CACP,WADO,EAEP,wBAFO,CADF;QAKP,OAAA,EAAS;MALF;MAOT,MAAA,GAAS,SAAA,CAAU,WAAV,EAAuB,kBAAvB,EAA2C,MAA3C;MACT,MAAM,CAAC,SAAP,CAAiB,MAAjB,EAAyB;QACvB,aAAA,EAAe;UACb,MAAA,EAAQ,WADK;UAEb,OAAA,EAAS,KAFI;UAGb,MAAA,EAAQ;QAHK,CADQ;QAMvB,kBAAA,EAAoB;UAClB,MAAA,EAAQ,wBADU;UAElB,OAAA,EAAS,KAFS;UAGlB,MAAA,EAAQ;QAHU;MANG,CAAzB;IAVmE,CAArE;IAwBA,EAAA,CAAG,mEAAH,EAAwE,QAAA,CAAA,CAAA;AACtE,UAAA;MAAA,kBAAA,GAAqB,OAAA,CAAQ,uCAAR;MACrB,MAAA,GAAS;QACP,OAAA,EAAS,CACP,WADO,EAEP,wBAFO,CADF;QAKP,OAAA,EAAS;MALF;MAOT,MAAA,GAAS,SAAA,CAAU,wBAAV,EAAoC,kBAApC,EAAwD,MAAxD;MACT,MAAM,CAAC,SAAP,CAAiB,MAAjB,EAAyB;QACvB,aAAA,EAAe;UACb,MAAA,EAAQ,WADK;UAEb,OAAA,EAAS,KAFI;UAGb,MAAA,EAAQ;QAHK,CADQ;QAMvB,kBAAA,EAAoB;UAClB,MAAA,EAAQ,wBADU;UAElB,OAAA,EAAS,KAFS;UAGlB,MAAA,EAAQ;QAHU;MANG,CAAzB;IAVsE,CAAxE;IAwBA,EAAA,CAAG,8DAAH,EAAmE,QAAA,CAAA,CAAA;AACjE,UAAA;MAAA,kBAAA,GAAqB,OAAA,CAAQ,qCAAR;MACrB,MAAA,GAAS;QACP,OAAA,EAAS,CACP,WADO,EAEP,wBAFO,CADF;QAKP,OAAA,EAAS;MALF;MAOT,MAAA,GAAS,SAAA,CAAU,WAAV,EAAuB,kBAAvB,EAA2C,MAA3C;MACT,MAAM,CAAC,SAAP,CAAiB,MAAjB,EAAyB;QACvB,aAAA,EAAe;UACb,MAAA,EAAQ,WADK;UAEb,OAAA,EAAS,KAFI;UAGb,MAAA,EAAQ;QAHK,CADQ;QAMvB,kBAAA,EAAoB;UAClB,MAAA,EAAQ,wBADU;UAElB,OAAA,EAAS,KAFS;UAGlB,MAAA,EAAQ;QAHU;MANG,CAAzB;IAViE,CAAnE;IAwBA,EAAA,CAAG,iEAAH,EAAsE,QAAA,CAAA,CAAA;AACpE,UAAA;MAAA,kBAAA,GAAqB,OAAA,CAAQ,qCAAR;MACrB,MAAA,GAAS;QACP,OAAA,EAAS,CACP,WADO,EAEP,yBAFO,CADF;QAKP,OAAA,EAAS;MALF;MAOT,MAAA,GAAS,SAAA,CAAU,yBAAV,EAAqC,kBAArC,EAAyD,MAAzD;MACT,MAAM,CAAC,SAAP,CAAiB,MAAjB,EAAyB;QACvB,aAAA,EAAe;UACb,MAAA,EAAQ,WADK;UAEb,OAAA,EAAS,KAFI;UAGb,MAAA,EAAQ;QAHK,CADQ;QAMvB,kBAAA,EAAoB;UAClB,MAAA,EAAQ,yBADU;UAElB,OAAA,EAAS,IAFS;UAGlB,MAAA,EAAQ;QAHU;MANG,CAAzB;IAVoE,CAAtE;EA1E0B,CAA5B;AAJA"
        -}
        \ No newline at end of file
        +{"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
        
        From 545b419c24dcb2186e13d01983c5cd4941e151b7 Mon Sep 17 00:00:00 2001
        From: "Lovell, Robb" 
        Date: Mon, 9 Jul 2018 16:48:58 -0700
        Subject: [PATCH 93/95] fix unit tests.
        
        ---
         test/unit-tests/fakes/informationOnFilesUnFlattened.js.map    | 2 +-
         test/unit-tests/fakes/informationOnFilesUnFlattened.litcoffee | 2 +-
         test/unit-tests/unit-test-buildMatchers.js                    | 4 ++--
         test/unit-tests/unit-test-buildMatchers.js.map                | 2 +-
         test/unit-tests/unit-test-buildMatchers.litcoffee             | 2 +-
         5 files changed, 6 insertions(+), 6 deletions(-)
        
        diff --git a/test/unit-tests/fakes/informationOnFilesUnFlattened.js.map b/test/unit-tests/fakes/informationOnFilesUnFlattened.js.map
        index ae5be76e..15c88f66 100644
        --- a/test/unit-tests/fakes/informationOnFilesUnFlattened.js.map
        +++ b/test/unit-tests/fakes/informationOnFilesUnFlattened.js.map
        @@ -1 +1 @@
        -{"version":3,"file":"informationOnFilesUnFlattened.js","sources":["fakes/informationOnFilesUnFlattened.litcoffee"],"names":[],"mappings":"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","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
        +{"version":3,"file":"informationOnFilesUnFlattened.js","sources":["fakes/informationOnFilesUnFlattened.litcoffee"],"names":[],"mappings":"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","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
        index 23f31e3d..32e13efb 100644
        --- a/test/unit-tests/fakes/informationOnFilesUnFlattened.litcoffee
        +++ b/test/unit-tests/fakes/informationOnFilesUnFlattened.litcoffee
        @@ -22,7 +22,7 @@ A fake for the unflattended getInformationOnFiles test.
                   "html": true
                   "imageMatcher": /^!\[(.+)\]\((.+)\)/
                   "link": "!"
        -          "linkMatcher": /^!\[(.+)\]\((.+)\)/
        +          "linkMatcher": /^\[(.+)\]\((.+)\)/
                   "name": "markdown"
                   "section": "#"
                   "sectionMatcher": /^#\s?/
        diff --git a/test/unit-tests/unit-test-buildMatchers.js b/test/unit-tests/unit-test-buildMatchers.js
        index 5aa9b7da..f09421b0 100644
        --- a/test/unit-tests/unit-test-buildMatchers.js
        +++ b/test/unit-tests/unit-test-buildMatchers.js
        @@ -16,9 +16,9 @@ describe('docco buildMatchers', function() {
             for (ext in languages) {
               l = languages[ext];
               assert.deepEqual(l.commentMatcher, RegExp("^\\s*" + l.symbol + "\\s?"));
        -      assert.deepEqual(l.commentFilter, /(^#![\/]|^\s*#\{)/); // /(^#![\/]|^\s*#\{)/);
        +      assert.deepEqual(l.commentFilter, /(^#![\/]|^\s*#\{)/);
               if (l.link) {
        -        assert.deepEqual(l.linkMatcher, RegExp("^\\[(.+)\\]\\((.+)\\)"));
        +        assert.deepEqual(l.linkMatcher, /^\[(.+)\]\((.+)\)/);
               }
               if (l.section) {
                 results.push(assert.deepEqual(l.sectionMatcher, RegExp("^" + l.section + "\\s?")));
        diff --git a/test/unit-tests/unit-test-buildMatchers.js.map b/test/unit-tests/unit-test-buildMatchers.js.map
        index 1d00f564..8e60acd9 100644
        --- a/test/unit-tests/unit-test-buildMatchers.js.map
        +++ b/test/unit-tests/unit-test-buildMatchers.js.map
        @@ -1 +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,MAAA,CAAA,GAAA,GAAM,CAAC,CAAC,IAAR,GAAa,sBAAb,CAA/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,///^#{l.link}\\[(.+)\\]\\((.+)\\)///)\n          if l.section\n            assert.deepEqual(l.sectionMatcher,///^#{l.section}\\s?///)\n      return\n    return"]}
        \ No newline at end of file
        +{"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
        index e0cce33f..2a91d1fb 100644
        --- a/test/unit-tests/unit-test-buildMatchers.litcoffee
        +++ b/test/unit-tests/unit-test-buildMatchers.litcoffee
        @@ -13,7 +13,7 @@
                   assert.deepEqual(l.commentMatcher,///^\s*#{l.symbol}\s?///)
                   assert.deepEqual(l.commentFilter,/(^#![/]|^\s*#\{)/)
                   if l.link
        -            assert.deepEqual(l.linkMatcher,///^#{l.link}\[(.+)\]\((.+)\)///)
        +            assert.deepEqual(l.linkMatcher,///^\[(.+)\]\((.+)\)///)
                   if l.section
                     assert.deepEqual(l.sectionMatcher,///^#{l.section}\s?///)
               return
        
        From 0bca2102deb8b9f7776f9e7cc1aa614682de3f4a Mon Sep 17 00:00:00 2001
        From: Robb Lovell 
        Date: Mon, 9 Jul 2018 19:28:40 -0700
        Subject: [PATCH 94/95] default to side by side
        
        ---
         .docco.json                                   |    0
         .gitignore                                    |    0
         .idea/docco.iml                               |   12 +
         .idea/libraries/Generated_files.xml           |  101 +
         .idea/markdown-navigator.xml                  |   70 +
         .../markdown-navigator/profiles_settings.xml  |    3 +
         .idea/misc.xml                                |    6 +
         .idea/modules.xml                             |    8 +
         .idea/vcs.xml                                 |    6 +
         .idea/watcherTasks.xml                        |   30 +
         .idea/workspace.xml                           | 1696 ++++++
         .npmignore                                    |    0
         .travis.yml                                   |    0
         Cakefile                                      |    0
         LICENSE                                       |    0
         README.md                                     |    0
         docco.js                                      |  142 +-
         docco.js.map                                  |   11 +-
         docco.litcoffee                               |    4 +-
         gulpfile.coffee                               |    0
         index.html                                    |    0
         package-lock.json                             | 5194 +++++++++++++++++
         package.json                                  |    0
         resources/classic/docco.css                   |    0
         resources/classic/docco.jst                   |    0
         resources/classic/public/fonts/aller-bold.eot |  Bin
         resources/classic/public/fonts/aller-bold.ttf |  Bin
         .../classic/public/fonts/aller-bold.woff      |  Bin
         .../classic/public/fonts/aller-light.eot      |  Bin
         .../classic/public/fonts/aller-light.ttf      |  Bin
         .../classic/public/fonts/aller-light.woff     |  Bin
         resources/classic/public/fonts/fleurons.eot   |  Bin
         resources/classic/public/fonts/fleurons.ttf   |  Bin
         resources/classic/public/fonts/fleurons.woff  |  Bin
         resources/classic/public/images/gray.png      |  Bin
         .../classic/public/stylesheets/normalize.css  |    0
         resources/languages.json                      |    0
         resources/linear/docco.css                    |    0
         resources/linear/docco.jst                    |    0
         resources/linear/public/fonts/aller-bold.eot  |  Bin
         resources/linear/public/fonts/aller-bold.ttf  |  Bin
         resources/linear/public/fonts/aller-bold.woff |  Bin
         resources/linear/public/fonts/aller-light.eot |  Bin
         resources/linear/public/fonts/aller-light.ttf |  Bin
         .../linear/public/fonts/aller-light.woff      |  Bin
         resources/linear/public/fonts/fleurons.eot    |  Bin
         resources/linear/public/fonts/fleurons.ttf    |  Bin
         resources/linear/public/fonts/fleurons.woff   |  Bin
         resources/linear/public/images/gray.png       |  Bin
         .../linear/public/stylesheets/normalize.css   |    0
         resources/parallel/docco.css                  |    0
         resources/parallel/docco.jst                  |    0
         .../parallel/public/fonts/aller-bold.eot      |  Bin
         .../parallel/public/fonts/aller-bold.ttf      |  Bin
         .../parallel/public/fonts/aller-bold.woff     |  Bin
         .../parallel/public/fonts/aller-light.eot     |  Bin
         .../parallel/public/fonts/aller-light.ttf     |  Bin
         .../parallel/public/fonts/aller-light.woff    |  Bin
         .../parallel/public/stylesheets/normalize.css |    0
         resources/plain-markdown/README.md            |    0
         resources/plain-markdown/docco.jst            |    0
         resources/sidebyside/docco.css                |    0
         resources/sidebyside/docco.jst                |    0
         .../sidebyside/public/fonts/aller-bold.eot    |  Bin
         .../sidebyside/public/fonts/aller-bold.ttf    |  Bin
         .../sidebyside/public/fonts/aller-bold.woff   |  Bin
         .../sidebyside/public/fonts/aller-light.eot   |  Bin
         .../sidebyside/public/fonts/aller-light.ttf   |  Bin
         .../sidebyside/public/fonts/aller-light.woff  |  Bin
         .../public/stylesheets/normalize.css          |    0
         src/buildMatchers.js                          |   56 +-
         src/buildMatchers.js.map                      |   11 +-
         src/buildMatchers.litcoffee                   |    0
         src/configure.js                              |    0
         src/configure.litcoffee                       |    0
         src/document.js                               |    0
         src/document.litcoffee                        |    0
         src/format.js                                 |   84 +-
         src/format.js.map                             |   11 +-
         src/format.litcoffee                          |    0
         src/getCSSPath.js                             |    0
         src/getCSSPath.litcoffee                      |    0
         src/getDestinationInformation.js              |    0
         src/getDestinationInformation.litcoffee       |    0
         src/getInformationOnFiles.js                  |   92 +-
         src/getInformationOnFiles.js.map              |   11 +-
         src/getInformationOnFiles.litcoffee           |    0
         src/getLanguage.js                            |    0
         src/getLanguage.litcoffee                     |    0
         src/getOthers.js                              |   48 +-
         src/getOthers.js.map                          |   11 +-
         src/getOthers.litcoffee                       |    0
         src/getRelativePath.js                        |    0
         src/getRelativePath.litcoffee                 |    0
         src/getSourceInformation.js                   |    0
         src/getSourceInformation.litcoffee            |    0
         src/parse.js                                  |  250 +-
         src/parse.js.map                              |   11 +-
         src/parse.litcoffee                           |    0
         src/write.js                                  |  100 +-
         src/write.js.map                              |   11 +-
         src/write.litcoffee                           |    0
         test/sim/{.adocco.json => .docco.json}        |    3 +-
         test/sim/.groc.json                           |    0
         test/sim/README.md                            |    0
         test/sim/images/fluffybunny1.jpg              |  Bin
         test/sim/images/fluffybunny2.jpg              |  Bin
         test/sim/images/fluffybunny3.jpg              |  Bin
         test/sim/src/fake_coffee.coffee               |    0
         test/sim/src/fake_coffee2.coffee              |    0
         test/sim/src/fake_java.java                   |    0
         test/sim/src/fake_javascript.js               |    0
         test/sim/src/fake_litcoffee.litcoffee         |    0
         test/unit-tests/fakes/fake-config.js          |  134 +-
         test/unit-tests/fakes/fake-config.js.map      |   11 +-
         test/unit-tests/fakes/fake-config.litcoffee   |    2 +-
         test/unit-tests/fakes/fake-jst-result.js      |    0
         .../fakes/fake-jst-result.litcoffee           |    0
         test/unit-tests/fakes/fake-jst.js             |    0
         test/unit-tests/fakes/fake-jst.litcoffee      |    0
         .../fakes/fake-linear-jst-flattened-result.js |    0
         ...fake-linear-jst-flattened-result.litcoffee |    0
         .../fake-linear-jst-unflattened-result.js     |    0
         ...ke-linear-jst-unflattened-result.litcoffee |    0
         test/unit-tests/fakes/fake-linear-jst.js      |    0
         .../fakes/fake-linear-jst.litcoffee           |    0
         test/unit-tests/fakes/fake_coffee.coffee      |    0
         .../fakes/informationOnFilesFlattened.js      |  412 +-
         .../fakes/informationOnFilesFlattened.js.map  |   11 +-
         .../informationOnFilesFlattened.litcoffee     |    0
         .../fakes/informationOnFilesUnFlattened.js    |  412 +-
         .../informationOnFilesUnFlattened.js.map      |   11 +-
         .../informationOnFilesUnFlattened.litcoffee   |    2 +-
         test/unit-tests/unit-test-buildMatchers.js    |    3 +-
         .../unit-tests/unit-test-buildMatchers.js.map |    2 +-
         .../unit-test-buildMatchers.litcoffee         |    2 +-
         test/unit-tests/unit-test-configure.js        |    0
         test/unit-tests/unit-test-configure.litcoffee |    0
         test/unit-tests/unit-test-document.js         |    0
         test/unit-tests/unit-test-document.litcoffee  |    0
         test/unit-tests/unit-test-fixForMatch.js      |    0
         .../unit-test-fixForMatch.litcoffee           |    0
         test/unit-tests/unit-test-format.js           |    0
         test/unit-tests/unit-test-format.litcoffee    |    0
         test/unit-tests/unit-test-getCSSPath.js       |    0
         .../unit-tests/unit-test-getCSSPath.litcoffee |    0
         .../unit-test-getDestinationInformation.js    |    0
         ...t-test-getDestinationInformation.litcoffee |    0
         .../unit-test-getInformationOnFiles.js        |    0
         .../unit-test-getInformationOnFiles.litcoffee |    0
         test/unit-tests/unit-test-getLanguage.js      |    0
         .../unit-test-getLanguage.litcoffee           |    0
         test/unit-tests/unit-test-getOthers.js        |  174 +-
         test/unit-tests/unit-test-getOthers.js.map    |   11 +-
         test/unit-tests/unit-test-getOthers.litcoffee |    0
         test/unit-tests/unit-test-getRelativePath.js  |    0
         .../unit-test-getRelativePath.litcoffee       |    0
         test/unit-tests/unit-test-parse.js            |    0
         test/unit-tests/unit-test-parse.litcoffee     |    0
         test/unit-tests/unit-test-run.js              |    4 +-
         test/unit-tests/unit-test-run.js.map          |    2 +-
         test/unit-tests/unit-test-run.litcoffee       |    4 +-
         test/unit-tests/unit-test-typeIsArray.js      |    0
         .../unit-test-typeIsArray.litcoffee           |    0
         test/unit-tests/unit-test-write.js            |    0
         test/unit-tests/unit-test-write.litcoffee     |    0
         test/unit-tests/utils/fixForMatch.js          |    0
         test/unit-tests/utils/fixForMatch.litcoffee   |    0
         test/unit-tests/utils/typeIsArray.js          |    0
         test/unit-tests/utils/typeIsArray.litcoffee   |    0
         test/unit-tests/utils/typeIsObject.js         |    0
         test/unit-tests/utils/typeIsObject.litcoffee  |    0
         172 files changed, 8086 insertions(+), 1093 deletions(-)
         mode change 100644 => 100755 .docco.json
         mode change 100644 => 100755 .gitignore
         create mode 100755 .idea/docco.iml
         create mode 100755 .idea/libraries/Generated_files.xml
         create mode 100755 .idea/markdown-navigator.xml
         create mode 100755 .idea/markdown-navigator/profiles_settings.xml
         create mode 100755 .idea/misc.xml
         create mode 100755 .idea/modules.xml
         create mode 100755 .idea/vcs.xml
         create mode 100755 .idea/watcherTasks.xml
         create mode 100755 .idea/workspace.xml
         mode change 100644 => 100755 .npmignore
         mode change 100644 => 100755 .travis.yml
         mode change 100644 => 100755 Cakefile
         mode change 100644 => 100755 LICENSE
         mode change 100644 => 100755 README.md
         mode change 100644 => 100755 docco.js
         mode change 100644 => 100755 docco.litcoffee
         mode change 100644 => 100755 gulpfile.coffee
         mode change 100644 => 100755 index.html
         create mode 100644 package-lock.json
         mode change 100644 => 100755 package.json
         mode change 100644 => 100755 resources/classic/docco.css
         mode change 100644 => 100755 resources/classic/docco.jst
         mode change 100644 => 100755 resources/classic/public/fonts/aller-bold.eot
         mode change 100644 => 100755 resources/classic/public/fonts/aller-bold.ttf
         mode change 100644 => 100755 resources/classic/public/fonts/aller-bold.woff
         mode change 100644 => 100755 resources/classic/public/fonts/aller-light.eot
         mode change 100644 => 100755 resources/classic/public/fonts/aller-light.ttf
         mode change 100644 => 100755 resources/classic/public/fonts/aller-light.woff
         mode change 100644 => 100755 resources/classic/public/fonts/fleurons.eot
         mode change 100644 => 100755 resources/classic/public/fonts/fleurons.ttf
         mode change 100644 => 100755 resources/classic/public/fonts/fleurons.woff
         mode change 100644 => 100755 resources/classic/public/images/gray.png
         mode change 100644 => 100755 resources/classic/public/stylesheets/normalize.css
         mode change 100644 => 100755 resources/languages.json
         mode change 100644 => 100755 resources/linear/docco.css
         mode change 100644 => 100755 resources/linear/docco.jst
         mode change 100644 => 100755 resources/linear/public/fonts/aller-bold.eot
         mode change 100644 => 100755 resources/linear/public/fonts/aller-bold.ttf
         mode change 100644 => 100755 resources/linear/public/fonts/aller-bold.woff
         mode change 100644 => 100755 resources/linear/public/fonts/aller-light.eot
         mode change 100644 => 100755 resources/linear/public/fonts/aller-light.ttf
         mode change 100644 => 100755 resources/linear/public/fonts/aller-light.woff
         mode change 100644 => 100755 resources/linear/public/fonts/fleurons.eot
         mode change 100644 => 100755 resources/linear/public/fonts/fleurons.ttf
         mode change 100644 => 100755 resources/linear/public/fonts/fleurons.woff
         mode change 100644 => 100755 resources/linear/public/images/gray.png
         mode change 100644 => 100755 resources/linear/public/stylesheets/normalize.css
         mode change 100644 => 100755 resources/parallel/docco.css
         mode change 100644 => 100755 resources/parallel/docco.jst
         mode change 100644 => 100755 resources/parallel/public/fonts/aller-bold.eot
         mode change 100644 => 100755 resources/parallel/public/fonts/aller-bold.ttf
         mode change 100644 => 100755 resources/parallel/public/fonts/aller-bold.woff
         mode change 100644 => 100755 resources/parallel/public/fonts/aller-light.eot
         mode change 100644 => 100755 resources/parallel/public/fonts/aller-light.ttf
         mode change 100644 => 100755 resources/parallel/public/fonts/aller-light.woff
         mode change 100644 => 100755 resources/parallel/public/stylesheets/normalize.css
         mode change 100644 => 100755 resources/plain-markdown/README.md
         mode change 100644 => 100755 resources/plain-markdown/docco.jst
         mode change 100644 => 100755 resources/sidebyside/docco.css
         mode change 100644 => 100755 resources/sidebyside/docco.jst
         mode change 100644 => 100755 resources/sidebyside/public/fonts/aller-bold.eot
         mode change 100644 => 100755 resources/sidebyside/public/fonts/aller-bold.ttf
         mode change 100644 => 100755 resources/sidebyside/public/fonts/aller-bold.woff
         mode change 100644 => 100755 resources/sidebyside/public/fonts/aller-light.eot
         mode change 100644 => 100755 resources/sidebyside/public/fonts/aller-light.ttf
         mode change 100644 => 100755 resources/sidebyside/public/fonts/aller-light.woff
         mode change 100644 => 100755 resources/sidebyside/public/stylesheets/normalize.css
         mode change 100644 => 100755 src/buildMatchers.js
         mode change 100644 => 100755 src/buildMatchers.litcoffee
         mode change 100644 => 100755 src/configure.js
         mode change 100644 => 100755 src/configure.litcoffee
         mode change 100644 => 100755 src/document.js
         mode change 100644 => 100755 src/document.litcoffee
         mode change 100644 => 100755 src/format.js
         mode change 100644 => 100755 src/format.litcoffee
         mode change 100644 => 100755 src/getCSSPath.js
         mode change 100644 => 100755 src/getCSSPath.litcoffee
         mode change 100644 => 100755 src/getDestinationInformation.js
         mode change 100644 => 100755 src/getDestinationInformation.litcoffee
         mode change 100644 => 100755 src/getInformationOnFiles.js
         mode change 100644 => 100755 src/getInformationOnFiles.litcoffee
         mode change 100644 => 100755 src/getLanguage.js
         mode change 100644 => 100755 src/getLanguage.litcoffee
         mode change 100644 => 100755 src/getOthers.js
         mode change 100644 => 100755 src/getOthers.litcoffee
         mode change 100644 => 100755 src/getRelativePath.js
         mode change 100644 => 100755 src/getRelativePath.litcoffee
         mode change 100644 => 100755 src/getSourceInformation.js
         mode change 100644 => 100755 src/getSourceInformation.litcoffee
         mode change 100644 => 100755 src/parse.js
         mode change 100644 => 100755 src/parse.litcoffee
         mode change 100644 => 100755 src/write.js
         mode change 100644 => 100755 src/write.litcoffee
         rename test/sim/{.adocco.json => .docco.json} (84%)
         mode change 100644 => 100755
         mode change 100644 => 100755 test/sim/.groc.json
         mode change 100644 => 100755 test/sim/README.md
         mode change 100644 => 100755 test/sim/images/fluffybunny1.jpg
         mode change 100644 => 100755 test/sim/images/fluffybunny2.jpg
         mode change 100644 => 100755 test/sim/images/fluffybunny3.jpg
         mode change 100644 => 100755 test/sim/src/fake_coffee.coffee
         mode change 100644 => 100755 test/sim/src/fake_coffee2.coffee
         mode change 100644 => 100755 test/sim/src/fake_java.java
         mode change 100644 => 100755 test/sim/src/fake_javascript.js
         mode change 100644 => 100755 test/sim/src/fake_litcoffee.litcoffee
         mode change 100644 => 100755 test/unit-tests/fakes/fake-config.js
         mode change 100644 => 100755 test/unit-tests/fakes/fake-config.litcoffee
         mode change 100644 => 100755 test/unit-tests/fakes/fake-jst-result.js
         mode change 100644 => 100755 test/unit-tests/fakes/fake-jst-result.litcoffee
         mode change 100644 => 100755 test/unit-tests/fakes/fake-jst.js
         mode change 100644 => 100755 test/unit-tests/fakes/fake-jst.litcoffee
         mode change 100644 => 100755 test/unit-tests/fakes/fake-linear-jst-flattened-result.js
         mode change 100644 => 100755 test/unit-tests/fakes/fake-linear-jst-flattened-result.litcoffee
         mode change 100644 => 100755 test/unit-tests/fakes/fake-linear-jst-unflattened-result.js
         mode change 100644 => 100755 test/unit-tests/fakes/fake-linear-jst-unflattened-result.litcoffee
         mode change 100644 => 100755 test/unit-tests/fakes/fake-linear-jst.js
         mode change 100644 => 100755 test/unit-tests/fakes/fake-linear-jst.litcoffee
         mode change 100644 => 100755 test/unit-tests/fakes/fake_coffee.coffee
         mode change 100644 => 100755 test/unit-tests/fakes/informationOnFilesFlattened.js
         mode change 100644 => 100755 test/unit-tests/fakes/informationOnFilesFlattened.litcoffee
         mode change 100644 => 100755 test/unit-tests/fakes/informationOnFilesUnFlattened.js
         mode change 100644 => 100755 test/unit-tests/fakes/informationOnFilesUnFlattened.litcoffee
         mode change 100644 => 100755 test/unit-tests/unit-test-buildMatchers.js
         mode change 100644 => 100755 test/unit-tests/unit-test-buildMatchers.litcoffee
         mode change 100644 => 100755 test/unit-tests/unit-test-configure.js
         mode change 100644 => 100755 test/unit-tests/unit-test-configure.litcoffee
         mode change 100644 => 100755 test/unit-tests/unit-test-document.js
         mode change 100644 => 100755 test/unit-tests/unit-test-document.litcoffee
         mode change 100644 => 100755 test/unit-tests/unit-test-fixForMatch.js
         mode change 100644 => 100755 test/unit-tests/unit-test-fixForMatch.litcoffee
         mode change 100644 => 100755 test/unit-tests/unit-test-format.js
         mode change 100644 => 100755 test/unit-tests/unit-test-format.litcoffee
         mode change 100644 => 100755 test/unit-tests/unit-test-getCSSPath.js
         mode change 100644 => 100755 test/unit-tests/unit-test-getCSSPath.litcoffee
         mode change 100644 => 100755 test/unit-tests/unit-test-getDestinationInformation.js
         mode change 100644 => 100755 test/unit-tests/unit-test-getDestinationInformation.litcoffee
         mode change 100644 => 100755 test/unit-tests/unit-test-getInformationOnFiles.js
         mode change 100644 => 100755 test/unit-tests/unit-test-getInformationOnFiles.litcoffee
         mode change 100644 => 100755 test/unit-tests/unit-test-getLanguage.js
         mode change 100644 => 100755 test/unit-tests/unit-test-getLanguage.litcoffee
         mode change 100644 => 100755 test/unit-tests/unit-test-getOthers.js
         mode change 100644 => 100755 test/unit-tests/unit-test-getOthers.litcoffee
         mode change 100644 => 100755 test/unit-tests/unit-test-getRelativePath.js
         mode change 100644 => 100755 test/unit-tests/unit-test-getRelativePath.litcoffee
         mode change 100644 => 100755 test/unit-tests/unit-test-parse.js
         mode change 100644 => 100755 test/unit-tests/unit-test-parse.litcoffee
         mode change 100644 => 100755 test/unit-tests/unit-test-run.js
         mode change 100644 => 100755 test/unit-tests/unit-test-run.litcoffee
         mode change 100644 => 100755 test/unit-tests/unit-test-typeIsArray.js
         mode change 100644 => 100755 test/unit-tests/unit-test-typeIsArray.litcoffee
         mode change 100644 => 100755 test/unit-tests/unit-test-write.js
         mode change 100644 => 100755 test/unit-tests/unit-test-write.litcoffee
         mode change 100644 => 100755 test/unit-tests/utils/fixForMatch.js
         mode change 100644 => 100755 test/unit-tests/utils/fixForMatch.litcoffee
         mode change 100644 => 100755 test/unit-tests/utils/typeIsArray.js
         mode change 100644 => 100755 test/unit-tests/utils/typeIsArray.litcoffee
         mode change 100644 => 100755 test/unit-tests/utils/typeIsObject.js
         mode change 100644 => 100755 test/unit-tests/utils/typeIsObject.litcoffee
        
        diff --git a/.docco.json b/.docco.json
        old mode 100644
        new mode 100755
        diff --git a/.gitignore b/.gitignore
        old mode 100644
        new mode 100755
        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 @@
        +
        +
        +  
        +    
        +      
        +      
        +      
        +    
        +    
        +    
        +  
        +
        \ 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 @@
        +
        +  
        +    
        +      
        +        
        +        
        +        
        +        
        +        
        +        
        +        
        +        
        +        
        +        
        +        
        +        
        +        
        +        
        +        
        +        
        +        
        +        
        +        
        +        
        +        
        +        
        +        
        +        
        +        
        +        
        +        
        +        
        +        
        +        
        +        
        +        
        +        
        +        
        +        
        +        
        +        
        +        
        +        
        +        
        +      
        +    
        +    
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +    
        +    
        +  
        +
        \ 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 @@
        +
        +
        +  
        +    
        +      
        +        
        +      
        +    
        +    
        +      
        +        
        +      
        +        
        +    
        +    
        +      
        +        
        +      
        +      
        +      
        +      
        +      
        +    
        +    
        +      
        +        
        +      
        +      
        +      
        +    
        +    
        +    
        +      
        +    
        +  
        +
        \ 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 @@
        +
        +  
        +
        \ 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 @@
        +
        +
        +  
        +    
        +
        \ 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 @@
        +
        +
        +  
        +    
        +      
        +    
        +  
        +
        \ 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 @@
        +
        +
        +  
        +    
        +  
        +
        \ 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 @@
        +
        +
        +  
        +    
        +      
        +      
        +  
        +
        \ 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 @@
        +
        +
        +  
        +    
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +    
        +    
        +    
        +    
        +    
        +  
        +    
        +      
        +        
        +          
        +            
        +              
        +              
        +            
        +          
        +        
        +      
        +      
        +        
        +          
        +            
        +              
        +              
        +            
        +          
        +        
        +      
        +      
        +        
        +          
        +            
        +              
        +              
        +            
        +          
        +        
        +      
        +      
        +        
        +          
        +            
        +              
        +              
        +            
        +          
        +        
        +      
        +      
        +        
        +          
        +            
        +              
        +              
        +            
        +          
        +        
        +      
        +      
        +        
        +          
        +            
        +              
        +              
        +            
        +          
        +        
        +      
        +      
        +        
        +          
        +            
        +              
        +              
        +                
        +                
        +                
        +                
        +                
        +                
        +              
        +            
        +          
        +        
        +      
        +      
        +        
        +          
        +            
        +              
        +              
        +                
        +                
        +                
        +                
        +                
        +                
        +                
        +                
        +                
        +                
        +                
        +                
        +                
        +                
        +                
        +                
        +                
        +                
        +                
        +                
        +              
        +            
        +          
        +        
        +      
        +      
        +        
        +          
        +            
        +              
        +              
        +            
        +          
        +        
        +      
        +      
        +        
        +          
        +            
        +              
        +              
        +            
        +          
        +        
        +      
        +    
        +  
        +  
        +    
        +      jumpwa
        +      jumpw
        +      jump_
        +      jump_w
        +      jump_wr
        +      jump_wra
        +      jump_wrap
        +      jump_wrappe
        +      jump_wrapper
        +      jump_page_wrapper
        +      display:
        +      display: none
        +      deepEqual
        +      Version
        +      hidden
        +      block
        +      wrapper
        +      source
        +      l
        +      link
        +      linkM
        +      linkMa
        +      linkMatc
        +      linkMatcher
        +      im
        +      img
        +      name
        +      jump
        +      layout
        +      paral
        +    
        +    
        +      console.log
        +      to
        +      ,
        +      +"/"+
        +      ../..
        +      ../../fakes
        +      ../fakes
        +      #{JSON.stringify(
        +      \'
        +      mockery
        +      document
        +      buildMatchers
        +      format
        +      multiline
        +      stopMatcher
        +      imgMatcher
        +    
        +  
        +  
        +    
        +  
        +    
        +  
        +  
        +  
        +  
        +    true
        +    
        +    false
        +    true
        +  
        +  
        +    true
        +    DEFINITION_ORDER
        +  
        +  
        +    
        +  
        +  
        +    
        +  
        +    
        +      
        +        
        +          
        +            
        +          
        +          
        +            CoffeeScript
        +          
        +          
        +            File Watchers
        +          
        +          
        +            GeneralCoffeeScript
        +          
        +          
        +            Probable bugsCoffeeScript
        +          
        +        
        +        
        +          
        +            AngularJS
        +          
        +        
        +      
        +    
        +  
        +  
        +    
        +  
        +  
        +    
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +      
        +    
        +    
        +      
        +      
        +        
        +          
        +            
        +              
        +              
        +            
        +            
        +              
        +              
        +              
        +            
        +            
        +              
        +              
        +              
        +            
        +            
        +              
        +              
        +              
        +              
        +            
        +            
        +              
        +              
        +              
        +              
        +              
        +            
        +            
        +              
        +              
        +              
        +            
        +          
        +          
      5. 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 X3&Ic#E%XNK++i8SYTo{GJ<-1bF1c8o literal 0 HcmV?d00001 diff --git a/resources/sidebyside/public/fonts/roboto-black.woff b/resources/sidebyside/public/fonts/roboto-black.woff new file mode 100755 index 0000000000000000000000000000000000000000..642e5b60f7c662ab5bcf67cfc1089f50bfdd7b00 GIT binary patch literal 24536 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‚ZNmb*+jwao2 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 E0ADU%yZ`_I literal 0 HcmV?d00001 diff --git a/resources/sidebyside/public/stylesheets/normalize.css b/resources/sidebyside/public/stylesheets/normalize.css new file mode 100644 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/test/sim/.adocco.json b/test/sim/.adocco.json index 30bb2758..117f8e7a 100644 --- a/test/sim/.adocco.json +++ b/test/sim/.adocco.json @@ -1,10 +1,10 @@ { "sources": [ + "README.md", "src/**/*.js", "src/**/*.coffee", "src/**/*.litcoffee", "src/**/*.java", - "README.md", "images/**/*.jpg" ] } From 3ef82a44acdc87929b78101a62ff765cd45f269f Mon Sep 17 00:00:00 2001 From: Robb Lovell Date: Mon, 10 Jul 2017 21:11:53 -0700 Subject: [PATCH 83/95] Allow for removal of images in a template. --- resources/sidebyside/docco.jst | 3 ++- src/getInformationOnFiles.js | 5 +++-- src/getInformationOnFiles.js.map | 2 +- src/getInformationOnFiles.litcoffee | 4 +++- src/getOthers.js | 6 ++++-- src/getOthers.js.map | 2 +- src/getOthers.litcoffee | 2 ++ test/unit-tests/fakes/fake-config.js | 1 + test/unit-tests/fakes/fake-config.js.map | 2 +- test/unit-tests/fakes/fake-config.litcoffee | 1 + .../fakes/informationOnFilesFlattened.js | 16 ++++++++++++++++ .../fakes/informationOnFilesFlattened.js.map | 2 +- .../informationOnFilesFlattened.litcoffee | 16 ++++++++++++++++ .../fakes/informationOnFilesUnFlattened.js | 16 ++++++++++++++++ .../fakes/informationOnFilesUnFlattened.js.map | 2 +- .../informationOnFilesUnFlattened.litcoffee | 16 ++++++++++++++++ test/unit-tests/unit-test-getOthers.js | 18 +++++++++++++----- test/unit-tests/unit-test-getOthers.js.map | 2 +- test/unit-tests/unit-test-getOthers.litcoffee | 18 +++++++++++++----- 19 files changed, 112 insertions(+), 22 deletions(-) diff --git a/resources/sidebyside/docco.jst b/resources/sidebyside/docco.jst index 7d8e4a40..79d88a68 100644 --- a/resources/sidebyside/docco.jst +++ b/resources/sidebyside/docco.jst @@ -19,6 +19,7 @@