Home | History | Annotate | Download | only in layout
      1 //  2016 and later: Unicode, Inc. and others.
      2 // License & terms of use: http://www.unicode.org/copyright.html
      3 /*
      4  *
      5  * (C) Copyright IBM Corp. 1998-2011 - All Rights Reserved
      6  *
      7  */
      8 
      9 #ifndef __PLRUNS_H
     10 #define __PLRUNS_H
     11 
     12 #include "unicode/utypes.h"
     13 
     14 #ifndef U_HIDE_INTERNAL_API
     15 
     16 #include "unicode/ubidi.h"
     17 #include "layout/LETypes.h"
     18 
     19 #include "layout/loengine.h"
     20 
     21 /**
     22  * Opaque datatype representing an array of font runs
     23  */
     24 typedef void pl_fontRuns;
     25 /**
     26  * Opaque datatype representing an array of value runs
     27  */
     28 typedef void pl_valueRuns;
     29 /**
     30  * Opaque datatype representing an array of locale runs
     31  */
     32 typedef void pl_localeRuns;
     33 
     34 /**
     35  * \file
     36  * \brief C API for run arrays.
     37  *
     38  * This is a technology preview. The API may
     39  * change significantly.
     40  *
     41  */
     42 
     43 /**
     44  * Construct a <code>pl_fontRuns</code> object from pre-existing arrays of fonts
     45  * and limit indices.
     46  *
     47  * @param fonts is the address of an array of pointers to <code>le_font</code> objects. This
     48  *              array, and the <code>le_font</code> objects to which it points must remain
     49  *              valid until the <code>pl_fontRuns</code> object is closed.
     50  *
     51  * @param limits is the address of an array of limit indices. This array must remain valid until
     52  *               the <code>pl_fontRuns</code> object is closed.
     53  *
     54  * @param count is the number of entries in the two arrays.
     55  *
     56  * @internal
     57  */
     58 U_INTERNAL pl_fontRuns * U_EXPORT2
     59 pl_openFontRuns(const le_font **fonts,
     60                 const le_int32 *limits,
     61                 le_int32 count);
     62 
     63 /**
     64  * Construct an empty <code>pl_fontRuns</code> object. Clients can add font and limit
     65  * indices arrays using the <code>pl_addFontRun</code> routine.
     66  *
     67  * @param initialCapacity is the initial size of the font and limit indices arrays. If
     68  *                        this value is zero, no arrays will be allocated.
     69  *
     70  * @see pl_addFontRun
     71  *
     72  * @internal
     73  */
     74 U_INTERNAL pl_fontRuns * U_EXPORT2
     75 pl_openEmptyFontRuns(le_int32 initialCapacity);
     76 
     77 /**
     78  * Close the given <code>pl_fontRuns</code> object. Once this
     79  * call returns, the object can no longer be referenced.
     80  *
     81  * @param fontRuns is the <code>pl_fontRuns</code> object.
     82  *
     83  * @internal
     84  */
     85 U_INTERNAL void U_EXPORT2
     86 pl_closeFontRuns(pl_fontRuns *fontRuns);
     87 
     88 /**
     89  * Get the number of font runs.
     90  *
     91  * @param fontRuns is the <code>pl_fontRuns</code> object.
     92  *
     93  * @return the number of entries in the limit indices array.
     94  *
     95  * @internal
     96  */
     97 U_INTERNAL le_int32 U_EXPORT2
     98 pl_getFontRunCount(const pl_fontRuns *fontRuns);
     99 
    100 /**
    101  * Reset the number of font runs to zero.
    102  *
    103  * @param fontRuns is the <code>pl_fontRuns</code> object.
    104  *
    105  * @internal
    106  */
    107 U_INTERNAL void U_EXPORT2
    108 pl_resetFontRuns(pl_fontRuns *fontRuns);
    109 
    110 /**
    111  * Get the limit index for the last font run. This is the
    112  * number of characters in the text.
    113  *
    114  * @param fontRuns is the <code>pl_fontRuns</code> object.
    115  *
    116  * @return the last limit index.
    117  *
    118  * @internal
    119  */
    120 U_INTERNAL le_int32 U_EXPORT2
    121 pl_getFontRunLastLimit(const pl_fontRuns *fontRuns);
    122 
    123 /**
    124  * Get the limit index for a particular font run.
    125  *
    126  * @param fontRuns is the <code>pl_fontRuns</code> object.
    127  * @param run is the run. This is an index into the limit index array.
    128  *
    129  * @return the limit index for the run, or -1 if <code>run</code> is out of bounds.
    130  *
    131  * @internal
    132  */
    133 U_INTERNAL le_int32 U_EXPORT2
    134 pl_getFontRunLimit(const pl_fontRuns *fontRuns,
    135                    le_int32 run);
    136 
    137 /**
    138  * Get the <code>le_font</code> object assoicated with the given run
    139  * of text. Use <code>pl_getFontRunLimit(run)</code> to get the corresponding
    140  * limit index.
    141  *
    142  * @param fontRuns is the <code>pl_fontRuns</code> object.
    143  * @param run is the index into the font and limit indices arrays.
    144  *
    145  * @return the <code>le_font</code> associated with the given text run.
    146  *
    147  * @internal
    148  */
    149 U_INTERNAL const le_font * U_EXPORT2
    150 pl_getFontRunFont(const pl_fontRuns *fontRuns,
    151                   le_int32 run);
    152 
    153 
    154 /**
    155  * Add a new font run to the given <code>pl_fontRuns</code> object.
    156  *
    157  * If the <code>pl_fontRuns</code> object was not created by calling
    158  * <code>pl_openEmptyFontRuns</code>, this method will return a run index of -1.
    159  *
    160  * @param fontRuns is the <code>pl_fontRuns</code> object.
    161  *
    162  * @param font is the address of the <code>le_font</code> to add. This object must
    163  *             remain valid until the <code>pl_fontRuns</code> object is closed.
    164  *
    165  * @param limit is the limit index to add
    166  *
    167  * @return the run index where the font and limit index were stored, or -1 if
    168  *         the run cannot be added.
    169  *
    170  * @internal
    171  */
    172 U_INTERNAL le_int32 U_EXPORT2
    173 pl_addFontRun(pl_fontRuns *fontRuns,
    174               const le_font *font,
    175               le_int32 limit);
    176 
    177 /**
    178  * Construct a <code>pl_valueRuns</code> object from pre-existing arrays of values
    179  * and limit indices.
    180  *
    181  * @param values is the address of an array of values. This array must remain valid until
    182                  the <code>pl_valueRuns</code> object is closed.
    183  *
    184  * @param limits is the address of an array of limit indices. This array must remain valid until
    185  *               the <code>pl_valueRuns</code> object is closed.
    186  *
    187  * @param count is the number of entries in the two arrays.
    188  *
    189  * @internal
    190  */
    191 U_INTERNAL pl_valueRuns * U_EXPORT2
    192 pl_openValueRuns(const le_int32 *values,
    193                  const le_int32 *limits,
    194                  le_int32 count);
    195 
    196 /**
    197  * Construct an empty <code>pl_valueRuns</code> object. Clients can add values and limits
    198  * using the <code>pl_addValueRun</code> routine.
    199  *
    200  * @param initialCapacity is the initial size of the value and limit indices arrays. If
    201  *                        this value is zero, no arrays will be allocated.
    202  *
    203  * @see pl_addValueRun
    204  *
    205  * @internal
    206  */
    207 U_INTERNAL pl_valueRuns * U_EXPORT2
    208 pl_openEmptyValueRuns(le_int32 initialCapacity);
    209 
    210 /**
    211  * Close the given <code>pl_valueRuns</code> object. Once this
    212  * call returns, the object can no longer be referenced.
    213  *
    214  * @param valueRuns is the <code>pl_valueRuns</code> object.
    215  *
    216  * @internal
    217  */
    218 U_INTERNAL void U_EXPORT2
    219 pl_closeValueRuns(pl_valueRuns *valueRuns);
    220 
    221 /**
    222  * Get the number of value runs.
    223  *
    224  * @param valueRuns is the <code>pl_valueRuns</code> object.
    225  *
    226  * @return the number of value runs.
    227  *
    228  * @internal
    229  */
    230 U_INTERNAL le_int32 U_EXPORT2
    231 pl_getValueRunCount(const pl_valueRuns *valueRuns);
    232 
    233 /**
    234  * Reset the number of value runs to zero.
    235  *
    236  * @param valueRuns is the <code>pl_valueRuns</code> object.
    237  *
    238  * @internal
    239  */
    240 U_INTERNAL void U_EXPORT2
    241 pl_resetValueRuns(pl_valueRuns *valueRuns);
    242 
    243 /**
    244  * Get the limit index for the last value run. This is the
    245  * number of characters in the text.
    246  *
    247  * @param valueRuns is the <code>pl_valueRuns</code> object.
    248  *
    249  * @return the last limit index.
    250  *
    251  * @internal
    252  */
    253 U_INTERNAL le_int32 U_EXPORT2
    254 pl_getValueRunLastLimit(const pl_valueRuns *valueRuns);
    255 
    256 /**
    257  * Get the limit index for a particular value run.
    258  *
    259  * @param valueRuns is the <code>pl_valueRuns</code> object.
    260  * @param run is the run index.
    261  *
    262  * @return the limit index for the run, or -1 if <code>run</code> is out of bounds.
    263  *
    264  * @internal
    265  */
    266 U_INTERNAL le_int32 U_EXPORT2
    267 pl_getValueRunLimit(const pl_valueRuns *valueRuns,
    268                      le_int32 run);
    269 
    270 /**
    271  * Get the value assoicated with the given run * of text. Use
    272  * <code>pl_getValueRunLimit(run)</code> to get the corresponding
    273  * limit index.
    274  *
    275  * @param valueRuns is the <code>pl_valueRuns</code> object.
    276  * @param run is the run index.
    277  *
    278  * @return the value associated with the given text run.
    279  *
    280  * @internal
    281  */
    282 U_INTERNAL le_int32 U_EXPORT2
    283 pl_getValueRunValue(const pl_valueRuns *valueRuns,
    284                     le_int32 run);
    285 
    286 
    287 /**
    288  * Add a new font run to the given <code>pl_valueRuns</code> object.
    289  *
    290  * If the <code>pl_valueRuns</code> object was not created by calling
    291  * <code>pl_openEmptyFontRuns</code>, this method will return a run index of -1.
    292  *
    293  * @param valueRuns is the <code>pl_valueRuns</code> object.
    294  *
    295  * @param value is the value to add.
    296  *
    297  * @param limit is the limit index to add
    298  *
    299  * @return the run index where the font and limit index were stored, or -1 if
    300  *         the run cannot be added.
    301  *
    302  * @internal
    303  */
    304 U_INTERNAL le_int32 U_EXPORT2
    305 pl_addValueRun(pl_valueRuns *valueRuns,
    306                le_int32 value,
    307                le_int32 limit);
    308 
    309 /**
    310  * Construct a <code>pl_localeRuns</code> object from pre-existing arrays of fonts
    311  * and limit indices.
    312  *
    313  * @param locales is the address of an array of pointers to locale name strings. This
    314  *                array must remain valid until the <code>pl_localeRuns</code> object is destroyed.
    315  *
    316  * @param limits is the address of an array of limit indices. This array must remain valid until
    317  *               the <code>pl_valueRuns</code> object is destroyed.
    318  *
    319  * @param count is the number of entries in the two arrays.
    320  *
    321  * @internal
    322  */
    323 U_INTERNAL pl_localeRuns * U_EXPORT2
    324 pl_openLocaleRuns(const char **locales,
    325                   const le_int32 *limits,
    326                   le_int32 count);
    327 
    328 /**
    329  * Construct an empty <code>pl_localeRuns</code> object. Clients can add font and limit
    330  * indices arrays using the <code>pl_addFontRun</code> routine.
    331  *
    332  * @param initialCapacity is the initial size of the font and limit indices arrays. If
    333  *                        this value is zero, no arrays will be allocated.
    334  *
    335  * @see pl_addLocaleRun
    336  *
    337  * @internal
    338  */
    339 U_INTERNAL pl_localeRuns * U_EXPORT2
    340 pl_openEmptyLocaleRuns(le_int32 initialCapacity);
    341 
    342 /**
    343  * Close the given <code>pl_localeRuns</code> object. Once this
    344  * call returns, the object can no longer be referenced.
    345  *
    346  * @param localeRuns is the <code>pl_localeRuns</code> object.
    347  *
    348  * @internal
    349  */
    350 U_INTERNAL void U_EXPORT2
    351 pl_closeLocaleRuns(pl_localeRuns *localeRuns);
    352 
    353 /**
    354  * Get the number of font runs.
    355  *
    356  * @param localeRuns is the <code>pl_localeRuns</code> object.
    357  *
    358  * @return the number of entries in the limit indices array.
    359  *
    360  * @internal
    361  */
    362 U_INTERNAL le_int32 U_EXPORT2
    363 pl_getLocaleRunCount(const pl_localeRuns *localeRuns);
    364 
    365 /**
    366  * Reset the number of locale runs to zero.
    367  *
    368  * @param localeRuns is the <code>pl_localeRuns</code> object.
    369  *
    370  * @internal
    371  */
    372 U_INTERNAL void U_EXPORT2
    373 pl_resetLocaleRuns(pl_localeRuns *localeRuns);
    374 
    375 /**
    376  * Get the limit index for the last font run. This is the
    377  * number of characters in the text.
    378  *
    379  * @param localeRuns is the <code>pl_localeRuns</code> object.
    380  *
    381  * @return the last limit index.
    382  *
    383  * @internal
    384  */
    385 U_INTERNAL le_int32 U_EXPORT2
    386 pl_getLocaleRunLastLimit(const pl_localeRuns *localeRuns);
    387 
    388 /**
    389  * Get the limit index for a particular font run.
    390  *
    391  * @param localeRuns is the <code>pl_localeRuns</code> object.
    392  * @param run is the run. This is an index into the limit index array.
    393  *
    394  * @return the limit index for the run, or -1 if <code>run</code> is out of bounds.
    395  *
    396  * @internal
    397  */
    398 U_INTERNAL le_int32 U_EXPORT2
    399 pl_getLocaleRunLimit(const pl_localeRuns *localeRuns,
    400                      le_int32 run);
    401 
    402 /**
    403  * Get the <code>le_font</code> object assoicated with the given run
    404  * of text. Use <code>pl_getLocaleRunLimit(run)</code> to get the corresponding
    405  * limit index.
    406  *
    407  * @param localeRuns is the <code>pl_localeRuns</code> object.
    408  * @param run is the index into the font and limit indices arrays.
    409  *
    410  * @return the <code>le_font</code> associated with the given text run.
    411  *
    412  * @internal
    413  */
    414 U_INTERNAL const char * U_EXPORT2
    415 pl_getLocaleRunLocale(const pl_localeRuns *localeRuns,
    416                       le_int32 run);
    417 
    418 
    419 /**
    420  * Add a new run to the given <code>pl_localeRuns</code> object.
    421  *
    422  * If the <code>pl_localeRuns</code> object was not created by calling
    423  * <code>pl_openEmptyLocaleRuns</code>, this method will return a run index of -1.
    424  *
    425  * @param localeRuns is the <code>pl_localeRuns</code> object.
    426  *
    427  * @param locale is the name of the locale to add. This name must
    428  *               remain valid until the <code>pl_localeRuns</code> object is closed.
    429  *
    430  * @param limit is the limit index to add
    431  *
    432  * @return the run index where the font and limit index were stored, or -1 if
    433  *         the run cannot be added.
    434  *
    435  * @internal
    436  */
    437 U_INTERNAL le_int32 U_EXPORT2
    438 pl_addLocaleRun(pl_localeRuns *localeRuns,
    439                 const char *locale,
    440                 le_int32 limit);
    441 
    442 #endif  /* U_HIDE_INTERNAL_API */
    443 #endif
    444