2022-12-13 10:05:26 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* SPDX-License-Identifier: MIT OR MPL-2.0 OR LGPL-2.1-or-later OR GPL-2.0-or-later */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* Copyright 2010, SIL International, All rights reserved. */  
						 
					
						
							
								
									
										
										
										
											2020-08-11 12:10:23 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								# pragma once 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "graphite2/Types.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "graphite2/Font.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# ifdef __cplusplus 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								extern  " C "  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# endif 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								enum  gr_break_weight  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_breakNone  =  0 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* after break weights */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_breakWhitespace  =  10 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_breakWord  =  15 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_breakIntra  =  20 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_breakLetter  =  30 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_breakClip  =  40 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /* before break weights */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_breakBeforeWhitespace  =  - 10 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_breakBeforeWord  =  - 15 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_breakBeforeIntra  =  - 20 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_breakBeforeLetter  =  - 30 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_breakBeforeClip  =  - 40 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								enum  gr_justFlags  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// Indicates that this segment is a complete line
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_justCompleteLine  =  0 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// Indicates that the start of the slot list is not at the start of a line
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_justStartInline  =  1 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// Indicates that the end of the slot list is not at the end of a line
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_justEndInline  =  2 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Used for looking up slot attributes. Most are already available in other functions **/  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								enum  gr_attrCode  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// adjusted glyph advance in x direction in design units
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatAdvX  =  0 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// adjusted glyph advance in y direction (usually 0) in design units
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatAdvY , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// returns 0. Deprecated.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatAttTo , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// This slot attaches to its parent at the given design units in the x direction
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatAttX , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// This slot attaches to its parent at the given design units in the y direction
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatAttY , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// This slot attaches to its parent at the given glyph point (not implemented)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatAttGpt , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// x-direction adjustment from the given glyph point (not implemented)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatAttXOff , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// y-direction adjustment from the given glyph point (not implemented)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatAttYOff , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// Where on this glyph should align with the attachment point on the parent glyph in the x-direction.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatAttWithX , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// Where on this glyph should align with the attachment point on the parent glyph in the y-direction
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatAttWithY , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// Which glyph point on this glyph should align with the attachment point on the parent glyph (not implemented).
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatWithGpt , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// Adjustment to gr_slatWithGpt in x-direction (not implemented)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatAttWithXOff , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// Adjustment to gr_slatWithGpt in y-direction (not implemented)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatAttWithYOff , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// Attach at given nesting level (not implemented)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatAttLevel , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// Line break breakweight for this glyph
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatBreak , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// Ligature component reference (not implemented)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatCompRef , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// bidi directionality of this glyph (not implemented)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatDir , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// Whether insertion is allowed before this glyph
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatInsert , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// Final positioned position of this glyph relative to its parent in x-direction in pixels
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatPosX , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// Final positioned position of this glyph relative to its parent in y-direction in pixels
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatPosY , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// Amount to shift glyph by in x-direction design units
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatShiftX , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// Amount to shift glyph by in y-direction design units
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatShiftY , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// attribute user1
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatUserDefnV1 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// not implemented
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatMeasureSol , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// not implemented
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatMeasureEol , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// Amount this slot can stretch (not implemented)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatJStretch , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// Amount this slot can shrink (not implemented)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatJShrink , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// Granularity by which this slot can stretch or shrink (not implemented)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatJStep , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// Justification weight for this glyph (not implemented)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatJWeight , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// Amount this slot mush shrink or stretch in design units
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatJWidth  =  29 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// SubSegment split point
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatSegSplit  =  gr_slatJStretch  +  29 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// User defined attribute, see subattr for user attr number
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatUserDefn , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// Bidi level
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatBidiLevel  =  56 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// Collision flags
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatColFlags , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// Collision constraint rectangle left (bl.x)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatColLimitblx , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// Collision constraint rectangle lower (bl.y)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatColLimitbly , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// Collision constraint rectangle right (tr.x)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatColLimittrx , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// Collision constraint rectangle upper (tr.y)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatColLimittry , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// Collision shift x
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatColShiftx , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// Collision shift y
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatColShifty , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// Collision margin
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatColMargin , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// Margin cost weight
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatColMarginWt , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // Additional glyph that excludes movement near this one:
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatColExclGlyph , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatColExclOffx , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatColExclOffy , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // Collision sequence enforcing attributes:
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatSeqClass , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatSeqProxClass , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatSeqOrder , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatSeqAboveXoff , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatSeqAboveWt , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatSeqBelowXlim , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatSeqBelowWt , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatSeqValignHt , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatSeqValignWt , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// not implemented
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatMax , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// not implemented
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_slatNoEffect  =  gr_slatMax  +  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								enum  gr_bidirtl  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// Underlying paragraph direction is RTL
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_rtl  =  1 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// Set this to not run the bidi pass internally, even if the font asks for it.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// This presumes that the segment is in a single direction. Most of the time
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// this bit should be set unless you know you are passing full paragraphs of text.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_nobidi  =  2 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /// Disable auto mirroring for rtl text
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    gr_nomirror  =  4 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								typedef  struct  gr_char_info      gr_char_info ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								typedef  struct  gr_segment        gr_segment ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								typedef  struct  gr_slot           gr_slot ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Returns Unicode character for a charinfo.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  @ param  p  Pointer  to  charinfo  to  return  information  on . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								GR2_API  unsigned  int  gr_cinfo_unicode_char ( const  gr_char_info *  p /*not NULL*/ ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Returns breakweight for a charinfo.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  @ return  Breakweight  is  a  number  between  - 50  and  50  indicating  the  cost  of  a 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  break  before  or  after  this  character .  If  the  value  <  0 ,  the  absolute  value 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  is  this  character ' s  contribution  to  the  overall  breakweight  before  it .  If  the  value 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  >  0 ,  then  the  value  is  this  character ' s  contribution  to  the  overall  breakweight  after  it . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  The  overall  breakweight  between  two  characters  is  the  maximum  of  the  breakweight 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  contributions  from  the  characters  either  side  of  it .  If  a  character  makes  no 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  contribution  to  the  breakweight  on  one  side  of  it ,  the  contribution  is  considered 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  to  be  0. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  @ param  p  Pointer  to  charinfo  to  return  information  on . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								GR2_API  int  gr_cinfo_break_weight ( const  gr_char_info *  p /*not NULL*/ ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Returns the slot index that after this character is after in the slot stream
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  In  effect  each  character  is  associated  with  a  set  of  slots  and  this  returns 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  the  index  of  the  last  slot  in  the  segment  this  character  is  associated  with . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  @ return  after  slot  index  between  0  and  gr_seg_n_slots ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  @ param  p  Pointer  to  charinfo  to  return  information  on . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								GR2_API  int  gr_cinfo_after ( const  gr_char_info *  p /*not NULL*/ ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Returns the slot index that before this character is before in the slot stream
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  In  effect  each  character  is  associated  with  a  set  of  slots  and  this  returns 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  the  index  of  the  first  slot  in  the  segment  this  character  is  associated  with . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  @ return  before  slot  index  between  0  and  gr_seg_n_slots ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  @ param  p  Pointer  to  charinfo  to  return  information  on . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								GR2_API  int  gr_cinfo_before ( const  gr_char_info *  p /*not NULL*/ ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Returns the code unit index of this character in the input string
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  @ return  code  unit  index  between  0  and  the  end  of  the  string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  @ param  p  Pointer  to  charinfo  to  return  information  on . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								GR2_API  size_t  gr_cinfo_base ( const  gr_char_info *  p /*not NULL*/ ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Returns the number of unicode characters in a string.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  @ return  number  of  characters  in  the  string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  @ param  enc  Specifies  the  type  of  data  in  the  string :  utf8 ,  utf16 ,  utf32 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  @ param  buffer_begin  The  start  of  the  string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  @ param  buffer_end  Measure  up  to  the  first  nul  or  when  end  is  reached ,  whichever  is  earliest . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *             This  parameter  may  be  NULL . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  @ param  pError  If  there  is  a  structural  fault  in  the  string ,  the  location  is  returned 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *                in  this  variable .  If  no  error  occurs ,  pError  will  contain  NULL .  NULL 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *                may  be  passed  for  pError  if  no  such  information  is  required . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								GR2_API  size_t  gr_count_unicode_characters ( enum  gr_encform  enc ,  const  void *  buffer_begin ,  const  void *  buffer_end ,  const  void * *  pError ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Creates and returns a segment.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  @ return  a  segment  that  needs  seg_destroy  called  on  it .  May  return  NULL  if  bad  problems 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *      in  segment  processing . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  @ param  font  Gives  the  size  of  the  font  in  pixels  per  em  for  final  positioning .  If 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *              NULL ,  positions  are  returned  in  design  units ,  i . e .  at  a  ppm  of  the  upem 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *              of  the  face . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  @ param  face  The  face  containing  all  the  non - size  dependent  information . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  @ param  script  This  is  a  tag  containing  a  script  identifier  that  is  used  to  choose 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *                which  graphite  table  within  the  font  to  use .  Maybe  0.  Tag  may  be  4  chars 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *                NULL  padded  in  LSBs  or  space  padded  in  LSBs . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  @ param  pFeats  Pointer  to  a  feature  values  to  be  used  for  the  segment .  Only  one 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *                feature  values  may  be  used  for  a  segment .  If  NULL  the  default  features 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *                for  the  font  will  be  used . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  @ param  enc  Specifies  what  encoding  form  the  string  is  in  ( utf8 ,  utf16 ,  utf32 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  @ param  pStart  Start  of  the  string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  @ param  nChars  Number  of  unicode  characters  to  process  in  the  string .  The  string  will 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *                be  processed  either  up  to  the  first  NULL  or  until  nChars  have  been 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *                processed .  nChars  is  also  used  to  initialise  the  internal  memory 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *                allocations  of  the  segment .  So  it  is  wise  not  to  make  nChars  too  much 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *                greater  than  the  actual  number  of  characters  being  processed . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  @ param  dir  Specifies  whether  the  segment  is  processed  right  to  left  ( 1 )  or  left  to 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *             right  ( 0 )  and  whether  to  run  the  internal  bidi  pass ,  if  a  font  requests  it . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *             See  enum  gr_bidirtl  for  details . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								GR2_API  gr_segment *  gr_make_seg ( const  gr_font *  font ,  const  gr_face *  face ,  gr_uint32  script ,  const  gr_feature_val *  pFeats ,  enum  gr_encform  enc ,  const  void *  pStart ,  size_t  nChars ,  int  dir ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Destroys a segment, freeing the memory.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  @ param  p  The  segment  to  destroy 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								GR2_API  void  gr_seg_destroy ( gr_segment *  p ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Returns the advance for the whole segment.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  Returns  the  width  of  the  segment  up  to  the  next  glyph  origin  after  the  segment 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								GR2_API  float  gr_seg_advance_X ( const  gr_segment *  pSeg /*not NULL*/ ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Returns the height advance for the segment. **/  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								GR2_API  float  gr_seg_advance_Y ( const  gr_segment *  pSeg /*not NULL*/ ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Returns the number of gr_char_infos in the segment. **/  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								GR2_API  unsigned  int  gr_seg_n_cinfo ( const  gr_segment *  pSeg /*not NULL*/ ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Returns a gr_char_info at a given index in the segment. **/  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								GR2_API  const  gr_char_info *  gr_seg_cinfo ( const  gr_segment *  pSeg /*not NULL*/ ,  unsigned  int  index /*must be <number_of_CharInfo*/ ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Returns the number of glyph gr_slots in the segment. **/  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								GR2_API  unsigned  int  gr_seg_n_slots ( const  gr_segment *  pSeg /*not NULL*/ ) ;       //one slot per glyph
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Returns the first gr_slot in the segment.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  The  first  slot  in  a  segment  has  a  gr_slot_prev_in_segment ( )  of  NULL .  Slots  are  owned 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  by  their  segment  and  are  destroyed  along  with  the  segment . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								GR2_API  const  gr_slot *  gr_seg_first_slot ( gr_segment *  pSeg /*not NULL*/ ) ;     //may give a base slot or a slot which is attached to another
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Returns the last gr_slot in the segment.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  The  last  slot  in  a  segment  has  a  gr_slot_next_in_segment ( )  of  NULL 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								GR2_API  const  gr_slot *  gr_seg_last_slot ( gr_segment *  pSeg /*not NULL*/ ) ;     //may give a base slot or a slot which is attached to another
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Justifies a linked list of slots for a line to a given width
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  Passed  a  pointer  to  the  start  of  a  linked  list  of  slots  corresponding  to  a  line ,  as 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  set  up  by  gr_slot_linebreak_before ,  this  function  will  position  the  glyphs  in  the  line 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  to  take  up  the  given  width .  It  is  possible  to  specify  a  subrange  within  the  line  to  process . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  This  allows  skipping  of  line  initial  or  final  whitespace ,  for  example .  While  this  will  ensure 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  that  the  subrange  fits  width ,  the  line  will  still  be  positioned  with  the  first  glyph  of  the 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  line  at  0.  So  the  resulting  positions  may  be  beyond  width . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  @ return  float    The  resulting  width  of  the  range  of  slots  justified . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  @ param  pSeg      Pointer  to  the  segment 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  @ param  pStart    Pointer  to  the  start  of  the  line  linked  list  ( including  skipped  characters ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  @ param  pFont     Font  to  use  for  positioning 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  @ param  width     Width  in  pixels  in  which  to  fit  the  line .  If  <  0.  don ' t  adjust  natural  width ,  just  run  justification  passes 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *                  to  handle  line  end  contextuals ,  if  there  are  any . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  @ param  flags     Indicates  line  ending  types .  Default  is  linked  list  is  a  full  line 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  @ param  pFirst    If  not  NULL ,  the  first  slot  in  the  list  to  be  considered  part  of  the  line  ( so  can  skip ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  @ param  pLast     If  not  NULL ,  the  last  slot  to  process  in  the  line  ( allow  say  trailing  whitespace  to  be  skipped ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								GR2_API  float  gr_seg_justify ( gr_segment *  pSeg /*not NULL*/ ,  const  gr_slot *  pStart /*not NULL*/ ,  const  gr_font  * pFont ,  double  width ,  enum  gr_justFlags  flags ,  const  gr_slot *  pFirst ,  const  gr_slot *  pLast ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Returns the next slot along in the segment.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  Slots  are  held  in  a  linked  list .  This  returns  the  next  in  the  linked  list .  The  slot 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  may  or  may  not  be  attached  to  another  slot .  Returns  NULL  at  the  end  of  the  segment . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								GR2_API  const  gr_slot *  gr_slot_next_in_segment ( const  gr_slot *  p ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Returns the previous slot along in the segment.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  Slots  are  held  in  a  doubly  linked  list .  This  returns  the  previos  slot  in  the  linked 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  list .  This  slot  may  or  may  not  be  attached  to  it .  Returns  NULL  at  the  start  of  the 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  segment . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								GR2_API  const  gr_slot *  gr_slot_prev_in_segment ( const  gr_slot *  p ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Returns the attachment parent slot of this slot.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  Attached  slots  form  a  tree .  This  returns  the  parent  of  this  slot  in  that  tree .  A 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  base  glyph  which  is  not  attached  to  another  glyph ,  always  returns  NULL . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								GR2_API  const  gr_slot *  gr_slot_attached_to ( const  gr_slot *  p ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Returns the first slot attached to this slot.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  Attached  slots  form  a  singly  linked  list  from  the  parent .  This  returns  the  first 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  slot  in  that  list .  Note  that  this  is  a  reference  to  another  slot  that  is  also  in 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  the  main  segment  doubly  linked  list . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  if  gr_slot_first_attachment ( p )  ! =  NULL  then  gr_slot_attached_to ( gr_slot_first_attachment ( p ) )  = =  p . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								GR2_API  const  gr_slot *  gr_slot_first_attachment ( const  gr_slot *  p ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Returns the next slot attached to our attachment parent.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  This  returns  the  next  slot  in  the  singly  linked  list  of  slots  attached  to  this 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  slot ' s  parent .  If  there  are  no  more  such  slots ,  NULL  is  returned .  If  there  is 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  no  parent ,  i . e .  the  passed  slot  is  a  cluster  base ,  then  the  next  cluster  base 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  in  graphical  order  ( ltr ,  even  for  rtl  text )  is  returned . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  if  gr_slot_next_sibling_attachment ( p )  ! =  NULL  then  gr_slot_attached_to ( gr_slot_next_sibling_attachment ( p ) )  = =  gr_slot_attached_to ( p ) . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								GR2_API  const  gr_slot *  gr_slot_next_sibling_attachment ( const  gr_slot *  p ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Returns glyph id of the slot
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  Each  slot  has  a  glyphid  which  is  rendered  at  the  position  given  by  the  slot .  This 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  glyphid  is  the  real  glyph  to  be  rendered  and  never  a  pseudo  glyph . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								GR2_API  unsigned  short  gr_slot_gid ( const  gr_slot *  p ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Returns X offset of glyph from start of segment **/  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								GR2_API  float  gr_slot_origin_X ( const  gr_slot *  p ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Returns Y offset of glyph from start of segment **/  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								GR2_API  float  gr_slot_origin_Y ( const  gr_slot *  p ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Returns the glyph advance for this glyph as adjusted for kerning
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  @ param  p     Slot  to  give  results  for 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  @ param  face  gr_face  of  the  glyphs .  May  be  NULL  if  unhinted  advances  used 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  @ param  font  gr_font  to  scale  for  pixel  results .  If  NULL  returns  design 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *              units  advance .  If  not  NULL  then  returns  pixel  advance  based 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *              on  hinted  or  scaled  glyph  advances  in  the  font .  face  must  be 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *              passed  for  hinted  advances  to  be  used . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								GR2_API  float  gr_slot_advance_X ( const  gr_slot *  p ,  const  gr_face *  face ,  const  gr_font  * font ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Returns the vertical advance for the glyph in the slot adjusted for kerning
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  Returns  design  units  unless  font  is  not  NULL  in  which  case  the  pixel  value 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  is  returned  scaled  for  the  given  font 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								GR2_API  float  gr_slot_advance_Y ( const  gr_slot *  p ,  const  gr_face *  face ,  const  gr_font  * font ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Returns the gr_char_info index before us
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  Returns  the  index  of  the  gr_char_info  that  a  cursor  before  this  slot ,  would  put 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  an  underlying  cursor  before .  This  may  also  be  interpretted  as  each  slot  holding 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  a  set  of  char_infos  that  it  is  associated  with  and  this  function  returning  the 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  index  of  the  char_info  with  lowest  index ,  from  this  set . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								GR2_API  int  gr_slot_before ( const  gr_slot *  p /*not NULL*/ ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Returns the gr_char_info index after us
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  Returns  the  index  of  the  gr_char_info  that  a  cursor  after  this  slot  would  put  an 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  underlying  cursor  after .  This  may  also  be  interpretted  as  each  slot  holding  a  set 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  of  char_infos  that  it  is  associated  with  and  this  function  returning  the  index  of 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  the  char_info  with  the  highest  index ,  from  this  set . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								GR2_API  int  gr_slot_after ( const  gr_slot *  p /*not NULL*/ ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Returns the index of this slot in the segment
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  Returns  the  index  given  to  this  slot  during  final  positioning .  This  corresponds 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  to  the  value  returned  br  gr_cinfo_before ( )  and  gr_cinfo_after ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								GR2_API  unsigned  int  gr_slot_index ( const  gr_slot *  p /*not NULL*/ ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Return a slot attribute value
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  Given  a  slot  and  an  attribute  along  with  a  possible  subattribute ,  return  the 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  corresponding  value  in  the  slot .  See  enum  gr_attrCode  for  details  of  each  attribute . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								GR2_API  int  gr_slot_attr ( const  gr_slot *  p /*not NULL*/ ,  const  gr_segment *  pSeg /*not NULL*/ ,  enum  gr_attrCode  index ,  gr_uint8  subindex ) ;  //tbd - do we need to expose this?
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Returns whether text may be inserted before this glyph.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  This  indicates  whether  a  cursor  can  be  put  before  this  slot .  It  applies  to 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  base  glyphs  that  have  no  parent  as  well  as  attached  glyphs  that  have  the 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  . insert  attribute  explicitly  set  to  true .  This  is  the  primary  mechanism 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  for  identifying  contiguous  sequences  of  base  plus  diacritics . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								GR2_API  int  gr_slot_can_insert_before ( const  gr_slot *  p ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Returns the original gr_char_info index this slot refers to.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  Each  Slot  has  a  gr_char_info  that  it  originates  from .  This  is  that  gr_char_info . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  The  index  is  passed  to  gr_seg_cinfo ( ) .  This  information  is  useful  for  testing . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								GR2_API  int  gr_slot_original ( const  gr_slot *  p /*not NULL*/ ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/** Breaks a segment into lines.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  Breaks  the  slot  linked  list  at  the  given  point  in  the  linked  list .  It  is  up 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  to  the  application  to  keep  track  of  the  first  slot  on  each  line . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								GR2_API  void  gr_slot_linebreak_before ( gr_slot  * p /*not NULL*/ ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# ifdef __cplusplus 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# endif