Merge pull request #1954 from tschaub/olx
Use externs/olx.js instead of objectliterals.jsdoc.
This commit is contained in:
+2
-1
@@ -13,7 +13,8 @@
|
|||||||
"src/googx/dom/fullscreen.js"
|
"src/googx/dom/fullscreen.js"
|
||||||
],
|
],
|
||||||
"include": [
|
"include": [
|
||||||
"src"
|
"src",
|
||||||
|
"externs/olx.js"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"plugins": [
|
"plugins": [
|
||||||
|
|||||||
+14
-12
@@ -58,18 +58,8 @@ exports.handlers = {
|
|||||||
|
|
||||||
newDoclet: function(e) {
|
newDoclet: function(e) {
|
||||||
var i, ii, j, jj;
|
var i, ii, j, jj;
|
||||||
if (e.doclet.meta.filename == "objectliterals.jsdoc" && e.doclet.properties) {
|
if (e.doclet.meta.filename == "olx.js" && e.doclet.longname != 'olx') {
|
||||||
for (i = 0, ii = e.doclet.properties.length; i < ii; ++i) {
|
api.push(e.doclet.longname);
|
||||||
if (e.doclet.properties[i].type && e.doclet.properties[i].type.names) {
|
|
||||||
for (j = 0, jj = e.doclet.properties[i].type.names.length; j < jj; ++j) {
|
|
||||||
if (e.doclet.properties[i].type.names[j].indexOf('ol') == 0) {
|
|
||||||
if (api.indexOf(e.doclet.properties[i].type.names[j]) === -1) {
|
|
||||||
api.push(e.doclet.properties[i].type.names[j]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (api.indexOf(e.doclet.longname) > -1) {
|
if (api.indexOf(e.doclet.longname) > -1) {
|
||||||
var names, name;
|
var names, name;
|
||||||
@@ -102,6 +92,18 @@ exports.handlers = {
|
|||||||
parseComplete: function(e) {
|
parseComplete: function(e) {
|
||||||
for (var j = e.doclets.length - 1; j >= 0; --j) {
|
for (var j = e.doclets.length - 1; j >= 0; --j) {
|
||||||
var doclet = e.doclets[j];
|
var doclet = e.doclets[j];
|
||||||
|
if (doclet.meta.filename == 'olx.js' && doclet.kind == 'typedef') {
|
||||||
|
for (var i = e.doclets.length - 1; i >= 0; --i) {
|
||||||
|
var propertyDoclet = e.doclets[i];
|
||||||
|
if (propertyDoclet.memberof == doclet.longname) {
|
||||||
|
if (!doclet.properties) {
|
||||||
|
doclet.properties = [];
|
||||||
|
}
|
||||||
|
doclet.properties.unshift(propertyDoclet);
|
||||||
|
e.doclets.splice(i, 1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if (doclet.kind == 'namespace' || doclet.kind == 'event' || doclet.fires) {
|
if (doclet.kind == 'namespace' || doclet.kind == 'event' || doclet.fires) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,66 +22,6 @@ class Exportable(object):
|
|||||||
def export(self):
|
def export(self):
|
||||||
return ''
|
return ''
|
||||||
|
|
||||||
def extern(self):
|
|
||||||
return ''
|
|
||||||
|
|
||||||
def typedef(self):
|
|
||||||
return ''
|
|
||||||
|
|
||||||
|
|
||||||
class ObjectLiteral(Exportable):
|
|
||||||
|
|
||||||
def __init__(self, name, objects):
|
|
||||||
Exportable.__init__(self, name)
|
|
||||||
self.prop_types = {}
|
|
||||||
self.objects = objects
|
|
||||||
|
|
||||||
__repr__ = simplerepr
|
|
||||||
|
|
||||||
def extern(self):
|
|
||||||
lines = []
|
|
||||||
lines.append('\n\n\n')
|
|
||||||
lines.append('/**\n')
|
|
||||||
lines.append(' * @interface\n')
|
|
||||||
lines.append(' */\n')
|
|
||||||
lines.append('%s = function() {};\n' % (self.extern_name(),))
|
|
||||||
for prop in sorted(self.prop_types.keys()):
|
|
||||||
lines.append('\n\n')
|
|
||||||
lines.append('/**\n')
|
|
||||||
prop_types = self.prop_types[prop].split('|')
|
|
||||||
for i, t in enumerate(prop_types):
|
|
||||||
if t in self.objects and isinstance(self.objects[t], ObjectLiteral):
|
|
||||||
prop_types[i] = self.objects[t].extern_name()
|
|
||||||
prop_types = '|'.join(prop_types)
|
|
||||||
lines.append(' * @type {%s}\n' % (prop_types,))
|
|
||||||
lines.append(' */\n')
|
|
||||||
lines.append('%s.prototype.%s;\n' % (self.extern_name(), prop))
|
|
||||||
return ''.join(lines)
|
|
||||||
|
|
||||||
def extern_name(self):
|
|
||||||
return re.sub(r'(olx\.\S+)', r'\1Extern', self.name)
|
|
||||||
|
|
||||||
def extern_namespace(self):
|
|
||||||
return '.'.join(self.extern_name().split('.')[:-1]) or None
|
|
||||||
|
|
||||||
def provide(self):
|
|
||||||
return 'goog.provide(\'%s\');\n' % (self.name,)
|
|
||||||
|
|
||||||
def typedef(self):
|
|
||||||
lines = []
|
|
||||||
lines.append('\n\n')
|
|
||||||
lines.append('/**\n')
|
|
||||||
for i, prop in enumerate(sorted(self.prop_types.keys())):
|
|
||||||
prefix = ' * @typedef {{' if i == 0 else ' * '
|
|
||||||
suffix = '}}' if i == len(self.prop_types) - 1 else ','
|
|
||||||
type = self.prop_types[prop]
|
|
||||||
if '|' in type:
|
|
||||||
type = '(%s)' % (type,)
|
|
||||||
lines.append('%s%s: %s%s\n' % (prefix, prop, type, suffix))
|
|
||||||
lines.append(' */\n')
|
|
||||||
lines.append('%s;\n' % (self.name,))
|
|
||||||
return ''.join(lines)
|
|
||||||
|
|
||||||
|
|
||||||
class Symbol(Exportable):
|
class Symbol(Exportable):
|
||||||
|
|
||||||
@@ -104,50 +44,15 @@ def main(argv):
|
|||||||
|
|
||||||
option_parser = OptionParser()
|
option_parser = OptionParser()
|
||||||
option_parser.add_option('--exports', action='store_true')
|
option_parser.add_option('--exports', action='store_true')
|
||||||
option_parser.add_option('--externs', action='store_true')
|
|
||||||
option_parser.add_option('--typedef', action='store_true')
|
|
||||||
options, args = option_parser.parse_args(argv[1:])
|
options, args = option_parser.parse_args(argv[1:])
|
||||||
|
|
||||||
objects = {}
|
objects = {}
|
||||||
requires = set()
|
requires = set()
|
||||||
for arg in args:
|
for arg in args:
|
||||||
in_comment = False
|
|
||||||
object_literal = None
|
|
||||||
for line in open(arg, 'rU'):
|
for line in open(arg, 'rU'):
|
||||||
line = line.strip()
|
line = line.strip()
|
||||||
if not line:
|
if not line:
|
||||||
continue
|
continue
|
||||||
if line == '/**':
|
|
||||||
assert not in_comment
|
|
||||||
in_comment = True
|
|
||||||
continue
|
|
||||||
if line == '*/':
|
|
||||||
assert in_comment
|
|
||||||
in_comment = False
|
|
||||||
object_literal = None
|
|
||||||
continue
|
|
||||||
if in_comment:
|
|
||||||
if not line.startswith('*'):
|
|
||||||
raise RuntimeError(line) # malformed comment
|
|
||||||
m = re.match(r'\*\s*@typedef\s*\{Object\}\s*(?P<name>\S+)', line)
|
|
||||||
if m:
|
|
||||||
assert object_literal is None
|
|
||||||
name = m.group('name')
|
|
||||||
if name in objects:
|
|
||||||
raise RuntimeError(line) # Name already defined
|
|
||||||
object_literal = ObjectLiteral(name, objects)
|
|
||||||
objects[name] = object_literal
|
|
||||||
continue
|
|
||||||
m = re.match(r'\*\s*@property\s*{(?P<type>.*?)}\s*(?P<prop>\S+)', line)
|
|
||||||
if m:
|
|
||||||
assert object_literal is not None
|
|
||||||
prop = m.group('prop')
|
|
||||||
if prop in object_literal.prop_types:
|
|
||||||
raise RuntimeError(line) # Duplicate property
|
|
||||||
type = m.group('type')
|
|
||||||
object_literal.prop_types[prop] = type
|
|
||||||
continue
|
|
||||||
continue
|
|
||||||
m = re.match(r'@exportProperty\s+(?P<prop>\S+)\Z', line)
|
m = re.match(r'@exportProperty\s+(?P<prop>\S+)\Z', line)
|
||||||
if m:
|
if m:
|
||||||
components = m.group('prop').split('.')
|
components = m.group('prop').split('.')
|
||||||
@@ -188,32 +93,5 @@ def main(argv):
|
|||||||
for obj in objects:
|
for obj in objects:
|
||||||
sys.stdout.write(obj.export())
|
sys.stdout.write(obj.export())
|
||||||
|
|
||||||
if options.externs:
|
|
||||||
object_literals = [obj for obj in objects if isinstance(obj, ObjectLiteral)]
|
|
||||||
sys.stdout.write('/**\n')
|
|
||||||
sys.stdout.write(' * @externs\n')
|
|
||||||
sys.stdout.write(' */\n')
|
|
||||||
namespaces = sorted(set(filter(None, (object_literal.extern_namespace() for object_literal in object_literals))))
|
|
||||||
for namespace in namespaces:
|
|
||||||
sys.stdout.write('\n\n')
|
|
||||||
sys.stdout.write('/**\n')
|
|
||||||
sys.stdout.write(' * @type {Object}\n')
|
|
||||||
sys.stdout.write(' */\n')
|
|
||||||
if '.' in namespace:
|
|
||||||
sys.stdout.write('%s = {};\n' % (namespace,))
|
|
||||||
else:
|
|
||||||
sys.stdout.write('var %s;\n' % (namespace,))
|
|
||||||
for object_literal in object_literals:
|
|
||||||
sys.stdout.write(object_literal.typedef())
|
|
||||||
sys.stdout.write(object_literal.extern())
|
|
||||||
|
|
||||||
if options.typedef:
|
|
||||||
object_literals = [obj for obj in objects if isinstance(obj, ObjectLiteral)]
|
|
||||||
for object_literal in object_literals:
|
|
||||||
sys.stdout.write(object_literal.provide())
|
|
||||||
for object_literal in object_literals:
|
|
||||||
sys.stdout.write(object_literal.typedef())
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
sys.exit(main(sys.argv))
|
sys.exit(main(sys.argv))
|
||||||
|
|||||||
@@ -90,9 +90,7 @@ EXPORTS = [path
|
|||||||
for path in ifind('src')
|
for path in ifind('src')
|
||||||
if path.endswith('.exports')]
|
if path.endswith('.exports')]
|
||||||
|
|
||||||
EXTERNAL_SRC = [
|
EXTERNAL_SRC = ['build/src/external/src/exports.js']
|
||||||
'build/src/external/externs/types.js',
|
|
||||||
'build/src/external/src/exports.js']
|
|
||||||
|
|
||||||
EXAMPLES = [path
|
EXAMPLES = [path
|
||||||
for path in ifind('examples')
|
for path in ifind('examples')
|
||||||
@@ -115,9 +113,7 @@ EXAMPLES_JSON = ['build/' + example.replace('.html', '.json')
|
|||||||
EXAMPLES_COMBINED = ['build/' + example.replace('.html', '.combined.js')
|
EXAMPLES_COMBINED = ['build/' + example.replace('.html', '.combined.js')
|
||||||
for example in EXAMPLES]
|
for example in EXAMPLES]
|
||||||
|
|
||||||
INTERNAL_SRC = [
|
INTERNAL_SRC = ['build/src/internal/src/requireall.js']
|
||||||
'build/src/internal/src/requireall.js',
|
|
||||||
'build/src/internal/src/types.js']
|
|
||||||
|
|
||||||
GLSL_SRC = [path
|
GLSL_SRC = [path
|
||||||
for path in ifind('src')
|
for path in ifind('src')
|
||||||
@@ -223,18 +219,9 @@ def build_ol_all_js(t):
|
|||||||
PLOVR_JAR, 'build', 'buildcfg/ol-all.json')
|
PLOVR_JAR, 'build', 'buildcfg/ol-all.json')
|
||||||
|
|
||||||
|
|
||||||
@target('build/src/external/externs/types.js', 'bin/generate-exports.py',
|
@target('build/src/external/src/exports.js', 'bin/generate-exports.py', EXPORTS)
|
||||||
'src/objectliterals.jsdoc')
|
|
||||||
def build_src_external_externs_types_js(t):
|
|
||||||
t.output('%(PYTHON)s', 'bin/generate-exports.py',
|
|
||||||
'--externs', 'src/objectliterals.jsdoc')
|
|
||||||
|
|
||||||
|
|
||||||
@target('build/src/external/src/exports.js', 'bin/generate-exports.py',
|
|
||||||
'src/objectliterals.jsdoc', EXPORTS)
|
|
||||||
def build_src_external_src_exports_js(t):
|
def build_src_external_src_exports_js(t):
|
||||||
t.output('%(PYTHON)s', 'bin/generate-exports.py',
|
t.output('%(PYTHON)s', 'bin/generate-exports.py', '--exports', EXPORTS)
|
||||||
'--exports', 'src/objectliterals.jsdoc', EXPORTS)
|
|
||||||
|
|
||||||
|
|
||||||
for glsl_src in GLSL_SRC:
|
for glsl_src in GLSL_SRC:
|
||||||
@@ -272,13 +259,6 @@ def build_test_requireall_js(t):
|
|||||||
_build_require_list(t.dependencies, t.name)
|
_build_require_list(t.dependencies, t.name)
|
||||||
|
|
||||||
|
|
||||||
@target('build/src/internal/src/types.js', 'bin/generate-exports.py',
|
|
||||||
'src/objectliterals.jsdoc')
|
|
||||||
def build_src_internal_types_js(t):
|
|
||||||
t.output('%(PYTHON)s', 'bin/generate-exports.py',
|
|
||||||
'--typedef', 'src/objectliterals.jsdoc')
|
|
||||||
|
|
||||||
|
|
||||||
virtual('build-examples', 'examples', 'build/examples/all.combined.js',
|
virtual('build-examples', 'examples', 'build/examples/all.combined.js',
|
||||||
EXAMPLES_COMBINED)
|
EXAMPLES_COMBINED)
|
||||||
|
|
||||||
@@ -318,7 +298,7 @@ def examples_star_json(name, match):
|
|||||||
'inherits': '../../buildcfg/base.json',
|
'inherits': '../../buildcfg/base.json',
|
||||||
'inputs': [
|
'inputs': [
|
||||||
'../examples/%(id)s.js' % match.groupdict(),
|
'../examples/%(id)s.js' % match.groupdict(),
|
||||||
'../build/src/internal/src/types.js',
|
'../externs/olx.js', # compiled with src for @typedef's
|
||||||
],
|
],
|
||||||
'externs': [
|
'externs': [
|
||||||
'//jquery-1.7.js',
|
'//jquery-1.7.js',
|
||||||
@@ -386,7 +366,7 @@ def build_lint_src_timestamp(t):
|
|||||||
def build_lint_generated_timestamp(t):
|
def build_lint_generated_timestamp(t):
|
||||||
limited_doc_files = [
|
limited_doc_files = [
|
||||||
path
|
path
|
||||||
for path in ifind('externs', 'build/src/external/externs')
|
for path in ifind('externs')
|
||||||
if path.endswith('.js')]
|
if path.endswith('.js')]
|
||||||
t.run('%(GJSLINT)s',
|
t.run('%(GJSLINT)s',
|
||||||
'--jslint_error=all',
|
'--jslint_error=all',
|
||||||
|
|||||||
@@ -51,6 +51,7 @@
|
|||||||
"../externs/closure-compiler.js",
|
"../externs/closure-compiler.js",
|
||||||
"../externs/geojson.js",
|
"../externs/geojson.js",
|
||||||
"../externs/oli.js",
|
"../externs/oli.js",
|
||||||
|
"../externs/olx.js",
|
||||||
"../externs/proj4js.js",
|
"../externs/proj4js.js",
|
||||||
"../externs/tilejson.js",
|
"../externs/tilejson.js",
|
||||||
"../externs/topojson.js",
|
"../externs/topojson.js",
|
||||||
|
|||||||
@@ -16,6 +16,6 @@
|
|||||||
"inherits": "base.json",
|
"inherits": "base.json",
|
||||||
"inputs": [
|
"inputs": [
|
||||||
"../build/examples/all.js",
|
"../build/examples/all.js",
|
||||||
"../build/src/internal/src/types.js"
|
"../externs/olx.js"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,11 +3,11 @@
|
|||||||
"id": "ol-all",
|
"id": "ol-all",
|
||||||
|
|
||||||
"externs": [
|
"externs": [
|
||||||
"../build/src/external/externs/types.js",
|
|
||||||
"../externs/bingmaps.js",
|
"../externs/bingmaps.js",
|
||||||
"../externs/closure-compiler.js",
|
"../externs/closure-compiler.js",
|
||||||
"../externs/geojson.js",
|
"../externs/geojson.js",
|
||||||
"../externs/oli.js",
|
"../externs/oli.js",
|
||||||
|
"../externs/olx.js",
|
||||||
"../externs/proj4js.js",
|
"../externs/proj4js.js",
|
||||||
"../externs/tilejson.js",
|
"../externs/tilejson.js",
|
||||||
"../externs/topojson.js",
|
"../externs/topojson.js",
|
||||||
|
|||||||
@@ -13,11 +13,11 @@
|
|||||||
"id": "ol-simple",
|
"id": "ol-simple",
|
||||||
|
|
||||||
"externs": [
|
"externs": [
|
||||||
"../build/src/external/externs/types.js",
|
|
||||||
"../externs/bingmaps.js",
|
"../externs/bingmaps.js",
|
||||||
"../externs/closure-compiler.js",
|
"../externs/closure-compiler.js",
|
||||||
"../externs/geojson.js",
|
"../externs/geojson.js",
|
||||||
"../externs/oli.js",
|
"../externs/oli.js",
|
||||||
|
"../externs/olx.js",
|
||||||
"../externs/proj4js.js",
|
"../externs/proj4js.js",
|
||||||
"../externs/tilejson.js",
|
"../externs/tilejson.js",
|
||||||
"../externs/topojson.js",
|
"../externs/topojson.js",
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
"../externs/closure-compiler.js",
|
"../externs/closure-compiler.js",
|
||||||
"../externs/geojson.js",
|
"../externs/geojson.js",
|
||||||
"../externs/oli.js",
|
"../externs/oli.js",
|
||||||
|
"../externs/olx.js",
|
||||||
"../externs/proj4js.js",
|
"../externs/proj4js.js",
|
||||||
"../externs/tilejson.js",
|
"../externs/tilejson.js",
|
||||||
"../externs/topojson.js",
|
"../externs/topojson.js",
|
||||||
|
|||||||
+1
-1
@@ -13,11 +13,11 @@
|
|||||||
"css-output-file": "../build/ol.css",
|
"css-output-file": "../build/ol.css",
|
||||||
|
|
||||||
"externs": [
|
"externs": [
|
||||||
"../build/src/external/externs/types.js",
|
|
||||||
"../externs/bingmaps.js",
|
"../externs/bingmaps.js",
|
||||||
"../externs/closure-compiler.js",
|
"../externs/closure-compiler.js",
|
||||||
"../externs/geojson.js",
|
"../externs/geojson.js",
|
||||||
"../externs/oli.js",
|
"../externs/oli.js",
|
||||||
|
"../externs/olx.js",
|
||||||
"../externs/proj4js.js",
|
"../externs/proj4js.js",
|
||||||
"../externs/tilejson.js",
|
"../externs/tilejson.js",
|
||||||
"../externs/topojson.js",
|
"../externs/topojson.js",
|
||||||
|
|||||||
+4724
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user