liybang FEATURE action reply support

Required lyd_parse_* API changes.
diff --git a/src/tree_data.h b/src/tree_data.h
index f647df2..60c13fc 100644
--- a/src/tree_data.h
+++ b/src/tree_data.h
@@ -480,9 +480,9 @@
  *                    when checking any "when" or "must" conditions in the parsed tree that require
  *                    some nodes outside their subtree. It must be a list of top-level elements!
  *                - #LYD_OPT_RPCREPLY:
- *                  - const struct ::lys_node *rpc_act - pointer to the RPC or action schema node
- *                    operation of the reply.
- *                  - struct lyd_node *data_tree - additional data tree that will be used
+ *                  - const struct ::lyd_node *rpc_act - pointer to the RPC or action operation data node
+ *                    of the reply.
+ *                  - const struct ::lyd_node *data_tree - additional data tree that will be used
  *                    when checking any "when" or "must" conditions in the parsed tree that require
  *                    some nodes outside their subtree. It must be a list of top-level elements!
  * @return Pointer to the built data tree or NULL in case of empty \p data. To free the returned structure,
@@ -518,9 +518,9 @@
  *                    when checking any "when" or "must" conditions in the parsed tree that require
  *                    some nodes outside their subtree. It must be a list of top-level elements!
  *                - #LYD_OPT_RPCREPLY:
- *                  - const struct ::lys_node *rpc_act - pointer to the RPC or action schema node
- *                    operation of the reply.
- *                  - struct lyd_node *data_tree - additional data tree that will be used
+ *                  - const struct ::lyd_node *rpc_act - pointer to the RPC or action operation data node
+ *                    of the reply.
+ *                  - const struct ::lyd_node *data_tree - additional data tree that will be used
  *                    when checking any "when" or "must" conditions in the parsed tree that require
  *                    some nodes outside their subtree. It must be a list of top-level elements!
  * @return Pointer to the built data tree or NULL in case of empty file. To free the returned structure,
@@ -554,9 +554,9 @@
  *                    when checking any "when" or "must" conditions in the parsed tree that require
  *                    some nodes outside their subtree. It must be a list of top-level elements!
  *                - #LYD_OPT_RPCREPLY:
- *                  - const struct ::lys_node *rpc_act - pointer to the RPC or action schema node
- *                    operation of the reply.
- *                  - struct lyd_node *data_tree - additional data tree that will be used
+ *                  - const struct ::lyd_node *rpc_act - pointer to the RPC or action operation data node
+ *                    of the reply.
+ *                  - const struct ::lyd_node *data_tree - additional data tree that will be used
  *                    when checking any "when" or "must" conditions in the parsed tree that require
  *                    some nodes outside their subtree. It must be a list of top-level elements!
  * @return Pointer to the built data tree or NULL in case of empty file. To free the returned structure,
@@ -600,9 +600,9 @@
  *                    when checking any "when" or "must" conditions in the parsed tree that require
  *                    some nodes outside their subtree. It must be a list of top-level elements!
  *                - #LYD_OPT_RPCREPLY:
- *                  - const struct ::lys_node *rpc_act - pointer to the RPC or action schema node
- *                    operation of the reply.
- *                  - struct lyd_node *data_tree - additional data tree that will be used
+ *                  - const struct ::lyd_node *rpc_act - pointer to the RPC or action operation data node
+ *                    of the reply.
+ *                  - const struct ::lyd_node *data_tree - additional data tree that will be used
  *                    when checking any "when" or "must" conditions in the parsed tree that require
  *                    some nodes outside their subtree. It must be a list of top-level elements!
  * @return Pointer to the built data tree or NULL in case of empty \p root. To free the returned structure,
@@ -617,7 +617,7 @@
  * @param[in] parent Parent node for the node being created. NULL in case of creating top level element.
  * @param[in] module Module with the node being created.
  * @param[in] name Schema node name of the new data node. The node can be #LYS_CONTAINER, #LYS_LIST,
- * #LYS_NOTIF, or #LYS_RPC.
+ * #LYS_NOTIF, #LYS_RPC, or #LYS_ACTION.
  * @return New node, NULL on error.
  */
 struct lyd_node *lyd_new(struct lyd_node *parent, const struct lys_module *module, const char *name);
@@ -672,19 +672,19 @@
                                  void *value, LYD_ANYDATA_VALUETYPE value_type);
 
 /**
- * @brief Create a new container node in a data tree. Ignore RPC input nodes and instead use RPC output ones.
+ * @brief Create a new container node in a data tree. Ignore RPC/action input nodes and instead use RPC/action output ones.
  *
  * @param[in] parent Parent node for the node being created. NULL in case of creating top level element.
  * @param[in] module Module with the node being created.
- * @param[in] name Schema node name of the new data node. The node can be #LYS_CONTAINER, #LYS_LIST,
- * #LYS_NOTIF, or #LYS_RPC.
+ * @param[in] name Schema node name of the new data node. The node should only be #LYS_CONTAINER or #LYS_LIST,
+ * but accepted are also #LYS_NOTIF, #LYS_RPC, or #LYS_ACTION.
  * @return New node, NULL on error.
  */
 struct lyd_node *lyd_new_output(struct lyd_node *parent, const struct lys_module *module, const char *name);
 
 /**
  * @brief Create a new leaf or leaflist node in a data tree with a string value that is converted to
- * the actual value. Ignore RPC input nodes and instead use RPC output ones.
+ * the actual value. Ignore RPC/action input nodes and instead use RPC/action output ones.
  *
  * @param[in] parent Parent node for the node being created. NULL in case of creating top level element.
  * @param[in] module Module with the node being created.
@@ -697,8 +697,8 @@
                                      const char *val_str);
 
 /**
- * @brief Create a new anydata or anyxml node in a data tree. Ignore RPC input nodes and instead use
- * RPC output ones.
+ * @brief Create a new anydata or anyxml node in a data tree. Ignore RPC/action input nodes and instead use
+ * RPC/action output ones.
  *
  * @param[in] parent Parent node for the node being created. NULL in case of creating top level element.
  * @param[in] module Module with the node being created.
@@ -730,7 +730,7 @@
 #define LYD_PATH_OPT_UPDATE   0x01 /**< If the target node exists and is a leaf, it is updated with the new value and returned.
                                         If the target node exists and is not a leaf, NULL is returned and no error set. */
 #define LYD_PATH_OPT_NOPARENT 0x02 /**< If any parents of the target node exist, return an error. */
-#define LYD_PATH_OPT_OUTPUT   0x04 /**< Changes the behavior to ignoring RPC input schema nodes and using only output ones. */
+#define LYD_PATH_OPT_OUTPUT   0x04 /**< Changes the behavior to ignoring RPC/action input schema nodes and using only output ones. */
 
 /** @} pathoptions */
 
@@ -744,8 +744,8 @@
  * If \p path points to a list key and the list does not exist, the key value from the predicate is used
  * and \p value is ignored.
  *
- * @param[in] data_tree Existing data tree to add to/modify. If creating RPCs, there should only be one RPC and
- * either input or output. Can be NULL.
+ * @param[in] data_tree Existing data tree to add to/modify. If creating RPCs/actions, there should only be one
+ * RPC/action and either input or output, not both. Can be NULL.
  * @param[in] ctx Context to use. Mandatory if \p data_tree is NULL.
  * @param[in] path Simple data XPath of the new node. It can contain only simple node addressing with optional
  * module names as prefixes. List nodes must have predicates, one for each list key in the correct order and