14a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/*---------------------------------------------------------------------------* 24a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * SR_Grammar.h * 34a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 44a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Copyright 2007, 2008 Nuance Communciations, Inc. * 54a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 64a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the 'License'); * 74a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * you may not use this file except in compliance with the License. * 84a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 94a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * You may obtain a copy of the License at * 104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 * 114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Unless required by applicable law or agreed to in writing, software * 134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * distributed under the License is distributed on an 'AS IS' BASIS, * 144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * 154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * See the License for the specific language governing permissions and * 164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * limitations under the License. * 174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *---------------------------------------------------------------------------*/ 194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#ifndef __SR_GRAMMAR_H 214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define __SR_GRAMMAR_H 224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "ESR_ReturnCode.h" 264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "pstdio.h" 274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "ptypes.h" 284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_GrammarPrefix.h" 294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_NametagDefs.h" 304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_Vocabulary.h" 314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_AcousticModels.h" 324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_Recognizer.h" 334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_SemanticResult.h" 344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* forward decl needed because of SR_Recognizer.h <-> SR_Grammar.h include loop */ 364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstruct SR_Recognizer_t; 374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @addtogroup SR_GrammarModule SR_Grammar API functions 404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Contains recognition grammar. 414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * A grammar consists of a list of rules. 434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * A rule consists of a list of words and slots. For example: 454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * MY_RULE = "My name is $name" where "name" is a slot 464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Words, Nametags may be added or removed from slots. 484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Upon adding and removing words, the grammar needs to be recompiled for the changes to 494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * take place. However, the original CompiledGrammar remains valid even if compilation never 504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * takes place. 514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Two types of slots exist: word slots and nametag slots 534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @{ 554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Grammar dispatch function. Used for symantic processing. 594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param functionName Name of function that was invoked 614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param argv Argument values passed to function 624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param argc Number of arguments passed to function 634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param value Dispatch value (specified using SR_GrammarSetDispatchValue) 644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param result Result of function operation. Caller passes in this buffer, function fills it. 654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param resultSize Size of result buffer. If the passed in buffer was not large enough to hold 664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * the result, this value is updated with the required length. 674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projecttypedef ESR_ReturnCode(*SR_GrammarDispatchFunction)(LCHAR* functionName, LCHAR** argv, size_t argc, void* value, LCHAR* result, size_t* resultSize); 694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Contains recognition grammar. 724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * A grammar consists of a list of rules. 744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * A rule consists of a list of words and slots. For example: 764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * MY_RULE = "My name is $name" where "name" is a slot 774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Words, Nametags may be added or removed from slots. 794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Upon adding and removing words, the grammar needs to be recompiled for the changes to 804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * take place. However, the original CompiledGrammar remains valid even if compilation never 814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * takes place. 824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Two types of slots exist: word slots and nametag slots 844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projecttypedef struct SR_Grammar_t 864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Compiles the grammar. 894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * In the case of a precompiled grammar, the function compiles those portions of the grammar 904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * that were dynamically added since the last compilation. 914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self SR_Grammar handle 934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @return ESR_SUCCESS if compilation succeeded, ESR_FATAL_ERROR otherwise. 944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode(*compile)(struct SR_Grammar_t* self); 964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Saves a compiled grammar to a file. 994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 1004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self SR_Grammar handle 1014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param filename File to write grammar into 1024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @return ESR_INVALID_ARGUMENT if self or filename are null; ESR_INVALID_STATE if could not save the grammar 1034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 1044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode(*save)(struct SR_Grammar_t* self, const LCHAR* filename); 1054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 1074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Indicates if a transcription is a valid result of a Grammar rule. 1084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 1094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self SR_Grammar handle 1104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param transcription Transcription value 1114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param result [in/out] Array of semantic results to be populated 1124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param resultCount [in/out] Length of result array 1134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @return ESR_INVALID_ARGUMENT if self or transcription are null; ESR_INVALID_STATE if an internal error has occured. 1144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 1154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode(*checkParse)(struct SR_Grammar_t* self, const LCHAR* transcription, SR_SemanticResult** result, size_t* resultCount); 1164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 1184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Adds word to rule slot. 1194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 1204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self SR_Grammar handle 1214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param slot Slot name 1224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param word Word to be added to the slot 1234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param pronunciation Word pronunciation (optional). Pass NULL to omit. 1244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param weight value to associate with word when adding to grammar; use to determine cost when parsing 1254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param tag eScript semantic expression (tag) for the word 1264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @return ESR_INVALID_ARGUMENT if self is null; ESR_INVALID_STATE if the vocabulary is missing, 1274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * if OSI logging fails; ESR_OUT_OF_MEMORY if word cannot be added to the grammar 1284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * (addWords=X is too small); ESR_NOT_SUPPORTED if homonyms are added to the grammar 1294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 1304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode(*addWordToSlot)(struct SR_Grammar_t* self, const LCHAR* slot, const LCHAR* word, 1314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project const LCHAR* pronunciation, int weight, const LCHAR* tag); 1324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 1344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Removes all elements from all slots. 1354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 1364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self SR_Grammar handle 1374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @return ESR_INVALID_ARGUMENT if self is null; ESR_INVALID_STATE if resetting the slots or OSI logging fails 1384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 1394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode(*resetAllSlots)(struct SR_Grammar_t* self); 1404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 1424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Adds nametag to rule slot. 1434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 1444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self SR_Grammar handle 1454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param slot Slot name 1464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param nametag Nametag to be added to the grammar 1474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param weight value to associate with nametag when adding to grammar; use to determine cost when parsing 1484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param tag eScript semantic expression (tag) for the nametag 1494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @return ESR_INVALID_ARGUMENT if self is null; ESR_INVALID_STATE if the grammar is active, 1504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * if the vocabulary is missing, if OSI logging fails; ESR_OUT_OF_MEMORY if word cannot be added to 1514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * the grammar (addWords=X is too small); ESR_NOT_SUPPORTED if homonyms are added to the grammar 1524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 1534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode(*addNametagToSlot)(struct SR_Grammar_t* self, const LCHAR* slot, 1544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project const SR_Nametag* nametag, int weight, const LCHAR* tag); 1554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 1574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Sets user dispatch function (used for parsed callback, etc) 1584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 1594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self SR_Grammar handle 1604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param name The name of the function which will trigger this callback when encountered during grammar parsing. 1614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param userData The user data to be referenced in the callback implementation later on. 1624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param function The dispatch function 1634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @return ESR_INVALID_ARGUMENT if self is null; ESR_SUCCESS 1644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 1654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode(*setDispatchFunction)(struct SR_Grammar_t* self, const LCHAR* name, void* userData, SR_GrammarDispatchFunction function); 1664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 1684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Sets grammar parameter, overriding session defaults. 1694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 1704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self SR_Grammar handle 1714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param key Parameter name 1724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param value Parameter value 1734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @return ESR_INVALID_ARGUMENT if self is null; ESR_NOT_IMPLEMENTED 1744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 1754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode(*setParameter)(struct SR_Grammar_t* self, const LCHAR* key, void* value); 1764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 1784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Sets grammar parameters. 1794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * This is a convenience function. 1804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 1814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self SR_Grammar handle 1824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param key Parameter name 1834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param value Parameter value 1844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @return ESR_INVALID_ARGUMENT if self is null; ESR_INVALID_RESULT_TYPE if the property is already set and its type is size_t 1854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 1864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode(*setSize_tParameter)(struct SR_Grammar_t* self, const LCHAR* key, size_t value); 1874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 1894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Returns grammar parameter value. 1904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 1914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self SR_Grammar handle 1924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param key Parameter name 1934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param value Parameter value 1944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @return ESR_INVALID_ARGUMENT if self is null; ESR_NOT_IMPLEMENTED 1954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 1964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode(*getParameter)(struct SR_Grammar_t* self, const LCHAR* key, void** value); 1974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 1994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Return copy of unsigned int grammar parameter. 2004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * This is a convenience function. 2014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 2024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self SR_Grammar handle 2034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param key Parameter name 2044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param value [out] Used to hold the parameter value 2054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param len [in/out] Length of value argument. If the return code is ESR_BUFFER_OVERFLOW, 2064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * the required length is returned in this variable. 2074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @return ESR_INVALID_ARGUMENT if self is null; ESR_INVALID_RESULT_TYPE if the property type is not size_t; ESR_NO_MATCH_ERROR if property is not set 2084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 2094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode(*getSize_tParameter)(struct SR_Grammar_t* self, const LCHAR* key, size_t* value); 2104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 2124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Configures a vocabulary with the grammar. 2134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 2144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self SR_Grammar handle 2154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param vocabulary The vocabulary to associate with 2164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @return ESR_INVALID_ARGUMENT if self or vocabulary are null 2174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 2184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode(*setupVocabulary)(struct SR_Grammar_t *self, SR_Vocabulary *vocabulary); 2194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 2214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Associates Recognizer with the grammar. 2224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 2234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self SR_Grammar handle 2244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param recognizer The recognizer to associate 2254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @return ESR_INVALID_ARGUMENT if self or recognizer are null 2264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 2274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // ESR_ReturnCode(*setupModels)(struct SR_Grammar_t* self, SR_AcousticModels* models); 2284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode(*setupRecognizer)(struct SR_Grammar_t* self, struct SR_Recognizer_t* recognizer); 2294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 2304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Dissociates Recognizer with the grammar. 2314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 2324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self SR_Grammar handle 2334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @return ESR_INVALID_ARGUMENT if self is null 2344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 2354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode(*unsetupRecognizer)(struct SR_Grammar_t* self); 2364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 2384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Returns AcousticModels associated with the grammar. 2394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 2404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self SR_Grammar handle 2414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param models Associated models 2424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @return ESR_INVALID_ARGUMENT if self or models are null 2434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 2444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // ESR_ReturnCode(*getModels)(struct SR_Grammar_t* self, SR_AcousticModels** models); 2454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /** 2474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Destroys a grammar. 2484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 2494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self SR_Grammar handle 2504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @return ESR_INVALID_ARGUMENT if self is null, ESR_INVALID_STATE if OSI logging fails 2514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 2524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode(*destroy)(struct SR_Grammar_t* self); 2534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 2544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectSR_Grammar; 2554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 2574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @name Grammar compilation 2584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 2594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Categories: 2604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * - Initialization 2614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * - Compile from expressions (not supported by SREC) or load pre-compiled grammars 2624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * - Dynamic modification; slots 2634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * - Support functions (isExtant, etc) 2644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * - Use in recognition; activation 2654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 2664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * IMPORTANT NOTE: There are two main approaches to grammar activation in a recognizer. 2674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * - 1. Load a pre-compiler grammar setup. This is not just the set of expressions but is also 2684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * an image of the actual model components network that fully describes the recognizer 2694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * task. This type of Grammar can be extended with single arcs at pre-defined points 2704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * called slots. 2714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 2724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * - 2. Create a network dynamically from a set of regular expressions. 2734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 2744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * SREC supports 1. but not 2. CREC supports 2 but not 1. Both approaches are covered by 2754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * this interface. Pre-compiled grammars inherently refer to models. It is therefore 2764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * important to ensure consistency of model usage between all activated grammars. This can 2774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * be done prior to grammar rule activation in the Recognizer 2784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * (see SR_RecognizerCheckGrammarConsistency()). 2794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 2804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * A Grammar may consist of one or more rules. Rules are given as expressions (this interface is 2814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * independent of the format). A rule may contain other rules. Before a rule can be used in 2824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * recognition it must be compiled (or loaded), setup by a recognizer and activated. 2834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * - The Grammar_CompileRule() step combines all sub-rule expressions into a single underlying 2844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * member of Grammar. 2854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * - The Recognizer_ActivateRule() step simply raises a flat to make a compiled rule available 2864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * for recognition. 2874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 2884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Once a Grammar is setup by a recognizer it is not permissible to modify its rules Thus, in 2894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * order to be able to support a combination of a static rule and one that requires changing, it 2904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * is most efficient to separate these rules into two Grammar objects. 2914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 2924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * NOTE: The modification/setup constraint ensures consistency between the rule definitions 2934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * in the Grammar and the setup rules. It would be possible to remove this constraint and 2944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * allow rules that had no dependents to be modified while the grammar was setup. This makes 2954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * the API freer but also less consistent and more susceptible to error. There would be no 2964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * footprint cost with having two grammars in place of one grammar with two rules unless the 2974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * rules overlapped. If there was overlap then it might have been possible to minimize the 2984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * shared parts 2994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @{ 3004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 3014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 3034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Compiles the grammar. 3044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * In the case of a precompiled grammar, the function compiles those portions of the grammar 3054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * that were dynamically added since the last compilation. 3064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 3074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self SR_Grammar handle 3084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @return ESR_INVALID_ARGUMENT if self is null; ESR_SUCCESS if compilation succeeded, ESR_FATAL_ERROR otherwise. 3094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 3104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectSREC_GRAMMAR_API ESR_ReturnCode SR_GrammarCompile(SR_Grammar* self); 3114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 3124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @} 3134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 3144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @name Special "Slot"-based Grammar functions 3154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 3164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Slots are points in a pre-compiled grammar where a simple extension of the grammar may 3174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * be made. They support the insertion of words or nametags into a pr-defined position in 3184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * the Grammar. Slots are first declared in an expression which is compiled and saved for 3194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * re-loading. The names of these slots are used in a similar way as rule names. 3204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 3214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @{ 3224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 3234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 3244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Adds word to rule slot. 3254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 3264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self SR_Grammar handle 3274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param slot Slot name 3284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param word Word to be added to the slot 3294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param pronunciation Word pronunciation (optional). Pass NULL to omit. 3304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param weight value to associate with word when adding to grammar; use to determine cost when parsing 3314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param tag eScript semantic expression for the word. In other words, eScript will execute 3324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * "MEANING=<tag>" 3334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @return ESR_INVALID_ARGUMENT if self is null; ESR_INVALID_STATE if the grammar is active, 3344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * if the vocabulary is missing, if OSI logging fails; ESR_OUT_OF_MEMORY if word cannot be added to 3354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * the grammar (addWords=X is too small); ESR_NOT_SUPPORTED if homonyms are added to the grammar 3364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 3374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectSREC_GRAMMAR_API ESR_ReturnCode SR_GrammarAddWordToSlot(SR_Grammar* self, const LCHAR* slot, 3384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project const LCHAR* word, const LCHAR* pronunciation, 3394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int weight, const LCHAR* tag); 3404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 3414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Removes all elements from all slots. 3424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 3434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self SR_Grammar handle 3444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @return ESR_INVALID_ARGUMENT if self is null; ESR_INVALID_STATE if resetting the slots or 3454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * OSI logging fails 3464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 3474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectSREC_GRAMMAR_API ESR_ReturnCode SR_GrammarResetAllSlots(SR_Grammar* self); 3484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 3494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Adds word to rule slot. 3504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 3514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self SR_Grammar handle 3524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param slot Slot name 3534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param nametag Nametag to be added to the slot 3544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param weight value to associate with nametag when adding to grammar; use to determine cost when parsing 3554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param tag eScript semantic expression (tag) for the nametag 3564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @return ESR_INVALID_ARGUMENT if self is null; ESR_INVALID_STATE if the grammar is active, if the 3574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * vocabulary is missing, if OSI logging fails; ESR_OUT_OF_MEMORY if word cannot be added to the 3584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * grammar (addWords=X is too small); ESR_NOT_SUPPORTED if homonyms are added to the grammar 3594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 3604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectSREC_GRAMMAR_API ESR_ReturnCode SR_GrammarAddNametagToSlot(SR_Grammar* self, const LCHAR* slot, 3614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectconst struct SR_Nametag_t* nametag, int weight, const LCHAR* tag); 3624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 3634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @} 3644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 3654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @name Grammar Setup functions 3664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 3674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * The Grammar object needs an association with several objects: 3684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * - A Grammar object must use one and only one Vocabulary object. 3694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * - A Grammar object may use one and only one Nametags object. (The Nametags object can 3704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * however be used by more than one Grammar. A Nametags collection object must be used 3714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * before nametags can be added to Grammar slots.) 3724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 3734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @see Nametags_Add() and associated functions for Nametags management. 3744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 3754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @{ 3764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 3774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 3794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Configures a vocabulary with the grammar. 3804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 3814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self SR_Grammar handle 3824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param vocabulary The vocabulary to associate with 3834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @return ESR_INVALID_ARGUMENT if self or vocabulary are null 3844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 3854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectSREC_GRAMMAR_API ESR_ReturnCode SR_GrammarSetupVocabulary(SR_Grammar *self, SR_Vocabulary *vocabulary); 3864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 3874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Associates Grammar with a Recognizer (eg. such that word additions can take place). 3884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 3894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self SR_Grammar handle 3904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param models The recognizer to associate 3914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @return ESR_INVALID_ARGUMENT if self or recognizer are null 3924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 3934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// SREC_GRAMMAR_API ESR_ReturnCode SR_GrammarSetupModels(SR_Grammar* self, SR_AcousticModels* models); 3944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectSREC_GRAMMAR_API ESR_ReturnCode SR_GrammarSetupRecognizer(SR_Grammar* self, struct SR_Recognizer_t* recognizer); 3954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 3964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Dissociate Grammar from a Recognizer. 3974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 3984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self SR_Grammar handle 3994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @return ESR_INVALID_ARGUMENT if self is null 4004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 4014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectSREC_GRAMMAR_API ESR_ReturnCode SR_GrammarUnsetupRecognizer(SR_Grammar* self); 4024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 4034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Returns AcousticModels associated with a Grammar. 4044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 4054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self SR_Grammar handle 4064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param models Associated models 4074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @return ESR_INVALID_ARGUMENT if self or models are null 4084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 4094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// SREC_GRAMMAR_API ESR_ReturnCode SR_GrammarGetModels(SR_Grammar* self, SR_AcousticModels** models); 4104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 4124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @} 4134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 4144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @name Basic Grammar functions 4154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 4164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @{ 4174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 4184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 4194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 4204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Create a new grammar. 4214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 4224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self SR_Grammar handle 4234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 4244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectSREC_GRAMMAR_API ESR_ReturnCode SR_GrammarCreate(SR_Grammar** self); 4254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 4264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Destroys a grammar. 4274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 4284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self SR_Grammar handle 4294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @return ESR_INVALID_ARGUMENT if self is null, ESR_INVALID_STATE if OSI logging fails 4304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 4314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectSREC_GRAMMAR_API ESR_ReturnCode SR_GrammarDestroy(SR_Grammar* self); 4324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 4334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Loads a compiled grammar from a file or an image. If the filename has extention .g2g 4344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * then it will be loaded as an image. Otherwise, provide only a basename (i.e. without 4354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * file extensions), and a set of text-based grammar files will be loaded. 4364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 4374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param filename File to read grammar from 4384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self SR_Grammar handle 4394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @return ESR_INVALID_ARGUMENT if self or the value it points to are null. If the filename load property 4404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * (i.e. addWords=X) is unknown; ESR_OUT_OF_MEMORY if system is out of memory; ESR_READ_ERROR if grammar file be read 4414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 4424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectSREC_GRAMMAR_API ESR_ReturnCode SR_GrammarLoad(const LCHAR* filename, SR_Grammar** self); 4434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 4444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Saves a compiled grammar to a file. 4454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 4464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self SR_Grammar handle 4474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param filename File to write grammar into 4484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @return ESR_INVALID_ARGUMENT if self or filename are null; ESR_INVALID_STATE if could not save the grammar 4494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 4504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectSREC_GRAMMAR_API ESR_ReturnCode SR_GrammarSave(SR_Grammar* self, const LCHAR* filename); 4514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 4524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Sets user dispatch function (used for parsed callback, etc) 4534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 4544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self SR_Grammar handle 4554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param name The name of the function which will trigger this callback when encountered during grammar parsing. 4564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param userData The user data to be referenced in the callback implementation later on. 4574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param function The dispatch function 4584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @return ESR_SUCCESS 4594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 4604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectSREC_GRAMMAR_API ESR_ReturnCode SR_GrammarSetDispatchFunction(SR_Grammar* self, const LCHAR* name, void* userData, SR_GrammarDispatchFunction function); 4614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 4624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Sets grammar parameter, overriding session defaults. 4634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 4644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self SR_Grammar handle 4654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param key Parameter name 4664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param value Parameter value 4674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @return ESR_NOT_IMPLEMENTED 4684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 4694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectSREC_GRAMMAR_API ESR_ReturnCode SR_GrammarSetParameter(SR_Grammar* self, const LCHAR* key, void* value); 4704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 4714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Sets grammar parameters. 4724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * This is a convenience function. 4734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 4744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self SR_Grammar handle 4754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param key Parameter name 4764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param value Parameter value 4774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @return ESR_INVALID_RESULT_TYPE if the property is already set and its type is size_t 4784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 4794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectSREC_GRAMMAR_API ESR_ReturnCode SR_GrammarSetSize_tParameter(SR_Grammar* self, const LCHAR* key, size_t value); 4804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 4814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Returns grammar parameter value. 4824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 4834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self SR_Grammar handle 4844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param key Parameter name 4854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param value Parameter value 4864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @return ESR_NOT_IMPLEMENTED 4874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 4884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectSREC_GRAMMAR_API ESR_ReturnCode SR_GrammarGetParameter(SR_Grammar* self, const LCHAR* key, void** value); 4894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 4904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Return copy of unsigned int grammar parameter. 4914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * This is a convenience function. 4924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 4934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self SR_Grammar handle 4944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param key Parameter name 4954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param value [out] Used to hold the parameter value 4964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @return ESR_INVALID_ARGUMENT if self is null; ESR_INVALID_RESULT_TYPE if the property type is not size_t; ESR_NO_MATCH_ERROR if property is not set 4974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 4984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectSREC_GRAMMAR_API ESR_ReturnCode SR_GrammarGetSize_tParameter(SR_Grammar* self, const LCHAR* key, size_t* value); 4994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 5004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Checks if transcription is parsable by the grammar. 5014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * 5024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self SR_Grammar handle 5034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param transcription transcription to be checked 5044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param result should be NULL 5054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param resultCount used to return the number of valid parses 5064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @return ESR_INVALID_ARGUMENT if self, transcription are null; ESR_INVALID_STATE if an internal error has occured. 5074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 5084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectSREC_GRAMMAR_API ESR_ReturnCode SR_GrammarCheckParse(SR_Grammar* self, const LCHAR* transcription, SR_SemanticResult** result, size_t* resultCount); 5094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 5104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @} 5114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 5124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 5134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 5144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @} 5154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 5164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 5174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectSREC_GRAMMAR_API ESR_ReturnCode SR_GrammarAllowOnly(SR_Grammar* self, const char* transcription); 5184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectSREC_GRAMMAR_API ESR_ReturnCode SR_GrammarAllowAll(SR_Grammar* self); 5194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 5204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif /* __SR_GRAMMAR_H */ 521