/**************************************************************
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 *
 *************************************************************/



#ifndef _XMLOFF_ELEMTRANSFORMERACTION_HXX
#define _XMLOFF_ELEMTRANSFORMERACTION_HXX

#include "TransformerAction.hxx"

enum XMLElemTransformerAction
{
	XML_ETACTION_EOT=XML_TACTION_EOT,	// uses for initialization only
	XML_ETACTION_COPY, 					// copy all (default)
										// for persistent elements: keep
										// elem content
	XML_ETACTION_COPY_TEXT, 			// copy all
										// for persistent elements: keep
										// text content
	XML_ETACTION_COPY_CONTENT, 			// ignore elem, process content
	XML_ETACTION_RENAME_ELEM, 			// rename element:
										// - param1: namespace +
										// 			 token of local name
	XML_ETACTION_RENAME_ELEM_PROC_ATTRS,// rename element and proc attr:
										// - param1: elem namespace +
										// 			 token of local name
										// - param2: attr acation map
	XML_ETACTION_RENAME_ELEM_ADD_ATTR,	// rename element and add attr:
										// - param1: elem namespace +
										// 			 token of local name
										// - param2: attr namespace +
										// 			 token of local name
										// - param3: attr value
	XML_ETACTION_RENAME_ELEM_ADD_PROC_ATTR,	// rename element and add attr:
										// - param1: elem namespace +
										// 			 token of local name
										// - param2: attr namespace +
										// 			 token of local name
										// - param3: attr value (low)
										//           attr action map (high)
	XML_ETACTION_RENAME_ELEM_COND, 		// rename element if child of another:
										// - param1: namespace +
										// 			 token of new local name
										// - param2: namespace +
										//           token of parent element
	XML_ETACTION_RENAME_ELEM_PROC_ATTRS_COND,// rename element and proc attr
										// if child of another:
										// - param1: elem namespace +
										// 			 token of new local name
										// - param2: attr acation map
										// - param3: namespace +
										//           token of parent element
	XML_ETACTION_PROC_ATTRS,			// proc attr:
										// - param1: attr acation map
	XML_ETACTION_MOVE_ATTRS_TO_ELEMS,	// turn some attributes into elems
										// - param1: action map specifying
										//   the attrs that shall be moved
	XML_ETACTION_MOVE_ELEMS_TO_ATTRS,	// turn some elems into attrs
										// - param1: action map specifying
										//   the elems that shall be moved
	XML_ETACTION_PROC_ATTRS_COND,		// proc attr if child of another:
										// - param1: namespace +
										//           token of parent element
										// - param2: attr acation map
    XML_ETACTION_EXTRACT_CHARACTERS,    // takes the characters of the current
                                        // element and all child elements
                                        // and put them together into the
                                        // current element
                                        // the child elements are removed
	XML_ETACTION_USER_DEFINED=0x40000000,// user defined actions start here
	XML_ETACTION_END=XML_TACTION_END
};

#endif	//  _XMLOFF_ELEMTRANSFORMERACTION_HXX
