pike.git / bin / htmlify_docs.lpc

version» Context lines:

pike.git/bin/htmlify_docs.lpc:224:    return ("<html>"+    "<title>"+    html_quote(title)+    "</title>"+    "<body bgcolor=\"#A0E0C0\">"+    s+    "</body>"+    "</html>");   }    + string short(string s) + { +  return short_descs[s] ? " - "+short_descs[s] : ""; + } +  +    inherit "/precompiled/regexp":is_example;      list(string) indexes_done=(<>);   string mkindex(string topic, int head)   {    string head;    string a,ret;    ret="";       indexes_done[topic]=1;
pike.git/bin/htmlify_docs.lpc:285:    break;       default:    if(!keywords[topic])    {    perror("Unknown keyword "+topic+".\n");    return "";    }       head="<a name="+topic+">"; -  head+="<b>"+capitalize(b)+"</a>"; -  head+=short(b); +  head+="<b>"+capitalize(topic)+"</a>"; +  head+=short(topic);    head+="</b>\n";    ret="<ul>\n"; -  foreach(keywords[b],a) +  foreach(keywords[topic],a)    {    a=html_quote(a);    ret+="<li><a href="+pages[a]+">"+a+"</a>"+ short(a) +"\n";    }    ret+="</ul></a>\n";    break;    }       if(head) ret=head+ret;       return ret;   }    -  + int writepages; +    /* Convert a page */   string convert_page(string path, string fname)   {    string output, short;    int headno;    string cont, section, name, part;       output="";       cont=read_bytes(path);    -  + // perror("foo: "+path[strlen(path)-5..]+".\n");    if(sscanf(cont,"NAME\n\t%s - %s\n",name,short))    {    int partno;       cont=html_quote(cont); -  +  path=fippel_path(path); +     short_descs[html_quote(name)]=short; -  +  pages[html_quote(name)]=path;    -  +     string *parts=explode(cont,"============================================================================\n");    for(partno=0;partno<sizeof(parts);partno++)    {    string part_name="error";    string *sections;    string part;    int section;       part=parts[partno];    if(!strlen(part)) continue;
pike.git/bin/htmlify_docs.lpc:360:    mixed a, b;    sscanf(sections[headno],"%s\n%s",type,rest);       switch(type)    {    case "NAME":    if(sscanf(rest,"\t%s - %s",part_name,b)!=2)    perror("Warning NAME section broken!\n");    rest="\t<tt>"+part_name+"</tt> - "+b;    +  if(partno) +  { +  subpages[fname+"-&gt;"+part_name]=path+"#"+part_name; +  } +     case "DESCRIPTION":    case "NOTA BENE":    case "BUGS":    rest=magic(rest,0);    break;       default:    perror("Warning: Unknown header: "+type+".\n");    rest=magic(rest,0);    break;
pike.git/bin/htmlify_docs.lpc:400:    tmp=a;    a=explode(a,"/")[-1];    if(pages[a])    {    b+=({ "<a href="+pages[a]+">" + a + "</a>" });    }else if(subpages[a]){    b+=({ "<a href="+subpages[a]+">" + a + "</a>" });    }else if(subpages[fname+"-&gt;"+a]){    b+=({ "<a href="+subpages[name+"-&gt;"+a]+">" + a + "</a>" });    }else{ +  if(writepages)    perror("Warning, unlinked SEE ALSO: "+a+"\n");    b+=({ tmp });    }    }    rest=implode_nicely(b);    break;       case "SYNTAX":    case "SYNTAX EXAMPLE":    rest=syntax_magic(rest);    break;       case "EXAMPLES":    case "EXAMPLE":    case "DIRECTIVE":    case "PREPROCESSOR DIRECTIVES":    rest="<tt>"+magic(rest,1)+"</tt>"; -  +  break;       case "RELATED FUNCTIONS":    a=name;    sscanf(rest,"%*skeyword %[a-z/A-Z0-9]",a);    rest=mkindex(a, 0);    }       sections[headno]="<dt>"+    smallcaps(type)+    "<dd>\n"+rest+"\n<p>";
pike.git/bin/htmlify_docs.lpc:444:    }    }    output=mkdocument(implode(parts,"<hr noshade size=1>\n"),"uLPC: "+name);    }    else if(path[strlen(path)-5..]==".bmml")    {    string *sections;    string title;    int section;    +  pages[(path[..strlen(path)-6]/"/")[-1]]=fippel_path(path); +     cont=replace(cont,"$version",version());    cont=html_quote(cont);    sections=explode(cont,"\n\n");       for(section=0;section<sizeof(sections);section++)    {    string tmp,pre,a;    tmp=sections[section]; -  sscanf(tmp,"%[\t ]",per); +  sscanf(tmp,"%[\t ]",pre);    -  switch(space) +  switch(pre)    {    case "":    tmp="<h1><center>"+tmp+"</center></h1>";    title=tmp;    break;       case " ":    sscanf(tmp," %s",tmp);    tmp="<h2>"+tmp+"</h2>";    break;       case " ":    sscanf(tmp," %s",tmp);    tmp=replace(tmp,"\n ","\n"); -  tmp=more_magic(tmp); +  tmp=more_magic(tmp,0);    break;       case "\t":    sscanf(tmp,"\t%s %s",pre, a);    switch(pre)    {    case "KEYWORD_INDEX": -  +  sscanf(a,"%s\n",a);    tmp=mkindex(a, 1); -  +  break;       default:    perror("Unknown directive: "+pre+".\n");    }       }    }    cont=implode(sections,"\n<p>\n");       return mkdocument(cont, title || "uLPC manual");    }    else if(path[strlen(path)-5..]==".html")    { -  +  pages[(path[..strlen(path)-6]/"/")[-1]]=fippel_path(path); +     if(sscanf(cont,"<title>%s</title>",part))    short_descs[(path/"/")[-1]]=part;    output=cont;    }    else if(is_example::match(cont))    {    /** Hmm, this looks like an example file to me... */    string line,tmp;    int pre,p;    -  +  pages[(path/"/")[-1]]=fippel_path(path); +     if(sscanf(cont,"%*[0-9.] %s\n",part)==2)    short_descs[(path/"/")[-1]]=part;       tmp="";    pre=2;    cont=html_quote(cont);    foreach(cont/"\n"+({"."}),line)    {    if(strlen(line))    {
pike.git/bin/htmlify_docs.lpc:539:    }    pre=p;    tmp="";    }    }    tmp+=line+"\n";    }    output=mkdocument(output,"uLPC: "+    replace(explode(fname,"/")[-1],"_"," "));    } -  return output; - } -  -  - string short(string s) - { -  return short_descs[s] ? " - "+short_descs[s] : ""; - } -  - string convert_dot_bmml(string path, string fname) - { -  string output; -  -  output=""; -  -  if(path[strlen(path)-5..]==".bmml") -  { -  } -  return 0; - } -  - int writepages; -  - void scanfiles(string path, string fname) - { -  string nf,np; -  nf=convert(path, fname); -  -  if(nf && strlen(nf) && writepages) -  { -  np=combine_path(new_path,fippel_path(path)); - // write("Writing "+np+".\n"); -  if(file_size(np)>=0) -  rm (np); -  write_file(np,nf); -  } - } -  - /* -  * Pre-read all files and sort out where to link it to -  */ - void scanlinks(string path, string fname) - { -  string cont,name; -  cont=read_bytes(path); -  cont=html_quote(cont); -  -  if(sscanf(cont,"NAME\n\t%s -",name)) -  { -  path=fippel_path(path); -  pages[name]=path; -  -  int e; -  string *parts=explode(cont,"============================================================================\n"); -  for(e=1;e<sizeof(parts);e++) -  { -  string part_name; -  if(sscanf(parts[e],"NAME\n\t%s -",part_name)) -  { -  subpages[fname+"-&gt;"+part_name]=path+"#"+part_name; -  } -  } -  } -  else if(path[strlen(path)-5..]==".html") -  { -  pages[(path[..strlen(path)-6]/"/")[-1]]=fippel_path(path); -  } -  else if(is_example::match(cont)) -  { -  pages[(path/"/")[-1]]=fippel_path(path); -  } +     else    { -  +  if(writepages) +  {    string tmp;    int l, i;       foreach(cont/"\n", tmp)    {    if(is_example::match(tmp+"\n"))    {    l++;    }else{    i++;
pike.git/bin/htmlify_docs.lpc:639:    {    l++;    if(!is_example::match(tmp+"\n"))    {    perror(path+":"+l+": not on example form.\n");    }    }    }    perror("Warning: not converting "+path+".\n");    } +  output="";    } -  +  return output; + }       -  + void scanfiles(string path, string fname) + { +  string nf,np; +  nf=convert_page(path, fname); +  +  if(nf && strlen(nf) && writepages) +  { +  np=combine_path(new_path,fippel_path(path)); + // write("Writing "+np+".\n"); +  if(file_size(np)>=0) +  rm (np); +  write_file(np,nf); +  } + } +    /** Traverse directory **/   void traversedir(string path,function fun)   {    string file;    foreach(get_dir(path) - ({"CVS","RCS",".cvsignore"}),file)    {    string tmp;    if(file[-1]=='~') continue;    if(file[0]=='#' && file[-1]=='#') continue;    if(file[0]=='.' && file[1]=='#') continue;
pike.git/bin/htmlify_docs.lpc:679:    lastident::create("^(.*[^<>a-z_0-9])([a-z_0-9]+)([^<>a-z_0-9]*)$");      #define BEGIN1 "[0-9]+(\\.[0-9]+)*(\\.|) "   #define BEGIN2 "\t"   #define BEGIN3 " "   #define LEND "[^\n]*"   #define LINE "(" BEGIN1 LEND ")|(" BEGIN2 LEND ")|(" BEGIN3 LEND ")|()\n"       is_example::create("^(" LINE ")+$");    -  write("Scanning links.\n"); +     new_path=combine_path(getcwd(),argv[2]);    cd(argv[1]); -  traversedir(".",scanlinks); +     -  write("Scanning pages.\n"); +  write("Scanning pages for links and keywords.\n");    writepages=0;    traversedir(".",scanfiles);    -  write("Writing html.\n"); +  write("Writing html files.\n");    writepages=0;    traversedir(".",scanfiles);       foreach(indices(keywords) - indices(indexes_done),np)    {    perror("Keywords never indexed: "+np+"\n");    }   }