summaryrefslogtreecommitdiffstats
path: root/pico/tts/svox_ssml_parser.h
diff options
context:
space:
mode:
Diffstat (limited to 'pico/tts/svox_ssml_parser.h')
-rwxr-xr-xpico/tts/svox_ssml_parser.h162
1 files changed, 162 insertions, 0 deletions
diff --git a/pico/tts/svox_ssml_parser.h b/pico/tts/svox_ssml_parser.h
new file mode 100755
index 0000000..cc83305
--- /dev/null
+++ b/pico/tts/svox_ssml_parser.h
@@ -0,0 +1,162 @@
+/*
+ * 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_