/*******************************************************************************
 * Copyright (c) 2000, 2012 IBM Corporation and others.
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.swt.custom;


import org.eclipse.swt.events.*;

/**
 * This event is sent to BidiSegmentListeners when a line is to
 * be measured or rendered in a bidi locale.
 * The segments field can be used in conjunction with the segmentsChars
 * field or by itself. Setting only the segmentsChars field has no effect.
 * When used by itself, the segments field specify text ranges in the line
 * that should be treated as separate segments for bidi reordering.  Each
 * segment will be reordered and rendered separately.
 * <p>
 * The elements in the segments field specify the start offset of
 * a segment relative to the start of the line. They must follow
 * the following rules:</p>
 * <ul>
 * <li>elements must be in ascending order and must not have duplicates
 * <li>elements must not exceed the line length
 * </ul>
 * In addition, the first element may be set to zero and the last element may
 * be set to the end of the line but this is not required.
 * <p>
 * The segments field may be left null if the entire line should
 * be reordered as is.
 * </p>
 * A BidiSegmentListener may be used when adjacent segments of
 * right-to-left text should not be reordered relative to each other.
 * For example, within a Java editor, you may wish multiple
 * right-to-left string literals to be reordered differently than the
 * bidi algorithm specifies.
 *
 * Example:
 * <pre>
 * 	stored line = "R1R2R3" + "R4R5R6"
 *		R1 to R6 are right-to-left characters. The quotation marks
 * 		are part of the line text. The line is 13 characters long.
 *
 * 	segments = null:
 * 		entire line will be reordered and thus the two R2L segments
 * 		swapped (as per the bidi algorithm).
 *		visual line (rendered on screen) = "R6R5R4" + "R3R2R1"
 *
 * 	segments = [0, 5, 8]
 * 		"R1R2R3" will be reordered, followed by [blank]+[blank] and
 * 		"R4R5R6".
 *		visual line = "R3R2R1" + "R6R5R4"
 * </pre>
 *
 * <p>
 * The segments and segmentsChars fields can be used together to obtain different
 * types of bidi reordering and text display. The application can use these two fields
 * to insert Unicode Control Characters in specific offsets in the line, the character
 * at segmentsChars[i] is inserted at the offset specified by segments[i]. When both fields
 * are set, the rules for the segments field are less restrictive:
 * </p>
 * <ul>
 * <li>elements must be in ascending order, duplicates are allowed
 * <li>elements must not exceed the line length
 * </ul>
 *
 * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
 */
public class BidiSegmentEvent extends SegmentEvent {

	static final long serialVersionUID = -3712986188155944253L;

BidiSegmentEvent(StyledTextEvent e) {
	super(e);
}
}
