improve performance of DocPanel by returning tokens (not source) from Ox.doc and making Ox.SyntaxHighlighter accept tokens

This commit is contained in:
rolux 2012-05-26 13:11:06 +02:00
parent 6b12776ed9
commit d9c69a0975
2 changed files with 10 additions and 9 deletions

View file

@ -13,7 +13,7 @@ Ox.SyntaxHighlighter <f:Ox.Element> Syntax Highlighter
showLineNumbers <b|false> If true, show line numbers
showWhitespace <b|false> If true, show whitespace
showTabs <b|false> If true, show tabs
source <s|''> JavaScript source
source <s|[o]|''> JavaScript source, or array of tokens
stripComments <b|false> If true, strip comments
tabSize <n|4> Number of spaces per tab
self <o> Shared private variable
@ -52,10 +52,9 @@ Ox.SyntaxHighlighter = function(options, self) {
'<span class="OxTab">\u2192</span>' : ''
) + Ox.repeat('&nbsp;', self.options.tabSize - self.options.showTabs),
whitespace = self.options.showWhitespace ? '\u00B7' : '&nbsp;';
self.options.source = self.options.source
.replace(/\r\n/g, '\n')
.replace(/\r/g, '\n');
tokens = Ox.tokenize(self.options.source);
tokens = Ox.isArray(self.options.source)
? self.options.source
: Ox.tokenize(self.options.source);
tokens.forEach(function(token, i) {
var classNames,
type = token.type == 'identifier'

View file

@ -18,7 +18,11 @@ Ox.doc <f> Generates documentation for annotated JavaScript
<code>"event"</code>, <code>"function"</code>
or <code>"object"</code>.
section <s|u> Section in the file
source <s> Source code
source <[o]> Source code (array of tokens)
column <n> Column
line <n> Line
type <s> Type (see Ox.tokenize for a list of types)
value <s> Value
summary <s> One-line summary
usage <[o]> Usage (array of doc objects)
Present if the <code>type</code> of the item is
@ -156,9 +160,7 @@ Ox.doc = (function() {
if (/^[A-Z]/.test(item.name)) {
// main item
// include leading whitespace
item.source = parseTokens(tokens[i]).map(function(token) {
return token.value;
}).join('');
item.source = parseTokens(tokens[i]);
item.line = source.slice(0, item.source[0].offset)
.split('\n').length;
items.push(item);