[Python-checkins] r66584 - in doctools/trunk/sphinx: search.py static/searchtools.js util/json.py

georg.brandl python-checkins at python.org
Wed Sep 24 13:51:03 CEST 2008


Author: georg.brandl
Date: Wed Sep 24 13:51:02 2008
New Revision: 66584
Log:
A fix in the JS dumper and further compression by omitting redundant braces.
Modified:
 doctools/trunk/sphinx/search.py
 doctools/trunk/sphinx/static/searchtools.js
 doctools/trunk/sphinx/util/json.py
Modified: doctools/trunk/sphinx/search.py
==============================================================================
--- doctools/trunk/sphinx/search.py	(original)
+++ doctools/trunk/sphinx/search.py	Wed Sep 24 13:51:02 2008
@@ -32,6 +32,7 @@
 was will with
 """.split())
 
+
 class _JavaScriptIndex(object):
 """
 The search index as javascript file that calls a function
@@ -44,8 +45,7 @@
 SUFFIX = ')'
 
 def dumps(self, data):
- return self.PREFIX + json.dumps(data, separators=(',', ':')) \
- + self.SUFFIX
+ return self.PREFIX + json.dumps(data) + self.SUFFIX
 
 def loads(self, s):
 data = s[len(self.PREFIX):-len(self.SUFFIX)]
@@ -119,8 +119,12 @@
 raise ValueError('old format')
 index2fn = frozen['filenames']
 self._titles = dict(zip(index2fn, frozen['titles']))
- self._mapping = dict((k, set(index2fn[i] for i in v))
- for (k, v) in frozen['terms'].iteritems())
+ self._mapping = {}
+ for k, v in frozen['terms'].iteritems():
+ if isinstance(v, int):
+ self._mapping[k] = set([index2fn[v]])
+ else:
+ self._mapping[k] = set(index2fn[i] for i in v)
 # no need to load keywords/desctypes
 
 def dump(self, stream, format):
@@ -149,6 +153,16 @@
 pdict[name] = (fn2index[doc], i)
 return rv
 
+ def get_terms(self, fn2index):
+ rv = {}
+ for k, v in self._mapping.iteritems():
+ if len(v) == 1:
+ fn, = v
+ rv[k] = fn2index[fn]
+ else:
+ rv[k] = [fn2index[fn] for fn in v]
+ return rv
+
 def freeze(self):
 """Create a usable data structure for serializing."""
 filenames = self._titles.keys()
@@ -157,8 +171,7 @@
 return dict(
 filenames=filenames,
 titles=titles,
- terms=dict((k, [fn2index[fn] for fn in v])
- for (k, v) in self._mapping.iteritems()),
+ terms=self.get_terms(fn2index),
 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 13:51:02 2008
@@ -287,12 +287,12 @@
 },
 
 query : function(query) {
- // stem the searchwords and add them to the
+ // stem the searchterms and add them to the
 // correct list
 var stemmer = new PorterStemmer();
- var searchwords = [];
+ var searchterms = [];
 var excluded = [];
- var hlwords = [];
+ var hlterms = [];
 var tmp = query.split(/\s+/);
 var object = (tmp.length == 1) ? tmp[0].toLowerCase() : null;
 for (var i = 0; i < tmp.length; i++) {
@@ -304,23 +304,23 @@
 word = word.substr(1);
 }
 else {
- var toAppend = searchwords;
- hlwords.push(tmp[i].toLowerCase());
+ var toAppend = searchterms;
+ hlterms.push(tmp[i].toLowerCase());
 }
 // only add if not already in the list
 if (!$.contains(toAppend, word))
 toAppend.push(word);
 };
- var highlightstring = '?highlight=' + $.urlencode(hlwords.join(" "));
+ var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" "));
 
 console.debug('SEARCH: searching for:');
- console.info('required: ', searchwords);
+ console.info('required: ', searchterms);
 console.info('excluded: ', excluded);
 
 // prepare search
 var filenames = this._index.filenames;
 var titles = this._index.titles;
- var words = this._index.terms;
+ var terms = this._index.terms;
 var descrefs = this._index.descrefs;
 var modules = this._index.modules;
 var desctypes = this._index.desctypes;
@@ -343,7 +343,7 @@
 for (var name in descrefs[prefix]) {
 if (name.toLowerCase().indexOf(object) > -1) {
 match = descrefs[prefix][name];
- fullname = prefix + '.' + name;
+ fullname = (prefix ? prefix + '.' : '') + name;
 descr = desctypes[match[1]] + _(', in ') + titles[match[0]];
 objectResults.push([filenames[match[0]], fullname, '#'+fullname, descr]);
 }
@@ -357,12 +357,15 @@
 });
 
 
- // perform the search on the required words
- for (var i = 0; i < searchwords.length; i++) {
- var word = searchwords[i];
+ // perform the search on the required terms
+ for (var i = 0; i < searchterms.length; i++) {
+ var word = searchterms[i];
 // no match but word was a required one
- if ((files = words[word]) == null)
+ if ((files = terms[word]) == null)
 break;
+ if (files.length == undefined) {
+ files = [files];
+ }
 // create the mapping
 for (var j = 0; j < files.length; j++) {
 var file = files[j];
@@ -373,18 +376,19 @@
 }
 }
 
- // now check if the files don't contain excluded words
+ // now check if the files don't contain excluded terms
 for (var file in fileMap) {
 var valid = true;
 
 // check if all requirements are matched
- if (fileMap[file].length != searchwords.length)
+ if (fileMap[file].length != searchterms.length)
 continue;
 
- // ensure that none of the excluded words is in the
+ // ensure that none of the excluded terms is in the
 // search result.
 for (var i = 0; i < excluded.length; i++) {
- if ($.contains(words[excluded[i]] || [], file)) {
+ if (terms[excluded[i]] == file ||
+ $.contains(terms[excluded[i]] || [], file)) {
 valid = false;
 break;
 }
@@ -398,7 +402,7 @@
 
 // delete unused variables in order to not waste
 // memory until list is retrieved completely
- delete filenames, titles, words;
+ delete filenames, titles, terms;
 
 // now sort the regular results descending by title
 regularResults.sort(function(a, b) {
@@ -429,7 +433,7 @@
 });
 } else {
 $.get('_sources/' + item[0] + '.txt', function(data) {
- listItem.append($.makeSearchSummary(data, searchwords, hlwords));
+ listItem.append($.makeSearchSummary(data, searchterms, hlterms));
 Search.output.append(listItem);
 listItem.slideDown(5, function() {
 displayNextItem();
Modified: doctools/trunk/sphinx/util/json.py
==============================================================================
--- doctools/trunk/sphinx/util/json.py	(original)
+++ doctools/trunk/sphinx/util/json.py	Wed Sep 24 13:51:02 2008
@@ -20,6 +20,7 @@
 _str_re = re.compile(r'"(\\\\|\\"|[^"])*"')
 _int_re = re.compile(r'\d+')
 _name_re = re.compile(r'[a-zA-Z]\w*')
+_nameonly_re = re.compile(r'[a-zA-Z]\w*$')
 
 # escape ,円 ", control characters and everything outside ASCII
 ESCAPE_ASCII = re.compile(r'([\\"]|[^\ -~])')
@@ -78,7 +79,7 @@
 if key:
 if not isinstance(obj, basestring):
 obj = str(obj)
- if _name_re.match(obj) and obj not in reswords:
+ if _nameonly_re.match(obj) and obj not in reswords:
 return obj # return it as a bare word
 else:
 return encode_string(obj)


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /