diff options
author | Ivo van Dongen <info@ivovandongen.nl> | 2016-07-26 17:02:52 -0400 |
---|---|---|
committer | Ivo van Dongen <info@ivovandongen.nl> | 2016-08-02 16:58:03 -0400 |
commit | 10b2cc60a7b274f71b46976b1e9e89031b9e44ca (patch) | |
tree | 8f3cccee03e5a4205c4754f7eb723ec73d19c8b5 /platform/android/scripts/generate-style-code.js | |
parent | ed821c06d96e414b43db6fd1505389803cb022d4 (diff) | |
download | qtlocation-mapboxgl-10b2cc60a7b274f71b46976b1e9e89031b9e44ca.tar.gz |
[android] #5610 - Runtime style api - part 2
Diffstat (limited to 'platform/android/scripts/generate-style-code.js')
-rw-r--r-- | platform/android/scripts/generate-style-code.js | 124 |
1 files changed, 108 insertions, 16 deletions
diff --git a/platform/android/scripts/generate-style-code.js b/platform/android/scripts/generate-style-code.js index 03bfac8067..0abc4969be 100644 --- a/platform/android/scripts/generate-style-code.js +++ b/platform/android/scripts/generate-style-code.js @@ -22,18 +22,11 @@ global.camelizeWithLeadingLowercase = function (str) { }); } -global.snakeCaseUpper = function (str) { +global.snakeCaseUpper = function snakeCaseUpper(str) { return str.replace(/-/g, "_").toUpperCase(); } global.propertyType = function propertyType(property) { -//TODO: Doe we want these exceptions? -// if (/-translate-anchor$/.test(property.name)) { - // return 'TranslateAnchorType'; - // } - // if (/-(rotation|pitch)-alignment$/.test(property.name)) { - // return 'AlignmentType'; - // } switch (property.type) { case 'boolean': return 'Boolean'; @@ -42,9 +35,9 @@ global.propertyType = function propertyType(property) { case 'string': return 'String'; case 'enum': - return `String`; + return 'String'; case 'color': - return `String`; + return 'String'; case 'array': return `${propertyType({type:property.value})}[]`; default: @@ -52,6 +45,53 @@ global.propertyType = function propertyType(property) { } } +global.propertyJNIType = function propertyJNIType(property) { + switch (property.type) { + case 'boolean': + return 'jboolean'; + case 'jfloat': + return 'Float'; + case 'String': + return 'String'; + case 'enum': + return 'String'; + case 'color': + return 'String'; + case 'array': + return `jarray<${propertyType({type:property.value})}[]>`; + default: + return 'jobject*'; + } +} + +global.propertyNativeType = function (property) { + if (/-translate-anchor$/.test(property.name)) { + return 'TranslateAnchorType'; + } + if (/-(rotation|pitch)-alignment$/.test(property.name)) { + return 'AlignmentType'; + } + switch (property.type) { + case 'boolean': + return 'bool'; + case 'number': + return 'float'; + case 'string': + return 'std::string'; + case 'enum': + return `${camelize(property.name)}Type`; + case 'color': + return `Color`; + case 'array': + if (property.length) { + return `std::array<${propertyType({type: property.value})}, ${property.length}>`; + } else { + return `std::vector<${propertyType({type: property.value})}>`; + } + default: throw new Error(`unknown type for ${property.name}`) + } +} + global.propertyTypeAnnotation = function propertyTypeAnnotation(property) { switch (property.type) { case 'enum': @@ -61,6 +101,42 @@ global.propertyTypeAnnotation = function propertyTypeAnnotation(property) { } }; +global.defaultValueJava = function(property) { + if(property.name.endsWith("-pattern")) { + return '"pedestrian-polygon"'; + } + if(property.name.endsWith("-font")) { + return 'new String[]{"Open Sans Regular", "Arial Unicode MS Regular"}'; + } + switch (property.type) { + case 'boolean': + return 'true'; + case 'number': + return '0.3f'; + case 'string': + return '"' + property['default'] + '"'; + case 'enum': + return snakeCaseUpper(property.name) + "_" + snakeCaseUpper(property.values[0]); + case 'color': + return '"rgba(0, 0, 0, 1)"'; + case 'array': + switch (property.value) { + case 'string': + return '[' + property['default'] + "]"; + case 'number': + var result ='new Float[]{'; + for (var i = 0; i < property.length; i++) { + result += "0f"; + if (i +1 != property.length) { + result += ","; + } + } + return result + "}"; + } + default: throw new Error(`unknown type for ${property.name}`) + } +} + //Process Layers const layers = spec.layer.type.values.map((type) => { const layoutProperties = Object.keys(spec[`layout_${type}`]).reduce((memo, name) => { @@ -81,24 +157,27 @@ const layers = spec.layer.type.values.map((type) => { type: type, layoutProperties: layoutProperties, paintProperties: paintProperties, + properties: layoutProperties.concat(paintProperties) }; }); -const layerHpp = ejs.compile(fs.readFileSync('platform/android/scripts/layer.hpp.ejs', 'utf8'), {strict: true}); -const layerCpp = ejs.compile(fs.readFileSync('platform/android/scripts/layer.cpp.ejs', 'utf8'), {strict: true}); -const layerJava = ejs.compile(fs.readFileSync('platform/android/scripts/layer.java.ejs', 'utf8'), {strict: true}); +const layerHpp = ejs.compile(fs.readFileSync('platform/android/src/style/layers/layer.hpp.ejs', 'utf8'), {strict: true}); +const layerCpp = ejs.compile(fs.readFileSync('platform/android/src/style/layers/layer.cpp.ejs', 'utf8'), {strict: true}); +const layerJava = ejs.compile(fs.readFileSync('platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/layer.java.ejs', 'utf8'), {strict: true}); +const layerJavaUnitTests = ejs.compile(fs.readFileSync('platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/style/layer.junit.ejs', 'utf8'), {strict: true}); for (const layer of layers) { fs.writeFileSync(`platform/android/src/style/layers/${layer.type}_layer.hpp`, layerHpp(layer)); fs.writeFileSync(`platform/android/src/style/layers/${layer.type}_layer.cpp`, layerCpp(layer)); fs.writeFileSync(`platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/${camelize(layer.type)}Layer.java`, layerJava(layer)); + fs.writeFileSync(`platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/style/${camelize(layer.type)}LayerTest.java`, layerJavaUnitTests(layer)); } //Process all layer properties const layoutProperties = _(layers).map('layoutProperties').flatten().value(); const paintProperties = _(layers).map('paintProperties').flatten().value(); -const propertiesTemplate = ejs.compile(fs.readFileSync('platform/android/scripts/layer_property_factory.java.ejs', 'utf8'), {strict: true}); +const propertiesTemplate = ejs.compile(fs.readFileSync('platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/property_factory.java.ejs', 'utf8'), {strict: true}); fs.writeFileSync( `platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/PropertyFactory.java`, propertiesTemplate({layoutProperties: layoutProperties, paintProperties: paintProperties}) @@ -106,9 +185,22 @@ fs.writeFileSync( //Create types for the enum properties const enumProperties = _(layoutProperties).union(paintProperties).filter({'type': 'enum'}).value(); -const enumPropertyTemplate = ejs.compile(fs.readFileSync('platform/android/scripts/layer_property.java.ejs', 'utf8'), {strict: true}); +const enumPropertyJavaTemplate = ejs.compile(fs.readFileSync('platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/property.java.ejs', 'utf8'), {strict: true}); fs.writeFileSync( `platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/Property.java`, - enumPropertyTemplate({properties: enumProperties}) + enumPropertyJavaTemplate({properties: enumProperties}) ); +//De-dup types before generating cpp headers +const enumPropertiesDeDup = _(enumProperties).uniq(global.propertyNativeType).value(); +const enumPropertyHppTypeStringValueTemplate = ejs.compile(fs.readFileSync('platform/android/src/style/conversion/types_string_values.hpp.ejs', 'utf8'), {strict: true}); +fs.writeFileSync( + `platform/android/src/style/conversion/types_string_values.hpp`, + enumPropertyHppTypeStringValueTemplate({properties: enumPropertiesDeDup}) +); + +const enumPropertyHppTypeTemplate = ejs.compile(fs.readFileSync('platform/android/src/style/conversion/types.hpp.ejs', 'utf8'), {strict: true}); +fs.writeFileSync( + `platform/android/src/style/conversion/types.hpp`, + enumPropertyHppTypeTemplate({properties: enumPropertiesDeDup}) +); |