<?xml version="1.0" encoding="UTF-8" ?> 

   <!--
    ***************************************************************
    * 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.
    ***************************************************************
   -->

<!-- For testing only. -->

<analysisEngineDescription xmlns="http://uima.apache.org/resourceSpecifier">
<frameworkImplementation>org.apache.uima.cpp</frameworkImplementation>
<primitive>true</primitive>
<annotatorImplementationName>libSimpleTextSegmenter</annotatorImplementationName>
 
<analysisEngineMetaData>
	<name>Simple Text Segmenter</name>
	<description>Splits a text document into pieces. The point at which the text is split is determined by SegmentDelimiter configuration parameter which defaults to new line ('\n')</description>
	<version>1.0</version>
	<vendor>IBM</vendor>
	
	<configurationParameters>
		<configurationParameter>
			<name>SegmentDelimiter</name>
			<description>segment delimiter</description>
			<type>String</type>
			<multiValued>false</multiValued>
			<mandatory>false</mandatory>
		</configurationParameter>
	</configurationParameters>
	<configurationParameterSettings>
		<nameValuePair>
			<name>SegmentDelimiter</name>
			<value>
				<string>.</string>
			</value>
		</nameValuePair>
	</configurationParameterSettings>

	<typeSystemDescription/>

	<fsIndexCollection>
	 <fsIndexes>
	   <fsIndexDescription>
	      <label>TestIndex</label>
	      <typeName>uima.cas.TOP</typeName>
	      <kind>bag</kind>
	      <keys/>
	    </fsIndexDescription>
          </fsIndexes>
        </fsIndexCollection>
		
	<capabilities>
		<capability>
			<outputs/>
		</capability>
	</capabilities>
	
	<operationalProperties>
		<modifiesCas>false</modifiesCas>
		<multipleDeploymentAllowed>true</multipleDeploymentAllowed>
		<outputsNewCASes>true</outputsNewCASes>
	</operationalProperties>
	
</analysisEngineMetaData>
</analysisEngineDescription>
