Merge pull request #1954 from tschaub/olx
Use externs/olx.js instead of objectliterals.jsdoc.
This commit is contained in:
@@ -13,7 +13,8 @@
|
||||
"src/googx/dom/fullscreen.js"
|
||||
],
|
||||
"include": [
|
||||
"src"
|
||||
"src",
|
||||
"externs/olx.js"
|
||||
]
|
||||
},
|
||||
"plugins": [
|
||||
|
||||
@@ -58,18 +58,8 @@ exports.handlers = {
|
||||
|
||||
newDoclet: function(e) {
|
||||
var i, ii, j, jj;
|
||||
if (e.doclet.meta.filename == "objectliterals.jsdoc" && e.doclet.properties) {
|
||||
for (i = 0, ii = e.doclet.properties.length; i < ii; ++i) {
|
||||
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 (e.doclet.meta.filename == "olx.js" && e.doclet.longname != 'olx') {
|
||||
api.push(e.doclet.longname);
|
||||
}
|
||||
if (api.indexOf(e.doclet.longname) > -1) {
|
||||
var names, name;
|
||||
@@ -102,6 +92,18 @@ exports.handlers = {
|
||||
parseComplete: function(e) {
|
||||
for (var j = e.doclets.length - 1; j >= 0; --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) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -22,66 +22,6 @@ class Exportable(object):
|
||||
def export(self):
|
||||
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):
|
||||
|
||||
@@ -104,50 +44,15 @@ def main(argv):
|
||||
|
||||
option_parser = OptionParser()
|
||||
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:])
|
||||
|
||||
objects = {}
|
||||
requires = set()
|
||||
for arg in args:
|
||||
in_comment = False
|
||||
object_literal = None
|
||||
for line in open(arg, 'rU'):
|
||||
line = line.strip()
|
||||
if not line:
|
||||
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)
|
||||
if m:
|
||||
components = m.group('prop').split('.')
|
||||
@@ -188,32 +93,5 @@ def main(argv):
|
||||
for obj in objects:
|
||||
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__':
|
||||
sys.exit(main(sys.argv))
|
||||
|
||||
32
build.py
32
build.py
@@ -90,9 +90,7 @@ EXPORTS = [path
|
||||
for path in ifind('src')
|
||||
if path.endswith('.exports')]
|
||||
|
||||
EXTERNAL_SRC = [
|
||||
'build/src/external/externs/types.js',
|
||||
'build/src/external/src/exports.js']
|
||||
EXTERNAL_SRC = ['build/src/external/src/exports.js']
|
||||
|
||||
EXAMPLES = [path
|
||||
for path in ifind('examples')
|
||||
@@ -115,9 +113,7 @@ EXAMPLES_JSON = ['build/' + example.replace('.html', '.json')
|
||||
EXAMPLES_COMBINED = ['build/' + example.replace('.html', '.combined.js')
|
||||
for example in EXAMPLES]
|
||||
|
||||
INTERNAL_SRC = [
|
||||
'build/src/internal/src/requireall.js',
|
||||
'build/src/internal/src/types.js']
|
||||
INTERNAL_SRC = ['build/src/internal/src/requireall.js']
|
||||
|
||||
GLSL_SRC = [path
|
||||
for path in ifind('src')
|
||||
@@ -223,18 +219,9 @@ def build_ol_all_js(t):
|
||||
PLOVR_JAR, 'build', 'buildcfg/ol-all.json')
|
||||
|
||||
|
||||
@target('build/src/external/externs/types.js', 'bin/generate-exports.py',
|
||||
'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)
|
||||
@target('build/src/external/src/exports.js', 'bin/generate-exports.py', EXPORTS)
|
||||
def build_src_external_src_exports_js(t):
|
||||
t.output('%(PYTHON)s', 'bin/generate-exports.py',
|
||||
'--exports', 'src/objectliterals.jsdoc', EXPORTS)
|
||||
t.output('%(PYTHON)s', 'bin/generate-exports.py', '--exports', EXPORTS)
|
||||
|
||||
|
||||
for glsl_src in GLSL_SRC:
|
||||
@@ -272,13 +259,6 @@ def build_test_requireall_js(t):
|
||||
_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',
|
||||
EXAMPLES_COMBINED)
|
||||
|
||||
@@ -318,7 +298,7 @@ def examples_star_json(name, match):
|
||||
'inherits': '../../buildcfg/base.json',
|
||||
'inputs': [
|
||||
'../examples/%(id)s.js' % match.groupdict(),
|
||||
'../build/src/internal/src/types.js',
|
||||
'../externs/olx.js', # compiled with src for @typedef's
|
||||
],
|
||||
'externs': [
|
||||
'//jquery-1.7.js',
|
||||
@@ -386,7 +366,7 @@ def build_lint_src_timestamp(t):
|
||||
def build_lint_generated_timestamp(t):
|
||||
limited_doc_files = [
|
||||
path
|
||||
for path in ifind('externs', 'build/src/external/externs')
|
||||
for path in ifind('externs')
|
||||
if path.endswith('.js')]
|
||||
t.run('%(GJSLINT)s',
|
||||
'--jslint_error=all',
|
||||
|
||||
@@ -51,6 +51,7 @@
|
||||
"../externs/closure-compiler.js",
|
||||
"../externs/geojson.js",
|
||||
"../externs/oli.js",
|
||||
"../externs/olx.js",
|
||||
"../externs/proj4js.js",
|
||||
"../externs/tilejson.js",
|
||||
"../externs/topojson.js",
|
||||
|
||||
@@ -16,6 +16,6 @@
|
||||
"inherits": "base.json",
|
||||
"inputs": [
|
||||
"../build/examples/all.js",
|
||||
"../build/src/internal/src/types.js"
|
||||
"../externs/olx.js"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -3,11 +3,11 @@
|
||||
"id": "ol-all",
|
||||
|
||||
"externs": [
|
||||
"../build/src/external/externs/types.js",
|
||||
"../externs/bingmaps.js",
|
||||
"../externs/closure-compiler.js",
|
||||
"../externs/geojson.js",
|
||||
"../externs/oli.js",
|
||||
"../externs/olx.js",
|
||||
"../externs/proj4js.js",
|
||||
"../externs/tilejson.js",
|
||||
"../externs/topojson.js",
|
||||
|
||||
@@ -13,11 +13,11 @@
|
||||
"id": "ol-simple",
|
||||
|
||||
"externs": [
|
||||
"../build/src/external/externs/types.js",
|
||||
"../externs/bingmaps.js",
|
||||
"../externs/closure-compiler.js",
|
||||
"../externs/geojson.js",
|
||||
"../externs/oli.js",
|
||||
"../externs/olx.js",
|
||||
"../externs/proj4js.js",
|
||||
"../externs/tilejson.js",
|
||||
"../externs/topojson.js",
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
"../externs/closure-compiler.js",
|
||||
"../externs/geojson.js",
|
||||
"../externs/oli.js",
|
||||
"../externs/olx.js",
|
||||
"../externs/proj4js.js",
|
||||
"../externs/tilejson.js",
|
||||
"../externs/topojson.js",
|
||||
|
||||
@@ -13,11 +13,11 @@
|
||||
"css-output-file": "../build/ol.css",
|
||||
|
||||
"externs": [
|
||||
"../build/src/external/externs/types.js",
|
||||
"../externs/bingmaps.js",
|
||||
"../externs/closure-compiler.js",
|
||||
"../externs/geojson.js",
|
||||
"../externs/oli.js",
|
||||
"../externs/olx.js",
|
||||
"../externs/proj4js.js",
|
||||
"../externs/tilejson.js",
|
||||
"../externs/topojson.js",
|
||||
|
||||
4724
externs/olx.js
Normal file
4724
externs/olx.js
Normal file
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