[packages] net/freeswitch: Fixed auto module enabling for modules with more dashes...
authorDaniel Dickinson <crazycshore@gmail.com>
Sun, 22 Aug 2010 22:18:15 +0000 (22:18 +0000)
committerDaniel Dickinson <crazycshore@gmail.com>
Sun, 22 Aug 2010 22:18:15 +0000 (22:18 +0000)
SVN-Revision: 22775

23 files changed:
net/freeswitch/Makefile
net/freeswitch/files/etc.packages/say-de/lang/de/de.xml [new file with mode: 0644]
net/freeswitch/files/etc.packages/say-de/lang/de/demo/demo.xml [new file with mode: 0644]
net/freeswitch/files/etc.packages/say-de/lang/de/vm/tts.xml [new file with mode: 0644]
net/freeswitch/files/etc.packages/say-en/lang/en/demo/demo-ivr.xml [new file with mode: 0644]
net/freeswitch/files/etc.packages/say-en/lang/en/demo/demo.xml [new file with mode: 0644]
net/freeswitch/files/etc.packages/say-en/lang/en/dir/sounds.xml [new file with mode: 0644]
net/freeswitch/files/etc.packages/say-en/lang/en/dir/tts.xml [new file with mode: 0644]
net/freeswitch/files/etc.packages/say-en/lang/en/en.xml [new file with mode: 0644]
net/freeswitch/files/etc.packages/say-en/lang/en/vm/sounds.xml [new file with mode: 0644]
net/freeswitch/files/etc.packages/say-en/lang/en/vm/tts.xml [new file with mode: 0644]
net/freeswitch/files/etc.packages/say-fr/lang/fr/demo/demo.xml [new file with mode: 0644]
net/freeswitch/files/etc.packages/say-fr/lang/fr/dir/sounds.xml [new file with mode: 0644]
net/freeswitch/files/etc.packages/say-fr/lang/fr/dir/tts.xml [new file with mode: 0644]
net/freeswitch/files/etc.packages/say-fr/lang/fr/fr.xml [new file with mode: 0644]
net/freeswitch/files/etc.packages/say-fr/lang/fr/vm/sounds.xml [new file with mode: 0644]
net/freeswitch/files/etc.packages/say-ru/lang/ru/demo/demo-ivr.xml [new file with mode: 0644]
net/freeswitch/files/etc.packages/say-ru/lang/ru/demo/demo.xml [new file with mode: 0644]
net/freeswitch/files/etc.packages/say-ru/lang/ru/dir/sounds.xml [new file with mode: 0644]
net/freeswitch/files/etc.packages/say-ru/lang/ru/dir/tts.xml [new file with mode: 0644]
net/freeswitch/files/etc.packages/say-ru/lang/ru/ru.xml [new file with mode: 0644]
net/freeswitch/files/etc.packages/say-ru/lang/ru/vm/sounds.xml [new file with mode: 0644]
net/freeswitch/files/etc.packages/say-ru/lang/ru/vm/tts.xml [new file with mode: 0644]

index 30db9cb..a36ef1a 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=freeswitch
 PKG_VERSION:=1.0.6
-PKG_RELEASE:=9
+PKG_RELEASE:=10
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
@@ -477,12 +477,12 @@ define BuildPlugin
 
   define Package/freeswitch-mod-$(1)/postinst
 #!/bin/sh
-sed -i -e 's|^\([ \t]*\)<!-- *\(.*\)"mod_$(1)"\(.*\) *-->\(.*\)$$$$|\1\2"mod_$(1)"\3\4|' $$$${IPKG_INSTROOT}/etc/freeswitch/autoload_configs/modules.conf.xml
+sed -i -e 's|^\([ \t]*\)<!-- *\(.*\)"mod_$(subst -,_,$(1))"\(.*\) *-->\(.*\)$$$$|\1\2"mod_$(subst -,_,$(1))"\3\4|' $$$${IPKG_INSTROOT}/etc/freeswitch/autoload_configs/modules.conf.xml
   endef
 
   define Package/freeswitch-mod-$(1)/postrm
 #!/bin/sh
-sed -i -e 's|^\([ \t]*\)\(.*\)"mod_$(1)"\(.*\)$$$$|\1<!-- \2"mod_$(1)"\3 -->|' $$$${IPKG_INSTROOT}/etc/freeswitch/autoload_configs/modules.conf.xml
+sed -i -e 's|^\([ \t]*\)\(.*\)"mod_$(subst -,_,$(1))"\(.*\)$$$$|\1<!-- \2"mod_$(subst -,_,$(1))"\3 -->|' $$$${IPKG_INSTROOT}/etc/freeswitch/autoload_configs/modules.conf.xml
   endef
 
   $$(eval $$(call BuildPackage,freeswitch-mod-$(1)))
