1 /*************************************************************************/
2 /*                                                                       */
3 /*                  Language Technologies Institute                      */
4 /*                     Carnegie Mellon University                        */
5 /*                         Copyright (c) 2013                            */
6 /*                        All Rights Reserved.                           */
7 /*                                                                       */
8 /*  Permission is hereby granted, free of charge, to use and distribute  */
9 /*  this software and its documentation without restriction, including   */
10 /*  without limitation the rights to use, copy, modify, merge, publish,  */
11 /*  distribute, sublicense, and/or sell copies of this work, and to      */
12 /*  permit persons to whom this work is furnished to do so, subject to   */
13 /*  the following conditions:                                            */
14 /*   1. The code must retain the above copyright notice, this list of    */
15 /*      conditions and the following disclaimer.                         */
16 /*   2. Any modifications must be clearly marked as such.                */
17 /*   3. Original authors' names are not deleted.                         */
18 /*   4. The authors' names are not used to endorse or promote products   */
19 /*      derived from this software without specific prior written        */
20 /*      permission.                                                      */
21 /*                                                                       */
22 /*  CARNEGIE MELLON UNIVERSITY AND THE CONTRIBUTORS TO THIS WORK         */
23 /*  DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING      */
24 /*  ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT   */
25 /*  SHALL CARNEGIE MELLON UNIVERSITY NOR THE CONTRIBUTORS BE LIABLE      */
26 /*  FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES    */
27 /*  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN   */
28 /*  AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,          */
29 /*  ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF       */
30 /*  THIS SOFTWARE.                                                       */
31 /*                                                                       */
32 /*************************************************************************/
33 /*                                                                       */
34 /*  LANGNAME language support                                            */
35 /*                                                                       */
36 /*************************************************************************/
37 #include "flite.h"
38 #include "cst_val.h"
39 #include "cst_voice.h"
40 #include "cst_lexicon.h"
41 #include "cst_ffeatures.h"
42 #include "cmu_LANGNAME_lang.h"
43 
cmu_LANGNAME_tokentowords(cst_item * token,const char * name)44 static cst_val *cmu_LANGNAME_tokentowords(cst_item *token, const char *name)
45 {
46     /* Return list of words that expand token/name */
47     cst_val *r;
48 
49     /* printf("token_name %s name %s\n",item_name(token),name); */
50 
51     if (item_feat_present(token,"phones"))
52 	return cons_val(string_val(name),NULL);
53 
54 #if 0
55     if (item_feat_present(token,"nsw"))
56 	nsw = item_feat_string(token,"nsw");
57 
58     utt = item_utt(token);
59     lex = val_lexicon(feat_val(utt->features,"lexicon"));
60 #endif
61 
62     if (cst_strlen(name) > 0)
63         r = cons_val(string_val(name),0);
64     else
65         r = NULL;
66 
67     return r;
68 }
69 
cmu_LANGNAME_lang_init(cst_voice * v)70 void cmu_LANGNAME_lang_init(cst_voice *v)
71 {
72     /* Set LANGNAME language stuff */
73     feat_set_string(v->features,"language","cmu_LANGNAME_lang");
74 
75     /* utterance break function */
76     feat_set(v->features,"utt_break",breakfunc_val(&default_utt_break));
77 
78     /* Phoneset -- need to get this from voice */
79     feat_set(v->features,"phoneset",phoneset_val(&cmu_LANGNAME_phoneset));
80     feat_set_string(v->features,"silence",cmu_LANGNAME_phoneset.silence);
81 
82     /* Get information from voice and add to lexicon */
83 
84     /* Text analyser -- whitespace defaults */
85     feat_set_string(v->features,"text_whitespace",
86                     cst_ts_default_whitespacesymbols);
87     feat_set_string(v->features,"text_postpunctuation",
88                     cst_ts_default_prepunctuationsymbols);
89     feat_set_string(v->features,"text_prepunctuation",
90                     cst_ts_default_postpunctuationsymbols);
91     feat_set_string(v->features,"text_singlecharsymbols",
92                     cst_ts_default_singlecharsymbols);
93 
94     /* Tokenization tokenization function */
95     feat_set(v->features,"tokentowords_func",itemfunc_val(&cmu_LANGNAME_tokentowords));
96       /* Pos tagger (gpos)/induced pos */
97     /* Phrasing */
98     /*    feat_set(v->features,"phrasing_cart",cart_val(&cmu_LANGNAME_phrasing_cart)); */
99     /* Intonation, Duration and F0 -- part of cg */
100     feat_set_string(v->features,"no_intonation_accent_model","1");
101 
102     /* Default ffunctions (required) */
103     basic_ff_register(v->ffunctions);
104 
105     return;
106 }
107