Page 15 of 17
Re: Brassica SCA [v1.0.0]
Posted: Sat Dec 21, 2024 10:35 am
by Lērisama
I've been playing with it some more and have another feature request: more flexibility in the
when conditions. To take the (simplified Yaazhgigzhoomnem?) example in the docs¹, if it had more valency reducers (let's say both
el and
oosh), I don't think the condition would be writable in the current version. Maybe something like
when (ANTIP is null) or
when (ANTIP not (1.el 1.oosh)) or something along those lines. Both would probably be useful in different circumstances
¹Reproduced here for ease of not having to go back and forth and people who didn't write the docs having a clue what I'm going on about:
Code: Select all
NEG = () 2.en
ANTIP = () 1.el
2 TA = wim () soo aa
when (ANTIP not 1.el) -2 ABS = zhaa woo yaa
-1 ERG = zh w y
Re: Brassica SCA [v1.0.0]
Posted: Sat Dec 21, 2024 5:01 pm
by bradrn
Lērisama wrote: ↑Sat Dec 21, 2024 10:35 am
(simplified Yaazhgigzhoomnem?)
Yes, that’s the one. It’s absolutely awful as a language, but it has a nice simple templatic structure which makes it good for examples. (Well, the ‘nice simple structure’ is precisely the thing makes it such a bad language… no real language is ever that simple.)
[…] if it had more valency reducers (let's say both el and oosh), I don't think the condition would be writable in the current version.
I think that’s quite possible, yes. But just adding
and and
or connectives should make everything expressible.
Re: Brassica SCA [v1.0.0]
Posted: Fri Dec 27, 2024 6:03 pm
by bradrn
bradrn wrote: ↑Sat Dec 21, 2024 5:48 am
Lērisama wrote: ↑Sat Dec 21, 2024 4:44 am
I have found a bug to report in brassica. Multivalent features seem not to word properly with the set operations
[…] I haven’t looked into the
&&Str case. I can do so tomorrow.
I have an explanation for this now. (Which I thought I posted already, but clearly didn’t.)
To quote myself from a
GitHub issue where someone else reported this same problem:
As for &&Str, that’s not actually a bug: it’s a deliberate design decision. When there’s more than two features, there’s no one obvious way to arrange the features, so you could end up with unpredictable ordering in V. For this reason Brassica only supports the && syntax when there are two categories. (This is documented in the reference.)
Re: Brassica SCA [v1.0.0]
Posted: Sat Dec 28, 2024 5:12 am
by Lērisama
bradrn wrote: ↑Fri Dec 27, 2024 6:03 pm
bradrn wrote: ↑Sat Dec 21, 2024 5:48 am
Lērisama wrote: ↑Sat Dec 21, 2024 4:44 am
I have found a bug to report in brassica. Multivalent features seem not to word properly with the set operations
[…] I haven’t looked into the
&&Str case. I can do so tomorrow.
I have an explanation for this now. (Which I thought I posted already, but clearly didn’t.)
To quote myself from a
GitHub issue where someone else reported this same problem:
As for &&Str, that’s not actually a bug: it’s a deliberate design decision. When there’s more than two features, there’s no one obvious way to arrange the features, so you could end up with unpredictable ordering in V. For this reason Brassica only supports the && syntax when there are two categories. (This is documented in the reference.)
Excellent, thank you. Cpuld you please then remove the (incorrect) comment in the following example from the writing sound changes guide, which states that
&&Str would work
Code: Select all
categories
C = m n p t k b d g f s v z r l y w
+Str+None = a e i o u ə ɨ
+Str+Sec = à è ì ò ù ə̀ ɨ̀
+Str+Pri = á é í ó ú ? ?
V = +Str+None &+Str+Sec &+Str+Pri
; or V = &&Str - see below
end
-rtl -1 [+Str+None -ə -ɨ] / +Str+Pri
-rtl C* +Str+None C* +Str+None C* / C* +Str+Sec C* +Str+None C* / _ // ^+Str+Pri _
; dukɨtipəta → dùkɨtìpətá
; dukɨtipetə → dukɨ̀tipétə
; dukɨtipətə → dùkɨtípətə
Re: Brassica SCA [v1.0.0]
Posted: Sat Dec 28, 2024 6:09 am
by bradrn
Oh wow, I hadn’t realised that was there… it’s removed in the latest version of the docs.
Re: Brassica SCA [v1.0.0]
Posted: Sun Jan 05, 2025 11:09 am
by Man in Space
Bug report:
Code: Select all
new categories
V = a e o ɨ i u ḁ ɛ̥ i̥ ɨ̥ ɔ̥ u̥ a̰ ɛ̰ ḭ ɨ̰ ɔ̰ ṵ a̤ ɛ̤ i̤ ɨ̤ ɔ̤ ṳ
W = a ɛ i ɨ ɔ u
X = ḁ ɛ̥ i̥ ɨ̥ ɔ̥ u̥
Y = a̰ ɛ̰ ḭ ɨ̰ ɔ̰ ṵ
Z = a̤ ɛ̤ i̤ ɨ̤ ɔ̤ ṳ
A = a ɛ i ɨ
B = ɵ œ ʉ y
F = ɸ θ ɬ s
G = β ð l j
N = m n̪ n nʲ ŋ
S = p t̪ t tʲ k
U = β ð l j h
O = ɸ θ ɬ s 0
P = p β ɸ m
K = t̪ n̪ θ ð
L = t n s l
M = tʲ nʲ ʃ j
C = m n̪ n nʲ ŋ p t̪ t tʲ k β ð l j h ɸ θ ɬ s 0 ʃ
end
When I try to do
[K L] / M / M _ (or any combination thereof; I'm going for stop assimilation), the output is "�". Using two rules (
K / L / L _ and
K / M / M _), it works fine.
Re: Brassica SCA [v1.0.0]
Posted: Sun Jan 05, 2025 1:07 pm
by Lērisama
Man in Space wrote: ↑Sun Jan 05, 2025 11:09 am
Bug report:
Code: Select all
new categories
K = t̪ n̪ θ ð
L = t n s l
M = tʲ nʲ ʃ j
end
When I try to do
[K L] / M / M _ (or any combination thereof; I'm going for stop assimilation), the output is "�". Using two rules (
K / L / L _ and
K / M / M _), it works fine.
I'm not Bradrn, but I'm pretty sure this isn't a bug – it's a feature of how Brassica does categories. Brassica expands the rule to
[t̪ n̪ θ ð t n s l] / [tʲ nʲ ʃ j] / [tʲ nʲ ʃ j] _, and so there is nothing to match to the members of
L in the replacement. You need write
[K L] / [M M] / M _, so
L has something to match to.
Re: Brassica SCA [v1.0.0]
Posted: Sun Jan 05, 2025 5:45 pm
by bradrn
Lērisama is correct.
(It’s nice to have someone who can answer questions when I’m not here!)
Re: Brassica SCA [v1.0.0]
Posted: Mon Jan 06, 2025 10:50 am
by Neonnaut
bradrn wrote: ↑Sat Nov 30, 2024 8:10 am
Neonnaut wrote: ↑Sat Nov 30, 2024 5:26 am
The Codemirror "Lezer" setup that does the syntax highlighting.
Ah! I didn’t use Lezer, actually — I just used regexps, defined
here. Feel free to copy and use (with attribution, of course).
I finally got around to using this as an example on writing a highligher for a project. Man, Codemirror Lezer was so unpleasant.
I'm not sure if it's intentional or not, but but in Brassica Online you can put random letters before the "category" declaration but category will still be highlighted as if there is no error. I don't know why myself, but RegExp "^" doesn't work in StreamLanguage, but "stream.sol()" (start of line) does.
Code: Select all
if (stream.match(/^new categories( nohighlight)?$/)) {
state.categories = []
state.cblock = true;
return "keyword";
}
if (stream.match(/^categories$/)) {
state.cblock = true;
return "keyword";
}
You could change it to:
Code: Select all
if (stream.sol()){
if (stream.match(/new categories( nohighlight)?$/)) {
state.categories = []
state.cblock = true;
return "keyword";
}
if (stream.match(/categories$/)) {
state.cblock = true;
return "keyword";
}
}
Re: Brassica SCA [v1.0.0]
Posted: Mon Jan 06, 2025 7:08 pm
by bradrn
Neonnaut wrote: ↑Mon Jan 06, 2025 10:50 am
I'm not sure if it's intentional or not, but but in Brassica Online you can put random letters before the "category" declaration but category will still be highlighted as if there is no error. I don't know why myself, but RegExp "^" doesn't work in StreamLanguage, but "stream.sol()" (start of line) does.
Oh, good catch! Feel free to submit a PR.
Re: Brassica SCA [v1.0.0]
Posted: Wed Jan 15, 2025 10:42 am
by Lērisama
Bug/browser problem report¹: on online brassica² the rules box sometimes doesn't load. It can be fixed by a combination of refreshing, clearing cookies and patience, but it is annoying. My friend also has the problem with a stable internet connection, which is why I'm mentioning it now³. In case it's relevant, it's happened on both Chrome on Windows and both Duck Duck Go⁴ and Chrome on Android
¹ I'm not sure which, if it's a browser problem feel free to ignore
² As I do most conlanging on a phone on long bus rides, I only use the online version
³ I'd always assumed it was due to a poor internet connections on busses before
⁴ The new one, i.e. not using Chromium
Re: Brassica SCA [v1.0.0]
Posted: Wed Mar 05, 2025 10:51 am
by Lērisama
I now have a computer I can download things onto, so I tried to download brassica. Unfortunately, it is a raspberry pi, and appimages are apparently cpu-specific¹, so it didn't work. I have no idea how difficult it would be to compile an arm-compatible appimage, and I'm happy to build it myself if you can't/don't want to/it's particularly fun, but I thought I'd ask first.
¹ Which makes sense when you actually think about it², but is still a pain
² If I understand how appimages work, which I'm not sure I do
Re: Brassica SCA [v1.0.0]
Posted: Wed Mar 05, 2025 6:53 pm
by bradrn
Lērisama wrote: ↑Wed Mar 05, 2025 10:51 am
I have no idea how difficult it would be to compile an arm-compatible appimage, and I'm happy to build it myself if you can't/don't want to/it's particularly
fun, but I thought I'd ask first.
The thought of attempting it gives me shivers up my spine. I mean, it’s probably possible, and I’m probably overestimating the difficulty, but I vaguely recall encountering some difficulties last time I tried to compile a Haskell program on a Raspberry Pi.
Re: Brassica SCA [v1.0.0]
Posted: Thu Mar 06, 2025 1:25 am
by Lērisama
bradrn wrote: ↑Wed Mar 05, 2025 6:53 pm
Lērisama wrote: ↑Wed Mar 05, 2025 10:51 am
I have no idea how difficult it would be to compile an arm-compatible appimage, and I'm happy to build it myself if you can't/don't want to/it's particularly
fun, but I thought I'd ask first.
The thought of attempting it gives me shivers up my spine. I mean, it’s probably possible, and I’m probably overestimating the difficulty, but I vaguely recall encountering some difficulties last time I tried to compile a Haskell program on a Raspberry Pi.
I'll try it myself then. Be prepared for an inordinate number of questions (by PM?)
Re: Brassica SCA [v1.0.0]
Posted: Thu Mar 06, 2025 1:47 am
by bradrn
Lērisama wrote: ↑Thu Mar 06, 2025 1:25 am
bradrn wrote: ↑Wed Mar 05, 2025 6:53 pm
Lērisama wrote: ↑Wed Mar 05, 2025 10:51 am
I have no idea how difficult it would be to compile an arm-compatible appimage, and I'm happy to build it myself if you can't/don't want to/it's particularly
fun, but I thought I'd ask first.
The thought of attempting it gives me shivers up my spine. I mean, it’s probably possible, and I’m probably overestimating the difficulty, but I vaguely recall encountering some difficulties last time I tried to compile a Haskell program on a Raspberry Pi.
I'll try it myself then. Be prepared for an inordinate number of questions (by PM?)
PMs might get annoying since phpBB only gives me so much space for them… here is fine. (Or you could use GitHub issues or email if you want.)
Re: Brassica SCA [online version]
Posted: Thu Mar 06, 2025 5:07 am
by WarpedWartWars
WarpedWartWars wrote: ↑Mon Jun 27, 2022 1:23 pm
How do I make a sound change to remove spaces?
i am pretty sure i was trying to implement
zompist's "Hou tu pranownse Inglish" sound changes but was tripped up by the third rule, which half of is
Hyphens can however be treated as word separators (mother-in-law is pronounced like mother in law).
i'm not sure why i wanted to
remove spaces (or rather word boundaries) rather than add them, though
btw the reason i'm replying to my own two-and-a-half year old post is because i was reading through the Brassica docs yesterday and found
this section, which is almost certainly exactly what i wanted
Re: Brassica SCA [v1.0.0]
Posted: Thu Mar 06, 2025 8:43 am
by WarpedWartWars
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)
Re: Brassica SCA [v1.0.0]
Posted: Thu Mar 06, 2025 10:05 am
by Lērisama
WarpedWartWars wrote: ↑Thu Mar 06, 2025 8:43 am
also, i'd like a way to specify a rule as applying except in any of multiple environments. e.g.:
This already exists: your examples of
y / i // V _ // _ V and
a l k / ô k // # _ // _ u are wrong – you can't use the shortcut of not specifying an environment when you use an exception. The correct form for the latter is
a l / ô / _ k // # _ // _ u. Which correctly transformed
talk alk alku to
tôk alk alku.
For some reason the equivalent
y / i / _ // V _ // _ V doesn't work for me: only the first exception is applied – I got
kykyay → kikiay; this seems to be a real bug.
There isn't to my knowledge a way of doing
t / d / ≠[# .] _ w, although including an exception, as you noted, will always work, and most can be rewritten to something like
t / d / [C V] _ w
Re: Brassica SCA [v1.0.0]
Posted: Thu Mar 06, 2025 5:00 pm
by WarpedWartWars
Lērisama wrote: ↑Thu Mar 06, 2025 10:05 am
This already exists: your examples of
y / i // V _ // _ V and
a l k / ô k // # _ // _ u are wrong – you can't use the shortcut of not specifying an environment when you use an exception. The correct form for the latter is
a l / ô / _ k // # _ // _ u. Which correctly transformed
talk alk alku to
tôk alk alku.
you forgot to check
talku, which should result in
talku but ends up turning into
tôku, so it's the same situation as
Lērisama wrote: ↑Thu Mar 06, 2025 10:05 am
For some reason the equivalent
y / i / _ // V _ // _ V doesn't work for me: only the first exception is applied – I got
kykyay → kikiay; this seems to be a real bug.
also this is correct for the syntax as given in the reference manual, though the second
// is not detected as an error, but is rather just ignored as if it were a comment, but syntax in it is still checked
Re: Brassica SCA [online version]
Posted: Thu Mar 06, 2025 9:34 pm
by bradrn
WarpedWartWars wrote: ↑Thu Mar 06, 2025 5:07 am
btw the reason i'm replying to my own two-and-a-half year old post is because i was reading through the Brassica docs yesterday and found
this section, which is almost certainly exactly what i wanted
That’s the one, yes!
WarpedWartWars wrote: ↑Thu Mar 06, 2025 8:43 am
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
This has been reported already and it’s on my to-do list. But I’ve been short on time lately so haven’t been working on Brassica much.
also, i'd like a way to specify a rule as applying except in any of multiple environments.
Also on the to-do list. (It certainly isn’t implemented, so I’m not sure why Lērisama isn’t getting a syntax error…) The problem was I couldn’t think of any places I could use it myself, so I wasn’t quite sure how to design it. Your examples are helpful in that!
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")
Isn’t this rule the same as
t / d / [C V] _ w? Because neither
C nor
V should match
. or
#.
Still… yeah, I see the attraction. If we had notation for ‘match anything’ (which you requested in your earlier post), then this would straightforwardly be something like
[MATCHANYTHING -# -.], using the existing syntax for subtraction. But we don’t. (Yet…)