1 /*
2 This file is part of LilyPond, the GNU music typesetter.
3
4 Copyright (C) 2003--2020 Han-Wen Nienhuys <hanwen@xs4all.nl>
5
6 LilyPond is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
10
11 LilyPond is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20 #include "gregorian-ligature.hh"
21
22 #include "grob.hh"
23
24 using std::string;
25
check_prefix(const string & name,int mask,int prefix_set,string * str)26 void check_prefix (const string &name, int mask, int prefix_set, string *str)
27 {
28 if (prefix_set & mask)
29 {
30 if (!str->empty ())
31 *str += ", ";
32 *str += name;
33 }
34 }
35
36 string
prefixes_to_str(Grob * primitive)37 Gregorian_ligature::prefixes_to_str (Grob *primitive)
38 {
39 string str;
40 int prefix_set
41 = scm_to_int (get_property (primitive, "prefix-set"));
42 check_prefix ("virga", VIRGA, prefix_set, &str);
43 check_prefix ("stropha", STROPHA, prefix_set, &str);
44 check_prefix ("inclinatum", INCLINATUM, prefix_set, &str);
45 check_prefix ("auctum", AUCTUM, prefix_set, &str);
46 check_prefix ("descendens", DESCENDENS, prefix_set, &str);
47 check_prefix ("ascendens", ASCENDENS, prefix_set, &str);
48 check_prefix ("oriscus", ORISCUS, prefix_set, &str);
49 check_prefix ("quilisma", QUILISMA, prefix_set, &str);
50 check_prefix ("deminutum", DEMINUTUM, prefix_set, &str);
51 check_prefix ("cavum", CAVUM, prefix_set, &str);
52 check_prefix ("linea", LINEA, prefix_set, &str);
53 return str;
54 }
55
56 /*
57 CHECK ME -- does prefix-set come from here ?
58
59 In a way, yes. Actually, prefix-set is a property that is written
60 by code of GregorianLigatureEngraver that is virtually invoked by a
61 subclass like VaticanaLigatureEngraver. The property is lateron
62 read by the associated item class, such as VaticanaLigature.--jr
63 */
64 ADD_INTERFACE (Gregorian_ligature,
65 "A gregorian ligature.",
66
67 /* properties */
68 "virga "
69 "stropha "
70 "inclinatum "
71 "auctum "
72 "descendens "
73 "ascendens "
74 "oriscus "
75 "quilisma "
76 "deminutum "
77 "cavum "
78 "linea "
79 "pes-or-flexa "
80 "context-info "
81 "prefix-set "
82 );
83