Brassica SCA [v0.2.0]

Conworlds and conlangs
Post Reply
bradrn
Posts: 5428
Joined: Fri Oct 19, 2018 1:25 am

Brassica SCA [v0.2.0]

Post by bradrn »

EDIT: Brassica is now online! Try it out at http://bradrn.com/brassica/. Or you can download the desktop version for Windows from https://github.com/bradrn/brassica/releases.

I am pleased to announce Brassica v0.0.1, the first release of my new SCA! Features include:
  • Can be used in both interactive (GUI) and batch mode, as well as a Haskell library
  • Intuitive syntax based on zompist’s SCA²
  • First-class support for multigraphs
  • Live preview and control over output highlighting allow fast iteration through rules
  • Tabular ‘rules applied’ output helps with debugging
  • Comes with built-in paradigm builder
  • Rich syntax for specifying phonetic rules: includes wildcards, optional elements and more
  • Category operations allow phonetic rules to be written featurally
  • Support for ‘features’ lets rules easily manipulate stress, tone and other suprasegmentals
  • Easy control over rule application: apply rules right-to-left and left-to-right, one time or multiple times
Warning: this is a pre-1.0 release! There may be bugs. (Actually, there certainly are bugs. I’ve already found some myself.) I would be grateful if you could report any bugs you find to this thread or the GitHub issue tracker. Also, some of my favourite features in this SCA have been suggested by ZBB members (thanks Nortaneous and Vilike), so feel free to ask for feature requests! Even breaking changes would be fine, since again this is pre-1.0.

And here’s an image:

Image
Last edited by bradrn on Thu Jan 04, 2024 1:16 am, edited 10 times in total.
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?)
fusijui
Posts: 225
Joined: Sat Apr 18, 2020 1:51 pm

Re: Brassica SCA [v0.0.1]

Post by fusijui »

I'd love to check this out! But, erm, a link...?
User avatar
dɮ the phoneme
Posts: 347
Joined: Mon Jul 09, 2018 2:53 am
Location: On either side of the tongue, below the alveolar ridge
Contact:

Re: Brassica SCA [v0.0.1]

Post by dɮ the phoneme »

Yes, it seems you forgot to include a link!

But I have to say, I've been waiting for this for quite a while, and the list of features looks very exciting! I had been holding off on SCAs in general due to many of my conlangs making heavy use of stress and SCAs generally not handling that well. I'd recently decided to bite the bullet and try to handle stress in a fairly hacky way in zompist's SCA, but thanks to this it looks like I might not have to!
Ye knowe eek that, in forme of speche is chaunge
With-inne a thousand yeer, and wordes tho
That hadden pris, now wonder nyce and straunge
Us thinketh hem; and yet they spake hem so,
And spedde as wel in love as men now do.

(formerly Max1461)
Travis B.
Posts: 5944
Joined: Sun Jul 15, 2018 8:52 pm

Re: Brassica SCA [v0.0.1]

Post by Travis B. »

I too have held off on SCA's largely because the language I would want to use an SCA for the most, Laqar, uses stress and reduction very heavily, which SCA's tend to be not very good at.
Ġëbba nuġmy sik'a läka jälåsåmâxûiri mohhomijekene.
Leka ṙotammy sik'a ġëbbäri mohhomijekëlâṙáisä.
Q'omysa. Q'omysa. Q'omysa. Q'omysa. Q'omysa. Q'omysa. Q'omysa.
bradrn
Posts: 5428
Joined: Fri Oct 19, 2018 1:25 am

Re: Brassica SCA [v0.0.1]

Post by bradrn »

fusijui wrote: Tue Jul 06, 2021 1:08 pm I'd love to check this out! But, erm, a link...?
dɮ the phoneme wrote: Tue Jul 06, 2021 1:16 pm Yes, it seems you forgot to include a link!
Oh, whoops! Here: https://github.com/bradrn/brassica. (This is what happens when you write something at 2am.)
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?)
fusijui
Posts: 225
Joined: Sat Apr 18, 2020 1:51 pm

