Browse Source

slate format .md files

release/v0.1
jl777 9 years ago
parent
commit
2b2dbe76ae
  1. 4
      iguana/help/agent.md
  2. 1
      iguana/help/field.md
  3. 1
      iguana/help/footer.md
  4. 1
      iguana/help/formfooter.md
  5. 15
      iguana/help/formheader.md
  6. 25
      iguana/help/header.md
  7. 4
      iguana/help/html5shiv.min.js
  8. 5
      iguana/help/respond.min.js
  9. 89
      iguana/iguana_json.c
  10. 9
      iguana/iguana_rpc.c

4
iguana/help/agent.md

@ -0,0 +1,4 @@
%s API
===
%s

1
iguana/help/field.md

@ -0,0 +1 @@
%s | %s | %s

1
iguana/help/footer.md

@ -0,0 +1 @@
end of help

1
iguana/help/formfooter.md

@ -0,0 +1 @@

15
iguana/help/formheader.md

@ -0,0 +1,15 @@
## method: %s
%s
```curl
%s
```
```url
%s
```
field | value type | Description
--------- | ------- | -----------

25
iguana/help/header.md

@ -0,0 +1,25 @@
---
title: API Reference
language_tabs:
- curl
- url
toc_footers:
- <a href='http://supernet.org'>SuperNET.org</a>
- <a href='https://phabricator.supernet.org/'>SupernET Developer Network</a>
includes:
- api
- errors
search: true
---
# Introduction
Welcome to the SuperNET API!
Visit [SupernET Developer Network](https://phabricator.supernet.org/).
SuperNET development related information goes here.

4
iguana/help/html5shiv.min.js

@ -0,0 +1,4 @@
/**
* @preserve HTML5 Shiv 3.7.2 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
*/
!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.2",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b)}(this,document);

5
iguana/help/respond.min.js

@ -0,0 +1,5 @@
/*! Respond.js v1.4.2: min/max-width media query polyfill * Copyright 2013 Scott Jehl
* Licensed under https://github.com/scottjehl/Respond/blob/master/LICENSE-MIT
* */
!function(a){"use strict";a.matchMedia=a.matchMedia||function(a){var b,c=a.documentElement,d=c.firstElementChild||c.firstChild,e=a.createElement("body"),f=a.createElement("div");return f.id="mq-test-1",f.style.cssText="position:absolute;top:-100em",e.style.background="none",e.appendChild(f),function(a){return f.innerHTML='&shy;<style media="'+a+'"> #mq-test-1 { width: 42px; }</style>',c.insertBefore(e,d),b=42===f.offsetWidth,c.removeChild(e),{matches:b,media:a}}}(a.document)}(this),function(a){"use strict";function b(){u(!0)}var c={};a.respond=c,c.update=function(){};var d=[],e=function(){var b=!1;try{b=new a.XMLHttpRequest}catch(c){b=new a.ActiveXObject("Microsoft.XMLHTTP")}return function(){return b}}(),f=function(a,b){var c=e();c&&(c.open("GET",a,!0),c.onreadystatechange=function(){4!==c.readyState||200!==c.status&&304!==c.status||b(c.responseText)},4!==c.readyState&&c.send(null))};if(c.ajax=f,c.queue=d,c.regex={media:/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,keyframes:/@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,urls:/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,findStyles:/@media *([^\{]+)\{([\S\s]+?)$/,only:/(only\s+)?([a-zA-Z]+)\s?/,minw:/\([\s]*min\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/,maxw:/\([\s]*max\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/},c.mediaQueriesSupported=a.matchMedia&&null!==a.matchMedia("only all")&&a.matchMedia("only all").matches,!c.mediaQueriesSupported){var g,h,i,j=a.document,k=j.documentElement,l=[],m=[],n=[],o={},p=30,q=j.getElementsByTagName("head")[0]||k,r=j.getElementsByTagName("base")[0],s=q.getElementsByTagName("link"),t=function(){var a,b=j.createElement("div"),c=j.body,d=k.style.fontSize,e=c&&c.style.fontSize,f=!1;return b.style.cssText="position:absolute;font-size:1em;width:1em",c||(c=f=j.createElement("body"),c.style.background="none"),k.style.fontSize="100%",c.style.fontSize="100%",c.appendChild(b),f&&k.insertBefore(c,k.firstChild),a=b.offsetWidth,f?k.removeChild(c):c.removeChild(b),k.style.fontSize=d,e&&(c.style.fontSize=e),a=i=parseFloat(a)},u=function(b){var c="clientWidth",d=k[c],e="CSS1Compat"===j.compatMode&&d||j.body[c]||d,f={},o=s[s.length-1],r=(new Date).getTime();if(b&&g&&p>r-g)return a.clearTimeout(h),h=a.setTimeout(u,p),void 0;g=r;for(var v in l)if(l.hasOwnProperty(v)){var w=l[v],x=w.minw,y=w.maxw,z=null===x,A=null===y,B="em";x&&(x=parseFloat(x)*(x.indexOf(B)>-1?i||t():1)),y&&(y=parseFloat(y)*(y.indexOf(B)>-1?i||t():1)),w.hasquery&&(z&&A||!(z||e>=x)||!(A||y>=e))||(f[w.media]||(f[w.media]=[]),f[w.media].push(m[w.rules]))}for(var C in n)n.hasOwnProperty(C)&&n[C]&&n[C].parentNode===q&&q.removeChild(n[C]);n.length=0;for(var D in f)if(f.hasOwnProperty(D)){var E=j.createElement("style"),F=f[D].join("\n");E.type="text/css",E.media=D,q.insertBefore(E,o.nextSibling),E.styleSheet?E.styleSheet.cssText=F:E.appendChild(j.createTextNode(F)),n.push(E)}},v=function(a,b,d){var e=a.replace(c.regex.keyframes,"").match(c.regex.media),f=e&&e.length||0;b=b.substring(0,b.lastIndexOf("/"));var g=function(a){return a.replace(c.regex.urls,"$1"+b+"$2$3")},h=!f&&d;b.length&&(b+="/"),h&&(f=1);for(var i=0;f>i;i++){var j,k,n,o;h?(j=d,m.push(g(a))):(j=e[i].match(c.regex.findStyles)&&RegExp.$1,m.push(RegExp.$2&&g(RegExp.$2))),n=j.split(","),o=n.length;for(var p=0;o>p;p++)k=n[p],l.push({media:k.split("(")[0].match(c.regex.only)&&RegExp.$2||"all",rules:m.length-1,hasquery:k.indexOf("(")>-1,minw:k.match(c.regex.minw)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:k.match(c.regex.maxw)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}u()},w=function(){if(d.length){var b=d.shift();f(b.href,function(c){v(c,b.href,b.media),o[b.href]=!0,a.setTimeout(function(){w()},0)})}},x=function(){for(var b=0;b<s.length;b++){var c=s[b],e=c.href,f=c.media,g=c.rel&&"stylesheet"===c.rel.toLowerCase();e&&g&&!o[e]&&(c.styleSheet&&c.styleSheet.rawCssText?(v(c.styleSheet.rawCssText,e,f),o[e]=!0):(!/^([a-zA-Z:]*\/\/)/.test(e)&&!r||e.replace(RegExp.$1,"").split("/")[0]===a.location.host)&&("//"===e.substring(0,2)&&(e=a.location.protocol+e),d.push({href:e,media:f})))}w()};x(),c.update=x,c.getEmValue=t,a.addEventListener?a.addEventListener("resize",b,!1):a.attachEvent&&a.attachEvent("onresize",b)}}(this);

89
iguana/iguana_json.c

@ -44,7 +44,7 @@ cJSON *helpjson(cJSON *json,cJSON *array,cJSON *agents,char *agentstr,char *meth
jaddstr(methodobj,"agent",agentstr);
jaddstr(methodobj,"method",method);
sprintf(url,"http://127.0.0.1:7778/api/%s/%s",agentstr,method);
sprintf(curl,"curl --url \"http://127.0.0.1:7778\" --data \"{\"agent\":\"%s\",\"method\":\"%s\"",agentstr,method);
sprintf(curl,"curl --url \"http://127.0.0.1:7778\" --data \"{\\\"agent\\\":\\\"%s\\\",\\\"method\\\":\\\"%s\\\"",agentstr,method);
if ( methodargs != 0 && (n= cJSON_GetArraySize(methodargs)) > 0 )
{
//printf("method.%s n.%d %s\n",method,n,jprint(methodargs,0));
@ -53,7 +53,7 @@ cJSON *helpjson(cJSON *json,cJSON *array,cJSON *agents,char *agentstr,char *meth
strcat(url,i==0?"?":"&");
item = jitem(methodargs,i);
sprintf(url+strlen(url),"%s={%s}",get_cJSON_fieldname(item),jstr(item,get_cJSON_fieldname(item)));
sprintf(curl+strlen(curl),",\"%s\":\"{%s}\"",get_cJSON_fieldname(item),jstr(item,get_cJSON_fieldname(item)));
sprintf(curl+strlen(curl),",\\\"%s\\\":\\\"{%s}\\\"",get_cJSON_fieldname(item),jstr(item,get_cJSON_fieldname(item)));
}
}
strcat(curl,"}\"");
@ -259,10 +259,10 @@ int32_t templates_emit(char *retbuf,int32_t maxsize,char *template,char *agent,c
return(template_emit(retbuf,maxsize,buf,"$FIELDNAMES2",fieldnames2));
}
int32_t pretty_form(FILE *fp,char *formheader,char *formfooter,char *fieldtemplate,char *agent,cJSON *methoditem)
int32_t pretty_form(FILE *fp,char *formheader,char *formfooter,char *fieldtemplate,char *agent,cJSON *methoditem,cJSON *helpitem,char *suffix)
{
cJSON *item,*fieldsarray; int32_t j,m,formsize,fieldsize,iter,width,size = 0;
char *methodstr,*typestr,*fieldname;
char *methodstr,*typestr,*fieldname,*helpstr,*curlstr,*urlstr,*itemhelp;
char outstr[2048],outstr2[2048],str[2],widthstr[16],both[512];
if ( (methodstr= jstr(methoditem,"method")) == 0 )
methodstr = "method";
@ -271,16 +271,29 @@ int32_t pretty_form(FILE *fp,char *formheader,char *formfooter,char *fieldtempla
sprintf(both,"%s-%s",agent,methodstr);
outstr[0] = outstr2[0] = str[1] = 0;
formsize = fieldsize = 0;
if ( (helpstr= jstr(helpitem,"help")) == 0 )
helpstr = "Some description of this API Call.";
if ( (urlstr= jstr(methoditem,"url")) == 0 )
urlstr = "url";
if ( (curlstr= jstr(methoditem,"curl")) == 0 )
curlstr = "curl";
for (iter=0; iter<2; iter++)
{
if ( iter == 1 )
{
if ( strcmp(suffix,"html") == 0 )
fprintf(fp,formheader,both,both,both,agent,methodstr,both,both,agent,methodstr,outstr);
else if ( strcmp(suffix,"md") == 0 )
fprintf(fp,formheader,methodstr,helpstr,curlstr,urlstr);
}
if ( (fieldsarray= jarray(&m,methoditem,"fields")) != 0 )
{
for (j=0; j<m; j++)
{
item = jitem(fieldsarray,j);
fieldname = get_cJSON_fieldname(item);
if ( (itemhelp= jstr(helpitem,fieldname)) == 0 )
itemhelp = "no help info";
// printf("item.(%s) %s\n",jprint(item,0),jstr(item,fieldname));
if ( iter == 0 )
{
@ -309,22 +322,30 @@ int32_t pretty_form(FILE *fp,char *formheader,char *formfooter,char *fieldtempla
else width = 0;
}
sprintf(widthstr,"%d",width);
if ( strcmp(suffix,"html") == 0 )
fprintf(fp,fieldtemplate,fieldname,fieldname,fieldname,widthstr,fieldname);
else if ( strcmp(suffix,"md") == 0 )
fprintf(fp,fieldtemplate,fieldname,typestr,itemhelp);
}
}
}
if ( iter == 1 )
{
if ( strcmp(suffix,"html") == 0 )
fprintf(fp,formfooter,outstr2,methodstr,methodstr);
else if ( strcmp(suffix,"md") == 0 )
fprintf(fp,formfooter,"");
}
}
return(size);
}
void update_docjson(cJSON *docjson,char *agent,char *method)
cJSON *update_docjson(cJSON *docjson,char *agent,char *method)
{
cJSON *item = 0; long allocsize; char *docstr,fname[512],stubstr[4096]; FILE *fp;
if ( agent != 0 && method != 0 )
{
sprintf(stubstr,"{\"agent\":\"%s\",\"method\":\"%s\",\"help\":\"put helpful info here\",\"teststatus\":[{\"tester\":\"bob\",\"result\":\"put result here\",\"notes\":\"put useful notes here\",\"automated\":\"notyet\",\"sourcefile\":\"%s_%s_test.py\"}]}",agent,method,agent,method);
sprintf(stubstr,"{\"agent\":\"%s\",\"method\":\"%s\",\"field0\":\"put in helpful info field0\",\"field1\":\"put in helpful info for field1\",\"help\":\"put helpful info here\",\"teststatus\":[{\"tester\":\"bob\",\"result\":\"put result here\",\"notes\":\"put useful notes here\",\"automated\":\"notyet\",\"sourcefile\":\"%s_%s_test.py\"}]}",agent,method,agent,method);
sprintf(fname,"help/%s_%s.json",agent,method);
if ( (docstr= OS_filestr(&allocsize,fname)) != 0 )
{
@ -347,17 +368,26 @@ void update_docjson(cJSON *docjson,char *agent,char *method)
if ( item != 0 )
jaddi(docjson,item);
}
return(item);
}
int32_t pretty_forms(char *fname,char *agentstr)
char *formfname(char *name,char *suffix)
{
char *str,*header,*footer,*formheader,*formfooter,*field,*docstr; long allocsize; FILE *fp,*docfp;
int32_t i,n,len,err=0,size = 0; cJSON *helpjson,*array,*item,*docjson;
header = OS_filestr(&allocsize,"help/header.html"); if ( allocsize > MAX_TEMPLATESIZE ) err++;
footer = OS_filestr(&allocsize,"help/footer.html"); if ( allocsize > MAX_TEMPLATESIZE ) err++;
formheader = OS_filestr(&allocsize,"help/formheader.html"); if ( allocsize > MAX_TEMPLATESIZE ) err++;
formfooter = OS_filestr(&allocsize,"help/formfooter.html"); if ( allocsize > MAX_TEMPLATESIZE ) err++;
field = OS_filestr(&allocsize,"help/field.html"); if ( allocsize > MAX_TEMPLATESIZE ) err++;
static char retbuf[512];
sprintf(retbuf,"help/%s.%s",name,suffix);
return(retbuf);
}
int32_t pretty_forms(char *fname,char *agentstr,char *suffix)
{
char *str,*header,*footer,*agent,*agenthelp,*prevagent=0,*formheader,*formfooter,*field,*docstr; long allocsize; FILE *fp,*docfp;
int32_t i,n,len,err=0,size = 0; cJSON *helpjson,*array,*item,*docjson=0,*helpitem;
header = OS_filestr(&allocsize,formfname("header",suffix)); if ( allocsize > MAX_TEMPLATESIZE ) err++;
footer = OS_filestr(&allocsize,formfname("footer",suffix)); if ( allocsize > MAX_TEMPLATESIZE ) err++;
formheader = OS_filestr(&allocsize,formfname("formheader",suffix)); if ( allocsize > MAX_TEMPLATESIZE ) err++;
formfooter = OS_filestr(&allocsize,formfname("formfooter",suffix)); if ( allocsize > MAX_TEMPLATESIZE ) err++;
field = OS_filestr(&allocsize,formfname("field",suffix)); if ( allocsize > MAX_TEMPLATESIZE ) err++;
agent = OS_filestr(&allocsize,formfname("agent",suffix)); if ( allocsize > MAX_TEMPLATESIZE ) err++;
fp = fopen(fname,"w");
docjson = cJSON_CreateArray();
if ( fp != 0 && err == 0 && header != 0 && footer != 0 && formheader != 0 && formfooter != 0 && field != 0 )
@ -372,11 +402,26 @@ int32_t pretty_forms(char *fname,char *agentstr)
for (i=0; i<n; i++)
{
item = jitem(array,i);
str = jstr(item,"agent");
update_docjson(docjson,str,jstr(item,"method"));
if ( (str = jstr(item,"agent")) == 0 )
continue;
if ( prevagent == 0 || strcmp(str,prevagent) != 0 )
{
if ( agent != 0 )
{
char errbuf[512];
sprintf(errbuf,"need to create help/%s.md file",str);
if ( (agenthelp= OS_filestr(&allocsize,formfname(str,"md"))) != 0 )
{
fprintf(fp,agent,str,agenthelp);
free(agenthelp);
} else fprintf(fp,agent,str,errbuf);
}
prevagent = str;
}
helpitem = update_docjson(docjson,str,jstr(item,"method"));
if ( agentstr == 0 || agentstr[0] == 0 || (str != 0 && strcmp(str,agentstr) == 0) )
{
len = pretty_form(fp,formheader,formfooter,field,str!=0?str:"agent",item);
len = pretty_form(fp,formheader,formfooter,field,str!=0?str:"agent",item,helpitem,suffix);
size += len;
//printf("%s.%s\n",str,jstr(item,"method"));
} //else printf("agentstr.%p (%s) (%s) str.%p \n",agentstr,agentstr,str,str);
@ -388,7 +433,7 @@ int32_t pretty_forms(char *fname,char *agentstr)
fclose(fp);
//HTML_EMIT(footer,strlen(footer));
}
if ( docjson != 0 && (docfp= fopen("help.json","w")) != 0 )
if ( suffix != 0 && docjson != 0 && (docfp= fopen("help.json","w")) != 0 )
{
docstr = jprint(docjson,1);
fprintf(docfp,"%s\n",docstr);
@ -406,9 +451,15 @@ int32_t pretty_forms(char *fname,char *agentstr)
char *SuperNET_htmlstr(char *fname,char *htmlstr,int32_t maxsize,char *agentstr)
{
static int counter;
int32_t i,n,len,size = 0; cJSON *helpjson,*item,*array; char *str; FILE *fp = 0;
htmlstr[0] = 0;
if ( pretty_forms(fname,agentstr) != 0 )
if ( counter++ == 0 )
{
pretty_forms("API.md",0,"md");
printf("autocreate %s\n","API.md");
}
if ( pretty_forms(fname,agentstr,"html") != 0 )
{
//printf("%s\n",htmlstr);
return(htmlstr);

9
iguana/iguana_rpc.c

@ -705,7 +705,7 @@ cJSON *SuperNET_urlconv(char *value,int32_t bufsize,char *urlstr)
char *SuperNET_rpcparse(struct supernet_info *myinfo,char *retbuf,int32_t bufsize,int32_t *jsonflagp,int32_t *postflagp,char *urlstr,char *remoteaddr)
{
cJSON *tokens,*argjson,*json = 0; long filesize;
char symbol[16],buf[4096],urlmethod[16],*data,url[1024],*retstr,*token = 0; int32_t i,j,n,num=0;
char symbol[16],buf[4096],urlmethod[16],*data,url[1024],*retstr,*filestr,*token = 0; int32_t i,j,n,num=0;
//printf("rpcparse.(%s)\n",urlstr);
for (i=0; i<sizeof(urlmethod)-1&&urlstr[i]!=0&&urlstr[i]!=' '; i++)
urlmethod[i] = urlstr[i];
@ -722,8 +722,13 @@ char *SuperNET_rpcparse(struct supernet_info *myinfo,char *retbuf,int32_t bufsiz
if ( strcmp(&url[i],"/") == 0 && strcmp(urlmethod,"GET") == 0 )
{
*jsonflagp = 1;
if ( (filestr= OS_filestr(&filesize,"index7778.html")) == 0 )
{
SuperNET_htmlstr("index7778.html",retbuf,bufsize,0);
return(OS_filestr(&filesize,"index7778.html"));
filestr = OS_filestr(&filesize,"index7778.html");
printf("created index7778.html size %ld\n",filesize);
}
return(filestr);
}
if ( strncmp(&url[i],"/api",strlen("/api")) == 0 )
{

Loading…
Cancel
Save