Class CharAssociation
- java.lang.Object
-
- org.apache.fop.complexscripts.util.CharAssociation
-
- All Implemented Interfaces:
java.lang.Cloneable
public class CharAssociation extends java.lang.Object implements java.lang.Cloneable
A structure class encapsulating an interval of characters expressed as an offset and count of Unicode scalar values (in an IntBuffer). ACharAssociation
is used to maintain a backpointer from a glyph to one or more character intervals from which the glyph was derived. Each glyph in a glyph sequence is associated with a singleCharAssociation
instance. ACharAssociation
instance is additionally (and optionally) used to record predication information about the glyph, such as whether the glyph was produced by the application of a specific substitution table or whether its position was adjusted by a specific poisitioning table.This work was originally authored by Glenn Adams (gadams@apache.org).
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static interface
CharAssociation.PredicationMerger
-
Field Summary
Fields Modifier and Type Field Description private int
count
private int
offset
private static java.util.Map<java.lang.String,CharAssociation.PredicationMerger>
predicationMergers
private java.util.Map<java.lang.String,java.lang.Object>
predications
private static int[]
SORT_INCREMENTS_03
private static int[]
SORT_INCREMENTS_16
private int[]
subIntervals
-
Constructor Summary
Constructors Constructor Description CharAssociation(int[] subIntervals)
Instantiate a non-disjoint character association.CharAssociation(int offset, int count)
Instantiate a non-disjoint character association.CharAssociation(int offset, int count, int[] subIntervals)
Instantiate a character association.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description java.lang.Object
clone()
boolean
contained(int offset, int count)
private static int[]
extractIntervals(CharAssociation[] aa)
Extract sorted sub-intervals.int
getCount()
int
getEnd()
int
getOffset()
java.lang.Object
getPredication(java.lang.String key)
Get predication KEY.static CharAssociation.PredicationMerger
getPredicationMerger(java.lang.String key)
Obtain predication merger for KEY.int
getStart()
int
getSubIntervalCount()
int[]
getSubIntervals()
private static int
getSubIntervalsLength(int[] ia)
private static int
getSubIntervalsStart(int[] ia)
boolean
isDisjoint()
static CharAssociation
join(CharAssociation[] aa)
Join (merge) multiple associations into a single, potentially disjoint association.private static int[]
mergeIntervals(int[] ia)
Merge overlapping and abutting sub-intervals.private static CharAssociation
mergePredicates(CharAssociation ca, CharAssociation[] aa)
void
mergePredication(java.lang.String key, java.lang.Object value)
Merge predication <KEY,VALUE>.void
mergePredications(CharAssociation ca)
Merge predications from another CA.static java.lang.Object
mergePredicationValues(java.lang.String key, java.lang.Object v1, java.lang.Object v2)
Merge predication values V1 and V2 on KEY.static CharAssociation[]
replicate(CharAssociation a, int repeat)
Replicate association to formrepeat
new associations.void
setPredication(java.lang.String key, java.lang.Object value)
Set predication <KEY,VALUE>.static void
setPredicationMerger(java.lang.String key, CharAssociation.PredicationMerger pm)
Register predication merger PM for KEY.private static int[]
sortIntervals(int[] sa, int[] ea)
Sort sub-intervals using modified Shell Sort.java.lang.String
toString()
-
-
-
Field Detail
-
offset
private final int offset
-
count
private final int count
-
subIntervals
private final int[] subIntervals
-
predications
private java.util.Map<java.lang.String,java.lang.Object> predications
-
predicationMergers
private static volatile java.util.Map<java.lang.String,CharAssociation.PredicationMerger> predicationMergers
-
SORT_INCREMENTS_16
private static final int[] SORT_INCREMENTS_16
-
SORT_INCREMENTS_03
private static final int[] SORT_INCREMENTS_03
-
-
Constructor Detail
-
CharAssociation
public CharAssociation(int offset, int count, int[] subIntervals)
Instantiate a character association.- Parameters:
offset
- into array of Unicode scalar values (in associated IntBuffer)count
- of Unicode scalar values (in associated IntBuffer)subIntervals
- if disjoint, then array of sub-intervals, otherwise null; even members of array are sub-interval starts, and odd members are sub-interval ends (exclusive)
-
CharAssociation
public CharAssociation(int offset, int count)
Instantiate a non-disjoint character association.- Parameters:
offset
- into array of UTF-16 code elements (in associated CharSequence)count
- of UTF-16 character code elements (in associated CharSequence)
-
CharAssociation
public CharAssociation(int[] subIntervals)
Instantiate a non-disjoint character association.- Parameters:
subIntervals
- if disjoint, then array of sub-intervals, otherwise null; even members of array are sub-interval starts, and odd members are sub-interval ends (exclusive)
-
-
Method Detail
-
getOffset
public int getOffset()
- Returns:
- offset (start of association interval)
-
getCount
public int getCount()
- Returns:
- count (number of characer codes in association)
-
getStart
public int getStart()
- Returns:
- start of association interval
-
getEnd
public int getEnd()
- Returns:
- end of association interval
-
isDisjoint
public boolean isDisjoint()
- Returns:
- true if association is disjoint
-
getSubIntervals
public int[] getSubIntervals()
- Returns:
- subintervals of disjoint association
-
getSubIntervalCount
public int getSubIntervalCount()
- Returns:
- count of subintervals of disjoint association
-
contained
public boolean contained(int offset, int count)
- Parameters:
offset
- of interval in sequencecount
- length of interval- Returns:
- true if this association is contained within [offset,offset+count)
-
setPredication
public void setPredication(java.lang.String key, java.lang.Object value)
Set predication <KEY,VALUE>.- Parameters:
key
- predication keyvalue
- predication value
-
getPredication
public java.lang.Object getPredication(java.lang.String key)
Get predication KEY.- Parameters:
key
- predication key- Returns:
- predication KEY at OFFSET or null if none exists
-
mergePredication
public void mergePredication(java.lang.String key, java.lang.Object value)
Merge predication <KEY,VALUE>.- Parameters:
key
- predication keyvalue
- predication value
-
mergePredicationValues
public static java.lang.Object mergePredicationValues(java.lang.String key, java.lang.Object v1, java.lang.Object v2)
Merge predication values V1 and V2 on KEY. Uses registeredPredicationMerger
if one exists, otherwise uses V2 if non-null, otherwise uses V1.- Parameters:
key
- predication keyv1
- first (original) predication valuev2
- second (to be merged) predication value- Returns:
- merged value
-
mergePredications
public void mergePredications(CharAssociation ca)
Merge predications from another CA.- Parameters:
ca
- from which to merge
-
clone
public java.lang.Object clone()
- Overrides:
clone
in classjava.lang.Object
-
setPredicationMerger
public static void setPredicationMerger(java.lang.String key, CharAssociation.PredicationMerger pm)
Register predication merger PM for KEY.- Parameters:
key
- for predication mergerpm
- predication merger
-
getPredicationMerger
public static CharAssociation.PredicationMerger getPredicationMerger(java.lang.String key)
Obtain predication merger for KEY.- Parameters:
key
- for predication merger- Returns:
- predication merger or null if none exists
-
replicate
public static CharAssociation[] replicate(CharAssociation a, int repeat)
Replicate association to formrepeat
new associations.- Parameters:
a
- association to replicaterepeat
- count- Returns:
- array of replicated associations
-
join
public static CharAssociation join(CharAssociation[] aa)
Join (merge) multiple associations into a single, potentially disjoint association.- Parameters:
aa
- array of associations to join- Returns:
- (possibly disjoint) association containing joined associations
-
mergePredicates
private static CharAssociation mergePredicates(CharAssociation ca, CharAssociation[] aa)
-
getSubIntervalsStart
private static int getSubIntervalsStart(int[] ia)
-
getSubIntervalsLength
private static int getSubIntervalsLength(int[] ia)
-
extractIntervals
private static int[] extractIntervals(CharAssociation[] aa)
Extract sorted sub-intervals.
-
sortIntervals
private static int[] sortIntervals(int[] sa, int[] ea)
Sort sub-intervals using modified Shell Sort.
-
mergeIntervals
private static int[] mergeIntervals(int[] ia)
Merge overlapping and abutting sub-intervals.
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
-