Re: Brassica SCA [v1.0.0]
Posted: Sun Oct 13, 2024 10:05 am
Finally, someone asks! Because it’s BRAd’s SCA, of course!
(where SCA = Sound Change Applier)
Thanks!First: Looks and sounds very useful and interesting!
Finally, someone asks! Because it’s BRAd’s SCA, of course!
Thanks!First: Looks and sounds very useful and interesting!
The linked page states: "This page runs Brassica 0.3.0". Presumably that is an oversight?bradrn wrote: ↑Sun Oct 13, 2024 3:08 am After four years of development, it gives me enormous pleasure to finally announce version 1.0.0 of Brassica! Most of the big changes have been discussed here already, so just go straight to try it out online
Haha I guess I just never noticed them. The wildcard thingy is ^.
I understand, it must of taken a lot of work to get 1.0.0 up.Oh, interesting idea. I could certainly have a go at making that… after taking a break. I can do no more sound changes for the next little while!
I like to slip them in every now and againThis inescapably makes me think of Travis…putten
That's weird, for me the page says it runs 1.0.0.Raholeun wrote: ↑Sun Oct 13, 2024 1:41 pmThe linked page states: "This page runs Brassica 0.3.0". Presumably that is an oversight?bradrn wrote: ↑Sun Oct 13, 2024 3:08 am After four years of development, it gives me enormous pleasure to finally announce version 1.0.0 of Brassica! Most of the big changes have been discussed here already, so just go straight to try it out online
My guess is browser caching problems. Try force-refreshing if it still doesn’t work. Both those links should point to the same place.Raholeun wrote: ↑Sun Oct 13, 2024 1:41 pmThe linked page states: "This page runs Brassica 0.3.0". Presumably that is an oversight?bradrn wrote: ↑Sun Oct 13, 2024 3:08 am After four years of development, it gives me enormous pleasure to finally announce version 1.0.0 of Brassica! Most of the big changes have been discussed here already, so just go straight to try it out online
EDIT: I believe the correct link should be https://bradrn.com/brassica/index.html.
The wildcard has also been around for some time. (I don’t recall exactly when I added it.)
That’s been in the desktop version for some time, but v1.0.0 adds it to the web version too. I find it immensely convenient.
As of version 1.0.0: yes, rules are applied iteratively by default! It’s one of the big improvements in this version.Is there any way Brassica can apply rules iteratively?
Yes, you can do it by combining categories. I’d write it like so:Darren wrote: ↑Mon Oct 14, 2024 3:04 am Sorry to ask so many questions brad, but is there a way of simplifying this rule
categories
labial = p b m β
coronal = t d n l
palatal = c j ñ y
velar = k g ŋ w
end
palatal → / _ i
velar → palatal / _ i
coronal → palatal / _ i
labial → velar / _ i
into less than four lines? I feel like backreferences ought to be involvable somehow but I can't get it to work.
Ah, of course. I was trying to do [palatal velar coronal labial] → [{} palatal palatal velar] / _ i but obviously that didn't work.bradrn wrote: ↑Mon Oct 14, 2024 3:14 am Yes, you can do it by combining categories. I’d write it like so:
palatal / / _ i
[labial coronal velar] / [velar palatal palatal] / _ i
Of course, the second rule here only works because all the categories have the same number of elements. Otherwise the left and right sides would expand out to categories of different lengths, and things would become confusing very quickly.
(If you use braces cleverly you can write the whole thing in one line: [labial coronal velar {palatal}] / [velar palatal palatal {}] / _ i. But I think this is needlessly obscure.)
Ah! That can work, as long as you put braces around the first palatal to make Brassica treat it as a single element.Darren wrote: ↑Mon Oct 14, 2024 3:29 amAh, of course. I was trying to do [palatal velar coronal labial] → [{} palatal palatal velar] / _ i but obviously that didn't work.bradrn wrote: ↑Mon Oct 14, 2024 3:14 am Yes, you can do it by combining categories. I’d write it like so:
palatal / / _ i
[labial coronal velar] / [velar palatal palatal] / _ i
Of course, the second rule here only works because all the categories have the same number of elements. Otherwise the left and right sides would expand out to categories of different lengths, and things would become confusing very quickly.
(If you use braces cleverly you can write the whole thing in one line: [labial coronal velar {palatal}] / [velar palatal palatal {}] / _ i. But I think this is needlessly obscure.)
Good, yeah I get the braces now — what still goes over my head is the austosegments.
What it amounts to is adding a feature declaration (like $Feature) after every autosegmental grapheme. It is confusing, and I apologise for that. The documentation (both for this and for the underlying feature mechanism) went through several rewrites, and I’m still pretty sure I explained it poorly.
Yes, this is a longstanding annoyance. Unfortunately it’s fairly deeply related to the way the wildcard is implemented (which depends on having a single following element to check against). Perhaps I can rethink this design for v1.1.0.(I was going to ask a question about wildcards, but I worked out the problem; wildcards have to be followed by a lexeme, but I wanted to follow one with the environment - something along the lines of a → b / _ # // b ^ _.)
I kinda understand it, but I'm struggling with stopping it from outputting multiple options with changes like w → u / _ C which does things like awta → auta/aúta.bradrn wrote: ↑Mon Oct 14, 2024 3:58 am What it amounts to is adding a feature declaration (like $Feature) after every autosegmental grapheme. It is confusing, and I apologise for that. The documentation (both for this and for the underlying feature mechanism) went through several rewrites, and I’m still pretty sure I explained it poorly.
Ah, I thought there might be something in the -rtl flag but I didn't work out the syntax right. I could also make another category which contains everything and have // b X* _.For now, my best advice is to rewrite it as a right-to-left rule: -rtl a / b / _# // ^b _. (From 1.0.0 this beings its own confusion because it changes the direction of the wildcard syntax, but it does at least work.) Another options is to do b [C V]* _, which is annoying in a different way.
You can specify ‘⟨u⟩, precisely as written, no special behaviour’ by following it with a tilde: w → u~ / _ C. (I feel sure I did put that in the docs somewhere, though perhaps I forgot.)Darren wrote: ↑Mon Oct 14, 2024 5:41 amI kinda understand it, but I'm struggling with stopping it from outputting multiple options with changes like w → u / _ C which does things like awta → auta/aúta.bradrn wrote: ↑Mon Oct 14, 2024 3:58 am What it amounts to is adding a feature declaration (like $Feature) after every autosegmental grapheme. It is confusing, and I apologise for that. The documentation (both for this and for the underlying feature mechanism) went through several rewrites, and I’m still pretty sure I explained it poorly.
Sure, that’s another approach. I’ve considered adding a special character to match any grapheme, but I haven’t been sure how widely useful that would be.Ah, I thought there might be something in the -rtl flag but I didn't work out the syntax right. I could also make another category which contains everything and have // b X* _.For now, my best advice is to rewrite it as a right-to-left rule: -rtl a / b / _# // ^b _. (From 1.0.0 this beings its own confusion because it changes the direction of the wildcard syntax, but it does at least work.) Another options is to do b [C V]* _, which is annoying in a different way.
Oh I see that now. I'm a hella skim reader so it takes like forty goes to get anything into my headbradrn wrote: ↑Mon Oct 14, 2024 5:44 amYou can specify ‘⟨u⟩, precisely as written, no special behaviour’ by following it with a tilde: w → u~ / _ C. (I feel sure I did put that in the docs somewhere, though perhaps I forgot.)Darren wrote: ↑Mon Oct 14, 2024 5:41 amI kinda understand it, but I'm struggling with stopping it from outputting multiple options with changes like w → u / _ C which does things like awta → auta/aúta.bradrn wrote: ↑Mon Oct 14, 2024 3:58 am What it amounts to is adding a feature declaration (like $Feature) after every autosegmental grapheme. It is confusing, and I apologise for that. The documentation (both for this and for the underlying feature mechanism) went through several rewrites, and I’m still pretty sure I explained it poorly.
Yeah, it would be kinda useful but it's easy enough to define it yourself.I’ve considered adding a special character to match any grapheme, but I haven’t been sure how widely useful that would be.
Yep, I have the same problem. I tried to structure the docs nicely and bold the important bits, but it’s hard to do really well.