/*
 * 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.
 */

/* $Id: TextFragment.java 1619960 2014-08-23 03:50:42Z gadams $ */

package org.apache.fop.fonts;

import java.text.CharacterIterator;

/**
 * Encapsulates a sub-sequence (fragement) of a text iterator (or other text source),
 * where begin index and end index are indices into larger text iterator that denote
 * [begin,end) of sub-sequence range. Additionally associated with a designated script
 * (or "auto"), a designated language (or "none"), and a (single) bidi level (or -1
 * if not known).
 */
public interface TextFragment {

    /**
     * Obtain reference to underlying iterator.
     */
    CharacterIterator getIterator();

    /**
     * Obtain beginning index (inclusive) of sub-sequence of fragment in overall text source.
     */
    int getBeginIndex();

    /**
     * Obtain ending index (exclusive) of sub-sequence of fragment in overall text source.
     */
    int getEndIndex();

    /**
     * Obtain associated script (if designated) or "auto" if not.
     */
    String getScript();

    /**
     * Obtain associated language (if designated) or "none" if not.
     */
    String getLanguage();

    /**
     * Obtain associated bidi level (if known) or -1 if not.
     */
    int getBidiLevel();

    /**
     * Obtain character at specified index within this fragment's sub-sequence,
     * where index 0 corresponds to beginning index in overal text source, and
     * subSequenceIndex must be less than ending index - beginning index.
     */
    char charAt(int subSequenceIndex);

    CharSequence subSequence(int startIndex, int endIndex);
}