Re: Brassica SCA [v0.0.1]

Post by fusijui »

It may be a little bit before I get into it and get back to you, but thanks in advance! I'm looking forward to playing working, working! with this :)
bradrn
Posts: 5428
Joined: Fri Oct 19, 2018 1:25 am

Re: Brassica SCA [v0.0.2]

Post by bradrn »

Brassica 0.0.2 is now out; get it from the usual place. Nothing particularly exciting in this release, but there is now a proper Windows installer, plus a couple of bugfixes.
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
dɮ the phoneme
Posts: 347
Joined: Mon Jul 09, 2018 2:53 am
Location: On either side of the tongue, below the alveolar ridge
Contact:

Re: Brassica SCA [v0.0.2]

Post by dɮ the phoneme »

Sorry for the dumb question, but I am reasonably bad at computers; is there a way to run this on mac? Do I have to compile it from the source?
Ye knowe eek that, in forme of speche is chaunge
With-inne a thousand yeer, and wordes tho
That hadden pris, now wonder nyce and straunge
Us thinketh hem; and yet they spake hem so,
And spedde as wel in love as men now do.

(formerly Max1461)
bradrn
Posts: 5428
Joined: Fri Oct 19, 2018 1:25 am

Re: Brassica SCA [v0.0.2]

Post by bradrn »

dɮ the phoneme wrote: Mon Jul 26, 2021 5:13 pm Sorry for the dumb question, but I am reasonably bad at computers; is there a way to run this on mac? Do I have to compile it from the source?
Unfortunately, you will have to compile it yourself. Unless I can somehow get access to a Mac, there is no way for me to make prebuilt Mac binaries.

That being said, I would like to make a web version at some point; however that will depend on whether I can get GHCJS working or not.
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
Hallow XIII
Posts: 127
Joined: Sat Jul 14, 2018 11:16 am

Re: Brassica SCA [v0.0.2]

Post by Hallow XIII »

Couldn’t you use the github actions Mac runner to do it?
Mbtrtcgf qxah bdej bkska kidabh n ñstbwdj spa.
Ogñwdf n spa bdej bruoh kiñabh ñbtzmieb n qxah.
Qiegf. Qiegf. Qiegf. Qiegf. Qiegf. Qiegf. Qiegf.
bradrn
Posts: 5428
Joined: Fri Oct 19, 2018 1:25 am

Re: Brassica SCA [v0.0.2]

Post by bradrn »

Hallow XIII wrote: Mon Aug 02, 2021 2:00 am Couldn’t you use the github actions Mac runner to do it?
I didn’t know it was possible to use Mac with GitHub Actions. That being said, I don’t know how to build Brassica on Mac in the first place, and even if I do get it working I wouldn’t have any way to test the resulting executable, so I think I’ll wait until I get some reliable instructions for building.
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
aliensdrinktea
Posts: 19
Joined: Sun Oct 11, 2020 4:04 pm
Location: in a galaxy far, far away

Re: Brassica SCA [v0.0.2]

Post by aliensdrinktea »

Hey, awesome! But I've got a couple questions:

1. Can this handle phonemes with multiple features, e.g., targeting voiced stops?
2. How do I write rules that affect only stressed or only unstressed syllables?
bradrn
Posts: 5428
Joined: Fri Oct 19, 2018 1:25 am

Re: Brassica SCA [v0.0.2]

Post by bradrn »

aliensdrinktea wrote: Sun Aug 08, 2021 12:33 pm Can this handle phonemes with multiple features, e.g., targeting voiced stops?
Of course! Just use category intersections:

Code: Select all

categories
Stop = p b t d k g
Voiced = b d g
V = a e i o u
end

; changes e.g. tapaketke to tabagetke
[Stop -Voiced] / [Stop +Voiced] / V _ V
Though do note that this requires keeping phoneme order consistent across all categories.

(I should also note that there is another part of Brassica which I called ‘features’. I have since realised that this was horribly misnamed, and should have been named ‘suprasegmentals’ or something. Maybe for the next release.)
How do I write rules that affect only stressed or only unstressed syllables?
You can use features (yes, the misnamed thing):

