summaryrefslogtreecommitdiff
path: root/platform/android/scripts/generate-style-code.js
diff options
context:
space:
mode:
Diffstat (limited to 'platform/android/scripts/generate-style-code.js')
-rw-r--r--platform/android/scripts/generate-style-code.js124
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})
+);