diff --git a/bin/mkwmml.pike b/bin/mkwmml.pike index 6d6c3e10f835c8d681f67ae4619f6d4bc737c18d..ee25680f22904d8c8a4b92730594e7c3e84d23fd 100644 --- a/bin/mkwmml.pike +++ b/bin/mkwmml.pike @@ -1,4 +1,4 @@ -/* $Id: mkwmml.pike,v 1.8 1998/05/21 11:53:38 grubba fake $ */ +/* $Id: mkwmml.pike,v 1.9 1998/07/04 15:57:14 mast Exp $ */ import Stdio; import Array; @@ -40,12 +40,14 @@ module : mapping <- moduleM "args" : array of args names and types "desc" : description "names" : multiset of method name(s) - + +Quoting: Only '<' must be quoted as '<'. + */ mapping moduleM, classM, methodM, argM, nowM, descM; -mapping focM(mapping dest,string name,int line) +mapping focM(mapping dest,string name,string line) { return dest[name] || (dest[name]=(["_line":line])); } @@ -76,49 +78,49 @@ void report(string s) #define complain(X) (X) mapping keywords= -(["module":lambda(string arg,int line) +(["module":lambda(string arg,string line) { classM=descM=nowM=moduleM=focM(parse,stripws(arg),line); methodM=0; if (!nowM->classes) nowM->classes=([]); if (!nowM->modules) nowM->modules=([]); report("module "+arg); }, - "class":lambda(string arg,int line) + "class":lambda(string arg,string line) { if (!moduleM) return complain("class w/o module"); descM=nowM=classM=focM(moduleM->classes,stripws(arg),line); methodM=0; report("class "+arg); }, - "submodule":lambda(string arg,int line) + "submodule":lambda(string arg,string line) { if (!moduleM) return complain("submodule w/o module"); classM=descM=nowM=moduleM=focM(moduleM->modules,stripws(arg),line); methodM=0; if (!nowM->classes) nowM->classes=([]); if (!nowM->modules) nowM->modules=([]); report("submodule "+arg); }, - "method":lambda(string arg,int line) + "method":lambda(string arg,string line) { if (!classM) return complain("method w/o class"); if (!nowM || methodM!=nowM || methodM->desc || methodM->args || descM==methodM) { if (!classM->methods) classM->methods=({}); classM->methods+=({methodM=nowM=(["decl":({}),"_line":line])}); } methodM->decl+=({stripws(arg)}); descM=0; }, - "arg":lambda(string arg,int line) + "arg":lambda(string arg,string line) { if (!methodM) return complain("arg w/o method"); if (!methodM->args) methodM->args=({}); methodM->args+=({argM=nowM=(["args":({}),"_line":line])}); argM->args+=({arg}); descM=argM; }, - "note":lambda(string arg,int line) + "note":lambda(string arg,string line) { if (!lower_nowM()) return complain("note w/o method, class or module"); descM=nowM->note||(nowM->note=(["_line":line])); }, - "bugs":lambda(string arg,int line) + "bugs":lambda(string arg,string line) { if (!lower_nowM()) return complain("bugs w/o method, class or module"); descM=nowM->bugs||(nowM->bugs=(["_line":line])); }, - "see":lambda(string arg,int line) + "see":lambda(string arg,string line) { if (arg[0..4]!="also:") return complain("see w/o 'also:'\n"); @@ -180,7 +182,7 @@ string synopsis_to_html(string s) string htmlify(string s) { #define HTMLIFY(S) \ - (replace((S),({"->","&","\240"}),({"->","&"," "}))) + (replace((S),({"<",">","&","\240"}),({"<",">","&"," "}))) string t="",u,v; while (sscanf(s,"%s<%s>%s",u,v,s)==3) @@ -188,7 +190,8 @@ string htmlify(string s) return t+HTMLIFY(s); } -#define linkify(S) (replace((S),({"->","()"}),({".",""}))) +#define linkify(S) \ + ("\""+replace((S),({"->","()","<"}),({".","","<"}))+"\"") string make_nice_reference(string what,string prefix) { @@ -210,7 +213,7 @@ string make_nice_reference(string what,string prefix) else q=what; - return "<link to="+linkify(q)+">"+what+"</link>"; + return "<link to="+linkify(q)+">"+htmlify(what)+"</link>"; } string fixdesc(string s,string prefix,string where) @@ -222,22 +225,22 @@ string fixdesc(string s,string prefix,string where) t=s; s=""; while (sscanf(t,"%s<ref>%s</ref>%s",t,u,v)==3) { - s+=t+make_nice_reference(u,prefix); + s+=htmlify(t)+make_nice_reference(u,prefix); t=v; } - s+=t; + s+=htmlify(t); t=s; s=""; while (sscanf(t,"%s<illustration%s>%s</illustration>%s",t,q,u,v)==4) { - s+=htmlify(replace(t,"\n\n","\n\n<p>")); + s+=replace(t,"\n\n","\n\n<p>"); s+="<illustration __from__='"+where+"' src=lena.gif"+q+">\n" +replace(u,"lena()","src")+"</illustration>"; t=v; } - s+=htmlify(replace(t,"\n\n","\n\n<p>")); + s+=replace(t,"\n\n","\n\n<p>"); return s; } @@ -280,8 +283,9 @@ void document(string enttype, verbose("mkwmml: "+name+" : "+names*","+"\n"); - f->write("\n<"+enttype+" name="+ - replace(names*",", ">", ">")); + f->write("\n<!-- " + huh->_line + " -->\n"); + f->write("<"+enttype+" name="+ + linkify(names*",")); if (manpage_suffix[replace(name,"->",".")]) f->write(" mansuffix="+manpage_suffix[replace(name,"->",".")]); @@ -365,7 +369,7 @@ void document(string enttype, if (huh["see also"]) { f->write("<man_see exp>\n"); - f->write(huh["see also"]*", "); + f->write(htmlify(huh["see also"]*", ")); f->write("</man_see>\n\n"); } @@ -453,7 +457,7 @@ int main(int ac,string *files) if (sizeof(files) && files[0]=="--nonverbose") files=files[1..],verbose=lambda(){}; - + stderr->write("mkwmml: reading files...\n"); for (;;)