diff --git a/src/post_modules/GTK/build_pgtk.pike b/src/post_modules/GTK/build_pgtk.pike index f49a3c83278b7cf2300fdcad1bde1001772ee3f8..6e10e069370da2e231ef90f58abebd6616240932 100755 --- a/src/post_modules/GTK/build_pgtk.pike +++ b/src/post_modules/GTK/build_pgtk.pike @@ -409,6 +409,130 @@ int fnamesfun( string a, string b ) classname(String.capitalize(lower_case(b)))); } +string wmml_section( string w, mapping data ) +{ + string wmml; + if( w != "global" ) + { + wmml = ( + "<anchor name=\""+classname(w)+"\">\n" + "<section name=\""+classname(w)+"\" title=\""+classname(w)+"\">\n" + "<class name=\""+classname(w)+"\" title=\" \">\n" + ); + } else { + wmml="<section name=\"Toplevel functions\" title=\"Toplevel functions\">\n"; + } + + + //"<class name=\""+classname(w)+"\" title=\""+classname(w)+ + // "\">\n"); + + int global; + + if(w == "global") + global = 1; + + wmml += (docs[w]||""); + if(!docs[w]) + werror(lines[ w ]+ + ": Warning: No documentation for class\n"); + + if( data["inherit"] ) + { + wmml += "<p>Inherits <ref to=\""+classname( data["inherit"] )+"\"><br>"; + } + + foreach(sort(indices(struct)), string a) + if(struct[a]["inherit"] == w) + wmml += ("Inherited by <ref to="+classname( a )+"><br>"); + + if( data->create ) + { + string a = true_types[w+"create"][1]; + if( (a-" ") == "void" ) + a = ""; + if( warn->noargs ) + if(strlen(a) && !named[ w + "create" ] ) + werror(lines[ w + "create" ]+": Warning: Arguments not named\n"); + wmml += "<method name=\""+classname(w)+"\">"; + wmml += "<man_syntax>"; + wmml += classname( w )+" "+classname( w )+ + "( "+replace( a, ",", ", ")+");<br>"; + wmml += "</man_syntax>"; + wmml += "<man_description>"+docs[w+"create"]+"</man_description></method>"; + + if(!docs[w+"create"]) + werror(lines[ w + "create" ]+ + ": Warning: No documentation for constructor\n"); + } + foreach( sort(indices(data)-({"create","inherit","destroy"})), string fun ) + { + string a = true_types[w+fun][1], + b = true_types[w+fun][0]; + if( (a-" ") == "void" ) + a = ""; + if( warn->noargs ) + if(strlen(a) && !named[ w + fun ] ) + werror(lines[w+fun]+": Warning: Arguments not named\n"); + if(!docs[w+fun] || !strlen(docs[w+fun])) + { + if( warn->nodocs ) + werror(lines[ w + fun ]+ + ": Warning: No documentation for "+fun+"\n"); + + } else if( warn->cstyle ) { + if( search(docs[w+fun], "GTK_") != -1) + if(search( docs[w+fun], "C-") == -1) + werror(lines[ w + fun ]+ + ": Warning: Possible C-style GTK constant name\n"); + if( search(docs[w+fun], "gtk_") != -1) + if(search( docs[w+fun], "C-") == -1) + werror(lines[ w + fun ]+ + ": Warning: Possible C-style GTK function name\n"); + } + wmml += ("\n\n<method name="+fun+" title=\"\">\n<man_syntax>\n "+ + "<b>"+b+" "+(global?"GTK.":"")+fun+"( "+ + replace( a, ",",", ")+" );</b>" + "\n</man_syntax>\n" + + "<man_description>\n"+docs[w+fun]+"\n</man_description>\n" + "</method>\n"); + } + if( w != "global" ) + wmml += "</class></section></anchor>"; + else + wmml += "</section>"; + return wmml ; +} + +string rec_make_wmml_tree( array plane, mapping t ) +{ + string wmml="\n<ul>"; + foreach(sort(plane), string n) + { + wmml += ("<li><ref to=\""+classname(n)+"\">"); + if(t[n]) + wmml += rec_make_wmml_tree( sort(t[n]), t ); + } + return wmml+"</ul>\n"; +} + +void make_wmml_docs( array root_widgets, mapping inheriting ) +{ + string wmml="<anchor name=GTK><chapter title=\"GTK Reference\">"; + wmml += + "<section title=\"GTK Inheritance Tree\" name=tree>\n" + + rec_make_wmml_tree( root_widgets, inheriting ) + + "\n</section>"; + + wmml += wmml_section( "global", struct->global ); + + array in_order = indices(struct); + sort( map(map( in_order, classname ),lower_case), in_order ); + foreach(in_order, string s) + wmml += wmml_section( s, struct[s] ); + Stdio.write_file( "wmml/gtk_reference.wmml", wmml+"</chapter></anchor>" ); +} + int do_docs; array (string) sort_dependencies( array bunch, mapping extra ) { @@ -416,13 +540,22 @@ array (string) sort_dependencies( array bunch, mapping extra ) foreach(bunch, string s) { if(inheriting[extra[s]["inherit"]]) - inheriting[extra[s]["inherit"]]+=({ s }); + inheriting[extra[s]["inherit"]] += ({ s }); else - inheriting[extra[s]["inherit"]]=({ s }); + inheriting[extra[s]["inherit"]] = ({ s }); } array (string) result = sort(inheriting[0]); - if(do_docs) + if( mkwmml ) + { + array roots= + indices(inheriting)- + `+(({}),@values(inheriting));; + foreach( roots, mixed q ) + make_wmml_docs( inheriting[q], inheriting ); + } + + if(do_docs && !mkwmml) { multiset roots= mkmultiset(indices(inheriting))-mkmultiset(`+(@values(inheriting)));; @@ -507,19 +640,18 @@ string make_example_image(string from, int top) object mei; if(!mei) mei = (object)("make_example_image.pike"); - if(file_stat( "docs/"+mei->file_name(from))) - return mei->tags(from); + mei->wmml = mkwmml; + if(file_stat( (mkwmml?"wmml/gtkimg":"docs")+"/"+mei->file_name(from))) + return mei->tags( from ); - if(!PIKE) + if(!PIKE) find_pike(); string res=Process.popen(PIKE+" "+dirname(__FILE__)+ "/make_example_image.pike '"+from+"'"+ - (top?" TOP":"")); + (top?" TOP":" POT") + (mkwmml?" WMML":" HTML")); if(!strlen(res)) - { werror("Failed to make example image from '"+from+"'\n"); - } return res; } @@ -607,21 +739,34 @@ string build_cursor( string a ) sscanf( a, "GDK.%s", a ); num = master()->resolv("GDK")[a]; - return "<tr bgcolor="+(odd++%2?"#f6e0d0":"#faebd7")+ - "><td><font color=black>GDK."+a+"</font></td>" - "<td><img src=cursor_"+num+".gif></td>" - "<td><img src=cursor_"+num+"_inv.gif></td>" - "<td><img src=cursor_"+num+"_red.gif></td>" - "<td><img src=cursor_"+num+"_red_inv.gif></td>" - "<td><img src=cursor_"+num+"_green.gif></td>" - "<td><img src=cursor_"+num+"_green_inv.gif></td>" - "<td><img src=cursor_"+num+"_blue.gif></td>" - "<td><img src=cursor_"+num+"_blue_inv.gif></td>" - "</tr>"; + if( mkwmml ) + return "<tr><td>GDK."+a+"</td>" + "<td><img src=gtkimg/cursor_"+num+".gif></td>" + "<td><img src=gtkimg/cursor_"+num+"_inv.gif></td>" + "<td><img src=gtkimg/cursor_"+num+"_red.gif></td>" + "<td><img src=gtkimg/cursor_"+num+"_red_inv.gif></td>" + "<td><img src=gtkimg/cursor_"+num+"_green.gif></td>" + "<td><img src=gtkimg/cursor_"+num+"_green_inv.gif></td>" + "<td><img src=gtkimg/cursor_"+num+"_blue.gif></td>" + "<td><img src=gtkimg/cursor_"+num+"_blue_inv.gif></td>" + "</tr>"; + else + return "<tr bgcolor="+(odd++%2?"#f6e0d0":"#faebd7")+ + "><td><font color=black>GDK."+a+"</font></td>" + "<td><img src=cursor_"+num+".gif></td>" + "<td><img src=cursor_"+num+"_inv.gif></td>" + "<td><img src=cursor_"+num+"_red.gif></td>" + "<td><img src=cursor_"+num+"_red_inv.gif></td>" + "<td><img src=cursor_"+num+"_green.gif></td>" + "<td><img src=cursor_"+num+"_green_inv.gif></td>" + "<td><img src=cursor_"+num+"_blue.gif></td>" + "<td><img src=cursor_"+num+"_blue_inv.gif></td>" + "</tr>"; } string dir; +int mkwmml; int main(int argc, array argv) { string progname = "global", extra_cpp=""; @@ -637,6 +782,11 @@ int main(int argc, array argv) warn[w] = 1; if( sscanf( w, "--no-warn-%s", w ) ) warn[w] = 0; + if( w=="--wmml" ) + { + mkwmml=1; + do_docs=1; + } } dir = argv[1]; diff --git a/src/post_modules/GTK/make_example_image.pike b/src/post_modules/GTK/make_example_image.pike index 0de47f425e7681395c16725dc33210afa2e5b977..8dfffa600bb6199f3137ca9f4972980abe4f04a5 100644 --- a/src/post_modules/GTK/make_example_image.pike +++ b/src/post_modules/GTK/make_example_image.pike @@ -74,12 +74,22 @@ string indent(string what, int|void limit) string tags(string source) { - return ("<table cellpadding=1 bgcolor=black><tr><td><table bgcolor=#e0e0e0 cellpadding=8 cellspacing=0 border=0><tr><td><img src="+file_name(source)+">" - "</td></td><tr><td><font size=-1><pre>"+ - replace(indent(source), ({"<",">","&"}), ({"<", ">", "&"}))+ - "</pre></font></td></tr></table></td></tr></table>"); + if( !wmml ) + { + return ("<table cellpadding=1 bgcolor=black><tr><td><table bgcolor=#e0e0e0 cellpadding=8 cellspacing=0 border=0><tr><td><img src="+file_name(source)+">" + "</td></td><tr><td><font size=-1><pre>"+ + replace(indent(source), ({"<",">","&"}), ({"<", ">", "&"}))+ + "</pre></font></td></tr></table></td></tr></table>"); + } else { + return ("<table framed=1><tr><td><img src=gtkimg/"+file_name(source)+">" + "</td></tr><tr><td><font size=-1>" + "<example language=pike>"+ + replace(indent(source), ({"<",">","&"}), ({"<", ">", "&"}))+ + "</example></font></td></tr></table>"); + } } +int wmml; void grab(object w) { object i = GTK.GdkImage(); @@ -91,13 +101,15 @@ void grab(object w) i->grab( w, 20,20, w->xsize()-40, w->ysize()-40); object i = Image.PNM.decode( i->get_pnm() ); - mkdir("docs"); - rm("docs/"+file_name(source)); + mkdir(wmml?"wmml/gtkimg":"docs"); + rm((wmml?"wmml/gtkimg/":"docs/")+file_name(source)); function fun; #if constant(Image.GIF.encode) - Stdio.write_file("docs/"+file_name(source), Image.GIF.encode(i)); + Stdio.write_file((wmml?"wmml/gtkimg/":"docs/")+ + file_name(source), Image.GIF.encode(i)); #else - Stdio.write_file("docs/"+file_name(source), i->togif_fs()); + Stdio.write_file((wmml?"wmml/gtkimg/":"docs/")+ + file_name(source), i->togif_fs()); #endif write(tags( source )); @@ -120,15 +132,19 @@ void show_recursively(object w) int main(int argc, array (string) argv) { object w; + werror("IMAGE ["+argv[1]+"]\n"); if(!write) write = Stdio.stdout->write; source = argv[1]; - if(file_stat( "docs/"+file_name(argv[1]))) + wmml = (argv[3] == "WMML"); + + if(file_stat( (wmml?"wmml/gtkimg/":"docs/")+file_name(argv[1]))) { write(tags(argv[1])); exit(0); } GTK.setup_gtk( "make_gtkexample", 1 ); - if(argc == 2) + + if(argv[2] != "TOP") { w = GTK.Window( GTK.WINDOW_TOPLEVEL ); w->set_title("Example image generation"); @@ -136,7 +152,7 @@ int main(int argc, array (string) argv) w->set_border_width(20); } else { w = get_widget_from( argv[1] ); - w->set_border_width(20); + w->set_border_width( 20 ); } show_recursively( w ); w->signal_connect( "event", got_event );