123 lines
3.6 KiB
Org Mode
123 lines
3.6 KiB
Org Mode
#+title: LangEvolve-rs
|
|
#+author: Lucien Cartier-Tilet
|
|
|
|
* Introduction
|
|
LangEvolve-rs is a Rust rewrite of the original [[https://github.com/ceronyon/LangEvolve/][LangEvolve project]] written by
|
|
[[https://github.com/ceronyon/LangEvolve/][Ceronyon]]. This tool is a conlanging tool used to apply sound change rules on
|
|
words or text.
|
|
|
|
* Differences with the original project
|
|
The main difference with the main project resides in its settings format:
|
|
while the original project only supports the JSON format, this project
|
|
supports both the JSON and the Yaml formats. The settings are also represented
|
|
differently in JSON between the original project and this one. Lastly, the
|
|
regex crate used in this project does not allow certain expressions, such as
|
|
look-ahead and look-behind searches, and backreferences. To get a better idea
|
|
of what I am talking about, here is the example json given by the original
|
|
project for Latin to Portugese:
|
|
#+BEGIN_SRC json
|
|
{
|
|
"version" : "1",
|
|
"categories" : {
|
|
"V" : "aeiou",
|
|
"L" : "āēīōū",
|
|
"C" : "ptcqbdgmnlrhs",
|
|
"F" : "ie",
|
|
"B" : "ou",
|
|
"S" : "ptc",
|
|
"Z" : "bdg"
|
|
},
|
|
"rules" : [
|
|
{ "[sm]$" : "" },
|
|
{ "i(%V)" : "j\\1" },
|
|
{ "%L" : "%V" },
|
|
{ "(%Vr)e$" : "\\1" },
|
|
{ "(%V)v(%V)" : "\\1\\2" },
|
|
{ "u$" : "o" },
|
|
{ "gn" : "nh" },
|
|
{ "(%V)p(?=%V)" : "\\1b" },
|
|
{ "(%V)t(?=%V)" : "\\1d" },
|
|
{ "(%V)c(?=%V)" : "\\1g" },
|
|
{ "(%F)ct" : "\\1it" },
|
|
{ "(%B)ct" : "\\1ut" },
|
|
{ "(%V)pt" : "\\1t" },
|
|
{ "ii" : "i" },
|
|
{ "(%C)er(%V)" : "\\1r\\2" },
|
|
{ "lj" : "lh" }
|
|
]
|
|
}
|
|
#+END_SRC
|
|
|
|
And here is the JSON generated by this project (beautified, the original is on
|
|
one line only without unnecessary whitespace):
|
|
#+BEGIN_SRC json
|
|
{
|
|
"version": "1",
|
|
"categories": {
|
|
"B": "ou",
|
|
"C": "ptcqbdgmnlrhs",
|
|
"F": "ie",
|
|
"Z": "bgd",
|
|
"L": "āēīōū",
|
|
"S": "ptc",
|
|
"V": "aeiou"
|
|
},
|
|
"rules": {
|
|
"(?P<b>%B)ct": "$but",
|
|
"(?P<b>%V)t(?P<a>%V)": "$bd$a",
|
|
"u$": "o",
|
|
"(?P<b>%V)c(?P<a>%V)": "$bg$a",
|
|
"(?P<b>%V)v(?P<a>%V)": "$b$a",
|
|
"gn": "nh",
|
|
"ii": "i",
|
|
"(?P<f>%F)ct": "$fit",
|
|
"i(?P<v>%V)": "j$v",
|
|
"(?P<b>%V)p(?P<a>%V)": "$vb$a",
|
|
"(?P<v>%Vr)e$": "$v",
|
|
"lj": "lh",
|
|
"[sm]$": "",
|
|
"%L": "%V",
|
|
"(?P<v>%V)pt": "$vt",
|
|
"(?P<c>%C)er(?P<v>%V)": "$cr$v"
|
|
}
|
|
}
|
|
#+END_SRC
|
|
|
|
By the way, here is the Yaml equivalent generated by this project:
|
|
#+BEGIN_SRC yaml
|
|
---
|
|
version: "1"
|
|
categories:
|
|
Z: bgd
|
|
S: ptc
|
|
V: aeiou
|
|
F: ie
|
|
L: āēīōū
|
|
B: ou
|
|
C: ptcqbdgmnlrhs
|
|
rules:
|
|
"%L": "%V"
|
|
(?P<b>%V)v(?P<a>%V): $b$a
|
|
u$: o
|
|
"[sm]$": ""
|
|
gn: nh
|
|
(?P<f>%F)ct: $fit
|
|
(?P<b>%V)p(?P<a>%V): $vb$a
|
|
ii: i
|
|
(?P<c>%C)er(?P<v>%V): $cr$v
|
|
lj: lh
|
|
(?P<v>%Vr)e$: $v
|
|
(?P<b>%V)c(?P<a>%V): $bg$a
|
|
(?P<b>%B)ct: $but
|
|
i(?P<v>%V): j$v
|
|
(?P<b>%V)t(?P<a>%V): $bd$a
|
|
(?P<v>%V)pt: $vt
|
|
#+END_SRC
|
|
|
|
You can find more information on how to use regular expressions with this
|
|
project in the documentation of the regex crate [[https://docs.rs/regex/1.3.6/regex/][here]].
|
|
|
|
* License
|
|
LangEvolveRs is licensed under the AGPLv3 license. The full license can be
|
|
found [[file:agpl-3.0.txt][here]].
|