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