docgen.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. /*global require*/
  2. var fs = require("fs");
  3. var cmdArgs = process.argv.splice(2);
  4. function stripTags(oldString) {
  5. "use strict";
  6. return oldString.replace(/(<([^>]+)>)/ig,"");
  7. }
  8. function rPad(string,val,length){
  9. "use strict";
  10. if(!string||!val||length===0) return;
  11. while(string.length<length){
  12. string=string+val;
  13. }
  14. return string;
  15. }
  16. var mdTemlpate="#{title}\n\n"+
  17. "{example}\n\n"+
  18. "##Parameters\n\n```\n{params}\n```\n\n"+
  19. "##Returns\n\n```\n{returns}\n```\n\n"+
  20. "{extra}";
  21. function makeMD(title,example,params,returns,extra){
  22. "use strict";
  23. return mdTemlpate.replace("{title}",title).replace("{example}",example).replace("{params}",params).replace("{returns}",returns).replace("{extra}",extra);
  24. }
  25. //loop through the files
  26. cmdArgs.forEach(function(ind){
  27. "use strict";
  28. if(fs.statSync(ind)){
  29. var name=ind.replace(".json","");
  30. var contents=require("./"+name);
  31. contents.forEach(function(entry){
  32. if(entry.isPrivate||entry.ignore)
  33. return;
  34. var mdTxt="";
  35. var title="";
  36. var params=[];
  37. var desc="";
  38. var returnObj={
  39. desc:"",
  40. types:""
  41. };
  42. var example=entry.code;
  43. if(entry.description.full.indexOf("jshint ")!==-1) return;
  44. if(entry.tags){
  45. entry.tags.forEach(function(tag){
  46. // console.log(tag);
  47. switch(tag.type){
  48. case "title":
  49. title=tag.string;
  50. break;
  51. case "param":
  52. params[tag.name]=tag.types;
  53. break;
  54. case "return":
  55. returnObj.desc=tag.description;
  56. returnObj.types=tag.types;
  57. break;
  58. }
  59. title=title.replace("* @title","");
  60. });
  61. }
  62. title=title.replace("$()","");
  63. if(title.length===0) return;
  64. var summary="```\n"+entry.description.summary;
  65. //Cleanup the docx html code
  66. summary=summary.replace("<div class=\"highlight\"><pre lang=\"\">","\n```\n\n##Example\n\n```\n").
  67. replace("</pre></div>","\n```\n").
  68. replace(/<br \/>/g,"\n").
  69. replace(/<p>/g,"\n").
  70. replace(/```js/g,"```").
  71. replace(/ /g,"");
  72. summary=stripTags(summary);
  73. var paramsTxt="";
  74. var returnTxt=rPad(returnObj.types," ",30)+returnObj.desc;
  75. Object.keys(params).forEach(function(key){
  76. paramsTxt+=rPad(key," ",30)+params[key].join("|")+"\n";
  77. });
  78. var extra="";
  79. var extraName=title.replace(";","");
  80. if(extraName.indexOf("(")!==-1)
  81. extraName=extraName.substr(0,extraName.indexOf("("));
  82. try {
  83. if(fs.statSync("./detail/"+extraName+".md"))
  84. {
  85. extra=fs.readFileSync("./detail/"+extraName+".md").toString();
  86. extra=extra.replace(/```js/g,"```");
  87. extra=extra.replace(/```html/g,"```");
  88. extra="##Detail\n\n"+extra;
  89. }
  90. }
  91. catch(e){
  92. }
  93. var md=makeMD(title,summary,paramsTxt,returnTxt,extra);
  94. fs.writeFileSync("./"+name+"/"+extraName+".md",md);
  95. });
  96. }
  97. });