diff --git a/net/freeswitch/files/etc.packages/say-de/lang/de/de.xml b/net/freeswitch/files/etc.packages/say-de/lang/de/de.xml
new file mode 100644 (file)
index 0000000..5239489
--- /dev/null
@@ -0,0 +1,7 @@
+<include>
+  <language name="de" sound-path="/snds" tts-engine="cepstral" tts-voice="david">
+    <X-PRE-PROCESS cmd="include" data="demo/demo.xml"/>
+    <!--voicemail_de_tts is purely implemented with tts, we need a files based implementation too -->
+    <X-PRE-PROCESS cmd="include" data="vm/tts.xml"/>
+  </language>
+</include>
diff --git a/net/freeswitch/files/etc.packages/say-de/lang/de/demo/demo.xml b/net/freeswitch/files/etc.packages/say-de/lang/de/demo/demo.xml
new file mode 100644 (file)
index 0000000..61582b2
--- /dev/null
@@ -0,0 +1,71 @@
+<include><!--This line will be ignored it's here to validate the xml and is optional -->
+    <macro name="msgcount">
+      <input pattern="(.*)">
+       <match>
+         <action function="execute" data="sleep(1000)"/>
+         <action function="play-file" data="voicemail/vm-you_have.wav"/>
+         <action function="say" data="$1" method="pronounced" type="items"/>
+         <action function="play-file" data="voicemail/vm-messages.wav"/>
+         <!-- or -->
+         <!--<action function="speak-text" data="Sie haben $1 Nachrichten"/>-->
+       </match>
+      </input>
+    </macro>
+    <macro name="saydate">
+      <input pattern="(.*)">
+       <match>
+         <action function="say" data="$1" method="pronounced" type="current_date_time"/>
+       </match>
+      </input>
+    </macro>
+    <macro name="timespec">
+      <input pattern="(.*)">
+       <match>
+         <action function="say" data="$1" method="pronounced" type="time_measurement"/>
+       </match>
+      </input>
+    </macro>
+    <macro name="ip-addr">
+      <input pattern="(.*)">
+       <match>
+         <action function="say" data="$1" method="iterated" type="ip_address"/>
+         <action function="say" data="$1" method="pronounced" type="ip_address"/>
+       </match>
+      </input>
+    </macro>
+    <macro name="spell">
+      <input pattern="(.*)">
+       <match>
+         <action function="say" data="$1" method="pronounced" type="name_spelled"/>
+       </match>
+      </input>
+    </macro>
+    <macro name="spell-phonetic">
+      <input pattern="(.*)">
+       <match>
+         <action function="say" data="$1" method="pronounced" type="name_phonetic"/>
+       </match>
+      </input>
+    </macro>
+    <macro name="tts-timeleft">
+      <!-- The parser will visit each <input> tag and execute the actions in <match> or <nomatch> depending on the pattern param -->
+      <!-- If the function "break" is encountered all parsing will cease -->
+      <input pattern="(\d+):(\d+)">
+       <match>
+         <action function="speak-text" data="Sie haben $1 Minuten, $2 Sekunden übrig $strftime(%Y-%m-%d)"/>
+         <action function="break"/>
+       </match>
+       <nomatch>
+         <action function="speak-text" data="Die Eingabe war ungültig."/>
+       </nomatch>
+      </input>
+      <input pattern="(\d+) min (\d+) sek">
+       <match>
+         <action function="speak-text" data="Sie haben $1 Minuten, $2 Sekunden übrig $strftime(%Y-%m-%d)"/>
+       </match>
+       <nomatch>
+         <action function="speak-text" data="Die Eingabe war ungültig."/>
+       </nomatch>
+      </input>
+    </macro>
+</include><!--This line will be ignored it's here to validate the xml and is optional -->
diff --git a/net/freeswitch/files/etc.packages/say-de/lang/de/vm/tts.xml b/net/freeswitch/files/etc.packages/say-de/lang/de/vm/tts.xml
new file mode 100644 (file)
index 0000000..7a8f18c
--- /dev/null
@@ -0,0 +1,214 @@
+<include><!--This line will be ignored it's here to validate the xml and is optional -->
+  <macro name="voicemail_enter_id">
+    <input pattern="(.*)">
+      <match>
+       <action function="speak-text" data="Bitte geben Sie Ihren Benutzernamen ein, gefolgt von $1."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_enter_pass">
+    <input pattern="(.*)">
+      <match>
+       <action function="speak-text" data="Bitte geben Sie Ihr Passwort ein, gefolgt von $1."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_fail_auth">
+    <input pattern="(.*)">
+      <match>
+       <action function="speak-text" data="Falsche Benutzerdaten."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_hello">
+    <input pattern="(.*)">
+      <match>
+       <action function="speak-text" data="Willkommen in Ihrem Postfach."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_goodbye">
+    <input pattern="(.*)">
+      <match>
+       <action function="speak-text" data="Auf Wiedersehen."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_abort">
+    <input pattern="(.*)">
+      <match>
+       <action function="speak-text" data="Zu viele Fehlversuche."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_message_count">
+    <input pattern="^1:(.*)$">
+      <match>
+       <action function="speak-text" data="Sie haben 1 $2 Nachricht im Ordner ${voicemail_current_folder}."/>
+      </match>
+    </input>
+    <input pattern="^([0,2-9]+):(.*)$">
+      <match>
+       <action function="speak-text" data="Sie haben $1 $2 Nachrichten im Ordner ${voicemail_current_folder}."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_menu">
+    <input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
+      <match>
+       <action function="speak-text" 
+               data="Um neue Nachrichten zu hören, drücken Sie $1. Um gespeicherte Nachrichten zu hören, drücken Sie $2, Für erweiterte Optionen, drücken Sie $3. Zum beenden drücken Sie $4."/>
+      </match>
+    </input>
+  </macro>
+
+
+  <macro name="voicemail_config_menu">
+    <input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
+      <match>
+       <action function="speak-text" 
+               data="Um eine Ansage aufzunehmen, drücken Sie $1. Um eine Ansage auszuwählen, drücken Sie $2. Um ihren Namen aufzunehmen, drücken Sie $3. Um zum Hauptmenü zurückzukehren, drücken Sie $4."/>
+      </match>
+    </input>
+  </macro>
+
+
+  <macro name="voicemail_record_name">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="Sprechen Sie Ihren Namen nach dem Ton, drücken Sie eine beliebige Taste oder hören Sie auf zu sprechen um die Aufnahme zu beenden."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_record_file_check">
+    <input pattern="^([0-9#*]):([0-9#*]):([0-9#*])$">
+      <match>
+       <action function="speak-text" 
+               data="Um die Aufzeichnung anzuhören, drücken Sie $1. Um die Aufzeichnung zu speichern, drücken Sie $2. Für eine erneute Aufnahme drücken Sie $3."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_record_urgent_check">
+    <input pattern="^([0-9#*]):([0-9#*])$">
+      <match>
+       <action function="speak-text" 
+               data="Drücken Sie $1 um diese Nachricht als wichtig zu markieren. Um fortzufahren drücken Sie $2."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_listen_file_check">
+    <input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
+      <match>
+       <action function="speak-text" 
+               data="Drücken Sie $1 um die Nachricht erneut zu hören. Um die Nachricht zu speichern, drücken Sie $2. Zum löschen der Nachricht drücken Sie $3. Für die Weiterleitung als Email, drücken Sie $4."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_choose_greeting">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="Wählen Sie eine Ansage zwischen 1 und 3."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_choose_greeting_fail">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="Ungültige Eingabe."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_record_greeting">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="Zeichnen Sie Ihre Ansage nach dem Ton auf. Drücken Sie eine beliebige Taste oder hören Sie auf zu sprechen um die Aufnahme zu beenden."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_record_message">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="Sprechen Sie nach dem Ton. Drücken Sie eine beliebige Taste oder hören Sie auf zu sprechen um die Aufnahme zu beenden."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_greeting_selected">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="Ansage $1 ausgewählt."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_play_greeting">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="$1 ist nicht verfügbar."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_say_number">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="$1"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_say_message_number">
+    <input pattern="^([a-z]+):(.*)$">
+      <match>
+       <action function="speak-text" data="$1 Nachricht Nummer $2."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_say_phone_number">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="$1."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_say_name">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="$1."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_ack">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="Nachricht $1"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_say_date">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="$strftime($1|%A, %B %d %Y, %I %M %p)"/>
+      </match>
+    </input>
+  </macro>
+
+</include><!--This line will be ignored it's here to validate the xml and is optional -->
diff --git a/net/freeswitch/files/etc.packages/say-en/lang/en/demo/demo-ivr.xml b/net/freeswitch/files/etc.packages/say-en/lang/en/demo/demo-ivr.xml
new file mode 100644 (file)
index 0000000..ec7d7bc
--- /dev/null
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<include><!--This line will be ignored it's here to validate the xml and is optional -->
+
+
+  <macro name="demo_ivr_count">
+    <input pattern="^(\d+)$">
+      <match>
+        <action function="play-file" data="voicemail/vm-you_have.wav"/>
+        <action function="say" data="$1" method="pronounced" type="name_spelled"/>
+        <action function="play-file" data="voicemail/vm-messages.wav"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="demo_ivr_main_menu" pause="100"> <!-- See conf/autoload_config/ivr.conf.xml for an example on how to use this macro in an IVR -->
+    <input pattern="(.*)">
+      <match>
+        <!-- string together several existing sound files to create one long greeting -->
+        <action function="play-file" data="ivr/ivr-welcome_to_freeswitch.wav"/>
+        <action function="play-file" data="ivr/ivr-this_ivr_will_let_you_test_features.wav"/>
+        <action function="play-file" data="ivr/ivr-you_may_exit_by_hanging_up.wav"/>
+        <!-- note that you can do more than just play files, e.g. have pauses and do TTS -->
+
+        <!-- Menu option 1: Call FreeSWITCH conference-->
+        <action function="play-file" data="ivr/ivr-enter_ext_pound.wav"/>
+        <action function="play-file" data="silence_stream://1500"/>
+        <action function="play-file" data="ivr/ivr-to_call_the_freeswitch_conference.wav"/>
+        <action function="play-file" data="ivr/ivr-please.wav"/>
+        <action function="play-file" data="voicemail/vm-press.wav"/>
+        <action function="play-file" data="digits/1.wav"/>
+
+        <!-- Menu option 2: Do FreeSWITCH echo test -->
+        <action function="play-file" data="ivr/ivr-to_do_a_freeswitch_echo_test.wav"/>
+        <action function="play-file" data="ivr/ivr-please.wav"/>
+        <action function="play-file" data="voicemail/vm-press.wav"/>
+        <action function="play-file" data="digits/2.wav"/>
+
+        <!-- Menu option 3: Listen to Music on Hold -->
+        <action function="play-file" data="ivr/ivr-to_listen_to_moh.wav"/>
+        <action function="play-file" data="ivr/ivr-please.wav"/>
+        <action function="play-file" data="voicemail/vm-press.wav"/>
+        <action function="play-file" data="digits/3.wav"/>
+
+        <!-- Menu option 4: Register for ClueCon -->
+        <action function="play-file" data="ivr/ivr-register_for_cluecon.wav"/>
+        <action function="play-file" data="digits/4.wav"/>
+
+        <!-- Menu option 5: Listen to screaming monkeys -->
+        <action function="play-file" data="ivr/ivr-to_hear_screaming_monkeys.wav"/>
+        <action function="play-file" data="ivr/ivr-please.wav"/>
+        <action function="play-file" data="voicemail/vm-press.wav"/>
+        <action function="play-file" data="digits/5.wav"/>
+
+        <!-- Menu option 6: Hear a sample submenu -->
+        <action function="play-file" data="ivr/ivr-to_hear_sample_submenu.wav"/>
+        <action function="play-file" data="ivr/ivr-please.wav"/>
+        <action function="play-file" data="voicemail/vm-press.wav"/>
+        <action function="play-file" data="digits/6.wav"/>
+
+        <!-- Menu option 9: Repeat these options -->
+        <action function="play-file" data="ivr/ivr-to_repeat_these_options.wav"/>
+        <action function="play-file" data="ivr/ivr-please.wav"/>
+        <action function="play-file" data="voicemail/vm-press.wav"/>
+        <action function="play-file" data="digits/9.wav"/>
+        <action function="play-file" data="silence_stream://2000"/>
+      </match>
+    </input>
+  </macro>
+
+  <!-- The following macro is the same as demo_ivr_main_menu except it is the "short" version -->
+  <!-- The short version has all the options but not the initial greeting -->
+  <macro name="demo_ivr_main_menu_short" pause="100"> 
+    <input pattern="(.*)">
+      <match>
+        <!-- Menu option 1: Call FreeSWITCH conference-->
+        <action function="play-file" data="silence_stream://1000"/>
+        <action function="play-file" data="ivr/ivr-to_call_the_freeswitch_conference.wav"/>
+        <action function="play-file" data="ivr/ivr-please.wav"/>
+        <action function="play-file" data="voicemail/vm-press.wav"/>
+        <action function="play-file" data="digits/1.wav"/>
+
+        <!-- Menu option 2: Do FreeSWITCH echo test -->
+        <action function="play-file" data="ivr/ivr-to_do_a_freeswitch_echo_test.wav"/>
+        <action function="play-file" data="ivr/ivr-please.wav"/>
+        <action function="play-file" data="voicemail/vm-press.wav"/>
+        <action function="play-file" data="digits/2.wav"/>
+
+        <!-- Menu option 3: Listen to Music on Hold -->
+        <action function="play-file" data="ivr/ivr-to_listen_to_moh.wav"/>
+        <action function="play-file" data="ivr/ivr-please.wav"/>
+        <action function="play-file" data="voicemail/vm-press.wav"/>
+        <action function="play-file" data="digits/3.wav"/>
+
+        <!-- Menu option 4: Hear a sample submenu -->
+        <action function="play-file" data="ivr/ivr-to_hear_sample_submenu.wav"/>
+        <action function="play-file" data="ivr/ivr-please.wav"/>
+        <action function="play-file" data="voicemail/vm-press.wav"/>
+        <action function="play-file" data="digits/4.wav"/>
+
+        <!-- Menu option 5: Listen to screaming monkeys -->
+        <action function="play-file" data="ivr/ivr-to_hear_screaming_monkeys.wav"/>
+        <action function="play-file" data="ivr/ivr-please.wav"/>
+        <action function="play-file" data="voicemail/vm-press.wav"/>
+        <action function="play-file" data="digits/5.wav"/>
+
+        <!-- Menu option 9: Repeat these options -->
+        <action function="play-file" data="ivr/ivr-to_repeat_these_options.wav"/>
+        <action function="play-file" data="ivr/ivr-please.wav"/>
+        <action function="play-file" data="voicemail/vm-press.wav"/>
+        <action function="play-file" data="digits/9.wav"/>
+        <action function="play-file" data="silence_stream://2000"/>
+      </match>
+    </input>
+  </macro>
+
+  <!-- The following macro is the "long" greeting for the demo_ivr_sub_menu -->
+  <macro name="demo_ivr_sub_menu">
+    <input pattern="(.*)">
+      <match>
+        <action function="play-file" data="ivr/ivr-welcome_to_freeswitch.wav"/>
+        <action function="play-file" data="ivr/ivr-sample_submenu.wav"/>
+
+        <!-- Menu option *: Return to top menu -->
+        <action function="play-file" data="ivr/ivr-to_return_to_previous_menu.wav"/>
+        <action function="play-file" data="ivr/ivr-please.wav"/>
+        <action function="play-file" data="voicemail/vm-press.wav"/>
+        <action function="play-file" data="digits/star.wav"/>
+
+      </match>
+    </input>
+  </macro>
+
+  <!-- The following macro is the same as demo_ivr_sub_menu except it is the "short" version -->
+  <!-- The short version has all the options but not the initial greeting -->
+  <macro name="demo_ivr_sub_menu_short"> 
+    <input pattern="(.*)">
+      <match>
+        <!-- Menu option *: Return to top menu -->
+        <action function="play-file" data="ivr/ivr-to_return_to_previous_menu.wav"/>
+        <action function="play-file" data="ivr/ivr-please.wav"/>
+        <action function="play-file" data="voicemail/vm-press.wav"/>
+        <action function="play-file" data="digits/star.wav"/>
+
+      </match>
+    </input>
+  </macro>
+
+</include><!--This line will be ignored it's here to validate the xml and is optional -->
diff --git a/net/freeswitch/files/etc.packages/say-en/lang/en/demo/demo.xml b/net/freeswitch/files/etc.packages/say-en/lang/en/demo/demo.xml
new file mode 100644 (file)
index 0000000..e3e6f02
--- /dev/null
@@ -0,0 +1,71 @@
+<include><!--This line will be ignored it's here to validate the xml and is optional -->
+    <macro name="msgcount">
+      <input pattern="(.*)">
+       <match>
+         <action function="execute" data="sleep(1000)"/>
+         <action function="play-file" data="voicemail/vm-you_have.wav"/>
+         <action function="say" data="$1" method="pronounced" type="items"/>
+         <action function="play-file" data="voicemail/vm-messages.wav"/>
+         <!-- or -->
+         <!--<action function="speak-text" data="you have $1 messages"/>-->
+       </match>
+      </input>
+    </macro>
+    <macro name="saydate">
+      <input pattern="(.*)">
+       <match>
+         <action function="say" data="$1" method="pronounced" type="current_date_time"/>
+       </match>
+      </input>
+    </macro>
+    <macro name="timespec">
+      <input pattern="(.*)">
+       <match>
+         <action function="say" data="$1" method="pronounced" type="time_measurement"/>
+       </match>
+      </input>
+    </macro>
+    <macro name="ip-addr">
+      <input pattern="(.*)">
+       <match>
+         <action function="say" data="$1" method="iterated" type="ip_address"/>
+         <action function="say" data="$1" method="pronounced" type="ip_address"/>
+       </match>
+      </input>
+    </macro>
+    <macro name="spell">
+      <input pattern="(.*)">
+       <match>
+         <action function="say" data="$1" method="pronounced" type="name_spelled"/>
+       </match>
+      </input>
+    </macro>
+    <macro name="spell-phonetic">
+      <input pattern="(.*)">
+       <match>
+         <action function="say" data="$1" method="pronounced" type="name_phonetic"/>
+       </match>
+      </input>
+    </macro>
+    <macro name="tts-timeleft">
+      <!-- The parser will visit each <input> tag and execute the actions in <match> or <nomatch> depending on the pattern param -->
+      <!-- If the function "break" is encountered all parsing will cease -->
+      <input pattern="(\d+):(\d+)">
+       <match>
+         <action function="speak-text" data="You have $1 minutes, $2 seconds remaining $strftime(%Y-%m-%d)"/>
+         <action function="break"/>
+       </match>
+       <nomatch>
+         <action function="speak-text" data="That input was invalid."/>
+       </nomatch>
+      </input>
+      <input pattern="(\d+) min (\d+) sec">
+       <match>
+         <action function="speak-text" data="You have $1 minutes, $2 seconds remaining $strftime(%Y-%m-%d)"/>
+       </match>
+       <nomatch>
+         <action function="speak-text" data="That input was invalid."/>
+       </nomatch>
+      </input>
+    </macro>
+</include><!--This line will be ignored it's here to validate the xml and is optional -->
diff --git a/net/freeswitch/files/etc.packages/say-en/lang/en/dir/sounds.xml b/net/freeswitch/files/etc.packages/say-en/lang/en/dir/sounds.xml
new file mode 100644 (file)
index 0000000..02d6b36
--- /dev/null
@@ -0,0 +1,121 @@
+<include><!--This line will be ignored it's here to validate the xml and is optional -->
+       <macro name="directory_intro">
+               <input pattern="^(last_name)" break_on_match="false">
+                       <match>
+                               <action function="play-file" data="directory/dir-enter-person.wav"/>
+                               <action function="play-file" data="directory/dir-last_name.wav"/>
+                       </match>
+               </input>
+               <input pattern="^(first_name)" break_on_match="false">
+                       <match>
+                <action function="play-file" data="directory/dir-enter-person.wav"/>
+                <action function="play-file" data="directory/dir-first_name.wav"/>
+                       </match>
+               </input>
+               <input pattern="^(last_name):([0-9#*])$" break_on_match="false">
+                       <match>
+                               <action function="play-file" data="directory/dir-to_search_by.wav"/>
+                               <action function="play-file" data="directory/dir-first_name.wav"/>
+                               <action function="play-file" data="directory/dir-press.wav"/>
+                               <action function="say" data="$2" method="pronounced" type="name_spelled"/>
+                       </match>
+               </input>
+               <input pattern="^(first_name):([0-9#*])$" break_on_match="false">
+                       <match>
+                               <action function="play-file" data="directory/dir-to_search_by.wav"/>
+                               <action function="play-file" data="directory/dir-last_name.wav"/>
+                               <action function="play-file" data="directory/dir-press.wav"/>
+                               <action function="say" data="$2" method="pronounced" type="name_spelled"/>
+                       </match>
+               </input>
+       </macro>
+
+       <macro name="directory_min_search_digits">
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="play-file" data="directory/dir-specify_mininum_first.wav"/>
+                               <action function="say" data="$1" method="pronounced" type="items"/>
+                               <action function="play-file" data="directory/dir-letters_of_person_name.wav"/>
+                       </match>
+               </input>
+       </macro>
+
+       <macro name="directory_result_count">
+               <input pattern="^0$" break_on_match="true">
+                       <match>
+                               <action function="play-file" data="directory/dir-no_match_entry.wav"/>
+                       </match>
+               </input>
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="say" data="$1" method="pronounced" type="items"/>
+                               <action function="play-file" data="directory/dir-result_match.wav"/>
+                       </match>
+               </input>
+       </macro>
+
+       <macro name="directory_result_count_too_large">
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="play-file" data="directory/dir-to_many_result.wav"/>
+                       </match>
+               </input>
+
+       </macro>
+
+       <macro name="directory_result_last">
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="play-file" data="directory/dir-no_more_result.wav"/>
+                       </match>
+               </input>
+
+       </macro>
+
+       <macro name="directory_result_item">
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="play-file" data="directory/dir-result_number.wav"/>
+                               <action function="say" data="$1" method="pronounced" type="items"/>
+                       </match>
+               </input>
+       </macro>
+
+       <macro name="directory_result_at">
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="play-file" data="directory/dir-at_extension.wav"/>
+                               <action function="say" data="$1" method="pronounced" type="name_spelled"/>
+                       </match>
+               </input>
+       </macro>
+
+       <macro name="directory_result_menu">
+               <input pattern="^([0-9#*]),([0-9#*]),([0-9#*]),([0-9#*])$">
+                       <match>
+                               <action function="play-file" data="directory/dir-to_select_entry.wav"/>
+                               <action function="play-file" data="directory/dir-press.wav"/>
+                               <action function="say" data="$1" method="pronounced" type="name_spelled"/>
+                               <action function="play-file" data="directory/dir-for_next.wav"/>
+                               <action function="play-file" data="directory/dir-press.wav"/>
+                               <action function="say" data="$2" method="pronounced" type="name_spelled"/>
+                               <action function="play-file" data="directory/dir-for_prev.wav"/>
+                               <action function="play-file" data="directory/dir-press.wav"/>
+                               <action function="say" data="$3" method="pronounced" type="name_spelled"/>
+                               <action function="play-file" data="directory/dir-to_make_new_search.wav"/>
+                               <action function="play-file" data="directory/dir-press.wav"/>
+                               <action function="say" data="$4" method="pronounced" type="name_spelled"/>
+
+                       </match>
+               </input>
+       </macro>
+
+       <macro name="directory_result_say_name">
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="say" data="$1" method="pronounced" type="name_spelled"/>
+                       </match>
+               </input>
+       </macro>
+
+</include><!--This line will be ignored it's here to validate the xml and is optional -->
diff --git a/net/freeswitch/files/etc.packages/say-en/lang/en/dir/tts.xml b/net/freeswitch/files/etc.packages/say-en/lang/en/dir/tts.xml
new file mode 100644 (file)
index 0000000..67ae5ab
--- /dev/null
@@ -0,0 +1,96 @@
+<include><!--This line will be ignored it's here to validate the xml and is optional -->
+
+       <macro name="directory_intro">
+               <input pattern="^(last_name)" break_on_match="false">
+                       <match>
+                               <action function="speak-text" data="Please enter the first few digit of the person last name"/>
+                       </match>
+               </input>
+               <input pattern="^(first_name)" break_on_match="false">
+                       <match>
+                               <action function="speak-text" data="Please enter the first few digit of the person first name"/>
+                       </match>
+               </input>
+               <input pattern="^(last_name):([0-9#*])$" break_on_match="false">
+                       <match>
+                               <action function="speak-text" data="to search by first name, press $2"/>
+                       </match>
+               </input>
+               <input pattern="^(first_name):([0-9#*])$" break_on_match="false">
+                       <match>
+                               <action function="speak-text" data="to search by last name, press $2"/>
+                       </match>
+               </input>
+       </macro>
+
+       <macro name="directory_min_search_digits">
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="speak-text" data="You need to specify a minimum the first $1 letters of the person name, try again."/>
+                       </match>
+               </input>
+       </macro>
+
+       <macro name="directory_result_count">
+               <input pattern="^0$" break_on_match="true">
+                       <match>
+                               <action function="speak-text" data="Your search match no user on this system, try again."/>
+                       </match>
+               </input>
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="speak-text" data="$1 result match your search"/>
+                       </match>
+               </input>
+       </macro>
+
+       <macro name="directory_result_count_too_large">
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="speak-text" data="Your search returned too many result, please try again"/>
+                       </match>
+               </input>
+
+       </macro>
+
+       <macro name="directory_result_last">
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="speak-text" data="No more result"/>
+                       </match>
+               </input>
+
+       </macro>
+
+       <macro name="directory_result_item">
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="speak-text" data="Result number $1"/>
+                       </match>
+               </input>
+       </macro>
+
+       <macro name="directory_result_menu">
+               <input pattern="^([0-9#*]),([0-9#*]),([0-9#*]),([0-9#*])$">
+                       <match>
+                               <action function="speak-text" data="To select this entry press $1, for the next entry press $2, for the previous entry press $3, to make a new search press $4"/>
+                       </match>
+               </input>
+       </macro>
+
+       <macro name="directory_result_at">
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="speak-text" data="at extension $1"/>
+                       </match>
+               </input>
+       </macro>
+       <macro name="directory_result_say_name">
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="speak-text" data="$1"/>
+                       </match>
+               </input>
+       </macro>
+
+</include><!--This line will be ignored it's here to validate the xml and is optional -->
diff --git a/net/freeswitch/files/etc.packages/say-en/lang/en/en.xml b/net/freeswitch/files/etc.packages/say-en/lang/en/en.xml
new file mode 100644 (file)
index 0000000..6bd5a7d
--- /dev/null
@@ -0,0 +1,8 @@
+<include>
+  <language name="en" sound-path="$${sounds_dir}/en/us/callie" tts-engine="cepstral" tts-voice="callie">
+    <X-PRE-PROCESS cmd="include" data="demo/*.xml"/> <!-- Note: this now grabs whole subdir, previously grabbed only demo.xml -->
+    <!--voicemail_en_tts is purely implemented with tts, we have the files based one that is the default. -->
+    <X-PRE-PROCESS cmd="include" data="vm/sounds.xml"/>  <!-- vm/tts.xml if you want to use tts and have cepstral -->
+    <X-PRE-PROCESS cmd="include" data="dir/sounds.xml"/>  <!-- dir/tts.xml if you want to use tts and have cepstral -->
+  </language>
+</include>
diff --git a/net/freeswitch/files/etc.packages/say-en/lang/en/vm/sounds.xml b/net/freeswitch/files/etc.packages/say-en/lang/en/vm/sounds.xml
new file mode 100644 (file)
index 0000000..63c9cd7
--- /dev/null
@@ -0,0 +1,381 @@
+<include><!--This line will be ignored it's here to validate the xml and is optional -->
+  <macro name="voicemail_enter_id">
+    <input pattern="(.*)">
+      <match>
+       <action function="play-file" data="voicemail/vm-enter_id.wav"/>
+       <action function="say" data="$1" method="pronounced" type="name_spelled"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_enter_pass">
+    <input pattern="(.*)">
+      <match>
+       <action function="play-file" data="voicemail/vm-enter_pass.wav"/>
+       <action function="say" data="$1" method="pronounced" type="name_spelled"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_fail_auth">
+    <input pattern="(.*)">
+      <match>
+       <action function="play-file" data="voicemail/vm-fail_auth.wav"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_hello">
+    <input pattern="(.*)">
+      <match>
+       <!--<action function="play-file" data="voicemail/vm-hello.wav"/> -->
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_goodbye">
+    <input pattern="(.*)">
+      <match>
+       <action function="play-file" data="voicemail/vm-goodbye.wav"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_abort">
+    <input pattern="(.*)">
+      <match>
+       <action function="play-file" data="voicemail/vm-abort.wav"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_message_count">
+    <input pattern="^(1):(.*)$" break_on_match="true">
+      <match>
+       <action function="play-file" data="voicemail/vm-you_have.wav"/>
+       <action function="say" data="$1" method="pronounced" type="items"/>
+       <action function="play-file" data="voicemail/vm-$2.wav"/> 
+       <action function="play-file" data="voicemail/vm-message.wav"/>
+      </match>
+    </input>
+    <input pattern="^(\d+):(.*)$">
+      <match>
+       <action function="play-file" data="voicemail/vm-you_have.wav"/>
+       <action function="say" data="$1" method="pronounced" type="items"/>
+       <action function="play-file" data="voicemail/vm-$2.wav"/> 
+       <action function="play-file" data="voicemail/vm-messages.wav"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_menu">
+    <input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
+      <match>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$1" method="pronounced" type="name_spelled"/>
+       <action function="play-file" data="voicemail/vm-listen_new.wav"/>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$2" method="pronounced" type="name_spelled"/>
+       <action function="play-file" data="voicemail/vm-listen_saved.wav"/>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$3" method="pronounced" type="name_spelled"/>
+       <action function="play-file" data="voicemail/vm-advanced.wav"/>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$4" method="pronounced" type="name_phonetic"/>
+       <action function="play-file" data="voicemail/vm-to_exit.wav"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_config_menu">
+    <input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
+      <match>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$1" method="pronounced" type="name_spelled"/>
+       <action function="play-file" data="voicemail/vm-to_record_greeting.wav"/>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$2" method="pronounced" type="name_spelled"/>
+       <action function="play-file" data="voicemail/vm-choose_greeting.wav"/>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$3" method="pronounced" type="name_spelled"/>
+       <action function="play-file" data="voicemail/vm-record_name2.wav"/>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$4" method="pronounced" type="name_spelled"/>
+       <action function="play-file" data="voicemail/vm-change_password.wav"/>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$5" method="pronounced" type="name_spelled"/>
+       <action function="play-file" data="voicemail/vm-main_menu.wav"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_record_name">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="play-file" data="voicemail/vm-record_name1.wav"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_record_file_check">
+    <input pattern="^([0-9#*]):([0-9#*]):([0-9#*])$">
+      <match>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$1" method="pronounced" type="name_spelled"/>
+       <action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$2" method="pronounced" type="name_spelled"/>
+       <action function="play-file" data="voicemail/vm-save_recording.wav"/>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$3" method="pronounced" type="name_spelled"/>
+       <action function="play-file" data="voicemail/vm-rerecord.wav"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_record_urgent_check">
+    <input pattern="^([0-9#*]):([0-9#*])$">
+      <match>
+       <action function="play-file" data="voicemail/vm-mark-urgent.wav"/>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$1" method="pronounced" type="name_spelled"/>
+       <action function="play-file" data="voicemail/vm-continue.wav"/>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$2" method="pronounced" type="name_spelled"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_forward_prepend">
+    <input pattern="^([0-9#*]):([0-9#*])$">
+      <match>
+       <action function="play-file" data="voicemail/vm-forward_add_intro.wav"/>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$1" method="pronounced" type="name_spelled"/>
+       <action function="play-file" data="voicemail/vm-send_message_now.wav"/>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$2" method="pronounced" type="name_spelled"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_forward_message_enter_extension">
+    <input pattern="^([0-9#*])$">
+      <match>
+       <action function="play-file" data="voicemail/vm-forward_enter_ext.wav"/>
+       <action function="play-file" data="voicemail/vm-followed_by.wav"/>
+       <action function="say" data="$1" method="pronounced" type="name_spelled"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_invalid_extension">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="play-file" data="voicemail/vm-that_was_an_invalid_ext.wav"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_listen_file_check">
+    <input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):(.*)$">
+      <match>
+       <action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$1" method="pronounced" type="name_spelled"/>
+       <action function="play-file" data="voicemail/vm-save_recording.wav"/>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$2" method="pronounced" type="name_spelled"/>
+       <action function="play-file" data="voicemail/vm-delete_recording.wav"/>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$3" method="pronounced" type="name_spelled"/>
+       <action function="play-file" data="voicemail/vm-forward_to_email.wav"/>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$4" method="pronounced" type="name_spelled"/>
+       <action function="play-file" data="voicemail/vm-return_call.wav"/>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$5" method="pronounced" type="name_spelled"/>
+       <action function="play-file" data="voicemail/vm-to_forward.wav"/>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$6" method="pronounced" type="name_spelled"/>
+      </match>
+    </input>
+    <input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
+      <match>
+       <action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$1" method="pronounced" type="name_spelled"/>
+       <action function="play-file" data="voicemail/vm-save_recording.wav"/>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$2" method="pronounced" type="name_spelled"/>
+       <action function="play-file" data="voicemail/vm-delete_recording.wav"/>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$3" method="pronounced" type="name_spelled"/>
+       <action function="play-file" data="voicemail/vm-return_call.wav"/>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$5" method="pronounced" type="name_spelled"/>
+       <action function="play-file" data="voicemail/vm-to_forward.wav"/>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$6" method="pronounced" type="name_spelled"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_choose_greeting">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="play-file" data="voicemail/vm-choose_greeting_choose.wav"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_choose_greeting_fail">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="play-file" data="voicemail/vm-choose_greeting_fail.wav"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_record_greeting">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="play-file" data="voicemail/vm-record_greeting.wav"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_record_message">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="play-file" data="voicemail/vm-record_message.wav"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_greeting_selected">
+    <input pattern="^(\d+)$">
+      <match>
+       <action function="play-file" data="voicemail/vm-greeting.wav"/>
+       <action function="say" data="$1" method="pronounced" type="items"/>
+       <action function="play-file" data="voicemail/vm-selected.wav"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_play_greeting">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="play-file" data="voicemail/vm-person.wav"/>
+       <action function="say" data="$1" method="pronounced" type="name_spelled"/>
+       <action function="play-file" data="voicemail/vm-not_available.wav"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_say_number">
+    <input pattern="^(\d+)$">
+      <match>
+       <action function="say" data="$1" method="pronounced" type="items"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_say_message_number">
+    <input pattern="^([a-z]+):(\d+)$">
+      <match>
+       <action function="play-file" data="voicemail/vm-$1.wav"/> 
+       <action function="play-file" data="voicemail/vm-message_number.wav"/>
+       <action function="say" data="$2" method="pronounced" type="items"/> 
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_say_phone_number">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="say" data="$1" method="pronounced" type="name_spelled"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_say_name">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="say" data="$1" method="pronounced" type="name_spelled"/>
+      </match>
+    </input>
+  </macro>
+  <!-- Note: Update this to marked-urgent,emailed and saved once new sound files are recorded -->
+  <macro name="voicemail_ack"> 
+    <input pattern="^(too-small)$">
+      <match>
+       <action function="play-file" data="voicemail/vm-too-small.wav"/>
+      </match>
+    </input>
+    <input pattern="^(deleted)$">
+      <match>
+       <action function="play-file" data="voicemail/vm-message.wav"/>
+       <action function="play-file" data="voicemail/vm-$1.wav"/>
+      </match>
+    </input>
+    <input pattern="^(saved)$">
+      <match>
+       <action function="play-file" data="voicemail/vm-message.wav"/>
+       <action function="play-file" data="voicemail/vm-$1.wav"/>
+      </match>
+    </input>
+    <input pattern="^(emailed)$">
+      <match>
+       <action function="play-file" data="voicemail/vm-message.wav"/>
+       <action function="play-file" data="voicemail/vm-$1.wav"/>
+      </match>
+    </input>
+    <input pattern="^(marked-urgent)$">
+      <match>
+       <action function="play-file" data="voicemail/vm-message.wav"/>
+       <action function="play-file" data="voicemail/vm-$1.wav"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_say_date">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="say" data="$1" method="pronounced" type="current_date_time"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_disk_quota_exceeded">
+    <input pattern="^(.*)$">
+        <match>
+            <action function="play-file" data="voicemail/vm-mailbox_full.wav"/>
+        </match>
+    </input>
+  </macro>
+
+  <macro name="valet_announce_ext">
+    <input pattern="^([^\:]+):(.*)$">
+      <match>
+        <action function="say" data="$2" method="pronounced" type="name_spelled"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="valet_lot_full">
+    <input pattern="^(.*)$">
+      <match>
+        <action function="play-file" data="tone_stream://%(275,10,600);%(275,100,300)"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="valet_lot_empty">
+    <input pattern="^(.*)$">
+      <match>
+        <action function="play-file" data="tone_stream://%(275,10,600);%(275,100,300)"/>
+      </match>
+    </input>
+  </macro>
+</include><!--This line will be ignored it's here to validate the xml and is optional -->
diff --git a/net/freeswitch/files/etc.packages/say-en/lang/en/vm/tts.xml b/net/freeswitch/files/etc.packages/say-en/lang/en/vm/tts.xml
new file mode 100644 (file)
index 0000000..1fc877d
--- /dev/null
@@ -0,0 +1,239 @@
+<include><!--This line will be ignored it's here to validate the xml and is optional -->
+  <macro name="voicemail_enter_id">
+    <input pattern="(.*)">
+      <match>
+       <action function="speak-text" data="please enter your i d, followed by $1."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_enter_pass">
+    <input pattern="(.*)">
+      <match>
+       <action function="speak-text" data="please enter your password, followed by $1."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_fail_auth">
+    <input pattern="(.*)">
+      <match>
+       <action function="speak-text" data="login incorrect."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_hello">
+    <input pattern="(.*)">
+      <match>
+       <action function="speak-text" data="welcome to your voicemail."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_goodbye">
+    <input pattern="(.*)">
+      <match>
+       <action function="speak-text" data="goodbye."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_abort">
+    <input pattern="(.*)">
+      <match>
+       <action function="speak-text" data="too many failed attempts."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_message_count">
+    <input pattern="^1:(.*)$" break_on_match="true">
+      <match>
+       <action function="speak-text" data="you have 1 $1 message in folder ${voicemail_current_folder}."/>
+      </match>
+    </input>
+    <input pattern="^(\d+):(.*)$">
+      <match>
+       <action function="speak-text" data="you have $1 $2 messages in folder ${voicemail_current_folder}."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_menu">
+    <input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
+      <match>
+       <action function="speak-text" 
+               data="To listen to new messages, press $1, To listen to saved messages, press $2, For advanced options, press $3, to exit, press $4."/>
+      </match>
+    </input>
+  </macro>
+
+
+  <macro name="voicemail_config_menu">
+    <input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
+      <match>
+       <action function="speak-text" 
+               data="To record a greeting, press $1, To choose a greeting, press $2, To record your name, press $3, to change your password, press $5, to return to the main menu, press $5."/>
+      </match>
+    </input>
+  </macro>
+
+
+  <macro name="voicemail_record_name">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="at the tone, please record your name, press any key or stop talking to end the recording."/>
+
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_record_file_check">
+    <input pattern="^([0-9#*]):([0-9#*]):([0-9#*])$">
+      <match>
+       <action function="speak-text" 
+               data="To listen to the recording, press $1, To save the recording, press $2, To re record, press $3."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_record_urgent_check">
+    <input pattern="^([0-9#*]):([0-9#*])$">
+      <match>
+       <action function="speak-text" 
+               data="To mark this message urgent, press $1, To continue, press $2."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_invalid_extension">
+    <input pattern="^([0-9#*])$">
+      <match>
+       <action function="speak-text" data="$1 is not a valid extension."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_forward_message_enter_extension">
+    <input pattern="^([0-9#*])$">
+      <match>
+       <action function="speak-text" data="enter the extension you wish to forward to, then press $1"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_forward_prepend">
+    <input pattern="^([0-9#*])$">
+      <match>
+       <action function="speak-text" data="To record an announcement, press $1."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_listen_file_check">
+    <input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
+      <match>
+       <action function="speak-text" 
+               data="To listen to the recording again, press $1, To save the recording, press $2,  To delete the recording, press $3, to forward the recording to your email, press $4, to call the caller now, press $5, To forward this message to another extension, press $6."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_choose_greeting">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="choose a greeting between 1 and 3."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_choose_greeting_fail">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="invalid value."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_record_greeting">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="record your greeting at the tone, press any key or stop talking to end the recording."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_record_message">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="record your message at the tone, press any key or stop talking to end the recording."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_greeting_selected">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="greeting $1 selected."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_play_greeting">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="$1 is not available."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_say_number">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="$1"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_say_message_number">
+    <input pattern="^([a-z]+):(.*)$">
+      <match>
+       <action function="speak-text" data="$1 message number $2."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_say_phone_number">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="$1."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_say_name">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="$1."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_ack">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="message $1"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_say_date">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="${strftime($1|%A, %B %d %Y, %I:%M %p)}"/>
+      </match>
+    </input>
+  </macro>
+
+</include><!--This line will be ignored it's here to validate the xml and is optional -->
diff --git a/net/freeswitch/files/etc.packages/say-fr/lang/fr/demo/demo.xml b/net/freeswitch/files/etc.packages/say-fr/lang/fr/demo/demo.xml
new file mode 100644 (file)
index 0000000..8066020
--- /dev/null
@@ -0,0 +1,18 @@
+<include><!--This line will be ignored it's here to validate the xml and is optional -->
+<macro name="msgcount">
+  <input pattern="(.*)">
+    <match>
+      <action function="play-file" data="tuas.wav"/>
+      <action function="say" data="$1" method="pronounced" type="items"/>
+      <action function="play-file" data="messages.wav"/>
+    </match>
+  </input>
+</macro>
+<macro name="timeleft">
+  <input pattern="(\d+):(\d+)">
+    <match>
+      <action function="speak-text" data="il reste $1 minutes et $2 secondes"/>
+    </match>
+  </input>
+</macro>
+</include><!--This line will be ignored it's here to validate the xml and is optional -->
diff --git a/net/freeswitch/files/etc.packages/say-fr/lang/fr/dir/sounds.xml b/net/freeswitch/files/etc.packages/say-fr/lang/fr/dir/sounds.xml
new file mode 100644 (file)
index 0000000..02d6b36
--- /dev/null
@@ -0,0 +1,121 @@
+<include><!--This line will be ignored it's here to validate the xml and is optional -->
+       <macro name="directory_intro">
+               <input pattern="^(last_name)" break_on_match="false">
+                       <match>
+                               <action function="play-file" data="directory/dir-enter-person.wav"/>
+                               <action function="play-file" data="directory/dir-last_name.wav"/>
+                       </match>
+               </input>
+               <input pattern="^(first_name)" break_on_match="false">
+                       <match>
+                <action function="play-file" data="directory/dir-enter-person.wav"/>
+                <action function="play-file" data="directory/dir-first_name.wav"/>
+                       </match>
+               </input>
+               <input pattern="^(last_name):([0-9#*])$" break_on_match="false">
+                       <match>
+                               <action function="play-file" data="directory/dir-to_search_by.wav"/>
+                               <action function="play-file" data="directory/dir-first_name.wav"/>
+                               <action function="play-file" data="directory/dir-press.wav"/>
+                               <action function="say" data="$2" method="pronounced" type="name_spelled"/>
+                       </match>
+               </input>
+               <input pattern="^(first_name):([0-9#*])$" break_on_match="false">
+                       <match>
+                               <action function="play-file" data="directory/dir-to_search_by.wav"/>
+                               <action function="play-file" data="directory/dir-last_name.wav"/>
+                               <action function="play-file" data="directory/dir-press.wav"/>
+                               <action function="say" data="$2" method="pronounced" type="name_spelled"/>
+                       </match>
+               </input>
+       </macro>
+
+       <macro name="directory_min_search_digits">
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="play-file" data="directory/dir-specify_mininum_first.wav"/>
+                               <action function="say" data="$1" method="pronounced" type="items"/>
+                               <action function="play-file" data="directory/dir-letters_of_person_name.wav"/>
+                       </match>
+               </input>
+       </macro>
+
+       <macro name="directory_result_count">
+               <input pattern="^0$" break_on_match="true">
+                       <match>
+                               <action function="play-file" data="directory/dir-no_match_entry.wav"/>
+                       </match>
+               </input>
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="say" data="$1" method="pronounced" type="items"/>
+                               <action function="play-file" data="directory/dir-result_match.wav"/>
+                       </match>
+               </input>
+       </macro>
+
+       <macro name="directory_result_count_too_large">
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="play-file" data="directory/dir-to_many_result.wav"/>
+                       </match>
+               </input>
+
+       </macro>
+
+       <macro name="directory_result_last">
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="play-file" data="directory/dir-no_more_result.wav"/>
+                       </match>
+               </input>
+
+       </macro>
+
+       <macro name="directory_result_item">
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="play-file" data="directory/dir-result_number.wav"/>
+                               <action function="say" data="$1" method="pronounced" type="items"/>
+                       </match>
+               </input>
+       </macro>
+
+       <macro name="directory_result_at">
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="play-file" data="directory/dir-at_extension.wav"/>
+                               <action function="say" data="$1" method="pronounced" type="name_spelled"/>
+                       </match>
+               </input>
+       </macro>
+
+       <macro name="directory_result_menu">
+               <input pattern="^([0-9#*]),([0-9#*]),([0-9#*]),([0-9#*])$">
+                       <match>
+                               <action function="play-file" data="directory/dir-to_select_entry.wav"/>
+                               <action function="play-file" data="directory/dir-press.wav"/>
+                               <action function="say" data="$1" method="pronounced" type="name_spelled"/>
+                               <action function="play-file" data="directory/dir-for_next.wav"/>
+                               <action function="play-file" data="directory/dir-press.wav"/>
+                               <action function="say" data="$2" method="pronounced" type="name_spelled"/>
+                               <action function="play-file" data="directory/dir-for_prev.wav"/>
+                               <action function="play-file" data="directory/dir-press.wav"/>
+                               <action function="say" data="$3" method="pronounced" type="name_spelled"/>
+                               <action function="play-file" data="directory/dir-to_make_new_search.wav"/>
+                               <action function="play-file" data="directory/dir-press.wav"/>
+                               <action function="say" data="$4" method="pronounced" type="name_spelled"/>
+
+                       </match>
+               </input>
+       </macro>
+
+       <macro name="directory_result_say_name">
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="say" data="$1" method="pronounced" type="name_spelled"/>
+                       </match>
+               </input>
+       </macro>
+
+</include><!--This line will be ignored it's here to validate the xml and is optional -->
diff --git a/net/freeswitch/files/etc.packages/say-fr/lang/fr/dir/tts.xml b/net/freeswitch/files/etc.packages/say-fr/lang/fr/dir/tts.xml
new file mode 100644 (file)
index 0000000..1f5b0ca
--- /dev/null
@@ -0,0 +1,101 @@
+<include><!--This line will be ignored it's here to validate the xml and is optional -->
+
+       <macro name="directory_intro">
+               <input pattern="^(last_name)" break_on_match="false">
+                       <match>
+                               <action function="speak-text" data="Veuillez entrer les premières lettres du nom de famille"/>
+                       </match>
+               </input>
+               <input pattern="^(first_name)" break_on_match="false">
+                       <match>
+                               <action function="speak-text" data="Veuillez entrer les premières lettres du prénom"/>
+                       </match>
+               </input>
+               <input pattern="^(last_name):([0-9#*])$" break_on_match="false">
+                       <match>
+                               <action function="speak-text" data="pour chercher par prénom, tapez $2"/>
+                       </match>
+               </input>
+               <input pattern="^(first_name):([0-9#*])$" break_on_match="false">
+                       <match>
+                               <action function="speak-text" data="pour chercher par nom de famille, tapez $2"/>
+                       </match>
+               </input>
+       </macro>
+
+       <macro name="directory_min_search_digits">
+               <input pattern="^(1)$">
+                       <match>
+                               <action function="speak-text" data="Vous devez entrer au minimum une lettre du nom de la personne, essayez encore"/>
+                       </match>
+               </input>
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="speak-text" data="Vous devez entrer au minimum $1 lettres du nom de la personne, essayer encore"/>
+                       </match>
+               </input>
+       </macro>
+
+       <macro name="directory_result_count">
+               <input pattern="^0$" break_on_match="true">
+                       <match>
+                               <action function="speak-text" data="Votre recherche n'a retournée aucun résultat, essayez encore"/>
+                       </match>
+               </input>
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="speak-text" data="$1 résultats correspondent à votre recherche"/>
+                       </match>
+               </input>
+       </macro>
+
+       <macro name="directory_result_count_too_large">
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="speak-text" data="Votre recherche retourne trop de résultats, essayer encore"/>
+                       </match>
+               </input>
+
+       </macro>
+
+       <macro name="directory_result_last">
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="speak-text" data="Fin des résultats."/>
+                       </match>
+               </input>
+
+       </macro>
+
+       <macro name="directory_result_item">
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="speak-text" data="Résultat numéro $1"/>
+                       </match>
+               </input>
+       </macro>
+
+       <macro name="directory_result_menu">
+               <input pattern="^([0-9#*]),([0-9#*]),([0-9#*]),([0-9#*])$">
+                       <match>
+                               <action function="speak-text" data="Pour sélectionner ce nom, tapez $1, pour le nom suivant tapez $2, pour le nom précédent, tapez $3, pour faire une nouvelle recherche, tapez $4"/>
+                       </match>
+               </input>
+       </macro>
+
+       <macro name="directory_result_at">
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="speak-text" data="au poste $1"/>
+                       </match>
+               </input>
+       </macro>
+       <macro name="directory_result_say_name">
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="speak-text" data="$1"/>
+                       </match>
+               </input>
+       </macro>
+
+</include><!--This line will be ignored it's here to validate the xml and is optional -->
diff --git a/net/freeswitch/files/etc.packages/say-fr/lang/fr/fr.xml b/net/freeswitch/files/etc.packages/say-fr/lang/fr/fr.xml
new file mode 100644 (file)
index 0000000..12bec06
--- /dev/null
@@ -0,0 +1,8 @@
+<include>
+  <language name="fr" sound-path="/snds" tts-engine="cepstral" tts-voice="david">
+    <X-PRE-PROCESS cmd="include" data="demo/demo.xml"/>
+    <!--voicemail_fr_tts is purely implemented with tts, we need a files based implementation too -->
+       <X-PRE-PROCESS cmd="include" data="vm/sounds.xml"/>
+       <X-PRE-PROCESS cmd="include" data="dir/sounds.xml"/>  <!-- dir/tts.xml if you want to use tts and have cepstral -->
+  </language>
+</include>
diff --git a/net/freeswitch/files/etc.packages/say-fr/lang/fr/vm/sounds.xml b/net/freeswitch/files/etc.packages/say-fr/lang/fr/vm/sounds.xml
new file mode 100644 (file)
index 0000000..55190a6
--- /dev/null
@@ -0,0 +1,246 @@
+<?xml version="1.0" encoding="utf-8"?>
+<include><!--This line will be ignored it's here to validate the xml and is optional -->
+  <macro name="voicemail_enter_id">
+    <input pattern="(.*)">
+      <match>
+       <action function="speak-text" data="Entrez votre Identification, suivi par $1."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_enter_pass">
+    <input pattern="(.*)">
+      <match>
+       <action function="speak-text" data="Entrez votre code, suivi par $1."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_fail_auth">
+    <input pattern="(.*)">
+      <match>
+       <action function="speak-text" data="Identification incorrecte."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_hello">
+    <input pattern="(.*)">
+      <match>
+       <action function="speak-text" data="Bienvenue sur votre répondeur."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_goodbye">
+    <input pattern="(.*)">
+      <match>
+       <action function="speak-text" data="Au revoir."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_abort">
+    <input pattern="(.*)">
+      <match>
+       <action function="speak-text" data="Trop de tentatives ont échouées."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_message_count">
+    <input pattern="^([^:]+):urgent-new">
+      <match>
+       <action function="speak-text" data="Vous avez $1 nouveaux messages urgents dans le répertoire ${voicemail_current_folder}."/>
+      </match>
+    </input>
+    <input pattern="^([^:]+):new">
+      <match>
+       <action function="speak-text" data="Vous avez $1 nouveaux messages dans le répertoire ${voicemail_current_folder}."/>
+      </match>
+    </input>
+    <input pattern="^([^:]+):saved">
+      <match>
+       <action function="speak-text" data="Vous avez $1 messages sauvegardés dans le répertoire ${voicemail_current_folder}."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_menu">
+    <input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
+      <match>
+       <action function="speak-text" 
+               data="Pour écouter les nouveaux messages, tapez $1, Pour écouter les messages enregistrés, tapez $2, Pour les options avancées, tapez $3, pour sortir, tapez $4."/>
+      </match>
+    </input>
+  </macro>
+
+
+  <macro name="voicemail_config_menu">
+    <input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
+      <match>
+       <action function="speak-text" 
+               data="pour enregistrer un message d'accueil, tapez $1, Pour choisir votre message d'accueil, tapez $2, Pour enregistrer votre nom, tapez $3, Pour changer votre mot de passe, tapez $4, Pour retourner au menu principal, tapez $5."/>
+      </match>
+    </input>
+  </macro>
+
+
+  <macro name="voicemail_record_name">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="enregistrez votre nom après le bip, puis tapez une touche, ou arrêtez de parler pour arrêter l'enregistrement."/>
+
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_record_file_check">
+    <input pattern="^([0-9#*]):([0-9#*]):([0-9#*])$">
+      <match>
+       <action function="speak-text" 
+               data="Pour écouter l'enregistrement, tapez $1, pour sauvegarder l'enregistrement, tapez $2, Pour réenregistrer, tapez $3."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_record_urgent_check">
+    <input pattern="^([0-9#*]):([0-9#*])$">
+      <match>
+       <action function="speak-text" 
+               data="Pour indiquer que ce message est urgent, tapez $1, Pour continuer, tapez $2."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_listen_file_check">
+    <input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])(:(.*))?$">
+      <match>
+       <action function="speak-text" 
+               data="Pour réécouter l'enregistrement à nouveau, tapez $1, Pour sauvegarder l'enregistrement, tapez $2, Pour supprimer l'enregistrement, tapez $3, pour transférer l'enregistrement à votre email $8, tapez $4, Pour appeler l'auteur du message, tapez $5, Pour transférer ce message à un autre numéro, tapez $6."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_choose_greeting">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="choisissez un message d'accueil entre 1 et 3."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_choose_greeting_fail">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="valeur incorrecte."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_record_greeting">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="enregistrez votre message d'accueil après le bip, puis tapez une touche ou arrêtez de parler pour arrêter l'enregistrement."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_record_message">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="enregistrez votre message après le bip, puis tapez une touche ou arrêtez de parler pour arrêter l'enregistrement."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_greeting_selected">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="message d'accueil numéro $1 sélectionné."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_play_greeting">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="$1 n'est pas disponible."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_say_number">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="$1"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_say_message_number">
+    <input pattern="^new:(.*)$">
+      <match>
+       <action function="speak-text" data="nouveau message numéro $1."/>
+      </match>
+    </input>
+    <input pattern="^saved:(.*)$">
+      <match>
+       <action function="speak-text" data="message sauvegardé numéro $1."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_say_phone_number">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="$1."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_say_name">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="$1."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_ack">
+    <input pattern="^(too-small)$">
+      <match>
+       <action function="speak-text" data="message trop court"/>
+      </match>
+    </input>
+    <input pattern="^(deleted)$">
+      <match>
+       <action function="speak-text" data="message supprimé"/>
+      </match>
+    </input>
+    <input pattern="^(saved)$">
+      <match>
+       <action function="speak-text" data="message sauvegardé"/>
+      </match>
+    </input>
+    <input pattern="^(emailed)$">
+      <match>
+       <action function="speak-text" data="message envoyé"/>
+      </match>
+    </input>
+    <input pattern="^(marked-urgent)$">
+      <match>
+       <action function="speak-text" data="message marqué urgent"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_say_date">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="${strftime($1|%e/%m/%Y, %H heures %M)}"/>
+      </match>
+    </input>
+  </macro>
+
+</include><!--This line will be ignored it's here to validate the xml and is optional -->
\ No newline at end of file
diff --git a/net/freeswitch/files/etc.packages/say-ru/lang/ru/demo/demo-ivr.xml b/net/freeswitch/files/etc.packages/say-ru/lang/ru/demo/demo-ivr.xml
new file mode 100644 (file)
index 0000000..8c6f3f8
--- /dev/null
@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<include><!--This line will be ignored it's here to validate the xml and is optional -->
+
+
+  <macro name="demo_ivr_count">
+    <input pattern="^(\d+)$">
+      <match>
+        <action function="play-file" data="voicemail/vm-you_have.wav"/>
+        <action function="say" data="$1" method="pronounced" type="name_spelled"/>
+        <action function="play-file" data="voicemail/vm-messages.wav"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="demo_ivr_main_menu" pause="250"> <!-- See conf/autoload_config/ivr.conf.xml for an example on how to use this macro in an IVR -->
+    <input pattern="(.*)">
+      <match>
+        <!-- string together several existing sound files to create one long greeting -->
+        <action function="play-file" data="ivr/ivr-welcome_to_freeswitch.wav"/>
+        <action function="play-file" data="ivr/ivr-this_ivr_will_let_you_test_features.wav"/>
+        <action function="play-file" data="ivr/ivr-you_may_exit_by_hanging_up.wav"/>
+        <!-- note that you can do more than just play files, e.g. have pauses and do TTS -->
+
+        <!-- Menu option 1: Call FreeSWITCH conference-->
+        <action function="play-file" data="ivr/ivr-enter_ext_pound.wav"/>
+        <action function="execute" data="sleep(1500)"/>
+        <action function="play-file" data="ivr/ivr-to_call_the_freeswitch_conference.wav"/>
+        <action function="play-file" data="ivr/ivr-please.wav"/>
+        <action function="play-file" data="voicemail/vm-press.wav"/>
+        <action function="play-file" data="digits/1.wav"/>
+
+        <!-- Menu option 2: Do FreeSWITCH echo test -->
+        <action function="play-file" data="ivr/ivr-to_do_a_freeswitch_echo_test.wav"/>
+        <action function="play-file" data="ivr/ivr-please.wav"/>
+        <action function="play-file" data="voicemail/vm-press.wav"/>
+        <action function="play-file" data="digits/2.wav"/>
+
+        <!-- Menu option 3: Listen to Music on Hold -->
+        <action function="play-file" data="ivr/ivr-to_listen_to_moh.wav"/>
+        <action function="play-file" data="ivr/ivr-please.wav"/>
+        <action function="play-file" data="voicemail/vm-press.wav"/>
+        <action function="play-file" data="digits/3.wav"/>
+
+        <!-- Menu option 4: Hear a sample submenu -->
+        <action function="play-file" data="ivr/ivr-to_hear_sample_submenu.wav"/>
+        <action function="play-file" data="ivr/ivr-please.wav"/>
+        <action function="play-file" data="voicemail/vm-press.wav"/>
+        <action function="play-file" data="digits/4.wav"/>
+
+        <!-- Menu option 5: Listen to screaming monkeys -->
+        <action function="play-file" data="ivr/ivr-to_hear_screaming_monkeys.wav"/>
+
+        <action function="play-file" data="ivr/ivr-please.wav"/>
+        <action function="play-file" data="voicemail/vm-press.wav"/>
+        <action function="play-file" data="digits/5.wav"/>
+
+        <!-- Menu option 9: Repeat these options -->
+        <action function="play-file" data="ivr/ivr-to_repeat_these_options.wav"/>
+        <action function="play-file" data="ivr/ivr-please.wav"/>
+        <action function="play-file" data="voicemail/vm-press.wav"/>
+        <action function="play-file" data="digits/9.wav"/>
+        <action function="execute" data="sleep(2000)"/>
+      </match>
+    </input>
+  </macro>
+
+  <!-- The following macro is the same as demo_ivr_main_menu except it is the "short" version -->
+  <!-- The short version has all the options but not the initial greeting -->
+  <macro name="demo_ivr_main_menu_short" pause="250"> 
+    <input pattern="(.*)">
+      <match>
+        <!-- Menu option 1: Call FreeSWITCH conference-->
+        <action function="execute" data="sleep(1000)"/>
+        <action function="play-file" data="ivr/ivr-to_call_the_freeswitch_conference.wav"/>
+        <action function="play-file" data="ivr/ivr-please.wav"/>
+        <action function="play-file" data="voicemail/vm-press.wav"/>
+        <action function="play-file" data="digits/1.wav"/>
+
+        <!-- Menu option 2: Do FreeSWITCH echo test -->
+        <action function="play-file" data="ivr/ivr-to_do_a_freeswitch_echo_test.wav"/>
+        <action function="play-file" data="ivr/ivr-please.wav"/>
+        <action function="play-file" data="voicemail/vm-press.wav"/>
+        <action function="play-file" data="digits/2.wav"/>
+
+        <!-- Menu option 3: Listen to Music on Hold -->
+        <action function="play-file" data="ivr/ivr-to_listen_to_moh.wav"/>
+        <action function="play-file" data="ivr/ivr-please.wav"/>
+        <action function="play-file" data="voicemail/vm-press.wav"/>
+        <action function="play-file" data="digits/3.wav"/>
+
+        <!-- Menu option 4: Hear a sample submenu -->
+        <action function="play-file" data="ivr/ivr-to_hear_sample_submenu.wav"/>
+        <action function="play-file" data="ivr/ivr-please.wav"/>
+        <action function="play-file" data="voicemail/vm-press.wav"/>
+        <action function="play-file" data="digits/4.wav"/>
+
+        <!-- Menu option 5: Listen to screaming monkeys -->
+        <action function="play-file" data="ivr/ivr-to_hear_screaming_monkeys.wav"/>
+        <action function="play-file" data="ivr/ivr-please.wav"/>
+        <action function="play-file" data="voicemail/vm-press.wav"/>
+        <action function="play-file" data="digits/5.wav"/>
+
+        <!-- Menu option 9: Repeat these options -->
+        <action function="play-file" data="ivr/ivr-to_repeat_these_options.wav"/>
+        <action function="play-file" data="ivr/ivr-please.wav"/>
+        <action function="play-file" data="voicemail/vm-press.wav"/>
+        <action function="play-file" data="digits/9.wav"/>
+        <action function="execute" data="sleep(2000)"/>
+      </match>
+    </input>
+  </macro>
+
+  <!-- The following macro is the "long" greeting for the demo_ivr_sub_menu -->
+  <macro name="demo_ivr_sub_menu">
+    <input pattern="(.*)">
+      <match>
+        <action function="play-file" data="ivr/ivr-welcome_to_freeswitch.wav"/>
+        <action function="play-file" data="ivr/ivr-sample_submenu.wav"/>
+
+        <!-- Menu option *: Return to top menu -->
+        <action function="play-file" data="ivr/ivr-to_return_to_previous_menu.wav"/>
+        <action function="play-file" data="ivr/ivr-please.wav"/>
+        <action function="play-file" data="voicemail/vm-press.wav"/>
+        <action function="play-file" data="digits/star.wav"/>
+
+      </match>
+    </input>
+  </macro>
+
+  <!-- The following macro is the same as demo_ivr_sub_menu except it is the "short" version -->
+  <!-- The short version has all the options but not the initial greeting -->
+  <macro name="demo_ivr_sub_menu_short"> 
+    <input pattern="(.*)">
+      <match>
+        <!-- Menu option *: Return to top menu -->
+        <action function="play-file" data="ivr/ivr-to_return_to_previous_menu.wav"/>
+        <action function="play-file" data="ivr/ivr-please.wav"/>
+        <action function="play-file" data="voicemail/vm-press.wav"/>
+        <action function="play-file" data="digits/star.wav"/>
+
+      </match>
+    </input>
+  </macro>
+
+</include><!--This line will be ignored it's here to validate the xml and is optional -->
diff --git a/net/freeswitch/files/etc.packages/say-ru/lang/ru/demo/demo.xml b/net/freeswitch/files/etc.packages/say-ru/lang/ru/demo/demo.xml
new file mode 100644 (file)
index 0000000..7e450fb
--- /dev/null
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="utf-8"?>
+<include><!--This line will be ignored it's here to validate the xml and is optional -->
+
+    <macro name="saymoney">
+     <input pattern="(.*)">
+        <match>
+         <action function="say" data="$1" method="pronounced" type="currency"/>
+       </match>
+      </input>
+    </macro>
+    <macro name="msgcount">
+      <input pattern="(.*)">
+       <match>
+         <action function="execute" data="sleep(1000)"/>
+         <action function="play-file" data="voicemail/vm-you_have.wav"/>
+         <action function="say" data="$1" method="pronounced" type="items"/>
+         <action function="play-file" data="voicemail/vm-messages.wav"/>
+         <!-- or -->
+         <!--<action function="speak-text" data="you have $1 messages"/>-->
+       </match>
+      </input>
+    </macro>
+    <macro name="saydate">
+      <input pattern="(.*)">
+       <match>
+         <action function="say" data="$1" method="pronounced" type="current_date_time"/>
+       </match>
+      </input>
+    </macro>
+    <macro name="saydatetime">
+      <input pattern="(.*)">
+       <match>
+         <action function="say" data="$1" method="pronounced" type="current_date_time"/>
+       </match>
+      </input>
+    </macro>
+    <macro name="timespec">
+      <input pattern="(.*)">
+       <match>
+         <action function="say" data="$1" method="pronounced" type="time_measurement"/>
+       </match>
+      </input>
+    </macro>
+    <macro name="timespec2">
+      <input pattern="(.*)">
+       <match>
+         <action function="say" data="$1" method="pronounced" type="CURRENT_DATE_TIME"/>
+       </match>
+      </input>
+    </macro>
+    <macro name="ip-addr-interated">
+      <input pattern="(.*)">
+       <match>
+         <action function="say" data="$1" method="iterated" type="ip_address"/>
+       </match>
+      </input>
+    </macro>
+    <macro name="ip-addr">
+      <input pattern="(.*)">
+       <match>
+         <action function="say" data="$1" method="pronounced" type="ip_address"/>
+       </match>
+      </input>
+    </macro>
+    <macro name="spell">
+      <input pattern="(.*)">
+       <match>
+         <action function="say" data="$1" method="pronounced" type="name_spelled"/>
+       </match>
+      </input>
+    </macro>
+    <macro name="spell-phonetic">
+      <input pattern="(.*)">
+       <match>
+         <action function="say" data="$1" method="pronounced" type="name_phonetic"/>
+       </match>
+      </input>
+    </macro>
+    <macro name="tts-timeleft">
+      <!-- The parser will visit each <input> tag and execute the actions in <match> or <nomatch> depending on the pattern param -->
+      <!-- If the function "break" is encountered all parsing will cease -->
+      <input pattern="(\d+):(\d+)">
+       <match>
+         <action function="speak-text" data="You have $1 minutes, $2 seconds remaining $strftime(%Y-%m-%d)"/>
+         <action function="break"/>
+       </match>
+       <nomatch>
+         <action function="speak-text" data="That input was invalid."/>
+       </nomatch>
+      </input>
+      <input pattern="(\d+) min (\d+) sec">
+       <match>
+         <action function="speak-text" data="You have $1 minutes, $2 seconds remaining $strftime(%Y-%m-%d)"/>
+       </match>
+       <nomatch>
+         <action function="speak-text" data="That input was invalid."/>
+       </nomatch>
+      </input>
+    </macro>
+</include><!--This line will be ignored it's here to validate the xml and is optional -->
diff --git a/net/freeswitch/files/etc.packages/say-ru/lang/ru/dir/sounds.xml b/net/freeswitch/files/etc.packages/say-ru/lang/ru/dir/sounds.xml
new file mode 100644 (file)
index 0000000..02d6b36
--- /dev/null
@@ -0,0 +1,121 @@
+<include><!--This line will be ignored it's here to validate the xml and is optional -->
+       <macro name="directory_intro">
+               <input pattern="^(last_name)" break_on_match="false">
+                       <match>
+                               <action function="play-file" data="directory/dir-enter-person.wav"/>
+                               <action function="play-file" data="directory/dir-last_name.wav"/>
+                       </match>
+               </input>
+               <input pattern="^(first_name)" break_on_match="false">
+                       <match>
+                <action function="play-file" data="directory/dir-enter-person.wav"/>
+                <action function="play-file" data="directory/dir-first_name.wav"/>
+                       </match>
+               </input>
+               <input pattern="^(last_name):([0-9#*])$" break_on_match="false">
+                       <match>
+                               <action function="play-file" data="directory/dir-to_search_by.wav"/>
+                               <action function="play-file" data="directory/dir-first_name.wav"/>
+                               <action function="play-file" data="directory/dir-press.wav"/>
+                               <action function="say" data="$2" method="pronounced" type="name_spelled"/>
+                       </match>
+               </input>
+               <input pattern="^(first_name):([0-9#*])$" break_on_match="false">
+                       <match>
+                               <action function="play-file" data="directory/dir-to_search_by.wav"/>
+                               <action function="play-file" data="directory/dir-last_name.wav"/>
+                               <action function="play-file" data="directory/dir-press.wav"/>
+                               <action function="say" data="$2" method="pronounced" type="name_spelled"/>
+                       </match>
+               </input>
+       </macro>
+
+       <macro name="directory_min_search_digits">
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="play-file" data="directory/dir-specify_mininum_first.wav"/>
+                               <action function="say" data="$1" method="pronounced" type="items"/>
+                               <action function="play-file" data="directory/dir-letters_of_person_name.wav"/>
+                       </match>
+               </input>
+       </macro>
+
+       <macro name="directory_result_count">
+               <input pattern="^0$" break_on_match="true">
+                       <match>
+                               <action function="play-file" data="directory/dir-no_match_entry.wav"/>
+                       </match>
+               </input>
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="say" data="$1" method="pronounced" type="items"/>
+                               <action function="play-file" data="directory/dir-result_match.wav"/>
+                       </match>
+               </input>
+       </macro>
+
+       <macro name="directory_result_count_too_large">
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="play-file" data="directory/dir-to_many_result.wav"/>
+                       </match>
+               </input>
+
+       </macro>
+
+       <macro name="directory_result_last">
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="play-file" data="directory/dir-no_more_result.wav"/>
+                       </match>
+               </input>
+
+       </macro>
+
+       <macro name="directory_result_item">
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="play-file" data="directory/dir-result_number.wav"/>
+                               <action function="say" data="$1" method="pronounced" type="items"/>
+                       </match>
+               </input>
+       </macro>
+
+       <macro name="directory_result_at">
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="play-file" data="directory/dir-at_extension.wav"/>
+                               <action function="say" data="$1" method="pronounced" type="name_spelled"/>
+                       </match>
+               </input>
+       </macro>
+
+       <macro name="directory_result_menu">
+               <input pattern="^([0-9#*]),([0-9#*]),([0-9#*]),([0-9#*])$">
+                       <match>
+                               <action function="play-file" data="directory/dir-to_select_entry.wav"/>
+                               <action function="play-file" data="directory/dir-press.wav"/>
+                               <action function="say" data="$1" method="pronounced" type="name_spelled"/>
+                               <action function="play-file" data="directory/dir-for_next.wav"/>
+                               <action function="play-file" data="directory/dir-press.wav"/>
+                               <action function="say" data="$2" method="pronounced" type="name_spelled"/>
+                               <action function="play-file" data="directory/dir-for_prev.wav"/>
+                               <action function="play-file" data="directory/dir-press.wav"/>
+                               <action function="say" data="$3" method="pronounced" type="name_spelled"/>
+                               <action function="play-file" data="directory/dir-to_make_new_search.wav"/>
+                               <action function="play-file" data="directory/dir-press.wav"/>
+                               <action function="say" data="$4" method="pronounced" type="name_spelled"/>
+
+                       </match>
+               </input>
+       </macro>
+
+       <macro name="directory_result_say_name">
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="say" data="$1" method="pronounced" type="name_spelled"/>
+                       </match>
+               </input>
+       </macro>
+
+</include><!--This line will be ignored it's here to validate the xml and is optional -->
diff --git a/net/freeswitch/files/etc.packages/say-ru/lang/ru/dir/tts.xml b/net/freeswitch/files/etc.packages/say-ru/lang/ru/dir/tts.xml
new file mode 100644 (file)
index 0000000..67ae5ab
--- /dev/null
@@ -0,0 +1,96 @@
+<include><!--This line will be ignored it's here to validate the xml and is optional -->
+
+       <macro name="directory_intro">
+               <input pattern="^(last_name)" break_on_match="false">
+                       <match>
+                               <action function="speak-text" data="Please enter the first few digit of the person last name"/>
+                       </match>
+               </input>
+               <input pattern="^(first_name)" break_on_match="false">
+                       <match>
+                               <action function="speak-text" data="Please enter the first few digit of the person first name"/>
+                       </match>
+               </input>
+               <input pattern="^(last_name):([0-9#*])$" break_on_match="false">
+                       <match>
+                               <action function="speak-text" data="to search by first name, press $2"/>
+                       </match>
+               </input>
+               <input pattern="^(first_name):([0-9#*])$" break_on_match="false">
+                       <match>
+                               <action function="speak-text" data="to search by last name, press $2"/>
+                       </match>
+               </input>
+       </macro>
+
+       <macro name="directory_min_search_digits">
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="speak-text" data="You need to specify a minimum the first $1 letters of the person name, try again."/>
+                       </match>
+               </input>
+       </macro>
+
+       <macro name="directory_result_count">
+               <input pattern="^0$" break_on_match="true">
+                       <match>
+                               <action function="speak-text" data="Your search match no user on this system, try again."/>
+                       </match>
+               </input>
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="speak-text" data="$1 result match your search"/>
+                       </match>
+               </input>
+       </macro>
+
+       <macro name="directory_result_count_too_large">
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="speak-text" data="Your search returned too many result, please try again"/>
+                       </match>
+               </input>
+
+       </macro>
+
+       <macro name="directory_result_last">
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="speak-text" data="No more result"/>
+                       </match>
+               </input>
+
+       </macro>
+
+       <macro name="directory_result_item">
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="speak-text" data="Result number $1"/>
+                       </match>
+               </input>
+       </macro>
+
+       <macro name="directory_result_menu">
+               <input pattern="^([0-9#*]),([0-9#*]),([0-9#*]),([0-9#*])$">
+                       <match>
+                               <action function="speak-text" data="To select this entry press $1, for the next entry press $2, for the previous entry press $3, to make a new search press $4"/>
+                       </match>
+               </input>
+       </macro>
+
+       <macro name="directory_result_at">
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="speak-text" data="at extension $1"/>
+                       </match>
+               </input>
+       </macro>
+       <macro name="directory_result_say_name">
+               <input pattern="^(.*)$">
+                       <match>
+                               <action function="speak-text" data="$1"/>
+                       </match>
+               </input>
+       </macro>
+
+</include><!--This line will be ignored it's here to validate the xml and is optional -->
diff --git a/net/freeswitch/files/etc.packages/say-ru/lang/ru/ru.xml b/net/freeswitch/files/etc.packages/say-ru/lang/ru/ru.xml
new file mode 100644 (file)
index 0000000..25d63b6
--- /dev/null
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--тестовые файлы Вы звуковые файлы можно взять тут svn co http://svn.freeswitch.ru/bbv/mod_say_ru/ru/  -->
+<include>
+  <language name="ru" sound-path="$${sounds_dir}/ru/RU/elena" tts-engine="cepstral" tts-voice="elena">
+    <X-PRE-PROCESS cmd="include" data="demo/*.xml"/> <!-- Note: this now grabs whole subdir, previously grabbed only demo.xml -->
+    <!--voicemail_en_tts is purely implemented with tts, we have the files based one that is the default. -->
+    <X-PRE-PROCESS cmd="include" data="vm/sounds.xml"/>  <!-- vm/tts.xml if you want to use tts and have cepstral -->
+  </language>
+</include>
diff --git a/net/freeswitch/files/etc.packages/say-ru/lang/ru/vm/sounds.xml b/net/freeswitch/files/etc.packages/say-ru/lang/ru/vm/sounds.xml
new file mode 100644 (file)
index 0000000..ffd9ec5
--- /dev/null
@@ -0,0 +1,365 @@
+<?xml version="1.0" encoding="utf-8"?>
+<include><!--This line will be ignored it's here to validate the xml and is optional -->
+  <macro name="voicemail_enter_id">
+    <input pattern="(.*)">
+      <match>
+       <action function="play-file" data="voicemail/vm-enter_id.wav"/>
+<!--   <action function="say" data="$1" method="pronounced" type="name_spelled"/>-->
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_enter_pass">
+    <input pattern="(.*)">
+      <match>
+       <action function="play-file" data="voicemail/vm-enter_pass.wav"/>
+<!-- лишнее и так долго <action function="say" data="$1" method="pronounced" type="name_spelled"/>-->
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_fail_auth">
+    <input pattern="(.*)">
+      <match>
+       <action function="play-file" data="voicemail/vm-fail_auth.wav"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_hello">
+    <input pattern="(.*)">
+      <match>
+       <action function="play-file" data="voicemail/vm-hello.wav"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_goodbye">
+    <input pattern="(.*)">
+      <match>
+       <action function="play-file" data="voicemail/vm-goodbye.wav"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_abort">
+    <input pattern="(.*)">
+      <match>
+       <action function="play-file" data="voicemail/vm-abort.wav"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_message_count">
+    <input pattern="^(\d+[0,2-9]1|[2-9]1|1):(.*)$"> <!--1, и всё что больше 20-ти 21,31,41 ..   -->
+      <match>
+       <action function="play-file" data="voicemail/vm-you_have.wav"/>
+       <action function="say" data="$1" method="pronounced" type="MESSAGES"/>
+       <action function="play-file" data="voicemail/vm-$2.wav"/> 
+       <action function="play-file" data="voicemail/vm-message.wav"/>
+<!--   <action function="play-file" data="voicemail/vm-in_folder.wav"/>-->
+      </match>
+    </input>
+    <!-- от 10 до 19 и ноль   --> <!-- от 5до 9 и больше 20-ти 25-29   -->
+    <input pattern="^(\d+1[0-9]|1[0-9]|0|\d+[0-9][0,5-9]|[2-9][0,5-9]|[0,5-9]):(.*)$">
+      <match>
+       <action function="play-file" data="voicemail/vm-you_have.wav"/>
+       <action function="say" data="$1" method="pronounced" type="MESSAGES"/>
+       <action function="play-file" data="voicemail/vm-$2x.wav"/> 
+       <action function="play-file" data="voicemail/vm-messagex.wav"/>
+<!--   <action function="play-file" data="voicemail/vm-in_folder.wav"/>-->
+      </match>
+    </input>
+    <input pattern="^(\d+[0,2-9][2-4]|[2-9][2-4]|[2-4]):(.*)$"> 
+      <match>
+       <action function="play-file" data="voicemail/vm-you_have.wav"/>
+       <action function="say" data="$1" method="pronounced" type="MESSAGES"/>
+       <action function="play-file" data="voicemail/vm-$2x.wav"/> 
+       <action function="play-file" data="voicemail/vm-messages.wav"/>
+       <action function="play-file" data="voicemail/vm-in_folder.wav"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_menu">
+    <input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
+      <match>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$1" method="pronounced" type="name_spelled"/>
+       <action function="play-file" data="voicemail/vm-listen_new.wav"/>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$2" method="pronounced" type="name_spelled"/>
+       <action function="play-file" data="voicemail/vm-listen_saved.wav"/>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$3" method="pronounced" type="name_spelled"/>
+       <action function="play-file" data="voicemail/vm-advanced.wav"/>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$4" method="pronounced" type="name_phonetic"/>
+       <action function="play-file" data="voicemail/vm-to_exit.wav"/>
+      </match>
+    </input>
+  </macro>
+
+
+  <macro name="voicemail_config_menu">
+    <input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
+      <match>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$1" method="pronounced" type="name_spelled"/>
+       <action function="play-file" data="voicemail/vm-to_record_greeting.wav"/>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$2" method="pronounced" type="name_spelled"/>
+       <action function="play-file" data="voicemail/vm-choose_greeting.wav"/>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$3" method="pronounced" type="name_spelled"/>
+       <action function="play-file" data="voicemail/vm-record_name2.wav"/>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$4" method="pronounced" type="name_spelled"/>
+       <action function="play-file" data="voicemail/vm-change_password.wav"/>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$5" method="pronounced" type="name_spelled"/>
+       <action function="play-file" data="voicemail/vm-main_menu.wav"/>
+      </match>
+    </input>
+  </macro>
+
+
+  <macro name="voicemail_record_name">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="play-file" data="voicemail/vm-record_name1.wav"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_record_file_check">
+    <input pattern="^([0-9#*]):([0-9#*]):([0-9#*])$">
+      <match>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$1" method="pronounced" type="name_spelled"/>
+       <action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$2" method="pronounced" type="name_spelled"/>
+       <action function="play-file" data="voicemail/vm-save_recording.wav"/>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$3" method="pronounced" type="name_spelled"/>
+       <action function="play-file" data="voicemail/vm-rerecord.wav"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_record_urgent_check">
+    <input pattern="^([0-9#*]):([0-9#*])$">
+      <match>
+       <action function="play-file" data="voicemail/vm-mark-urgent.wav"/>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$1" method="pronounced" type="name_spelled"/>
+       <action function="play-file" data="voicemail/vm-continue.wav"/>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$2" method="pronounced" type="name_spelled"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_forward_prepend">
+    <input pattern="^([0-9#*]):([0-9#*])$">
+      <match>
+       <action function="play-file" data="voicemail/vm-forward_add_intro.wav"/>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$1" method="pronounced" type="name_spelled"/>
+       <action function="play-file" data="voicemail/vm-send_message_now.wav"/>
+       <action function="play-file" data="voicemail/vm-press.wav"/>
+       <action function="say" data="$2" method="pronounced" type="name_spelled"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_forward_message_enter_extension">
+    <input pattern="^([0-9#*])$">
+      <match>
+       <action function="play-file" data="voicemail/vm-forward_enter_ext.wav"/>
+       <action function="play-file" data="voicemail/vm-followed_by.wav"/>
+       <action function="say" data="$1" method="pronounced" type="name_spelled"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_invalid_extension">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="play-file" data="voicemail/vm-that_was_an_invalid_ext.wav"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_listen_file_check">
+    <input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):(.*)$">
+      <match>
+        <action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
+        <action function="play-file" data="voicemail/vm-press.wav"/>
+        <action function="say" data="$1" method="pronounced" type="name_spelled"/>
+        <action function="play-file" data="voicemail/vm-save_recording.wav"/>
+        <action function="play-file" data="voicemail/vm-press.wav"/>
+        <action function="say" data="$2" method="pronounced" type="name_spelled"/>
+        <action function="play-file" data="voicemail/vm-delete_recording.wav"/>
+        <action function="play-file" data="voicemail/vm-press.wav"/>
+        <action function="say" data="$3" method="pronounced" type="name_spelled"/>
+        <action function="play-file" data="voicemail/vm-forward_to_email.wav"/>
+        <action function="play-file" data="voicemail/vm-press.wav"/>
+        <action function="say" data="$4" method="pronounced" type="name_spelled"/>
+        <action function="play-file" data="voicemail/vm-return_call.wav"/>
+        <action function="play-file" data="voicemail/vm-press.wav"/>
+        <action function="say" data="$5" method="pronounced" type="name_spelled"/>
+        <action function="play-file" data="voicemail/vm-to_forward.wav"/>
+        <action function="play-file" data="voicemail/vm-press.wav"/>
+        <action function="say" data="$6" method="pronounced" type="name_spelled"/>
+      </match>
+    </input>
+    <input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
+      <match>
+        <action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
+        <action function="play-file" data="voicemail/vm-press.wav"/>
+        <action function="say" data="$1" method="pronounced" type="name_spelled"/>
+        <action function="play-file" data="voicemail/vm-save_recording.wav"/>
+        <action function="play-file" data="voicemail/vm-press.wav"/>
+        <action function="say" data="$2" method="pronounced" type="name_spelled"/>
+        <action function="play-file" data="voicemail/vm-delete_recording.wav"/>
+        <action function="play-file" data="voicemail/vm-press.wav"/>
+        <action function="say" data="$3" method="pronounced" type="name_spelled"/>
+        <action function="play-file" data="voicemail/vm-return_call.wav"/>
+        <action function="play-file" data="voicemail/vm-press.wav"/>
+        <action function="say" data="$5" method="pronounced" type="name_spelled"/>
+        <action function="play-file" data="voicemail/vm-to_forward.wav"/>
+        <action function="play-file" data="voicemail/vm-press.wav"/>
+        <action function="say" data="$6" method="pronounced" type="name_spelled"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_choose_greeting">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="play-file" data="voicemail/vm-choose_greeting_choose.wav"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_choose_greeting_fail">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="play-file" data="voicemail/vm-choose_greeting_fail.wav"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_record_greeting">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="play-file" data="voicemail/vm-record_greeting.wav"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_record_message">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="play-file" data="voicemail/vm-record_message.wav"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_greeting_selected">
+    <input pattern="^(\d+)$">
+      <match>
+       <action function="play-file" data="voicemail/vm-greeting.wav"/>
+       <action function="say" data="$1" method="pronounced" type="items"/>
+       <action function="play-file" data="voicemail/vm-selected.wav"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_play_greeting">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="play-file" data="voicemail/vm-person.wav"/>
+       <action function="say" data="$1" method="pronounced" type="name_spelled"/>
+       <action function="play-file" data="voicemail/vm-not_available.wav"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_say_number">
+    <input pattern="^(\d+)$">
+      <match>
+       <action function="say" data="$1" method="pronounced" type="items"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_say_message_number">
+    <input pattern="^([a-z]+):(\d+)$">
+      <match>
+       <action function="play-file" data="voicemail/vm-$1.wav"/> 
+       <action function="play-file" data="voicemail/vm-message_number.wav"/>
+       <action function="say" data="$2" method="pronounced" type="items"/> 
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_say_phone_number">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="say" data="$1" method="pronounced" type="name_spelled"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_say_name">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="say" data="$1" method="pronounced" type="name_spelled"/>
+      </match>
+    </input>
+  </macro>
+  <!-- Note: Update this to marked-urgent,emailed and saved once new sound files are recorded -->
+  <macro name="voicemail_ack"> 
+    <input pattern="^(too-small)$">
+      <match>
+       <action function="play-file" data="voicemail/vm-too-small.wav"/>
+      </match>
+    </input>
+    <input pattern="^(deleted)$">
+      <match>
+       <action function="play-file" data="voicemail/vm-message.wav"/>
+       <action function="play-file" data="voicemail/vm-$1.wav"/>
+      </match>
+    </input>
+    <input pattern="^(saved)$">
+      <match>
+       <action function="play-file" data="voicemail/vm-message.wav"/>
+       <action function="play-file" data="voicemail/vm-$1.wav"/>
+      </match>
+    </input>
+    <input pattern="^(emailed)$">
+      <match>
+       <action function="play-file" data="voicemail/vm-message.wav"/>
+       <action function="play-file" data="voicemail/vm-$1.wav"/>
+      </match>
+    </input>
+    <input pattern="^(marked-urgent)$">
+      <match>
+       <action function="play-file" data="voicemail/vm-message.wav"/>
+       <action function="play-file" data="voicemail/vm-$1.wav"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_say_date">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="say" data="$1" method="pronounced" type="current_date_time"/>
+      </match>
+    </input>
+  </macro>
+
+</include><!--This line will be ignored it's here to validate the xml and is optional -->
diff --git a/net/freeswitch/files/etc.packages/say-ru/lang/ru/vm/tts.xml b/net/freeswitch/files/etc.packages/say-ru/lang/ru/vm/tts.xml
new file mode 100644 (file)
index 0000000..1fc877d
--- /dev/null
@@ -0,0 +1,239 @@
+<include><!--This line will be ignored it's here to validate the xml and is optional -->
+  <macro name="voicemail_enter_id">
+    <input pattern="(.*)">
+      <match>
+       <action function="speak-text" data="please enter your i d, followed by $1."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_enter_pass">
+    <input pattern="(.*)">
+      <match>
+       <action function="speak-text" data="please enter your password, followed by $1."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_fail_auth">
+    <input pattern="(.*)">
+      <match>
+       <action function="speak-text" data="login incorrect."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_hello">
+    <input pattern="(.*)">
+      <match>
+       <action function="speak-text" data="welcome to your voicemail."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_goodbye">
+    <input pattern="(.*)">
+      <match>
+       <action function="speak-text" data="goodbye."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_abort">
+    <input pattern="(.*)">
+      <match>
+       <action function="speak-text" data="too many failed attempts."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_message_count">
+    <input pattern="^1:(.*)$" break_on_match="true">
+      <match>
+       <action function="speak-text" data="you have 1 $1 message in folder ${voicemail_current_folder}."/>
+      </match>
+    </input>
+    <input pattern="^(\d+):(.*)$">
+      <match>
+       <action function="speak-text" data="you have $1 $2 messages in folder ${voicemail_current_folder}."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_menu">
+    <input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
+      <match>
+       <action function="speak-text" 
+               data="To listen to new messages, press $1, To listen to saved messages, press $2, For advanced options, press $3, to exit, press $4."/>
+      </match>
+    </input>
+  </macro>
+
+
+  <macro name="voicemail_config_menu">
+    <input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
+      <match>
+       <action function="speak-text" 
+               data="To record a greeting, press $1, To choose a greeting, press $2, To record your name, press $3, to change your password, press $5, to return to the main menu, press $5."/>
+      </match>
+    </input>
+  </macro>
+
+
+  <macro name="voicemail_record_name">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="at the tone, please record your name, press any key or stop talking to end the recording."/>
+
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_record_file_check">
+    <input pattern="^([0-9#*]):([0-9#*]):([0-9#*])$">
+      <match>
+       <action function="speak-text" 
+               data="To listen to the recording, press $1, To save the recording, press $2, To re record, press $3."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_record_urgent_check">
+    <input pattern="^([0-9#*]):([0-9#*])$">
+      <match>
+       <action function="speak-text" 
+               data="To mark this message urgent, press $1, To continue, press $2."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_invalid_extension">
+    <input pattern="^([0-9#*])$">
+      <match>
+       <action function="speak-text" data="$1 is not a valid extension."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_forward_message_enter_extension">
+    <input pattern="^([0-9#*])$">
+      <match>
+       <action function="speak-text" data="enter the extension you wish to forward to, then press $1"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_forward_prepend">
+    <input pattern="^([0-9#*])$">
+      <match>
+       <action function="speak-text" data="To record an announcement, press $1."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_listen_file_check">
+    <input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
+      <match>
+       <action function="speak-text" 
+               data="To listen to the recording again, press $1, To save the recording, press $2,  To delete the recording, press $3, to forward the recording to your email, press $4, to call the caller now, press $5, To forward this message to another extension, press $6."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_choose_greeting">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="choose a greeting between 1 and 3."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_choose_greeting_fail">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="invalid value."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_record_greeting">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="record your greeting at the tone, press any key or stop talking to end the recording."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_record_message">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="record your message at the tone, press any key or stop talking to end the recording."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_greeting_selected">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="greeting $1 selected."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_play_greeting">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="$1 is not available."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_say_number">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="$1"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_say_message_number">
+    <input pattern="^([a-z]+):(.*)$">
+      <match>
+       <action function="speak-text" data="$1 message number $2."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_say_phone_number">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="$1."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_say_name">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="$1."/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_ack">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="message $1"/>
+      </match>
+    </input>
+  </macro>
+
+  <macro name="voicemail_say_date">
+    <input pattern="^(.*)$">
+      <match>
+       <action function="speak-text" data="${strftime($1|%A, %B %d %Y, %I:%M %p)}"/>
+      </match>
+    </input>
+  </macro>
+
+</include><!--This line will be ignored it's here to validate the xml and is optional -->