Home | History | Annotate | Download | only in layout
      1 /*
      2  *
      3  * (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved
      4  *
      5  */
      6 
      7 #ifndef __LOENGINE_H
      8 #define __LOENGINE_H
      9 
     10 #include "LETypes.h"
     11 
     12 /**
     13  * \file
     14  * \brief C API for complex text layout.
     15  * \internal
     16  *
     17  * This is a technology preview. The API may
     18  * change significantly.
     19  *
     20  */
     21 
     22 /**
     23  * The opaque type for a LayoutEngine.
     24  *
     25  * @internal
     26  */
     27 typedef void le_engine;
     28 
     29 /**
     30  * The opaque type for a font instance.
     31  *
     32  * @internal
     33  */
     34 typedef void le_font;
     35 
     36 /**
     37  * This function returns an le_engine capable of laying out text
     38  * in the given font, script and langauge. Note that the LayoutEngine
     39  * returned may be a subclass of LayoutEngine.
     40  *
     41  * @param font - the font of the text
     42  * @param scriptCode - the script of the text
     43  * @param languageCode - the language of the text
     44  * @param typo_flags - flags that control layout features like kerning and ligatures.
     45  * @param success - output parameter set to an error code if the operation fails
     46  *
     47  * @return an le_engine which can layout text in the given font.
     48  *
     49  * @internal
     50  */
     51 U_INTERNAL le_engine * U_EXPORT2
     52 le_create(const le_font *font,
     53           le_int32 scriptCode,
     54           le_int32 languageCode,
     55           le_int32 typo_flags,
     56           LEErrorCode *success);
     57 
     58 /**
     59  * This function closes the given LayoutEngine. After
     60  * it returns, the le_engine is no longer valid.
     61  *
     62  * @param engine - the LayoutEngine to close.
     63  *
     64  * @internal
     65  */
     66 U_INTERNAL void U_EXPORT2
     67 le_close(le_engine *engine);
     68 
     69 /**
     70  * This routine will compute the glyph, character index and position arrays.
     71  *
     72  * @param engine - the LayoutEngine
     73  * @param chars - the input character context
     74  * @param offset - the offset of the first character to process
     75  * @param count - the number of characters to process
     76  * @param max - the number of characters in the input context
     77  * @param rightToLeft - TRUE if the characers are in a right to left directional run
     78  * @param x - the initial X position
     79  * @param y - the initial Y position
     80  * @param success - output parameter set to an error code if the operation fails
     81  *
     82  * @return the number of glyphs in the glyph array
     83  *
     84  * Note: The glyph, character index and position array can be accessed
     85  * using the getter routines below.
     86  *
     87  * Note: If you call this function more than once, you must call the reset()
     88  * function first to free the glyph, character index and position arrays
     89  * allocated by the previous call.
     90  *
     91  * @internal
     92  */
     93 U_INTERNAL le_int32 U_EXPORT2
     94 le_layoutChars(le_engine *engine,
     95                const LEUnicode chars[],
     96                le_int32 offset,
     97                le_int32 count,
     98                le_int32 max,
     99                le_bool rightToLeft,
    100                float x,
    101                float y,
    102                LEErrorCode *success);
    103 
    104 /**
    105  * This function returns the number of glyphs in the glyph array. Note
    106  * that the number of glyphs will be greater than or equal to the number
    107  * of characters used to create the LayoutEngine.
    108  *
    109  * @param engine - the LayoutEngine
    110  * @param success - output parameter set to an error code if the operation fails.
    111  *
    112  * @return the number of glyphs in the glyph array
    113  *
    114  * @internal
    115  */
    116 U_INTERNAL le_int32 U_EXPORT2
    117 le_getGlyphCount(le_engine *engine,
    118                  LEErrorCode *success);
    119 
    120 /**
    121  * This function copies the glyph array into a caller supplied array.
    122  * The caller must ensure that the array is large enough to hold all
    123  * the glyphs.
    124  *
    125  * @param engine - the LayoutEngine
    126  * @param glyphs - the destiniation glyph array
    127  * @param success - set to an error code if the operation fails
    128  *
    129  * @internal
    130  */
    131 U_INTERNAL void U_EXPORT2
    132 le_getGlyphs(le_engine *engine,
    133              LEGlyphID glyphs[],
    134              LEErrorCode *success);
    135 
    136 /**
    137  * This function copies the character index array into a caller supplied array.
    138  * The caller must ensure that the array is large enough to hold a
    139  * character index for each glyph.
    140  *
    141  * @param engine - the LayoutEngine
    142  * @param charIndices - the destiniation character index array
    143  * @param success - set to an error code if the operation fails
    144  *
    145  * @internal
    146  */
    147 U_INTERNAL void U_EXPORT2
    148 le_getCharIndices(le_engine *engine,
    149                   le_int32 charIndices[],
    150                   LEErrorCode *success);
    151 
    152 /**
    153  * This function copies the character index array into a caller supplied array.
    154  * The caller must ensure that the array is large enough to hold a
    155  * character index for each glyph.
    156  *
    157  * @param engine - the LayoutEngine
    158  * @param charIndices - the destiniation character index array
    159  * @param indexBase - an offset that will be added to each index.
    160  * @param success - set to an error code if the operation fails
    161  *
    162  * @internal
    163  */
    164 U_INTERNAL void U_EXPORT2
    165 le_getCharIndicesWithBase(le_engine *engine,
    166                   le_int32 charIndices[],
    167                   le_int32 indexBase,
    168                   LEErrorCode *success);
    169 
    170 /**
    171  * This function copies the position array into a caller supplied array.
    172  * The caller must ensure that the array is large enough to hold an
    173  * X and Y position for each glyph, plus an extra X and Y for the
    174  * advance of the last glyph.
    175  *
    176  * @param engine - the LayoutEngine
    177  * @param positions - the destiniation position array
    178  * @param success - set to an error code if the operation fails
    179  *
    180  * @internal
    181  */
    182 U_INTERNAL void U_EXPORT2
    183 le_getGlyphPositions(le_engine *engine,
    184                      float positions[],
    185                      LEErrorCode *success);
    186 
    187 /**
    188  * This function returns the X and Y position of the glyph at
    189  * the given index.
    190  *
    191  * Input parameters:
    192  * @param engine - the LayoutEngine
    193  * @param glyphIndex - the index of the glyph
    194  *
    195  * Output parameters:
    196  * @param x - the glyph's X position
    197  * @param y - the glyph's Y position
    198  * @param success - set to an error code if the operation fails
    199  *
    200  * @internal
    201  */
    202 U_INTERNAL void U_EXPORT2
    203 le_getGlyphPosition(le_engine *engine,
    204                     le_int32 glyphIndex,
    205                     float *x,
    206                     float *y,
    207                     LEErrorCode *success);
    208 
    209 /**
    210  * This function frees the glyph, character index and position arrays
    211  * so that the LayoutEngine can be reused to layout a different
    212  * characer array. (This function is also called by le_close)
    213  *
    214  * @param engine - the LayoutEngine
    215  * @param success - set to an error code if the operation fails
    216  *
    217  * @internal
    218  */
    219 U_INTERNAL void U_EXPORT2
    220 le_reset(le_engine *engine,
    221          LEErrorCode *success);
    222 
    223 #endif
    224