14a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/*---------------------------------------------------------------------------*
24a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  SR_Grammar.c  *
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
214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_Grammar.h"
234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_GrammarImpl.h"
244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "plog.h"
254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "pmemory.h"
264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_GrammarCompile(SR_Grammar* self)
294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (self == NULL)
314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    PLogError(L("ESR_INVALID_ARGUMENT"));
334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_INVALID_ARGUMENT;
344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return self->compile(self);
364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_GrammarAddWordToSlot(SR_Grammar* self, const LCHAR* slot, const LCHAR* word,
394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project				        const LCHAR* pronunciation, int weight, const LCHAR* tag)
404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    {
414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    if ( self == NULL )
434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        {
444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        PLogError(L("ESR_INVALID_ARGUMENT : Grammar Is Null"));
454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        return ESR_INVALID_ARGUMENT;
464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        }
474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return self->addWordToSlot(self, slot, word, pronunciation, weight, tag);
484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    }
494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_GrammarResetAllSlots(SR_Grammar* self)
524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (self == NULL)
544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    PLogError(L("ESR_INVALID_ARGUMENT"));
564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_INVALID_ARGUMENT;
574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return self->resetAllSlots(self);
594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_GrammarAddNametagToSlot(SR_Grammar* self, const LCHAR* slot,
624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project                                          const SR_Nametag* nametag,  int weight, const LCHAR* tag)
634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (self == NULL)
654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    PLogError(L("ESR_INVALID_ARGUMENT"));
674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_INVALID_ARGUMENT;
684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return self->addNametagToSlot(self, slot, nametag, weight, tag);
704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_GrammarSetDispatchFunction(SR_Grammar* self, const LCHAR* name, void* userData, SR_GrammarDispatchFunction function)
734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (self == NULL)
754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    PLogError(L("ESR_INVALID_ARGUMENT"));
774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_INVALID_ARGUMENT;
784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return self->setDispatchFunction(self, name, userData, function);
804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_GrammarSave(SR_Grammar* self, const LCHAR* filename)
834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (self == NULL)
854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    PLogError(L("ESR_INVALID_ARGUMENT"));
874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_INVALID_ARGUMENT;
884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return self->save(self, filename);
904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_GrammarSetParameter(SR_Grammar* self, const LCHAR* key, void* value)
934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (self == NULL)
954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    PLogError(L("ESR_INVALID_ARGUMENT"));
974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_INVALID_ARGUMENT;
984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return self->setParameter(self, key, value);
1004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_GrammarSetSize_tParameter(SR_Grammar* self, const LCHAR* key, size_t value)
1034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
1044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (self == NULL)
1054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
1064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    PLogError(L("ESR_INVALID_ARGUMENT"));
1074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_INVALID_ARGUMENT;
1084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
1094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return self->setSize_tParameter(self, key, value);
1104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_GrammarGetParameter(SR_Grammar* self, const LCHAR* key, void** value)
1134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
1144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (self == NULL)
1154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
1164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    PLogError(L("ESR_INVALID_ARGUMENT"));
1174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_INVALID_ARGUMENT;
1184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
1194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return self->getParameter(self, key, value);
1204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_GrammarGetSize_tParameter(SR_Grammar* self, const LCHAR* key, size_t* value)
1234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
1244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (self == NULL)
1254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
1264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    PLogError(L("ESR_INVALID_ARGUMENT"));
1274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_INVALID_ARGUMENT;
1284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
1294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return self->getSize_tParameter(self, key, value);
1304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project// ESR_ReturnCode SR_GrammarSetupModels(SR_Grammar* self, SR_AcousticModels* models)
1334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_GrammarSetupRecognizer(SR_Grammar* self, struct SR_Recognizer_t* recognizer)
1344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
1354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (self == NULL)
1364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
1374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    PLogError(L("ESR_INVALID_ARGUMENT"));
1384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_INVALID_ARGUMENT;
1394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
1404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  // retgurn self->setupModels( self, models);
1414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return self->setupRecognizer(self, recognizer);
1424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_GrammarUnsetupRecognizer(SR_Grammar* self)
1444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
1454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (self == NULL)
1464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
1474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    PLogError(L("ESR_INVALID_ARGUMENT"));
1484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_INVALID_ARGUMENT;
1494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
1504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return self->unsetupRecognizer(self);
1514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_GrammarSetupVocabulary(SR_Grammar *self, SR_Vocabulary *vocabulary)
1544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
1554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (self == NULL)
1564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
1574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    PLogError(L("ESR_INVALID_ARGUMENT"));
1584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_INVALID_ARGUMENT;
1594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
1604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return self->setupVocabulary(self, vocabulary);
1614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* ESR_ReturnCode SR_GrammarGetModels(SR_Grammar* self, SR_AcousticModels** models)
1644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
1654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (self == NULL)
1664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
1674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    PLogError(L("ESR_INVALID_ARGUMENT"));
1684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_INVALID_ARGUMENT;
1694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
1704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return self->getModels(self, models);
1714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project*/
1734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_GrammarCheckParse(SR_Grammar* self, const LCHAR* transcription, SR_SemanticResult** result_void, size_t* resultCount)
1744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
1754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  SR_SemanticResult** result = (SR_SemanticResult**)result_void;
1764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (self == NULL)
1774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
1784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    PLogError(L("ESR_INVALID_ARGUMENT"));
1794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_INVALID_ARGUMENT;
1804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
1814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return self->checkParse(self, transcription, result, resultCount);
1824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
1834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode SR_GrammarDestroy(SR_Grammar* self)
1854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
1864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  if (self == NULL)
1874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  {
1884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    PLogError(L("ESR_INVALID_ARGUMENT"));
1894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project    return ESR_INVALID_ARGUMENT;
1904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
1914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return self->destroy(self);
1924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
193