Re: Brassica SCA [online version]
Posted: Wed Jul 13, 2022 7:13 am
It's linked on the main page for Brassica, which advertises it as supporting multiple features that the online version doesn't have!
It's linked on the main page for Brassica, which advertises it as supporting multiple features that the online version doesn't have!
Oh, I have a change that does /t/ > /s/ before /i/, which works fine; but later a change of /u/ > /y/ in certain circumstances, and a subsequent change of /t/ > /s/ before /y/, but this last one doesn't work.bradrn wrote: ↑Tue Jul 12, 2022 11:42 pmIt does apply them in order. Could you supply more details as to your specific problem please?Rounin Ryuuji wrote: ↑Tue Jul 12, 2022 8:59 pm Can the sound change applier be made to apply the steps in a specific order, rather than apparently all at once?
Sorry, but I can’t any such link. Could you please share a screenshot of where you’re looking, or at least give me a URL?dhok wrote: ↑Wed Jul 13, 2022 7:13 amIt's linked on the main page for Brassica …
This is very fair, though. I really should add a warning that the online version doesn’t support all features. (And find some time to implement the most important ones, too!)… which advertises it as supporting multiple features that the online version doesn't have!
Hmm… could you share the precise rules, please?Rounin Ryuuji wrote: ↑Wed Jul 13, 2022 8:00 am Oh, I have a change that does /t/ > /s/ before /i/, which works fine; but later a change of /u/ > /y/ in certain circumstances, and a subsequent change of /t/ > /s/ before /y/, but this last one doesn't work.
It is noted as being downloadable from a Github repository:
You have some typos. The last few rules should be:Rounin Ryuuji wrote: ↑Wed Jul 13, 2022 8:59 amI've attached a screencap. Everything but the last two changes seem to work. The fourth item should come out [s̪ýìʎ].
Code: Select all
ʉ́ᵝ j ʉ̀ᵝ / ýᵝ ì j / _ ; added in spaces
; skip a few...
j / ʎ / _# ; match at end of word rather than beginning
OK, something is going badly wrong here, because for me that links to https://github.com/bradrn/brassica. Moreover, it has linked there ever since I first uploaded it to my webserver. I’m not sure how you got to exSCA from that.
Oh, thank you, it works now.bradrn wrote: ↑Wed Jul 13, 2022 9:25 amYou have some typos. The last few rules should be:Rounin Ryuuji wrote: ↑Wed Jul 13, 2022 8:59 amI've attached a screencap. Everything but the last two changes seem to work. The fourth item should come out [s̪ýìʎ].
Not sure either, but I have downloaded the desktop-side Brassica now. Thanks!bradrn wrote: ↑Wed Jul 13, 2022 9:25 amYou have some typos. The last few rules should be:Rounin Ryuuji wrote: ↑Wed Jul 13, 2022 8:59 amI've attached a screencap. Everything but the last two changes seem to work. The fourth item should come out [s̪ýìʎ].
With the former rule, you accidentally created ýᵝìj as a single multigraph; with the latter, you put the symbols the wrong way around.Code: Select all
ʉ́ᵝ j ʉ̀ᵝ / ýᵝ ì j / _ ; added in spaces ; skip a few... j / ʎ / _# ; match at end of word rather than beginning
OK, something is going badly wrong here, because for me that links to https://github.com/bradrn/brassica. Moreover, it has linked there ever since I first uploaded it to my webserver. I’m not sure how you got to exSCA from that.
Oh, I fully agree. The current font certainly isn’t ideal — its main virtue is that everyone has it installed. A font selector will be added in the next release.dhok wrote: ↑Sat Jul 16, 2022 1:17 pm (Incidentally, I don't want to sound petty--I've been making good use of Brassica and love it to bits--but it would be really useful if there were a way to increase the font size and perhaps even the font. Distinguishing acute accents or weird IPA characters can be rough, especially if you've got a setup with a second monitor; and combining diacritics don't look that great in Courier.)
That is wonderful of you.bradrn wrote: ↑Sat Jul 16, 2022 7:22 pmOh, I fully agree. The current font certainly isn’t ideal — its main virtue is that everyone has it installed. A font selector will be added in the next release.dhok wrote: ↑Sat Jul 16, 2022 1:17 pm (Incidentally, I don't want to sound petty--I've been making good use of Brassica and love it to bits--but it would be really useful if there were a way to increase the font size and perhaps even the font. Distinguishing acute accents or weird IPA characters can be rough, especially if you've got a setup with a second monitor; and combining diacritics don't look that great in Courier.)
Code: Select all
; changes shared by everyone except branch A
T / D / N_
[k g] / [ts dz] / _[i e]
; except branches A and B
[ɨ ɤ] / [i e]
p / f / _ / N_
; except branch C
θ / f
[k g] / [kʷ gʷ] / _u
u / i
Code: Select all
; changes shared by everyone except branch A
block $alpha on {
T / D / N_
[k g] / [ts dz] / _[i e]
; except branches A and B
block $beta on {
[ɨ ɤ] / [i e]
p / f / _ / N_
; except branch C
block $gamma on {
θ / f
[k g] / [kʷ gʷ] / _u
u / i
}
}
}
Code: Select all
child ar[Arapaho:on]
Code: Select all
history(ar)
(R)V // _#
[o ō] / [i ī]
k // _
p / k
r / n
s / n / #_
history(ar).end
Code: Select all
child ar[Arapaho:on]
child cr[Cree:on]
child alpha[Alpha:on]
child ch[Cheyenne:on] inherits alpha
child men[Menominee:on] inherits alpha
child beta[Beta:on] inherits alpha
child mes[Meskwaki:on] inherits beta
child oj[Ojibwe:on] inherits beta
history(alpha)
θ / r
history(alpha).end
history(ch)
[o ō] / [i ī]
[h N] / / _C
; etc. etc.
history(ch).end
history(men)
ʔ / h / _[p k]
š / s
;etc. etc.
history(men).end
history(beta)
ʔ / h / _C
history(beta).end
history(mes)
N / / _C
hr / s
nr / t
history(mes.end)
Ooh, I love this idea! Thanks for the suggestion! I’ll definitely have to implement this soon.dhok wrote: ↑Sat Jul 16, 2022 8:16 pm Another idea that occurred to me, since we're basically coding in a bespoke programming language, is the ability to group changes into higher-level blocks that can be toggled off and on. This could eventually be expanded to make it easier to work on families as a group rather than individually. (Though you've probably thought of something like this...)
Code: Select all
child WR[Western Romance:on]
child IR[Ibero-Romance:on]
child Cat[Catalan:on] inherits(WR)
child Arag[Aragonese:on] inherits(WR IR)
child Port[Portuguese:on] inherits(WR IR)
categories
T = p t k
D = b d g
V = i e ɛ a ɔ o u
;etc.
end
history(WR)
except(Arag): T / D / V_V
except(Port Cat): [ɛ ɔ] / [ie uo]
;etc.
history(WR).end
history(Arag)
uo / ue
lj / ll
;etc.
history(WR).end
Code: Select all
children
child WR[Western Romance:on]
;etc.
children.end
Code: Select all
children
child anat(Anatolian)
child core(Core IE)
child gr(Greek) inherits core
child sk(Sanskrit) inherits core
child bt(Baltic) inherits core
children.end
categories
T = p t k ḱ kʷ
D = b d g ǵ gʷ
Dʰ = bʰ dʰ gʰ ǵʰ gʷʰ
Tʰ = pʰ tʰ kʰ ḱʰ kʷʰ
N = m n
R = m n w r l y
H = h₁ h₂ h₃
C = T D Dʰ N R H s
E = e o
Ṛ = ṃ ṇ u ṛ ḷ i
V = E Ṛ a ā ē ō
end
block laryngeals
e / a / h₂_
e / o / h₃_
e / ē / _h₁
e / ā / _h₂
e / ō / _h₃
case(gr)
[h₁ h₂ h₃] / [e a o] / [#C]_[CṚ]
case.end
case(sk)
H / i / C_[C#]
T / Tʰ / _H
case.end
case(bt)
/ h₁ / V_D
[Dʰ] / [D] / _
V / Vˀ / _H[C#]
; where Vˀ has to be defined in or just before history(bt) fires, but this case gets skipped until then
case.end
except(anat): H / / _
laryngeals.end
history(gk)
law: laryngeals
law: centumization
Dʰ / Tʰ
Tʰ / T / _VTʰ
history(gk).end
Code: Select all
children
proto(Proto)
alpha(Alpha) inherits proto ;front vs. back
beta(Beta) inherits proto ; rounded vs. unrounded
children.end
categories(proto)
S = p t k
Z = b d g
N = m n
F = s x h
R = w l y
C = S Z N F R
V = i ü e ö æ u o å
categories(proto).end
history(proto)
; allophonic stuff operative in the proto-language that's a pain to write in the input lexicon can go here
history(proto).end
categories(alpha)
Vf = i ü e ö æ
Vb = u o å
C = C tʃ dʒ ts dz š ; some way of appending to an existing category without overwriting it?
categories(alpha).end
history(alpha)
[k g t d s] / [tʃ dʒ ts dz š] / _[Vf]
history(alpha).end
categories(beta)
Vr = ü ö u o å
Vn = i e æ
C = C kʷ gʷ xʷ
categories(beta).end
history(beta)
[k g] / [kʷ gʷ] / _[Vr]
[ü ö] / [i e]
history(beta).end
It shouldn’t be terribly hard… I’m already doing something not too different for the syntax highlighting. Adding and removing buttons certainly is a bit of a pain, but not horribly so.
These ideas seem reasonable, though I’ll have to see how easy they are to implement.I assume the program goes in order through the sound change file, so I hope this wouldn't be too complex. When the user selects Aragonese as the daughter to run, the program would also run Western Romance and Ibero-Romance--but then when it hits the except keyword, checks to see if its argument is the selected daughter or one of its super-clades, then skips that rule. From looking at a quick overview of Haskell, my intuition is that this Haskell should be a good language for making this happen, since Aragonese would be a function built from the Western Romance and Ibero-Romance functions.
…
Here the codeword block defines a group of sound laws, which effectively runs as a function, and the codeword law calls that function. Within the function, the except keyword can be used to define exceptions, or case can be used to define a subfunction applying only to a single clade, which you want to be able to do when a daughter-specific change slips into the relative chronology of a wave change. (For the same reason, case should probably be licit in clade histories as well.)
Indeed you should! It’s a great language, and gives a very interesting perspective on programming too. (Your mental model of it seems a bit off at the moment, though ‘everything is a function’ isn’t such a terribly bad approximation.)(Hmm, I should goof around with Haskell...)
Yeah, I am not asking to be in the driver's seat, here--I know I have programmer brain (App Academy accepted me, although I turned them down), but just haven't built much. These are general ideas for tools that it might be useful to have in a future iteration, but only you'll know what works with the code, so I certainly won't complain if things can't make it in or have to be structured in a different manner. I think what I'm trying to reach towards here is a structure that encourages the user to think about *families*, rather than a collection of descendents that develop in vacuums. (Working on families was of course possible with prior SCA's like Haedus or Zomp's, it just involved reusing a lot of changes.)bradrn wrote: ↑Sun Jul 17, 2022 9:24 amIt shouldn’t be terribly hard… I’m already doing something not too different for the syntax highlighting. Adding and removing buttons certainly is a bit of a pain, but not horribly so.
These ideas seem reasonable, though I’ll have to see how easy they are to implement.I assume the program goes in order through the sound change file, so I hope this wouldn't be too complex. When the user selects Aragonese as the daughter to run, the program would also run Western Romance and Ibero-Romance--but then when it hits the except keyword, checks to see if its argument is the selected daughter or one of its super-clades, then skips that rule. From looking at a quick overview of Haskell, my intuition is that this Haskell should be a good language for making this happen, since Aragonese would be a function built from the Western Romance and Ibero-Romance functions.
…
Here the codeword block defines a group of sound laws, which effectively runs as a function, and the codeword law calls that function. Within the function, the except keyword can be used to define exceptions, or case can be used to define a subfunction applying only to a single clade, which you want to be able to do when a daughter-specific change slips into the relative chronology of a wave change. (For the same reason, case should probably be licit in clade histories as well.)
Yes, indeed we are! As of five days ago, HEAD now contains a font selector. (Not sure when I’ll be ready to make a release, but I’m getting there…)