1 package org.daisy.pipeline.css.speech;
2
3 import java.util.Map;
4
5 import cz.vutbr.web.css.CSSProperty;
6 import cz.vutbr.web.css.CSSProperty.Cue;
7 import cz.vutbr.web.css.CSSProperty.SpeechRate;
8 import cz.vutbr.web.css.CSSProperty.VoiceFamily;
9 import cz.vutbr.web.css.Declaration;
10 import cz.vutbr.web.css.Term;
11 import cz.vutbr.web.css.TermList;
12 import cz.vutbr.web.css.TermPercent;
13 import cz.vutbr.web.css.TermTime;
14 import cz.vutbr.web.css.TermURI;
15 import cz.vutbr.web.domassign.DeclarationTransformer;
16
17 public class SpeechDeclarationTransformer extends DeclarationTransformer {
18
19 @Override
20 public boolean parseDeclaration(Declaration d, Map<String, CSSProperty> properties, Map<String, Term<?>> values) {
21 String propertyName = d.getProperty().toLowerCase();
22 if ("cue-before".equals(propertyName) || "cue-after".equals(propertyName)) {
23 return genericTerm(TermURI.class, d.get(0), d.getProperty(), Cue.uri, false,
24 properties, values);
25 } else if (propertyName.startsWith("pause")) {
26
27 Term<?> term = d.get(0);
28 if (!(term instanceof TermTime))
29 return super.parseDeclaration(d, properties, values);
30 properties.put(propertyName, null);
31 values.put(propertyName, term);
32 return true;
33 } else if ("voice-family".equals(propertyName)) {
34 if (d.size() == 0)
35 return false;
36 TermList list = tf.createList();
37 for (Term<?> t : d) {
38 list.add(t);
39 }
40 try {
41 list = VoiceFamilyList.of(list);
42 } catch (IllegalArgumentException e) {
43 return false;
44 }
45 properties.put(d.getProperty(), VoiceFamily.list_values);
46 values.put(d.getProperty(), list);
47 return true;
48 } else if ("speech-rate".equals(propertyName)) {
49 if (d.size() == 1 && d.get(0) instanceof TermPercent) {
50 TermPercent p = (TermPercent)d.get(0);
51 if (p.getValue() <= 0) {
52 return false;
53 } else {
54 properties.put(d.getProperty(), SpeechRate.number);
55 values.put(d.getProperty(), p);
56 return true;
57 }
58 }
59 return super.parseDeclaration(d, properties, values);
60 } else {
61 return super.parseDeclaration(d, properties, values);
62 }
63 }
64 }