[Gd-chatter] r11237 - in trunk/libraries/network/koala: sources/examples/code-browser www/code-browser

hannes at gwydiondylan.org hannes at gwydiondylan.org
Wed Mar 14 02:06:58 CET 2007


Author: hannes
Date: Wed Mar 14 02:06:55 2007
New Revision: 11237

Added:
   trunk/libraries/network/koala/www/code-browser/results.dsp   (contents, props changed)
Modified:
   trunk/libraries/network/koala/sources/examples/code-browser/library.dylan
   trunk/libraries/network/koala/sources/examples/code-browser/main.dylan
   trunk/libraries/network/koala/www/code-browser/class.dsp
Log:
Job: minor
set up a global symbol table and provide a search interface on that

Modified: trunk/libraries/network/koala/sources/examples/code-browser/library.dylan
==============================================================================
--- trunk/libraries/network/koala/sources/examples/code-browser/library.dylan	(original)
+++ trunk/libraries/network/koala/sources/examples/code-browser/library.dylan	Wed Mar 14 02:06:55 2007
@@ -9,7 +9,7 @@
   use io,
     import: { format, format-out, streams };
   use system,
-    import: { locators, threads };
+    import: { locators, threads, file-system };
   use koala,
     import: { dsp };
 
@@ -19,6 +19,8 @@
   use source-control-manager;
 
   use dfmc-environment-projects;
+ 
+  use registry-projects;
 
   use source-records;
   use release-info;
@@ -37,6 +39,7 @@
   use format;
   use format-out;
   use streams;
+  use file-system;
   use dsp, exclude: { split };
   use regular-expressions, import: { regexp-replace };
   use source-records;
@@ -46,6 +49,7 @@
                application-filename,
                application-arguments };
   use release-info;
+  use registry-projects;
   use graphviz-renderer;
 //  use environment-deuce;
 end;

Modified: trunk/libraries/network/koala/sources/examples/code-browser/main.dylan
==============================================================================
--- trunk/libraries/network/koala/sources/examples/code-browser/main.dylan	(original)
+++ trunk/libraries/network/koala/sources/examples/code-browser/main.dylan	Wed Mar 14 02:06:55 2007
@@ -41,6 +41,32 @@
   end;
 end;
 
