+ bool MapToTargetProperty( Handle& propertyObject,
+ const std::string& key,
+ const TreeNode& node,
+ const Replacement& constant,
+ Property::Index& index,
+ Property::Value& value );
+
+ /**
+ * Find the key in the mapping table, if it's present, then generate
+ * a property value for it (of the given type if available),
+ * recursing as necessary, and stopping if any cycles are detected.
+ *
+ * @param[in] mappingRoot The JSON node containing the mappings
+ * @param[in] theKey The key to search for
+ * @param[in] propertyType The property type if known, or NONE
+ * @param[in,out] value The string value to test and write back to.
+ */
+ bool GetPropertyMap( const TreeNode& mappingRoot,
+ const char* theKey,
+ Property::Type propertyType,
+ Property::Value& value );
+
+ void SetCustomProperties( const TreeNode& node,
+ Handle& handle,
+ const Replacement& constant,
+ const std::string& childName,
+ Property::AccessMode accessMode );
+
+ /**
+ * Find the key in the mapping table, if it's present, then generate
+ * a property value for it (of the given type if available),
+ * recursing as necessary, and stopping if any cycles are detected.
+ *
+ * @param[in] mappingRoot The JSON node containing the mappings
+ * @param[in] theKey The key to search for
+ * @param[in,out] keyStack the stack of visited keys
+ * @param[in] propertyType The property type if known, or NONE
+ * @param[in,out] value The string value to test and write back to.
+ */
+ bool RecursePropertyMap( const TreeNode& mappingRoot,
+ KeyStack& keyStack,
+ const char* theKey,
+ Property::Type propertyType,
+ Property::Value& value );