on a different note, the Writing Sound Changes documentation file never once mentions
// exception environment, with the one and only use of it being in an example in the section on featural categories, and even there, it says nothing about it. it seems like it should at least be mentioned in the prose of the section on conditional sound changes. it is mentioned in the reference manual, though, so at least there's that
also, i'd like a way to specify a rule as applying except in any of multiple environments. e.g.:
would turn ⟨y⟩ into ⟨i⟩ anywhere not adjacent to a vowel, and
would turn ⟨alk⟩ into ⟨ôk⟩ but neither word-initially nor before ⟨u⟩. another thing that'd be nice to have is a way to specify in the environment that an element be anything that isn't what's specified, like (using ≠ as an mockup symbol):
would turn ⟨tw⟩ into ⟨dw⟩ anywhere except for the very beginning of a syllable (i know you could use
/ _ w // [# .] _, but it's more compact and there are probably situations where it's far cleaner too, and in some situations it makes more sense to say "this spot can be anything that isn't X" than to say "this spot can be anything, but disregard that if this other thing that just happens to say this spot is X is the case")
also those first two examples are actual situations i came across, and the third is one i thought up in like five seconds to be an example of the kind of situation that my current workaround for the first example is (said workaround is
, which works because
[C #] happens to be everything that isn't
V, but it isn't always that easy)