[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