+
+ SCM accs = a->get_property ("accidentals");
+ SCM scm_style = a->get_property ("style");
+ if (!scm_is_symbol (scm_style)
+ && !parens
+ && scm_ilength (accs) == 1)
+ {
+ switch (scm_to_int (scm_car (accs)))
+ {
+ case FLAT:
+ {
+ Box stem = b;
+ Box bulb = b;
+
+ /*
+ we could make the stem thinner, but that places the flats
+ really close.
+ */
+ stem[X_AXIS][RIGHT] *= .5;
+
+ /*
+ To prevent vertical alignment for 6ths
+ */
+ stem[Y_AXIS] *= 1.1;
+ bulb[Y_AXIS][UP] *= .35;
+
+ boxes.push_back (bulb);
+ boxes.push_back (stem);
+ }
+ break;
+ case NATURAL:
+ {
+ Box lstem = b;
+ Box rstem = b;
+ Box belly = b;
+
+ lstem[Y_AXIS] *= 1.1;
+ rstem[Y_AXIS] *= 1.1;
+
+ belly[Y_AXIS] *= 0.75;
+ lstem[X_AXIS][RIGHT] *= .33;
+ rstem[X_AXIS][LEFT] = rstem[X_AXIS].linear_combination (1.0 / 3.0);
+ lstem[Y_AXIS][DOWN] = belly[Y_AXIS][DOWN];
+ rstem[Y_AXIS][UP] = belly[Y_AXIS][UP];
+ boxes.push_back (belly);
+ boxes.push_back (lstem);
+ boxes.push_back (rstem);
+ }
+ break;
+ /*
+ TODO: add support for, double flat.
+ */
+ }
+ }
+
+ if (!boxes.size ())
+ boxes.push_back (b);
+
+ Offset o (a->relative_coordinate (common[X_AXIS], X_AXIS),
+ a->relative_coordinate (common[Y_AXIS], Y_AXIS));
+ for (vsize i = boxes.size (); i--;)
+ boxes[i].translate (o);
+
+ return boxes;
+}
+
+/*
+ * Some styles do not provide all flavours of accidentals, e.g. there
+ * is currently no sharp accidental in vaticana style. In these cases
+ * this function falls back to one of the other styles.
+ */
+
+/*
+ todo: this sort of stuff in Scheme. --hwn.
+*/
+string
+Accidental_interface::get_fontcharname (string style, int alteration)
+{
+ if (alteration == DOUBLE_FLAT
+ || alteration == DOUBLE_SHARP)
+ return to_string (alteration);
+
+ if (style == "hufnagel")
+ switch (alteration)
+ {
+ case FLAT: return "hufnagel-1";
+ case 0: return "vaticana0";
+ case SHARP: return "mensural1";
+ }
+ if (style == "medicaea")
+ switch (alteration)
+ {
+ case FLAT: return "medicaea-1";
+ case 0: return "vaticana0";
+ case SHARP: return "mensural1";
+ }
+ if (style == "vaticana")
+ switch (alteration)
+ {
+ case FLAT: return "vaticana-1";
+ case 0: return "vaticana0";
+ case SHARP: return "mensural1";
+ }
+ if (style == "mensural")
+ switch (alteration)
+ {
+ case FLAT: return "mensural-1";
+ case 0: return "vaticana0";
+ case SHARP: return "mensural1";
+ }
+
+ if (style == "neomensural")
+ style = ""; // currently same as default
+ if (style == "default")
+ style = "";
+ return style + to_string (alteration);