Go to file
Lucien Cartier-Tilet 714472e857
updated data representation in README
2020-03-29 18:09:43 +02:00
lang-evolve-cli@2dec911b1e Added submodules to project 2020-03-26 17:05:44 +01:00
lang-evolve-core@6be0f7e8f6 Updated dependencies 2020-03-29 03:14:33 +02:00
lang-evolve-gui@25cb5b7084 Added submodules to project 2020-03-26 17:05:44 +01:00
.gitignore Updated TODO 2020-03-28 21:57:28 +01:00
.gitmodules Updated TODOs and gitmodules 2020-03-26 19:53:24 +01:00
Cargo.lock Updated dependencies 2020-03-29 03:14:33 +02:00
Cargo.toml initial commit 2020-03-26 17:05:01 +01:00
README.org updated data representation in README 2020-03-29 18:09:43 +02:00
TODOs.org Updated TODO 2020-03-28 21:57:28 +01:00
agpl-3.0.txt Added todos, readme and license 2020-03-26 17:09:51 +01:00

README.org

LangEvolve-rs

Introduction

LangEvolve-rs is a Rust rewrite of the original LangEvolve project written by 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:

  {
    "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" }
    ]
  }

And here is the JSON generated by this project (beautified, the original is on one line only without unnecessary whitespace):

  {
      "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"
      }
  }

By the way, here is the Yaml equivalent generated by this project:

  ---
  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

You can find more information on how to use regular expressions with this project in the documentation of the regex crate here.

License

LangEvolveRs is licensed under the AGPLv3 license. The full license can be found here.