Brassica SCA [v1.0.0]

Conworlds and conlangs
Lērisama
Posts: 258
Joined: Fri Oct 18, 2024 9:51 am

Re: Brassica SCA [v1.0.0]

Post 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
LZ – Lēri Ziwi
PS – Proto Sāzlakuic (ancestor of LZ)
PRk – Proto Rākēwuic
XI – Xú Iạlan
VN – verbal noun
SUP – supine
DIRECT – verbal directional
My language stuff
bradrn
Posts: 6711
Joined: Fri Oct 19, 2018 1:25 am

Re: Brassica SCA [v1.0.0]

Post 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.
Conlangs: Scratchpad | Texts | antilanguage
Software: See http://bradrn.com/projects.html
Other: Ergativity for Novices

(Why does phpBB not let me add >5 links here?)
bradrn
Posts: 6711
Joined: Fri Oct 19, 2018 1:25 am

Re: Brassica SCA [v1.0.0]

Post 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.)
Conlangs: Scratchpad | Texts | antilanguage
Software: See http://bradrn.com/projects.html
Other: Ergativity for Novices

(Why does phpBB not let me add >5 links here?)
Lērisama
Posts: 258
Joined: Fri Oct 18, 2024 9:51 am

Re: Brassica SCA [v1.0.0]

Post 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ə
LZ – Lēri Ziwi
PS – Proto Sāzlakuic (ancestor of LZ)
PRk – Proto Rākēwuic
XI – Xú Iạlan
VN – verbal noun
SUP – supine
DIRECT – verbal directional
My language stuff
bradrn
Posts: 6711
Joined: Fri Oct 19, 2018 1:25 am

Re: Brassica SCA [v1.0.0]

Post by bradrn »

Oh wow, I hadn’t realised that was there… it’s removed in the latest version of the docs.
Conlangs: Scratchpad | Texts | antilanguage
Software: See http://bradrn.com/projects.html
Other: Ergativity for Novices

(Why does phpBB not let me add >5 links here?)
User avatar
Man in Space
Posts: 1905
Joined: Sat Jul 21, 2018 1:05 am

Re: Brassica SCA [v1.0.0]

Post 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.
Lērisama
Posts: 258
Joined: Fri Oct 18, 2024 9:51 am

Re: Brassica SCA [v1.0.0]

Post 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.
LZ – Lēri Ziwi
PS – Proto Sāzlakuic (ancestor of LZ)
PRk – Proto Rākēwuic
XI – Xú Iạlan
VN – verbal noun
SUP – supine
DIRECT – verbal directional
My language stuff
bradrn
Posts: 6711
Joined: Fri Oct 19, 2018 1:25 am

Re: Brassica SCA [v1.0.0]

Post by bradrn »

Lērisama is correct.

(It’s nice to have someone who can answer questions when I’m not here!)
Conlangs: Scratchpad | Texts | antilanguage
Software: See http://bradrn.com/projects.html
Other: Ergativity for Novices

(Why does phpBB not let me add >5 links here?)
Neonnaut
Posts: 103
Joined: Wed Jun 02, 2021 4:23 am

Re: Brassica SCA [v1.0.0]

Post 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";
	}
}
bradrn
Posts: 6711
Joined: Fri Oct 19, 2018 1:25 am

Re: Brassica SCA [v1.0.0]

Post 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.
Conlangs: Scratchpad | Texts | antilanguage
Software: See http://bradrn.com/projects.html
Other: Ergativity for Novices

(Why does phpBB not let me add >5 links here?)
Lērisama
Posts: 258
Joined: Fri Oct 18, 2024 9:51 am

Re: Brassica SCA [v1.0.0]

Post 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
LZ – Lēri Ziwi
PS – Proto Sāzlakuic (ancestor of LZ)
PRk – Proto Rākēwuic
XI – Xú Iạlan
VN – verbal noun
SUP – supine
DIRECT – verbal directional
My language stuff
Lērisama
Posts: 258
Joined: Fri Oct 18, 2024 9:51 am

