[Python-checkins] r66578 - in doctools/trunk/sphinx: search.py static/searchtools.js
georg.brandl
python-checkins at python.org
Wed Sep 24 11:31:46 CEST 2008
Author: georg.brandl
Date: Wed Sep 24 11:31:46 2008
New Revision: 66578
Log:
More compression: group objects by prefix.
Modified:
doctools/trunk/sphinx/search.py
doctools/trunk/sphinx/static/searchtools.js
Modified: doctools/trunk/sphinx/search.py
==============================================================================
--- doctools/trunk/sphinx/search.py (original)
+++ doctools/trunk/sphinx/search.py Wed Sep 24 11:31:46 2008
@@ -15,7 +15,7 @@
from docutils.nodes import Text, NodeVisitor
from sphinx.util.stemmer import PorterStemmer
-from sphinx.util import json
+from sphinx.util import json, rpartition
word_re = re.compile(r'\w+(?u)')
@@ -107,7 +107,7 @@
# stemmed word -> set(filenames)
self._mapping = {}
# desctypes -> index
- self._desctypes = {'module': 0}
+ self._desctypes = {}
def load(self, stream, format):
"""Reconstruct from frozen data."""
@@ -129,19 +129,24 @@
format = self.formats[format]
format.dump(self.freeze(), stream)
- def get_keyword_map(self):
- """Return a dict of all keywords."""
+ def get_modules(self, fn2index):
+ rv = {}
+ for name, (doc, _, _, _) in self.env.modules.iteritems():
+ rv[name] = fn2index[doc]
+ return rv
+
+ def get_descrefs(self, fn2index):
rv = {}
dt = self._desctypes
- for kw, (ref, _, _, _) in self.env.modules.iteritems():
- rv[kw] = (ref, 0)
- for kw, (ref, ref_type) in self.env.descrefs.iteritems():
+ for fullname, (doc, desctype) in self.env.descrefs.iteritems():
+ prefix, name = rpartition(fullname, '.')
+ pdict = rv.setdefault(prefix, {})
try:
- i = dt[ref_type]
+ i = dt[desctype]
except KeyError:
i = len(dt)
- dt[ref_type] = i
- rv[kw] = (ref, i)
+ dt[desctype] = i
+ pdict[name] = (fn2index[doc], i)
return rv
def freeze(self):
@@ -154,8 +159,8 @@
titles=titles,
terms=dict((k, [fn2index[fn] for fn in v])
for (k, v) in self._mapping.iteritems()),
- keywords=dict((k, (fn2index[v[0]],) + v[1:]) for k, v in
- self.get_keyword_map().iteritems()),
+ descrefs=self.get_descrefs(fn2index),
+ modules=self.get_modules(fn2index),
desctypes=dict((v, k) for (k, v) in self._desctypes.items()),
)
Modified: doctools/trunk/sphinx/static/searchtools.js
==============================================================================
--- doctools/trunk/sphinx/static/searchtools.js (original)
+++ doctools/trunk/sphinx/static/searchtools.js Wed Sep 24 11:31:46 2008
@@ -294,7 +294,7 @@
var excluded = [];
var hlwords = [];
var tmp = query.split(/\s+/);
- var keyword = (tmp.length == 1) ? tmp[0].toLowerCase() : null;
+ var object = (tmp.length == 1) ? tmp[0].toLowerCase() : null;
for (var i = 0; i < tmp.length; i++) {
// stem the word
var word = stemmer.stemWord(tmp[i]).toLowerCase();
@@ -321,28 +321,38 @@
var filenames = this._index.filenames;
var titles = this._index.titles;
var words = this._index.terms;
- var keywords = this._index.keywords;
+ var descrefs = this._index.descrefs;
+ var modules = this._index.modules;
var desctypes = this._index.desctypes;
var fileMap = {};
var files = null;
- var keywordResults = [];
+ var objectResults = [];
var regularResults = [];
$('#search-progress').empty();
- // lookup as keyword
- if (keyword != null) {
- for (var kw in keywords) {
- if (kw.toLowerCase().indexOf(keyword, kw.lastIndexOf('.')) > -1) {
- match = keywords[kw];
- descr = desctypes[match[1]] + _(', in ') + titles[match[0]];
- anchor = '#' + (match[1] == 0 ? 'module-' + kw : kw);
- keywordResults.push([filenames[match[0]], kw, anchor, descr]);
+ // lookup as object
+ if (object != null) {
+ for (var module in modules) {
+ if (module.indexOf(object) > -1) {
+ fn = modules[module];
+ descr = _('module, in ') + titles[fn];
+ objectResults.push([filenames[fn], module, '#module-'+module, descr]);
+ }
+ }
+ for (var prefix in descrefs) {
+ for (var name in descrefs[prefix]) {
+ if (name.toLowerCase().indexOf(object) > -1) {
+ match = descrefs[prefix][name];
+ fullname = prefix + '.' + name;
+ descr = desctypes[match[1]] + _(', in ') + titles[match[0]];
+ objectResults.push([filenames[match[0]], fullname, '#'+fullname, descr]);
+ }
}
}
}
- // sort descending by keyword
- keywordResults.sort(function(a, b) {
+ // sort results descending
+ objectResults.sort(function(a, b) {
return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0);
});
@@ -398,7 +408,7 @@
});
// combine both
- var results = regularResults.concat(keywordResults);
+ var results = regularResults.concat(objectResults);
// print the results
var resultCount = results.length;
More information about the Python-checkins
mailing list