Work out which titration curve a fermentable follows.
Precedence: an explicit ph.maltClass wins. Otherwise the fermentable class
rules out anything that isn't grain, then the name is matched against the
malt families (most specific first), and finally colour decides. The name
matching is a heuristic on free text. A fermentable with known titration
data should set ph.maltClass, so this only has to handle custom malts that
have nothing but a name and a colour.
Work out which titration curve a fermentable follows.
Precedence: an explicit
ph.maltClasswins. Otherwise the fermentable class rules out anything that isn't grain, then the name is matched against the malt families (most specific first), and finally colour decides. The name matching is a heuristic on free text. A fermentable with known titration data should setph.maltClass, so this only has to handle custom malts that have nothing but a name and a colour.