Merge pull request #1208 from alexjlockwood/patch-2

Fix typo in 'lineCap.json' docs
diff --git a/docs/json/effects/tint.json b/docs/json/effects/tint.json
index 29aeaf9..2c642d1 100644
--- a/docs/json/effects/tint.json
+++ b/docs/json/effects/tint.json
@@ -24,7 +24,7 @@
     },
     "ef": {
       "title": "Effects",
-      "description": "ffect List of properties.",
+      "description": "Effect List of properties.",
       "type": "array",
       "items": [
         {
diff --git a/docs/json/helpers/lineJoin.json b/docs/json/helpers/lineJoin.json
index f9e2634..0e074c2 100644
--- a/docs/json/helpers/lineJoin.json
+++ b/docs/json/helpers/lineJoin.json
@@ -11,7 +11,7 @@
       "value": 2
     },
     {
-      "standsFor": "butt",
+      "standsFor": "bevel",
       "value": 3
     }
   ]
diff --git a/docs/json/properties/doubleKeyframe.json b/docs/json/properties/doubleKeyframe.json
new file mode 100644
index 0000000..378a450
--- /dev/null
+++ b/docs/json/properties/doubleKeyframe.json
@@ -0,0 +1,60 @@
+{
+  "$schema": "http://json-schema.org/draft-04/schema#",
+  "type": "object",
+  "properties": {
+    "e": {
+      "description": "End value of keyframe segment.",
+      "extended_name": "End",
+      "type": "number"
+    },
+    "s": {
+      "description": "Start value of keyframe segment.",
+      "extended_name": "Start",
+      "type": "number"
+    },
+    "t": {
+      "description": "Start time of keyframe segment.",
+      "extended_name": "Time",
+      "type": "number"
+    },
+    "i": {
+      "description": "Bezier curve interpolation in value.",
+      "extended_name": "In Value",
+      "properties": {
+        "x": {
+          "description": "bezier x axis. Array of numbers.",
+          "extended_name": "X axis",
+          "type": "array"
+        },
+        "y": {
+          "description": "bezier y axis. Array of numbers.",
+          "extended_name": "Y axis",
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "o": {
+      "description": "Bezier curve interpolation out value.",
+      "extended_name": "Out Value",
+      "properties": {
+        "x": {
+          "description": "bezier x axis. Array of numbers.",
+          "extended_name": "X axis",
+          "type": "array"
+        },
+        "y": {
+          "description": "bezier y axis. Array of numbers.",
+          "extended_name": "Y axis",
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "nm": {
+      "description": "Bezier curve name. Used for caching.",
+      "extended_name": "Name",
+      "type": "number"
+    }
+  }
+}
\ No newline at end of file
diff --git a/docs/json/properties/multiDimensionalKeyframed.json b/docs/json/properties/multiDimensionalKeyframed.json
index 258e746..593afc3 100644
--- a/docs/json/properties/multiDimensionalKeyframed.json
+++ b/docs/json/properties/multiDimensionalKeyframed.json
@@ -6,62 +6,10 @@
       "description": "Property Value keyframes",
       "extended_name": "Keyframes",
       "type": "array",
-      "properties": [
-        {
-          "description": "End value of keyframe segment.",
-          "extended_name": "End",
-          "type": "array"
-        },
-        {
-          "description": "Start value of keyframe segment.",
-          "extended_name": "Start",
-          "type": "array"
-        },
-        {
-          "description": "Start time of keyframe segment.",
-          "extended_name": "Time",
-          "type": "number"
-        },
-        {
-          "description": "Bezier curve interpolation in value.",
-          "extended_name": "In Value",
-          "type": "object",
-          "properties": [
-            {
-              "description": "bezier x axis. Array of numbers.",
-              "extended_name": "X axis",
-              "type": "array"
-            },
-            {
-              "description": "bezier y axis. Array of numbers.",
-              "extended_name": "Y axis",
-              "type": "array"
-            }
-          ]
-        },
-        {
-          "description": "Bezier curve interpolation out value.",
-          "extended_name": "Out Value",
-          "type": "object",
-          "properties": [
-            {
-              "description": "bezier x axis. Array of numbers.",
-              "extended_name": "X axis",
-              "type": "array"
-            },
-            {
-              "description": "bezier y axis. Array of numbers.",
-              "extended_name": "Y axis",
-              "type": "array"
-            }
-          ]
-        },
-        {
-          "description": "Bezier curve name. Used for caching.",
-          "extended_name": "Name",
-          "type": "number"
-        }
-      ]
+      "items": {
+        "type": "object",
+        "$ref": "#/properties/offsetKeyframe"
+      }
     },
     "x": {
       "description": "Property Expression. An AE expression that modifies the value.",
diff --git a/docs/json/properties/offsetKeyframe.json b/docs/json/properties/offsetKeyframe.json
new file mode 100644
index 0000000..5769cfd
--- /dev/null
+++ b/docs/json/properties/offsetKeyframe.json
@@ -0,0 +1,66 @@
+{
+  "$schema": "http://json-schema.org/draft-04/schema#",
+  "type": "object",
+  "properties": {
+    "e": {
+      "description": "End value of keyframe segment.",
+      "extended_name": "End",
+      "items": {
+        "type": "number"
+      },
+      "type": "array"
+    },
+    "s": {
+      "description": "Start value of keyframe segment.",
+      "extended_name": "Start",
+      "items": {
+        "type": "number"
+      },
+      "type": "array"
+    },
+    "t": {
+      "description": "Start time of keyframe segment.",
+      "extended_name": "Time",
+      "type": "number"
+    },
+    "i": {
+      "description": "Bezier curve interpolation in value.",
+      "extended_name": "In Value",
+      "properties": {
+        "x": {
+          "description": "bezier x axis. Array of numbers.",
+          "extended_name": "X axis",
+          "type": "array"
+        },
+        "y": {
+          "description": "bezier y axis. Array of numbers.",
+          "extended_name": "Y axis",
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "o": {
+      "description": "Bezier curve interpolation out value.",
+      "extended_name": "Out Value",
+      "properties": {
+        "x": {
+          "description": "bezier x axis. Array of numbers.",
+          "extended_name": "X axis",
+          "type": "array"
+        },
+        "y": {
+          "description": "bezier y axis. Array of numbers.",
+          "extended_name": "Y axis",
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "nm": {
+      "description": "Bezier curve name. Used for caching.",
+      "extended_name": "Name",
+      "type": "number"
+    }
+  }
+}
\ No newline at end of file
diff --git a/docs/json/properties/shape.json b/docs/json/properties/shape.json
index 56552d1..a1834b9 100644
--- a/docs/json/properties/shape.json
+++ b/docs/json/properties/shape.json
@@ -5,29 +5,8 @@
     "k": {
       "description": "Property Value",
       "extended_name": "Value",
-      "properties": [
-        {
-          "description": "Closed property of shape",
-          "extended_name": "Closed",
-          "type": "boolean"
-        },
-        {
-          "description": "Bezier curve In points. Array of 2 dimensional arrays.",
-          "extended_name": "In Point",
-          "type": "array"
-        },
-        {
-          "description": "Bezier curve Out points. Array of 2 dimensional arrays.",
-          "extended_name": "Out Point",
-          "type": "array"
-        },
-        {
-          "description": "Bezier curve Vertices. Array of 2 dimensional arrays.",
-          "extended_name": "Vertices",
-          "type": "array"
-        }
-      ],
-      "type": "object"
+      "type": "object",
+      "$ref": "#/properties/shapeProp"
     },
     "x": {
       "description": "Property Expression. An AE expression that modifies the value.",
diff --git a/docs/json/properties/shapeKeyframed.json b/docs/json/properties/shapeKeyframed.json
index 6705bff..15b3cae 100644
--- a/docs/json/properties/shapeKeyframed.json
+++ b/docs/json/properties/shapeKeyframed.json
@@ -5,106 +5,10 @@
     "k": {
       "description": "Property Value keyframes",
       "extended_name": "Keyframes",
-      "properties": [
-        {
-          "description": "End value of keyframe segment.",
-          "extended_name": "End",
-          "properties": [
-            {
-              "description": "Closed property of shape",
-              "extended_name": "Closed",
-              "type": "boolean"
-            },
-            {
-              "description": "Bezier curve In points. Array of 2 dimensional arrays.",
-              "extended_name": "In Point",
-              "type": "array"
-            },
-            {
-              "description": "Bezier curve Out points. Array of 2 dimensional arrays.",
-              "extended_name": "Out Point",
-              "type": "array"
-            },
-            {
-              "description": "Bezier curve Vertices. Array of 2 dimensional arrays.",
-              "extended_name": "Vertices",
-              "type": "array"
-            }
-          ],
-          "type": "object"
-        },
-        {
-          "description": "Start value of keyframe segment.",
-          "extended_name": "Start",
-          "properties": [
-            {
-              "description": "Closed property of shape",
-              "extended_name": "Closed",
-              "type": "boolean"
-            },
-            {
-              "description": "Bezier curve In points. Array of 2 dimensional arrays.",
-              "extended_name": "In Point",
-              "type": "array"
-            },
-            {
-              "description": "Bezier curve Out points. Array of 2 dimensional arrays.",
-              "extended_name": "Out Point",
-              "type": "array"
-            },
-            {
-              "description": "Bezier curve Vertices. Array of 2 dimensional arrays.",
-              "extended_name": "Vertices",
-              "type": "array"
-            }
-          ],
-          "type": "object"
-        },
-        {
-          "description": "Start time of keyframe segment.",
-          "extended_name": "Time",
-          "type": "number"
-        },
-        {
-          "description": "Bezier curve interpolation in value.",
-          "extended_name": "In Value",
-          "properties": [
-            {
-              "description": "bezier x axis. Array of numbers.",
-              "extended_name": "X axis",
-              "type": "array"
-            },
-            {
-              "description": "bezier y axis. Array of numbers.",
-              "extended_name": "Y axis",
-              "type": "array"
-            }
-          ],
-          "type": "object"
-        },
-        {
-          "description": "Bezier curve interpolation out value.",
-          "extended_name": "Out Value",
-          "properties": [
-            {
-              "description": "bezier x axis. Array of numbers.",
-              "extended_name": "X axis",
-              "type": "array"
-            },
-            {
-              "description": "bezier y axis. Array of numbers.",
-              "extended_name": "Y axis",
-              "type": "array"
-            }
-          ],
-          "type": "object"
-        },
-        {
-          "description": "Bezier curve name. Used for caching.",
-          "extended_name": "Name",
-          "type": "number"
-        }
-      ],
+      "items": {
+        "type": "object",
+        "$ref": "#/properties/shapePropKeyframe"
+      },
       "type": "array"
     },
     "x": {
diff --git a/docs/json/properties/shapeProp.json b/docs/json/properties/shapeProp.json
new file mode 100644
index 0000000..9463aa6
--- /dev/null
+++ b/docs/json/properties/shapeProp.json
@@ -0,0 +1,50 @@
+{
+  "$schema": "http://json-schema.org/draft-04/schema",
+  "type": "object",
+  "properties": {
+    "c": {
+      "description": "Closed property of shape",
+      "extended_name": "Closed",
+      "type": "boolean"
+    },
+    "i": {
+      "description": "Bezier curve In points. Array of 2 dimensional arrays.",
+      "extended_name": "In Point",
+      "type": "array",
+      "items": {
+        "type": "array",
+        "minItems": 2,
+        "maxItems": 2,
+        "items": {
+          "type": "number"
+        }
+      }
+    },
+    "o": {
+      "description": "Bezier curve Out points. Array of 2 dimensional arrays.",
+      "extended_name": "Out Point",
+      "type": "array",
+      "items": {
+        "type": "array",
+        "minItems": 2,
+        "maxItems": 2,
+        "items": {
+          "type": "number"
+        }
+      }
+    },
+    "v": {
+      "description": "Bezier curve Vertices. Array of 2 dimensional arrays.",
+      "extended_name": "Vertices",
+      "type": "array",
+      "items": {
+        "type": "array",
+        "minItems": 2,
+        "maxItems": 2,
+        "items": {
+          "type": "number"
+        }
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/docs/json/properties/shapePropKeyframe.json b/docs/json/properties/shapePropKeyframe.json
new file mode 100644
index 0000000..8c64d47
--- /dev/null
+++ b/docs/json/properties/shapePropKeyframe.json
@@ -0,0 +1,68 @@
+{
+  "$schema": "http://json-schema.org/draft-04/schema#",
+  "type": "object",
+  "properties": {
+    "e": {
+      "description": "End value of keyframe segment.",
+      "extended_name": "End",
+      "items": {
+        "type": "object",
+        "$ref": "#/properties/shapeProp"
+      },
+      "type": "array"
+    },
+    "s": {
+      "description": "Start value of keyframe segment.",
+      "extended_name": "Start",
+      "items": {
+        "type": "object",
+        "$ref": "#/properties/shapeProp"
+      },
+      "type": "array"
+    },
+    "t": {
+      "description": "Start time of keyframe segment.",
+      "extended_name": "Time",
+      "type": "number"
+    },
+    "i": {
+      "description": "Bezier curve interpolation in value.",
+      "extended_name": "In Value",
+      "properties": {
+        "x": {
+          "description": "bezier x axis. Array of numbers.",
+          "extended_name": "X axis",
+          "type": "array"
+        },
+        "y": {
+          "description": "bezier y axis. Array of numbers.",
+          "extended_name": "Y axis",
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "o": {
+      "description": "Bezier curve interpolation out value.",
+      "extended_name": "Out Value",
+      "properties": {
+        "x": {
+          "description": "bezier x axis. Array of numbers.",
+          "extended_name": "X axis",
+          "type": "array"
+        },
+        "y": {
+          "description": "bezier y axis. Array of numbers.",
+          "extended_name": "Y axis",
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "nm": {
+      "description": "Bezier curve name. Used for caching.",
+      "extended_name": "Name",
+      "type": "number"
+    }
+  }
+}
\ No newline at end of file
diff --git a/docs/json/properties/valueKeyframe.json b/docs/json/properties/valueKeyframe.json
new file mode 100644
index 0000000..297341d
--- /dev/null
+++ b/docs/json/properties/valueKeyframe.json
@@ -0,0 +1,38 @@
+{
+  "$schema": "http://json-schema.org/draft-04/schema",
+  "type": "object",
+  "properties": {
+    "e": {
+      "description": "End value of keyframe segment.",
+      "extended_name": "End",
+      "type": "number"
+    },
+    "s": {
+      "description": "Start value of keyframe segment.",
+      "extended_name": "Start",
+      "type": "number"
+    },
+    "t": {
+      "description": "Start time of keyframe segment.",
+      "extended_name": "Time",
+      "type": "number"
+    },
+    "i": {
+      "description": "Bezier curve interpolation in value.",
+      "extended_name": "In Value",
+      "type": "object",
+      "properties": {
+        "x": {
+          "description": "bezier x axis",
+          "extended_name": "X axis",
+          "type": "number"
+        },
+        "y": {
+          "description": "bezier y axis",
+          "extended_name": "Y axis",
+          "type": "number"
+        }
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/docs/json/properties/valueKeyframed.json b/docs/json/properties/valueKeyframed.json
index c22cd05..9c9598e 100644
--- a/docs/json/properties/valueKeyframed.json
+++ b/docs/json/properties/valueKeyframed.json
@@ -6,62 +6,10 @@
       "description": "Property Value keyframes",
       "extended_name": "Keyframes",
       "type": "array",
-      "properties": [
-        {
-          "description": "End value of keyframe segment.",
-          "extended_name": "End",
-          "type": "number"
-        },
-        {
-          "description": "Start value of keyframe segment.",
-          "extended_name": "Start",
-          "type": "number"
-        },
-        {
-          "description": "Start time of keyframe segment.",
-          "extended_name": "Time",
-          "type": "number"
-        },
-        {
-          "description": "Bezier curve interpolation in value.",
-          "extended_name": "In Value",
-          "type": "object",
-          "properties": [
-            {
-              "description": "bezier x axis",
-              "extended_name": "X axis",
-              "type": "number"
-            },
-            {
-              "description": "bezier y axis",
-              "extended_name": "Y axis",
-              "type": "number"
-            }
-          ]
-        },
-        {
-          "description": "Bezier curve interpolation out value.",
-          "extended_name": "Out Value",
-          "type": "object",
-          "properties": [
-            {
-              "description": "bezier x axis",
-              "extended_name": "X axis",
-              "type": "number"
-            },
-            {
-              "description": "bezier y axis",
-              "extended_name": "Y axis",
-              "type": "number"
-            }
-          ]
-        },
-        {
-          "description": "Bezier curve name. Used for caching.",
-          "extended_name": "Name",
-          "type": "number"
-        }
-      ]
+      "items": {
+        "type": "object",
+        "$ref": "#/properties/valueKeyframe"
+      }
     },
     "x": {
       "description": "Property Expression. An AE expression that modifies the value.",
diff --git a/docs/json/transform.json b/docs/json/transform.json
deleted file mode 100644
index 8fbe2ae..0000000
--- a/docs/json/transform.json
+++ /dev/null
@@ -1,97 +0,0 @@
-{
-  "$schema": "http://json-schema.org/draft-04/schema#",
-  "type": "object",
-  "properties": {
-    "a": {
-      "title": "Anchor Point",
-      "description": "Transform Anchor Point",
-      "oneOf": [
-        {
-          "$ref": "#/properties/multiDimensional"
-        },
-        {
-          "$ref": "#/properties/multiDimensionalKeyframed"
-        }
-      ],
-      "type": "object"
-    },
-    "p": {
-      "title": "Position",
-      "description": "Transform Position",
-      "oneOf": [
-        {
-          "$ref": "#/properties/multiDimensional"
-        },
-        {
-          "$ref": "#/properties/multiDimensionalKeyframed"
-        }
-      ],
-      "type": "object"
-    },
-    "s": {
-      "title": "Scale",
-      "description": "Transform Scale",
-      "oneOf": [
-        {
-          "$ref": "#/properties/multiDimensional"
-        },
-        {
-          "$ref": "#/properties/multiDimensionalKeyframed"
-        }
-      ],
-      "type": "object"
-    },
-    "r": {
-      "title": "Rotation",
-      "description": "Transform Rotation",
-      "oneOf": [
-        {
-          "$ref": "#/properties/value"
-        },
-        {
-          "$ref": "#/properties/valueKeyframed"
-        }
-      ],
-      "type": "object"
-    },
-    "o": {
-      "title": "Opacity",
-      "description": "Transform Opacity",
-      "oneOf": [
-        {
-          "$ref": "#/properties/value"
-        },
-        {
-          "$ref": "#/properties/valueKeyframed"
-        }
-      ],
-      "type": "object"
-    },
-    "px": {
-      "title": "Position X",
-      "description": "Transform Position X",
-      "oneOf": [
-        {
-          "$ref": "#/properties/value"
-        },
-        {
-          "$ref": "#/properties/valueKeyframed"
-        }
-      ],
-      "type": "object"
-    },
-    "py": {
-      "title": "Position Y",
-      "description": "Transform Position Y",
-      "oneOf": [
-        {
-          "$ref": "#/properties/value"
-        },
-        {
-          "$ref": "#/properties/valueKeyframed"
-        }
-      ],
-      "type": "object"
-    }
-  }
-}