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