Code: Select all

categories
C = m n p t k s h y

feature a e i o u / Str = á é í ó ú

V = a e i o u
end

; delete unstressed vowels
[V -Str] / / _

; resolve stress clash
-ltr [V +Str] / [V -Str] / Str (C) (C) _

; geminate coda of stressed syllable
C / C > / Str _ [C #]

; NB. features don’t interfere with regular sound change:
a / e / t _

; e.g. kápanéma → káppnem, táyaéke → téyek, yékamá → yékkma
For more detail see the manual.
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
aliensdrinktea
Posts: 19
Joined: Sun Oct 11, 2020 4:04 pm
Location: in a galaxy far, far away

Re: Brassica SCA [v0.0.2]

Post by aliensdrinktea »

Thank you! One more question... where's the manual? (unless you mean the tutorial image)
bradrn
Posts: 5428
Joined: Fri Oct 19, 2018 1:25 am

Re: Brassica SCA [v0.0.2]

Post by bradrn »

aliensdrinktea wrote: Mon Aug 09, 2021 9:10 am Thank you! One more question... where's the manual? (unless you mean the tutorial image)
Here: https://github.com/bradrn/brassica/blob ... ntation.md. (The image wasn’t meant as a tutorial, though if the shoe fits…)
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
aliensdrinktea
Posts: 19
Joined: Sun Oct 11, 2020 4:04 pm
Location: in a galaxy far, far away

Re: Brassica SCA [v0.0.2]

Post by aliensdrinktea »

bradrn wrote: Mon Aug 09, 2021 9:52 am Here: https://github.com/bradrn/brassica/blob ... ntation.md. (The image wasn’t meant as a tutorial, though if the shoe fits…)
No wonder the "tutorial" wasn't very clear! And here I thought that was just a side effect of it being an early version :lol: Thanks again!
User avatar
Hallow XIII
Posts: 127
Joined: Sat Jul 14, 2018 11:16 am

Re: Brassica SCA [v0.0.2]

Post by Hallow XIII »

So I have good news and bad news. The good news is that I've managed to compile and run the brassica GUI on Linux. The bad news is that it was extremely involved to do so, largely because (til) Windows doesn't have a distinction between position-independent and position-dependent code, which lets you get away with more creative linking than on Unixen. The easiest way for me to get it running was to compile everything with -fPIC -fPIE and then dynamically link all the Haskell dependencies, which is also the preferred distribution format for my distribution's package management system.

For a prebuilt binary that you can download from github, it would be necessary to locally build Qt to be statically linked. Supposedly doing that might cause licensing issues... I can probably make a script that will take care of the linux build, at least.
Mbtrtcgf qxah bdej bkska kidabh n ñstbwdj spa.
Ogñwdf n spa bdej bruoh kiñabh ñbtzmieb n qxah.
Qiegf. Qiegf. Qiegf. Qiegf. Qiegf. Qiegf. Qiegf.
User avatar
Hallow XIII
Posts: 127
Joined: Sat Jul 14, 2018 11:16 am

Re: Brassica SCA [v0.0.2]

Post by Hallow XIII »

While I'm at it, I also have a bug report/feature request: Brassica doesn't apply sound changes multiple times when the direction of application is LTR.
Mbtrtcgf qxah bdej bkska kidabh n ñstbwdj spa.
Ogñwdf n spa bdej bruoh kiñabh ñbtzmieb n qxah.
Qiegf. Qiegf. Qiegf. Qiegf. Qiegf. Qiegf. Qiegf.
bradrn
Posts: 5428
Joined: Fri Oct 19, 2018 1:25 am

Re: Brassica SCA [v0.0.2]

Post by bradrn »

Hallow XIII wrote: Thu Oct 21, 2021 9:18 am So I have good news and bad news. The good news is that I've managed to compile and run the brassica GUI on Linux. The bad news is that it was extremely involved to do so, largely because (til) Windows doesn't have a distinction between position-independent and position-dependent code, which lets you get away with more creative linking than on Unixen. The easiest way for me to get it running was to compile everything with -fPIC -fPIE and then dynamically link all the Haskell dependencies, which is also the preferred distribution format for my distribution's package management system.
I’m seriously impressed that you managed to do this — without proper documentation! (I’ve been meaning to write some, but alas, haven’t gotten around to it just yet…) I find it extremely surprising that this was easier to build on Windows than Linux; in my experience, it’s usually the other way around. On the other hand, I was originally intending to link the Haskell dynamically, but gave up when I discovered this is impossible on Windows.
For a prebuilt binary that you can download from github, it would be necessary to locally build Qt to be statically linked. Supposedly doing that might cause licensing issues... I can probably make a script that will take care of the linux build, at least.
Can’t Qt be dynamically linked? I know this is the default on Windows, and I’m sure I’ve built a dynamically linked executable with Qt on Linux also.
Hallow XIII wrote: Thu Oct 21, 2021 10:18 am While I'm at it, I also have a bug report/feature request: Brassica doesn't apply sound changes multiple times when the direction of application is LTR.
I’m aware. It’s worth noting that this is a problem with other SCAs too (not that this excuses it). I’ll try figure this out once my exams are done.
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
Hallow XIII
Posts: 127
Joined: Sat Jul 14, 2018 11:16 am

Re: Brassica SCA [v0.0.2]

Post by Hallow XIII »

bradrn wrote: Thu Oct 21, 2021 5:23 pm
Hallow XIII wrote: Thu Oct 21, 2021 9:18 am So I have good news and bad news. The good news is that I've managed to compile and run the brassica GUI on Linux. The bad news is that it was extremely involved to do so, largely because (til) Windows doesn't have a distinction between position-independent and position-dependent code, which lets you get away with more creative linking than on Unixen. The easiest way for me to get it running was to compile everything with -fPIC -fPIE and then dynamically link all the Haskell dependencies, which is also the preferred distribution format for my distribution's package management system.
I’m seriously impressed that you managed to do this — without proper documentation! (I’ve been meaning to write some, but alas, haven’t gotten around to it just yet…) I find it extremely surprising that this was easier to build on Windows than Linux; in my experience, it’s usually the other way around. On the other hand, I was originally intending to link the Haskell dynamically, but gave up when I discovered this is impossible on Windows.
In many ways, it's still easier to build on Linux. I basically didn't have to do any of the steps involving passing the locations of Qt tools. It's just that the way you link the GUI on Windows is impossible on Linux, since statically linked Haskell libraries aren't position-independent and so can't be linked into a Qt program that uses dynamically linked Qt, which is the default everywhere. So my workaround was to dynamically link the Haskell, but if you do that and your main linker pass isn't controlled by GHC then you have to manually pass the location of all the Haskell dependencies to the linker. Thankfully I found a perl script that can mostly automate this...
bradrn wrote: Thu Oct 21, 2021 5:23 pm
For a prebuilt binary that you can download from github, it would be necessary to locally build Qt to be statically linked. Supposedly doing that might cause licensing issues... I can probably make a script that will take care of the linux build, at least.
Can’t Qt be dynamically linked? I know this is the default on Windows, and I’m sure I’ve built a dynamically linked executable with Qt on Linux also.
Yeah, it can. That's what I did. The issue is really that the GHC libraries aren't compiled as position-independent, so statically linking Brassica and then depending on the Qt dynamic libraries being present on the user's machine, which would imo be ideal, requires manually compiling the GHC libraries to support it. This nonsense is why Arch Linux has a pacman package for basically every common library on Hackage, because given the choice they opted for linking everything dynamically.
Mbtrtcgf qxah bdej bkska kidabh n ñstbwdj spa.
Ogñwdf n spa bdej bruoh kiñabh ñbtzmieb n qxah.
Qiegf. Qiegf. Qiegf. Qiegf. Qiegf. Qiegf. Qiegf.
Post Reply