Home | History | Annotate | Download | only in lib
      1 /*
      2  * Copyright (C) 2008-2009 SVOX AG, Baslerstr. 30, 8048 Zuerich, Switzerland
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *     http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 /**
     17  * @file picoktab.h
     18  *
     19  * symbol tables needed at runtime
     20  *
     21  * Copyright (C) 2008-2009 SVOX AG, Baslerstr. 30, 8048 Zuerich, Switzerland
     22  * All rights reserved.
     23  *
     24  * History:
     25  * - 2009-04-20 -- initial version
     26  *
     27  */
     28 /**
     29  * @addtogroup picoktab
     30 
     31  * <b> Symbol tables needed at runtime </b>\n
     32  *
     33 */
     34 
     35 #ifndef PICOKTAB_H_
     36 #define PICOKTAB_H_
     37 
     38 #include "picoos.h"
     39 #include "picoknow.h"
     40 
     41 #ifdef __cplusplus
     42 extern "C" {
     43 #endif
     44 #if 0
     45 }
     46 #endif
     47 
     48 
     49 /* ************************************************************/
     50 /* fixed IDs type and functions */
     51 /* ************************************************************/
     52 
     53 /**  object   : FixedIds
     54  *   shortcut : ids
     55  */
     56 typedef struct picoktab_fixed_ids * picoktab_FixedIds;
     57 
     58 typedef struct picoktab_fixed_ids {
     59     picoos_uint8 phonStartId;
     60     picoos_uint8 phonTermId;
     61 } picoktab_fixed_ids_t;
     62 
     63 /* to be used by picorsrc only */
     64 pico_status_t picoktab_specializeIdsKnowledgeBase(picoknow_KnowledgeBase this,
     65                                                   picoos_Common common);
     66 
     67 picoktab_FixedIds picoktab_getFixedIds(picoknow_KnowledgeBase this);
     68 
     69 
     70 /* ************************************************************/
     71 /* Graphs type and functions */
     72 /* ************************************************************/
     73 
     74 typedef struct picoktab_graphs *picoktab_Graphs;
     75 
     76 /* to be used by picorsrc only */
     77 pico_status_t picoktab_specializeGraphsKnowledgeBase(picoknow_KnowledgeBase this,
     78                                                      picoos_Common common);
     79 
     80 /* return kb graphs for usage in PU */
     81 picoktab_Graphs picoktab_getGraphs(picoknow_KnowledgeBase this);
     82 
     83 /* graph access routine: if the desired graph 'utf8graph' exists in
     84    the graph table a graph offset > 0 is returned, which then can be
     85    used to access the properties */
     86 picoos_uint32 picoktab_graphOffset(const picoktab_Graphs this,
     87                                    picoos_uchar * utf8graph);
     88 
     89 
     90 /* check if UTF8 char 'graph' has property vowellike, return non-zero
     91    if 'ch' has the property, 0 otherwise */
     92 picoos_uint8 picoktab_hasVowellikeProp(const picoktab_Graphs this,
     93                                        const picoos_uint8 *graph,
     94                                        const picoos_uint8 graphlenmax);
     95 
     96 /* graph properties access routines: if graph with offset 'graphsOffset' has the
     97    desired property, returns TRUE if 'ch' has the property, FALSE otherwise  */
     98 picoos_bool  picoktab_getIntPropTokenType(const picoktab_Graphs this,
     99                                            picoos_uint32 graphsOffset,
    100                                            picoos_uint8 *stokenType);
    101 picoos_bool  picoktab_getIntPropTokenSubType(const picoktab_Graphs this,
    102                                               picoos_uint32 graphsOffset,
    103                                               picoos_int8 *stokenSubType);
    104 picoos_bool  picoktab_getIntPropValue(const picoktab_Graphs this,
    105                                       picoos_uint32 graphsOffset,
    106                                       picoos_uint32 *value);
    107 picoos_bool  picoktab_getStrPropLowercase(const picoktab_Graphs this,
    108                                           picoos_uint32 graphsOffset,
    109                                           picoos_uchar *lowercase);
    110 picoos_bool  picoktab_getStrPropGraphsubs1(const picoktab_Graphs this,
    111                                            picoos_uint32 graphsOffset,
    112                                            picoos_uchar *graphsubs1);
    113 picoos_bool  picoktab_getStrPropGraphsubs2(const picoktab_Graphs this,
    114                                            picoos_uint32 graphsOffset,
    115                                            picoos_uchar *graphsubs2);
    116 picoos_bool  picoktab_getIntPropPunct(const picoktab_Graphs this,
    117                                       picoos_uint32 graphsOffset,
    118                                       picoos_uint8 *info1,
    119                                       picoos_uint8 *info2);
    120 
    121 picoos_uint16 picoktab_graphsGetNumEntries(const picoktab_Graphs this);
    122 void picoktab_graphsGetGraphInfo(const picoktab_Graphs this,
    123         picoos_uint16 graphIndex, picoos_uchar * from, picoos_uchar * to,
    124         picoos_uint8 * propset,
    125         picoos_uint8 * stokenType, picoos_uint8 * stokenSubType,
    126         picoos_uint8 * value, picoos_uchar * lowercase,
    127         picoos_uchar * graphsubs1, picoos_uchar * graphsubs2,
    128         picoos_uint8 * punct);
    129 
    130 
    131 /* ************************************************************/
    132 /* Phones type and functions */
    133 /* ************************************************************/
    134 
    135 /* to be used by picorsrc only */
    136 pico_status_t picoktab_specializePhonesKnowledgeBase(picoknow_KnowledgeBase this,
    137                                                      picoos_Common common);
    138 
    139 typedef struct picoktab_phones *picoktab_Phones;
    140 
    141 /* return kb Phones for usage in PU */
    142 picoktab_Phones picoktab_getPhones(picoknow_KnowledgeBase this);
    143 
    144 /* check if 'ch' has a property, return non-zero if 'ch' has the
    145    property, 0 otherwise */
    146 picoos_uint8 picoktab_hasVowelProp(const picoktab_Phones this,
    147                                    const picoos_uint8 ch);
    148 picoos_uint8 picoktab_hasDiphthProp(const picoktab_Phones this,
    149                                     const picoos_uint8 ch);
    150 picoos_uint8 picoktab_hasGlottProp(const picoktab_Phones this,
    151                                    const picoos_uint8 ch);
    152 picoos_uint8 picoktab_hasNonsyllvowelProp(const picoktab_Phones this,
    153                                           const picoos_uint8 ch);
    154 picoos_uint8 picoktab_hasSyllconsProp(const picoktab_Phones this,
    155                                       const picoos_uint8 ch);
    156 
    157 /* to speed up processing for often used combinations of properties
    158    the following functions are provided, which check if the property
    159    combination is true for 'ch' */
    160 picoos_bool picoktab_isSyllCarrier(const picoktab_Phones this,
    161                                     const picoos_uint8 ch);
    162 
    163 /* some properties can be assigned to a single sym only, check if 'ch'
    164    is a special sym, return TRUE if it is the special sym, FALSE
    165    otherwise */
    166 picoos_bool picoktab_isPrimstress(const picoktab_Phones this,
    167                                    const picoos_uint8 ch);
    168 picoos_bool picoktab_isSecstress(const picoktab_Phones this,
    169                                   const picoos_uint8 ch);
    170 picoos_bool picoktab_isSyllbound(const picoktab_Phones this,
    171                                   const picoos_uint8 ch);
    172 picoos_bool picoktab_isWordbound(const picoktab_Phones this,
    173                                   const picoos_uint8 ch);
    174 picoos_bool picoktab_isPause(const picoktab_Phones this,
    175                               const picoos_uint8 ch);
    176 
    177 /* get specific sym values */
    178 picoos_uint8 picoktab_getPrimstressID(const picoktab_Phones this);
    179 picoos_uint8 picoktab_getSecstressID(const picoktab_Phones this);
    180 picoos_uint8 picoktab_getSyllboundID(const picoktab_Phones this);
    181 picoos_uint8 picoktab_getWordboundID(const picoktab_Phones this);
    182 picoos_uint8 picoktab_getPauseID(const picoktab_Phones this);
    183 
    184 /* ************************************************************/
    185 /* Pos type and functions */
    186 /* ************************************************************/
    187 
    188 /* to be used by picorsrc only */
    189 pico_status_t picoktab_specializePosKnowledgeBase(picoknow_KnowledgeBase this,
    190                                                   picoos_Common common);
    191 
    192 typedef struct picoktab_pos *picoktab_Pos;
    193 
    194 #define PICOKTAB_MAXNRPOS_IN_COMB  8
    195 
    196 /* return kb Pos for usage in PU */
    197 picoktab_Pos picoktab_getPos(picoknow_KnowledgeBase this);
    198 
    199 /* returns TRUE if 'pos' is the ID of a unique (ie. non-combined) POS,
    200    returns FALSE otherwise */
    201 picoos_bool picoktab_isUniquePos(const picoktab_Pos this,
    202                                   const picoos_uint8 pos);
    203 
    204 /* returns TRUE if the non-combined 'pos' is one of the POSes in the
    205    combined POS group 'posgroup, returns FALSE otherwise. Note: if
    206    'posgroup' is itself non-combined, this function returns TRUE if it
    207    matches with 'pos', and FALSE otherwise */
    208 picoos_bool picoktab_isPartOfPosGroup(const picoktab_Pos this,
    209                                        const picoos_uint8 pos,
    210                                        const picoos_uint8 posgroup);
    211 
    212 /* return the combined POS group ID that is a representative ID for
    213    all the 'poslistlen' POSes (which can be combined themselves) in
    214    poslist. Returns '0' in case of error. */
    215 picoos_uint8 picoktab_getPosGroup(const picoktab_Pos this,
    216                                   const picoos_uint8 *poslist,
    217                                   const picoos_uint8 poslistlen);
    218 
    219 #ifdef __cplusplus
    220 }
    221 #endif
    222 
    223 
    224 #endif /*PICOKTAB_H_*/
    225