+define thread variable *results* = #f;
+
+define responder search-responder ("/search")
+ (request, response)
+  let search-string = get-query-value("search");
+  let results = element($all-symbols, search-string, default: #f);
+  dynamic-bind(*results* = results| #())
+    process-template(*result-page*, request, response);
+  end;
+end;
+define page result-page (<code-browser-page>)
+  (source: "results.dsp")
+end;
+
+define body tag results in code-browser
+ (page :: <code-browser-page>, response :: <response>, do-body :: <function>)
+ ()
+  for (result in *results*)
+    dynamic-bind(*project* = result.symbol-entry-project)
+      dynamic-bind(*environment-object* = result.symbol-entry-name)
+        do-body()
+      end;
+    end;
+  end;
+end;
+
 define page raw-source-page (<code-browser-page>)
   (source: "raw-source.dsp")
 end;
@@ -101,15 +127,19 @@
 define method do-canonical-link (symbol)
   let name-object = environment-object-home-name(*project*, symbol);
   if (name-object)
-    let module-object = name-namespace(*project*, name-object);
-    let module-name-object = environment-object-home-name(*project*, module-object);
-    let library-object = name-namespace(*project*, module-name-object);
-    concatenate("/symbol/", dylan-name(library-object),
-                "/", dylan-name(module-object),
-                "/", dylan-name(symbol));
+    do-canonical-link(name-object)
   end;
 end;
 
+define method do-canonical-link (name-object :: <name-object>)
+  let module-object = name-namespace(*project*, name-object);
+  let module-name-object = environment-object-home-name(*project*, module-object);
+  let library-object = name-namespace(*project*, module-name-object);
+  concatenate("/symbol/", dylan-name(library-object),
+              "/", dylan-name(module-name-object),
+              "/", dylan-name(name-object));
+end;
+
 define method do-canonical-link (slot :: <slot-object>)
   do-canonical-link(slot-type(*project*, slot))
 end;
@@ -288,8 +318,74 @@
   start-server(config-file: config-file);
 end;
 
+define function collect-projects () => (res :: <collection>)
+  let res = make(<stretchy-vector>);
+  local method collect-project (dir :: <pathname>, filename :: <string>, type :: <file-type>)
+          if (type == #"file" & filename ~= "Open-Source-License.txt")
+            add!(res, filename);
+          end;
+        end;
+  let regs = find-registries("x86", "win32");
+  let reg-paths = map(registry-location, regs);
+  for (reg-path in reg-paths)
+    if (file-exists?(reg-path))
+      do-directory(collect-project, reg-path);
+    end;
+  end;
+  res;
+end;
+
+define class <symbol-entry> (<object>)
+  constant slot symbol-entry-name, required-init-keyword: name:;
+  constant slot symbol-entry-project, required-init-keyword: project:;
+end;
+
+define constant $all-symbols = make(<string-table>);
+
+define method add-symbol(project, name-object :: <binding-name-object>)
+  *project* := project;
+  if (name-exported?(project, name-object))
+    let symbol-entry = make(<symbol-entry>, name: name-object, project: project);
+    let symbol-name = get-environment-object-primitive-name(project, name-object);
+    let symbol-entries = element($all-symbols, symbol-name, default: make(<stretchy-vector>));
+    $all-symbols[symbol-name] := add!(symbol-entries, symbol-entry);
+  end;
+end;
+
 begin
-  main()
+  populate-symbol-table();
+//  for (ele in key-sequence($all-symbols))
+//    format-out("%s %d\n", ele, $all-symbols[ele].size);
+//  end;
+  main();
+end;
+
+define function populate-symbol-table ()
+  let projs = collect-projects();
+  format-out("Found %d projects: %=\n", projs.size, projs);
+  for (project-name in projs)
+    block()
+      format-out("Project %s\n", project-name);
+      let project = find-project(project-name);
+      open-project-compiler-database(project, 
+                                     warning-callback: callback-handler,
+                                     error-handler: callback-handler);
+      parse-project-source(project);
+      format-out("%=\n", project);
+      do-namespace-names
+        (method(module-name :: <module-name-object>)
+           if (name-exported?(project, module-name))
+             do-namespace-names(curry(add-symbol, project), project, 
+                                name-value(project, module-name))
+           end
+         end,
+         project, project-library(project));
+    exception (e :: <condition>)
+      format-out("Received exception %= in project %s\n", e, project-name);
+    end;
+  end;
+  
+  //main()
 end;
 
 /*

Modified: trunk/libraries/network/koala/www/code-browser/class.dsp
==============================================================================
--- trunk/libraries/network/koala/www/code-browser/class.dsp	(original)
+++ trunk/libraries/network/koala/www/code-browser/class.dsp	Wed Mar 14 02:06:55 2007
@@ -5,6 +5,9 @@
   <title>Class: <code-browser:display-name/></title>
 </head>
 <body>
+  <form method="get" action="/search">
+   <input field type=string name=search></input>
+  </form>
   Superclasses:
   <ul>
   <code-browser:direct-superclasses>

Added: trunk/libraries/network/koala/www/code-browser/results.dsp
==============================================================================
--- (empty file)
+++ trunk/libraries/network/koala/www/code-browser/results.dsp	Wed Mar 14 02:06:55 2007
@@ -0,0 +1,14 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<%dsp:taglib name="code-browser"/>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+  <title>Results for search query</title>
+</head>
+<body>
+  <ul>
+  <code-browser:results>
+    <li><a href="<code-browser:canonical-link/>"><code-browser:display-name/></a></li>
+  </code-browser:results>
+  </ul>
+</body>
+</html>



More information about the chatter mailing list