Re: Brassica SCA [v1.0.0]

Post 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
LZ – Lēri Ziwi
PS – Proto Sāzlakuic (ancestor of LZ)
PRk – Proto Rākēwuic
XI – Xú Iạlan
VN – verbal noun
SUP – supine
DIRECT – verbal directional
My language stuff
bradrn
Posts: 6711
Joined: Fri Oct 19, 2018 1:25 am

Re: Brassica SCA [v1.0.0]

Post 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.
Conlangs: Scratchpad | Texts | antilanguage
Software: See http://bradrn.com/projects.html
Other: Ergativity for Novices

(Why does phpBB not let me add >5 links here?)
Lērisama
Posts: 258
Joined: Fri Oct 18, 2024 9:51 am

Re: Brassica SCA [v1.0.0]

Post 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?)
LZ – Lēri Ziwi
PS – Proto Sāzlakuic (ancestor of LZ)
PRk – Proto Rākēwuic
XI – Xú Iạlan
VN – verbal noun
SUP – supine
DIRECT – verbal directional
My language stuff
bradrn
Posts: 6711
Joined: Fri Oct 19, 2018 1:25 am

Re: Brassica SCA [v1.0.0]

Post 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.)
Conlangs: Scratchpad | Texts | antilanguage
Software: See http://bradrn.com/projects.html
Other: Ergativity for Novices

(Why does phpBB not let me add >5 links here?)
User avatar
WarpedWartWars
Posts: 204
Joined: Sat Aug 28, 2021 2:31 pm
Location: tɑ tɑ θiθɾ eɾloθ tɑ moew θerts
Contact:

Re: Brassica SCA [online version]

Post 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
kaêdẑ ac kodẑ vanén etan voâl
ve doâ alber noâ ful dobedẑ
cāêr mıdẑ noâ mūdẑr bet ful
paêl noâ mur gen dobedẑ
User avatar
WarpedWartWars
Posts: 204
Joined: Sat Aug 28, 2021 2:31 pm
Location: tɑ tɑ θiθɾ eɾloθ tɑ moew θerts
Contact:

Re: Brassica SCA [v1.0.0]

Post 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.:

Code: Select all

y / i // V _ // _ V
would turn ⟨y⟩ into ⟨i⟩ anywhere not adjacent to a vowel, and

Code: Select all

a l k / ô k // # _ // _ u
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):

Code: Select all

t / d / ≠[# .] _ w
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

Code: Select all

y / i / [C #] _ [C #]
, which works because [C #] happens to be everything that isn't V, but it isn't always that easy)
kaêdẑ ac kodẑ vanén etan voâl
ve doâ alber noâ ful dobedẑ
cāêr mıdẑ noâ mūdẑr bet ful
paêl noâ mur gen dobedẑ
Lērisama
Posts: 258
Joined: Fri Oct 18, 2024 9:51 am

Re: Brassica SCA [v1.0.0]

Post 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
LZ – Lēri Ziwi
PS – Proto Sāzlakuic (ancestor of LZ)
PRk – Proto Rākēwuic
XI – Xú Iạlan
VN – verbal noun
SUP – supine
DIRECT – verbal directional
My language stuff
User avatar
WarpedWartWars
Posts: 204
Joined: Sat Aug 28, 2021 2:31 pm
Location: tɑ tɑ θiθɾ eɾloθ tɑ moew θerts
Contact:

Re: Brassica SCA [v1.0.0]

Post 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
kaêdẑ ac kodẑ vanén etan voâl
ve doâ alber noâ ful dobedẑ
cāêr mıdẑ noâ mūdẑr bet ful
paêl noâ mur gen dobedẑ
bradrn
Posts: 6711
Joined: Fri Oct 19, 2018 1:25 am

Re: Brassica SCA [online version]

Post 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):

Code: Select all

t / d / ≠[# .] _ w
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…)
Conlangs: Scratchpad | Texts | antilanguage
Software: See http://bradrn.com/projects.html
Other: Ergativity for Novices

(Why does phpBB not let me add >5 links here?)
Post Reply