| /* |
| * Copyright (C) 2008-2009 SVOX AG, Baslerstr. 30, 8048 Zuerich, Switzerland |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| * History: |
| * 2009-06-29 -- initial version |
| * |
| */ |
| |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <libexpat/expat.h> |
| |
| #ifndef _SVOX_SSML_PARSER_H_ |
| #define _SVOX_SSML_PARSER_H_ |
| |
| /** |
| * SvoxSsmlParser |
| * Parses SSML 1.0 XML documents and convertes it to Pico compatible text input |
| */ |
| class SvoxSsmlParser |
| { |
| public: /* construction code */ |
| |
| /** |
| Constructor |
| Creates Expat parser and allocates initial text storage |
| */ |
| SvoxSsmlParser(); |
| |
| /** |
| Destructor |
| Deallocates all resources |
| */ |
| ~SvoxSsmlParser(); |
| |
| /** |
| initSuccessful |
| Verifies that construction was successful |
| return 1 if successful, 0 otherwise |
| */ |
| int initSuccessful(); |
| |
| public: /* public members */ |
| |
| /** |
| parseDocument |
| Parses SSML 1.0 document passed in as argument |
| @ssmldoc - SSML document, partial document input is supported |
| @isFinal - indicates whether input is a complete or partial document, 1 indicates complete document, 0 indicates partial |
| return Expat status code |
| */ |
| int parseDocument(const char* ssmldoc, int isFinal); |
| |
| /** |
| getParsedDocument |
| Returns string containing parse result. This can be passed on to Pico for synthesis |
| return parsed string, NULL if error occurred |
| */ |
| char* getParsedDocument(); |
| |
| /** |
| getParsedDocumentLanguage |
| Returns language string specified in xml:lang attribute of the <speak> tag |
| return language code of SSML document, NULL if not set |
| */ |
| char* getParsedDocumentLanguage(); |
| |
| private: /* static callback functions */ |
| |
| /** |
| starttagHandler |
| Static callback function for Expat start-tag events, internal use only |
| */ |
| static void starttagHandler(void* data, const XML_Char* element, const XML_Char** attributes); |
| |
| /** |
| endtagHandler |
| Static callback function for Expat end-tag events, internal use only |
| */ |
| static void endtagHandler(void* data, const XML_Char* element); |
| |
| /** |
| textHandler |
| Static callback function for Expat text events, internal use only |
| */ |
| static void textHandler(void* data, const XML_Char* text, int length); |
| |
| private: /* element handlers */ |
| |
| /** |
| startElement |
| Handles start of element, called by starttagHandler. |
| */ |
| void startElement(const XML_Char* element, const XML_Char** attributes); |
| |
| /** |
| endElement |
| Handles end of element, called by endtagHandler. |
| */ |
| void endElement(const XML_Char* element); |
| |
| /** |
| textElement |
| Handles text element, called by textHandler. |
| */ |
| void textElement(const XML_Char* text, int length); |
| |
| /* helper functions */ |
| |
| /** |
| convertToSvoxPitch |
| Convertes SSML prosody tag pitch values to SVOX Pico pitch values. |
| */ |
| char* convertToSvoxPitch(const char* value); |
| |
| /** |
| convertToSvoxRate |
| Convertes SSML prosody tag rate values to SVOX Pico speed values. |
| */ |
| char* convertToSvoxRate(const char* value); |
| |
| /** |
| convertToSvoxVolume |
| Convertes SSML prosody tag volume values to SVOX Pico volume values. |
| */ |
| char* convertToSvoxVolume(const char* value); |
| |
| /** |
| convertBreakStrengthToTime |
| Convertes SSML break tag strength attribute values to SVOX Pico break time values. |
| */ |
| char* convertBreakStrengthToTime(const char* value); |
| |
| /** |
| growDataSize |
| Increases size of internal text field. |
| */ |
| int growDataSize(int sizeToGrow); |
| |
| private: /* data members*/ |
| |
| char* m_data; /* internal text field, holds parsed text */ |
| int m_datasize; /* size of internal text field */ |
| XML_Parser mParser; /* Expat XML parser pointer */ |
| int m_isInBreak; /* indicator for handling break tag parsing */ |
| char* m_appendix; /* holds Pico pitch, speed and volume close tags for prosody tag parsing */ |
| char* m_docLanguage; /* language set in speak tag of SSML document */ |
| }; |
| |
| #endif // _SVOX_SSML_PARSER_H_ |